netsmu 发表于 2011-1-15 09:44:15

关于dll注入到某进程里

本帖最后由 netsmu 于 2011-1-15 10:01 编辑

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

不知道au3能不能利用vc的这个函数呢?

netsmu 发表于 2011-1-16 20:27:03

有没有人知道呢,dll文件注入到某个进程里,用AU3怎么写呢?

pusofalse 发表于 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中找到。

netsmu 发表于 2011-1-17 23:38:48

楼上的方法比较复杂吧,有没有简单点的方法呢,有没有代码事例发一个看看哦,谢谢啦。

pusofalse 发表于 2011-1-18 00:04:48

所有关于远程加载DLL的代码,都是用3#的方法实现的。只不过有人将这一系列的函数调用 封装成了一个函数,实际上在InjectDllToRemoteProcess函数内部就是按照3#说的步骤工作的。
或者你也可以调用更加底层的、位于Ntdll.dll中的函数,不过参数更加复杂了一些,其实都是一样的,因为Kernel32.dll中的这些函数都是调用了Ntdll.dll中的函数,如Kernel32.OpenProcess调用的是Ntdll.NtOpenProcess,Kernel32.WriteProcessMemory调用了Ntdll.NtWriteVirtualMemory。

xsjtxy 发表于 2011-1-18 11:43:27

哇。我头好晕,有没有扶我。{:face (207):}

P版太强

netsmu 发表于 2011-1-20 18:23:24

是呀,太高级了,看不懂呀。
页: [1]
查看完整版本: 关于dll注入到某进程里