再谈Dll隐藏


        对于Dll的隐藏,以前已经有好多NB人物写过文章了,我也不知道本文是不是已经有人写过了,然而这毕竟是一个小菜鸟的一个思路,现拿出来和大家分享一下。老鸟飘过。
思路很简单,主要分为以下步骤:
1,用远线程把dll注入到目标进程中。
2,然后通过一些方法得到其模块基址base和大小length.,以及我们自己的main函数地址UserEntry
3,用ReadProcessMemory将模块内存复制出来。(此时所有函数已经重定位,变量已经初始化)
4,远线程卸载目标进程中我们刚刚安装的dll。
5,在目标进程以base为基址,分配大小为length的内存块(选保留,再提交物理内存)。
6,将第3步dump出来的数据再复制到目标进程中第5步分配的内存中。
7,创建远线程到UserEntry.我们的dll真正开始工作了。

    需要说明的是,这样的dll不允许执行与C运行时库相关的例程。我们只能用Windowss标准库,Windows函数分配内存等。

    其实这个方法没有什么技术含量。我个人感觉就是让系统帮助重定位了一下。然而这个方法还有很多可以改进的地方。比如在DllMain里把不相干的模块数据全部毁掉,让暴力搜索模块失效。再比如,我们还可以不用远线程注入,而是选持起目标进程的某线程,让该线程执行一断shellcode加载这个dll,这样一些杀软是不报警的。更进一步,我们可以用这样的方法让目标进程任意创建线程等等……我们要求的条件只有二个,能修改目标进程的内存,可以修改目标进程的线程上下文结构。就这些而已。

就说这么多吧,我把我的一些测试代码也附上,望对大家有所帮助。欢迎大家一起讨论。最后送上一句“好好学习,天天向上!”
上传的附件 HideDll.rar
Inject_dll_test.rar