- 1、本文档共55页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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)