天天看点

CreateRemoteThread LoadLibrary 注入DLL

详细的注入代码实现可参考链接中的第二部分:

​​http://www.codeproject.com/Articles/4610/Three-Ways-to-Inject-Your-Code-into-Another-Proces​​

网上大多数用CreateRemoteThread  LoadLibrary 这种方式注入DLL的博文最终都参考这个链接。我修改了部分代码,输入pid注入对应的进程,本文仅记录注入过程中遇到意外和解决途径

1.调用OpenProcess会失败,加入以下提升进程权限的代码

#pragma comment(lib,"Advapi32.lib")            
             LUID luidTmp;
             HANDLE hToken;
             TOKEN_PRIVILEGES tokenP;
             OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken);
             LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &luidTmp);
             tokenP.PrivilegeCount = 1;
             tokenP.Privileges[0].Luid = luidTmp;
             tokenP.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
             AdjustTokenPrivileges(hToken, FALSE, &tokenP, sizeof(tokenP), NULL, NULL);      

可能能解决一部分问题;

2.要想成功注入,最重要的一点是新创建一台虚拟机,所有的测试全在那完成,当然能免杀就随便了

3.调用VirtualAllocEx和WriteProcessMemory后,如何查看dll名字是否成功写进指定进程?这时祭出windbg,attach进将要被注入的进程,查看VirtualAllocEx的返回值所指向的地址(da 0xXXXXXXXX)

4.再然后,虽然ThreadRemoteThread创建线程成功,但是dll运行出错怎么调试?在dll的入口处加入_asm int 3,在注入前依然用windbg attach目标进程,重新注入-运行这时windbg会触发断点异常,就可以调试了~

下面是我的dll的例子:

CreateRemoteThread LoadLibrary 注入DLL

注入代码后,线程遇到MessageBox,弹出对话框,此时,windbg附加到目标进程。然后MessageBox返回,就能遇到int 0x03了