BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / soft-design / #134同步于 1 周前
SoftDesign机器人发帖

Dll Injection三种办法

flyingkisser
1 周前镜像同步0 回复
呵呵,又出来一哥们也做dll injection, 但没看懂到底哪一部分你没有做完,需要哪一部分的资料?我的毕设也是通过dll injectino实现的,在dll中hook win32 API,其实就是把dll注入到explorer.exe进程中,通过hook FindFristFileW和FindNextFileW,过滤这两个函数的调用结果,来隐藏我想要让其消失的文件。 另外,向其他进程注入代码的方法,那么总结感觉有点欠妥,罗云彬说有两种方法, 一种是直接注入dll, 一种是通过远程线程直接注入自己的代码,后一种方法最可怕,基本上让人无法察觉,但插入的代码中要很好的解决代码重定位的问题,这一点相当麻烦。 大部分指令浪费在代码重定位上。 国外一个叫SoBeIt的黑客在其<<挂钩Windows API>>一文中也谈到了这个问题, 他说有三种方法: --------------------------------------------------------------------------------- =====[ 3.2.4.1 DLL注入 ]================================================== 我们可以在目标进程地址空间里任意地方运行我们的新线程。这看起来没什么用,除非在里面有我们完整的代码。第一种方法就是这么实现。它调用GetProcAddress获取LoadLibrary地址。然后把LoadLibrary赋值给参数lpStartAddress。LoadLibrary函数只有一个参数,就和目标进程里新线程的函数一样。 HINSTANCE LoadLibrary( LPCTSTR lpLibFileName ); 我们可以使用这点相似性,把lpParameter参数赋为我们的DLL库的名字。在新线程运行后lpParameter的位置就是lpLibFileName的位置。这里最重要的东西前面已经讲过了。在加载了新的模块到目标进程后就开始执行初始化部分。如果我们在这里放置了能够挂钩其它函数的特殊函数就OK了。在执行了初始化部分后,这个线程就什么都不做并被关闭,但我们的模块仍然在地址空间中。这种方法很不错而且很容易实现,它的名字叫DLL注入。但如果你和我一样不喜欢还得多个DLL库的话,请看下面的方法。但如果不介意多个DLL库的话这确实是最快的方法(从程序员的角度来看)。 =====[ 3.2.4.2 独立的代码 ]=============================================== 实现独立的代码比较困难,但也容易给人深刻印象。独立的代码是不需要任何静态地址的代码。它里面所有东西都是互相联系地指向代码里面某些特定的地方。如果我们不知道这段代码开始执行的地址它也能自己完成 。当然,也有可能先获得地址然后重新链接我们的代码这样它可以完全正常地在新地址工作,但这比编写独立的代码更困难。这类型代码的例子比方说病毒的代码。病毒通过这种方法感染可执行文件,它把它自己的代码加入到可执行文件中的某个地方。在不同的可执行文件中放置病毒代码的位置也不一样,这取决于比方说文件结构的长度。 首先将我们的代码插入目标进程,然后CreateRemoteThread函数就会负责运行我们的代码。所以第一步我们要做的就是通过OpenProcess函数获取目标进程的信息和句柄,接着调用VirtualAllocEx在目标进程地址空间里分配一些内存给我们的代码,最后调用WriteProcessMemory把我们的代码写入分配的内存里并运行它。调用CreateRemoteThread的参数lpStartAddress设置为分配的内存地址,lpParameter可以随便设置。因为我不喜欢附加什么不必要的文件所以我使用了这种方法。 =====[ 3.2.4.3 原始修改 ]===================================================== 在非NT内核的老版本Windows里是没有CreateRemoteThread函数的,所以我们不能用以上的方法。可能会有比我现在介绍的这种方法好很多的方法,事实上我的这种方法还没有经过实践,但理论上来说是可行的。 我们其实根本不需要把我们代码放到目标进程里来挂钩它的函数。有两个函数WriteProcessMemory和OpenProcess,它们在所有版本的Windows中都有效。我们还需要的函数是VirtualProtectEx,用来修改进入目标进程的内存页。我找不到任何不直接从我们的进程挂钩目标进程的的理由... ---------------------------------------------------------------------------------------------------- 当然他说的第三种方法有点不知所云,因为我早放弃win98了,所以也管不着了,呵呵................
订阅后,新回复会通过你的通知中心匿名送达。
0 条回复
暂无回复 · 你可以订阅本帖等待新回复。