首页
论坛
课程
招聘
[原创]再谈Dll隐藏
2011-9-2 20:47 11133

[原创]再谈Dll隐藏

2011-9-2 20:47
11133
再谈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,这样一些杀软是不报警的。更进一步,我们可以用这样的方法让目标进程任意创建线程等等……我们要求的条件只有二个,能修改目标进程的内存,可以修改目标进程的线程上下文结构。就这些而已。

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

看雪2022 KCTF 秋季赛 防守篇规则,征题截止日期11月12日!(iPhone 14等你拿!)

上传的附件:
收藏
点赞0
打赏
分享
最新回复 (9)
雪    币: 8669
活跃值: 活跃值 (1251)
能力值: ( LV12,RANK:760 )
在线值:
发帖
回帖
粉丝
cvcvxk 活跃值 10 2011-9-2 21:31
2
0
话说,此法2007年在某远控中看过~
雪    币: 793
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
happymhx 活跃值 2011-9-2 21:44
3
0
要隐藏DLL 放到资源里吧
雪    币: 1620
活跃值: 活跃值 (112)
能力值: ( LV15,RANK:440 )
在线值:
发帖
回帖
粉丝
hackerlzc 活跃值 10 2011-9-2 21:49
4
0
严格的说,这不叫Dll隐藏。只是可以省掉自己重定位代码环节。这样我们甚至可以让explorer变成游戏进程。
雪    币: 39
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
dahaione 活跃值 2011-9-2 21:55
5
0
如果放在资源节里,铁定被干掉
雪    币: 1058
活跃值: 活跃值 (604)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
loqich 活跃值 2011-9-2 21:56
6
0
。这方法和自己实现peload类似 但是限制比peload多 所以现在用的人很少
雪    币: 793
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
happymhx 活跃值 2011-9-2 21:57
7
0
用汇编代码 把导入表也隐藏掉
雪    币: 25
活跃值: 活跃值 (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
哥布林 活跃值 2011-9-3 13:56
8
0
很老的东西了,zxshell作者N久前就发过
雪    币: 88
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
cdutboy 活跃值 2011-9-4 12:39
9
0
没什么意义.别说注入,基本上就是跨进程写,SetThreadContext,插APC,就加权值报警.还不如memload来的直接.
雪    币: 391
活跃值: 活跃值 (715)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
wowocock 活跃值 1 2011-9-4 12:55
10
0
除非你的内存是不可执行的,否则都可以被检测出来。
游客
登录 | 注册 方可回帖
返回