DLL的11种注入方法.doc

  1. 1、本文档共55页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
闲着没事整理了一下DLL的N种注入方法,对学习外挂的朋友,应该有用! 第一种方法: 利用 CreateRemoteThread 远程建立线程的方式注入DLL. 首先,我们要提升自己的权限,因为远程注入必不可免的要访问到目 标进程的内存空间,如果没有足够的系统权限,将无法作任何事.下 面是这个函数是用来提升我们想要的权限用的. function EnableDebugPriv : Boolean; var ??hToken : THANDLE; ??tp : TTokenPrivileges; ??rl : Cardinal; begin ??result := false; ??//打开进程令牌环 ??OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, hToken); ??//获得进程本地唯一ID ??if LookupPrivilegeValue(nil, SeDebugPrivilege, tp.Privileges[0].Luid) then ??begin ? ? tp.PrivilegeCount := 1; ? ? tp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED; ? ? //调整权限 ? ? result := AdjustTokenPrivileges(hToken, False, tp, sizeof(tp), nil, rl); ??end; end; 关于 OpenProcessToken() 和 AdjustTokenPrivileges() 两个 API 的简单介绍: OpenProcessToken():获得进程访问令牌的句柄. ??function OpenProcessToken( ? ? ProcessHandle: THandle; //要修改访问权限的进程句柄 ? ? DesiredAccess: DWORD; //指定你要进行的操作类型 ? ? var TokenHandle: THandle ??): BOOL; //返回的访问令牌指针 AdjustTokenPrivileges() :调整进程的权限. ??function AdjustTokenPrivileges( ? ? TokenHandle: THandle;??// 访问令牌的句柄 ? ? DisableAllPrivileges: BOOL; // 决定是进行权限修改还是除 能(Disable)所有权限 ? ? const NewState: TTokenPrivileges;??// 指明要修改的权限, 是一个指向TOKEN_PRIVILEGES结构的指针,该结构包含一个数组,数 据组的每个项指明了权限的类型和要进行的操作; ? ? BufferLength: DWORD;??//结构PreviousState的长度,如果 PreviousState为空,该参数应为 0 ? ? var PreviousState: TTokenPrivileges; // 指向 TOKEN_PRIVILEGES结构的指针,存放修改前的访问权限的信息 ? ? var ReturnLength: DWORD //实际PreviousState结构返回的大 小 ??) : BOOL; 远程注入DLL其实是通过 CreateRemoteThread 建立一个远程线程调 用 LoadLibrary 函数来加载我们指定的DLL,可是如何能让远程线程 知道我要加载DLL呢,要知道在Win32系统下,每个进程都拥有自己的 4G虚拟地址空间,各个进程之间都是相互独立的。所我们需要在远程 进程的内存空间里申请一块内存空间,写入我们的需要注入的 DLL 的路径. 需要用到的 API 函数有: OpenProcess():打开目标进程,得到目标进程的操作权限,详细参 看MSDN ??function OpenProcess( ? ? dwDesiredAccess: DWORD;??// 希望获得的访问权限 ? ? bInheritHandle: BOOL;??// 指明是否希望所获得的句柄可以继 承 ? ? dwProcessId: DWORD // 要访问的进程ID ??): THandle; VirtualAllocEx():用于在目标进程内存空间中申请内存空间以写入 DLL的文件名 ??function VirtualAllocEx( ? ? hProcess: THandle;??// 申请内存所在的进程句柄 ? ? lpAddress: Pointer

文档评论(0)

2232文档 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档