首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

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

2012-11-09 
远程线程注入(二)线程注入这里我们要用到上篇中的那个 msg.dll下面的代码还是使用的统一的宽字符版本,已经

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

这里我们要用到上篇中的那个 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消息了。


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

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


热点排行