读书人

远道线程注入(二)线程注入

发布时间: 2012-11-09 10:18:48 作者: rapoo

远程线程注入(二)线程注入

这里我们要用到上篇中的那个 msg.dll

下面的代码还是使用的统一的宽字符版本,已经在VS2010下编译通过。

首先上代码,然后慢慢解释:

//关闭句柄        if (pszLibFileRemote != NULL)            VirtualFreeEx(hProcess, (PVOID)pszLibFileRemote, 0, MEM_RELEASE);        if (hThread != NULL)            CloseHandle(hThread);        if (hProcess != NULL)            CloseHandle(hProcess);

运行一下,发现成功了!~~~


最后栋哥跟我提醒了几点:

1.关于进程令牌的代码,有时候不写也是可以通过的。这里还有待研究一下。

2.被注入的程序有时候要放在相对目录下才会产生效果。关于这点自己还没有实践过。有待验证。

3.像explorer.exe有时候会无法注入。换个简单的calc.exe完全可以。火狐,qq全部都可以。可能是explorer.exe有点特别。

4.第一次远程注入可以成功,第二次就不行了,就不能弹出对话框了,貌似进程打开之后马上就关闭了。个人以为原因可能处在dll的fdwReason。有时间尝试着调试一下。

自己改了一下,应该是这样的。上面的代码里面没有FreeLibrary,那么dll还是在远程地址空间里面。第二次想要注入的时候是不会发送DLL_PROCESS_ATTACH 消息的。

DLL_PROCESS_ATTACH消息的发送是这样的:

线程调用LoadLibrary --> Dll是否已经被映射到了进程的地址空间中 (如果是) --> 递增DLL的使用计数 --> 使用计数器是否等于1 (如果是) --> 调用DLL的DllMain并且传入DLL_PROCESS_ATTACH

所以说,在Dll已经被映射到了进程地址空间之后,只不过DLL的使用计数增加了,如果是2,那么很明显就不会调用DLL的DllMain并且传入DLL_PROCESS_ATTACH


但是如果我把dll改一下,把弹框代码写在DLL_THREAD_ATTACH里面,那么每次创建线程的时候就都会收到DLL_THREAD_ATTACH消息了。


关于远程线程注入就先讲到这里。当然这些都是最简单的最基本的东西。

自己有时间去看看核心编程,顺便进一步了解下操作系统。


读书人网 >编程

热点推荐