找回密码
 加入
搜索
查看: 3756|回复: 6

[系统综合] 关于dll注入到某进程里

  [复制链接]
发表于 2011-1-15 09:44:15 | 显示全部楼层 |阅读模式
本帖最后由 netsmu 于 2011-1-15 10:01 编辑

dll已经写好了,au3怎么写才可以把这个dll注入到某个进程ID里面呢?
刚刚发现VC++是利用   InjectDllToRemoteProcess 函数把 dll注入到程序中的。
InjectDllToRemoteProcess(进程ID号,dll文件路径);

不知道au3能不能利用vc的这个函数呢?
 楼主| 发表于 2011-1-16 20:27:03 | 显示全部楼层
有没有人知道呢,dll文件注入到某个进程里,用AU3怎么写呢?
发表于 2011-1-16 21:32:12 | 显示全部楼层
1、用VM_OPERATION、VM_WRITE、VM_READ、VM_CREATE_THREAD、SYNCHRONIZE权限调用Kernel32.OpenProcess获取目标进程的句柄。
2、调用Kernel32.VirtualAllocEx在目标进程中分配一块缓存区,用于存放DLL文件的路径名称。
3、调用Kernel32.WriteProcessMemory将DLL文件的路径名称写入这块缓存区中。
4、调用Kernel32.GetProcAddress函数获取Kernel32.LoadLibrary函数的地址。
5、将Kernel32.LoadLibrary函数的地址作为 线程的起始运行地址,调用Kernel32.CreateRemoteThread创建远程线程,并将第2步中分配的内存的首地址作为参数,传递给LoadLibrary函数。
6、调用Kernel32.WaitForSingleObject等待远程线程运行完毕。
7、调用Kernel32.GetExitCodeThread获取远程线程的返回值,即DLL文件在目标进程中的地址。
8、调用Kernel32.VirtualFreeEx释放第2步中为目标进程分配的内存。
9、调用Kernel32.CloseHandle关闭第1步获取的进程句柄,和第5步创建的线程的句柄。
10、OK。

如果不关心是否成功加载DLL,可以省略第6、7、8步。第8、9步释放内存和关闭句柄也不是必须要有的,但及时清理不使用的资源总是一个好习惯,这些API函数都可以在MSDN中找到。
 楼主| 发表于 2011-1-17 23:38:48 | 显示全部楼层
楼上的方法比较复杂吧,有没有简单点的方法呢,有没有代码事例发一个看看哦,谢谢啦。
发表于 2011-1-18 00:04:48 | 显示全部楼层
所有关于远程加载DLL的代码,都是用3#的方法实现的。只不过有人将这一系列的函数调用 封装成了一个函数,实际上在InjectDllToRemoteProcess函数内部就是按照3#说的步骤工作的。
或者你也可以调用更加底层的、位于Ntdll.dll中的函数,不过参数更加复杂了一些,其实都是一样的,因为Kernel32.dll中的这些函数都是调用了Ntdll.dll中的函数,如Kernel32.OpenProcess调用的是Ntdll.NtOpenProcess,Kernel32.WriteProcessMemory调用了Ntdll.NtWriteVirtualMemory。
发表于 2011-1-18 11:43:27 | 显示全部楼层
哇。我头好晕,有没有扶我。

P版太强
 楼主| 发表于 2011-1-20 18:23:24 | 显示全部楼层
是呀,太高级了,看不懂呀。
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-9-21 15:37 , Processed in 0.082956 second(s), 24 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表