闲着没事整理了一下DLL的N种注入方法,对学****的朋友,应该有用!第一种方法:,我们要提升自己的权限,因为远程注入必不可免的要访问到目标进程的内存空间,如果没有足够的系统权限,:Boolean;var hToken:THANDLE; tp:TTokenPrivileges; rl:Cardinal;begin result:=false; //打开进程令牌环 OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGESorTOKEN_QUERY,hToken); //获得进程本地唯一ID ifLookupPrivilegeValue(nil,'SeDebugPrivilege',[0].Luid)then begin :=1; [0].Attributes:=SE_PRIVILEGE_ENABLED; //调整权限 result:=AdjustTokenPrivileges(hToken,False,tp,sizeof(tp),nil,rl); end;end;关于OpenProcessToken()和AdjustTokenPrivileges()两个API的简单介绍:OpenProcessToken():获得进程访问令牌的句柄. functionOpenProcessToken( ProcessHandle:THandle;//要修改访问权限的进程句柄 ess:DWORD;//指定你要进行的操作类型 varTokenHandle:THandle ):BOOL;//返回的访问令牌指针AdjustTokenPrivileges():调整进程的权限. functionAdjustTokenPrivileges( TokenHandle:THandle; //访问令牌的句柄 DisableAllPrivileges:BOOL;//决定是进行权限修改还是除能(Disable)所有权限 constNewState:TTokenPrivileges; //指明要修改的权限,是一个指向TOKEN_PRIVILEGES结构的指针,该结构包含一个数组,数据组的每个项指明了权限的类型和要进行的操作; BufferLength:DWORD; //结构PreviousState的长度,如果PreviousState为空,该参数应为0 varPreviousState:TTokenPrivileges;//指向TOKEN_PRIVILEGES结构的指针,存放修改前的访问权限的信息 varReturnLength:DWORD//实际PreviousState结构返回的大小 ):BOOL;远程注入DLL其实是通过CreateRemoteThread建立一个远程线程调用LoadLibrary函数来加载我们指定的DLL,可是如何能让远程线程知道我要加载DLL呢,要知道在Win32系统下,每个进程都拥有自己的4G虚拟地址空间,各个进程之间都是相互独立的。所我们需要在远程进程的内存空间里申请一块内存空间,:OpenProcess():打开目标进程,得到目标进程的操作权限,详细参看MSDN functionOpenProcess( ess:DWORD; //希望获得的访问权限 bInheritHandle:BOOL; //指明是否希望所获得的句柄可以继承 dwProcessId:DWORD//要访问的进程ID ):THandle;VirtualAllocEx():用于在目标进程内存空间中申请内存空间以写入DLL的文件名 functionVirtualAllocEx( hProcess:THandle; //申请内存所在的进程句柄 lpAddress:Pointer; //保留页面的内存地址;一般用nil自动分配 dwSize, //欲分配的内存大小,字节单位;注意实际分配的内存大小是页内存大小的整数倍 flAllocationType:DWORD; flProtect:DWORD ):Pointer;WriteProcessMemory():往申请到的空间中写入DLL的文件名 functionWriteProcessMemory( hProcess:THandle; //要写入内存数据的目标
dll地11种注入方法 来自淘豆网www.taodocs.com转载请标明出处.