| 关键词: nbsp LoadLibraryA 地址 004021 一个 线程 偏移 空间 远程 进程 |
本文提供了一个了解如何注入一个动态库( DLL )到32位进程在Windows Vista中使用远程线程,并考虑到地址空间布局随机化( ASLR ) 。 示例代码使用汇编语言编写的( MASM32 )使用WinAsm的IDE 。 .这应该可以让您更好地了解如何动态库可以注射。 装载lib库的过程很简单。 程序员可以动态加载一个使用LoadLibrary函数从Windows的API ,例如: #include <stdio.h> #include <stdlib.h> #include <windows.h> int main(int argc, char *argv[]) { HANDLE hlib; char *lib = "E:\\mylib.dll"; printf("Loading library: %s\n",lib); hlib = LoadLibraryA(lib); printf("Handle: %X\n",hlib); system("PAUSE"); return 0; } 因此,我们可以使用CreateRemoteThread函数来创建一个线程执行的LoadLibraryA与thread的路径作为参数。 HANDLE WINAPI CreateRemoteThread CreateRemoteThread ( __in HANDLE hProcess , __in LPSECURITY_ATTRIBUTES lpThreadAttributes , __in SIZE_T dwStackSize , __in LPTHREAD_START_ROUTINE lpStartAddress , __in LPVOID lpParameter , __in DWORD dwCreationFlags , __out LPDWORD lpThreadId ); hProcess hProcess .是处理到远程进程中,我们打算要注入我们的 library。 lpStartAddress lpStartAddress 这是地址(或偏移)的功能我们将开始执行线程。就我们而言这应该是平等的偏移LoadLibraryA在偏远的进程地址空间。 lpParameter lpParameter 这是地址参数(库路径)我们的目标,作为参数设置的LoadLibraryA功能。 请注意,这也必须在地址空间的远程过程。 主要问题 ,我们必须考虑到如下: 偏移LoadLibraryA不固定(而不是在这之后微软实施地址空间布局随机或ASLR ) 我们 library的路径字符串中不存在远程线程的地址空间 Offset of LoadLibraryA 偏移LoadLibraryA 驻留在内部的Kernel32.dll 每个library进程运行在我们的作业系统这是一个至关重要的。 每次开机有一个概率的地址kernel32 library将改变由于ASLR 。 幸运的是,地址LoadLibraryA在我们的过程是相同的一个偏远的进程。 因此,我们将需要使用GetProcAddress结合GetModuleHandle 。 下面的示例代码,这一点: #include <stdio.h> #include <stdlib.h> #include <windows.h> int main(int argc, char *argv[]){ HINSTANCE kernel32; FARPROC proc; char *procname = “LoadLibraryA”;char *modulename = “Kernel32″; kernel32 = GetModuleHandle(modulename); printf(”hModule: %X\n”,kernel32);proc = GetProcAddress(kernel32,procname); printf(”hProc: %X\n”,proc);system(”PAUSE”); return 0;} 获取路径内的远程进程的地址空间 做这样的事,我们需要分配空间的远程线程的地址空间使用VirtualAllocEx修补功能,然后我们的路径,并使用WriteProcessMemory函数。 您可以查找此两项功能MSDN上使用以下链接: VirtualAllocEx VirtualAllocEx WriteProcessMemory WriteProcessMemory 另一种“黑客”你可以使用,你的名字你可以在一个字符串 library内的可执行文件然后将其复制的文件夹内的可执行文件或任何其他文件夹中所界定的PATH环境变量。 示例程序的十六进制转储以下您可以使用ernel32.dll (在00402229 )或nel32.dll (在0040222A ) 32.dll (在0040222D )或什至NameA (在00402243 )为您的图书馆的文件名。 004020F0 ø ...... 004020F0 00402100 BoxParamA.´.EndD 00402100 00402110 ialog.ü.GetDlgIt 00402110 00402120 emTextA.± Messag 00402120 00402130 eBoxA. 00402130 00402140 emTextA.user32.d 00402140 00402150 ll..R.CreateRemo 00402150 00402160 teThread..›.Exit 00402160 00402170 Process.Ì.Format 00402170 00402180 MessageA.. 00402180 00402190 urrentProcessId. 00402190 004021A0 ( GetLastError.. 004021A0 004021B0 4 GetModuleHandl 004021B0 004021C0 eA..S GetProcAdd 004021C0.. 004021D0 ress.. 004021D0.. OpenProc 004021E0 ess.\ RtlZeroMem 004021E0 004021F0 ory.Þ VirtualAll 004021F0 00402200 ocEx.. 00402200 ocEx 00402210 cessMemory.. 00402210 00402220 trlenA..kernel32 00402220 00402230 .dll....GetOpenF 00402230的。 00402240 ileNameA..comdlg 00402240 00402250 32.dll.......... 00402250 下载源代码和可执行文件 |
|
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系
[邮箱地址] 删除
|