找回密码
 加入我们

QQ登录

只需一步,快速开始

搜索
查看: 17337|回复: 15

破坏PE与拆分功能突破启发式

 火... [复制链接]

2

主题

20

回帖

2

精华

钻石会员

积分
2866
QQ
发表于 2011-11-3 20:08:00 | 显示全部楼层 |阅读模式
今天讨论的是NOD32和小红伞的启发式,前几天帮一位朋友做免杀时遇到了这样一个问题,木马所有功能都写成了DLL文件,EXE文件只负责把DLL释放出来并用系统自带的rundll32.exe加载即可。于是把DLL文件做了小红伞和NOD32的免杀,但当作资源加载进EXE文件后发现又被杀了。EXE文件里是那些正常的查找资源、释放资源的API函数,都还没有写运行rundll32.exe的代码,而且DLL文件本身就是免杀的。两个文件合并后就马上被杀,于是感觉应该DLL里还有隐藏的特征码,而且很明显是启发式在查杀。我个人推测这些隐藏的特征码只有在PE文件被放到另一个PE文件的资源里,才会组合出新的特征码来,然后启发式就会开始查杀。但这些特征码是很查找的,如果单纯定位合并后的EXE文件,会直接定位到资源区段里的DLL文件头部。于是想到了破坏PE的方法,启发式肯定会查看一个PE文件的资源里是否包含的是另一个PE文件,如果包含的不是一个PE文件,那么相对就是安全的。所以把DLL文件用C32ASM载入,移到“PE”两个字符的位置直接填充成00,然后把修改好的DLL重新当作资源放到EXE中,EXE的代码中加入以下恢复的代码:
  1. SetFilePointer(fp, 256, NULL,NULL);  //
  2. WriteFile(fp, "PE", lstrlen("PE"), &a, NULL);
复制代码
这两句放在刚刚把DLL释放出来的语句之后执行,我的DLL文件中PE两个字符距离开始位置是256,不同的文件大家自己调整。
重新生成EXE文件后小红伞不杀了,但NOD32依然查杀。显然NOD32的虚拟机跟踪了这种行为,而小红伞的启发式无法跟踪。如果不写上那两句恢复代码NOD32是不杀的,因此可以判断前面推测还是正确的,现在是要解决NOD32虚拟机的问题。试着把函数改成动态调用也没用,还是查杀。经过思考后决定把EXE的功能拆分开,让NOD32的虚拟机无法跟踪到这种行为。我们把现在的EXE文件叫EXE-A,然后再写一个EXE文件,这里叫它EXE-B,EXE-B的代码很简单,就是去指定目录里去找到指定DLL文件,并把PE两个字符给DLL补上,然后把EXE-B和DLL文件都到放EXE-A的资源里去。EXE-A依次释放DLL和EXE-B,然后运行EXE-B,这里EXE-B会把DLL的PE两个字符补上,但运行DLL的代码不要写在EXE-B里,而是写在EXE-A里,运行前面加上Sleep(1000)延时1秒基本就可以了。
通过这样编排后,NOD32的虚拟机就跟踪不出来整个的行为了,因为EXE-A只是释放了一个非PE文件和一个EXE文件到系统的临时目录并试图运行。运行的这个EXE文件虽然是PE文件,但它是一个很正规的文件,不是木马,因此不会存在隐藏特征码,NOD32不会报毒;而想运行的这个非PE文件,这显然是运行不了的,NOD32也不会报毒。但EXE-B做的工作就可以使这个非PE文件成功的被rundll32.exe加载起来。经过测试用这种方法成功免杀NOD32和小红伞的高级启发式查杀。


由于想申请核心会员用的,所以附上杂志上证明原创的图片,让大牛们见笑了
3.jpg

857

主题

2632

回帖

2

精华

管理员

此生无悔入华夏,  长居日耳曼尼亚。  

积分
36130
发表于 2011-11-3 22:34:02 | 显示全部楼层
因为很多AV耗资源且没用,所以我的电脑里根本不安装任何AV。

21

主题

162

回帖

4

精华

论坛元老

Tokyo-Hot

积分
5945
QQ
发表于 2011-11-3 23:30:22 | 显示全部楼层
好吧 我一向来自己用虚拟化工具 沙盘/虚拟机 来测试软件 杀毒神马的最不可靠了......
洗澡脱光衣服打开水才发现自己没带洗发水没带沐浴乳只带了一包洗衣粉 心酸的用洗衣粉把自己搓了一遍... ...

8

主题

149

回帖

2

精华

钻石会员

积分
3407
发表于 2011-11-5 02:01:09 | 显示全部楼层
留爪……这个可以防叁⑥灵么?

275

主题

3017

回帖

1

精华

管理员

嗷嗷叫的老马

积分
17064

论坛牛人贡献奖关注奖最佳版主进步奖人气王疯狂作品奖精英奖赞助论坛勋章乐于助人勋章

QQ
发表于 2011-11-6 21:03:36 | 显示全部楼层
我一直一直都不明白的是.......为什么非要在资源里保存PE格式文件呢?

自己随便做个加密或编码算法,处理一下再放进去不就行了嘛!这样打包与释放过程根本就不会有问题了.
我就是嗷嗷叫的老马了......

90

主题

473

回帖

2

精华

钻石会员

积分
3261
发表于 2011-11-8 00:26:23 | 显示全部楼层
mark一下

备用

0

主题

44

回帖

0

精华

银牌会员

积分
427
发表于 2011-11-10 15:07:03 | 显示全部楼层
同马大一样的想法``直接用个简单编码放进资源段然后解码释放``

47

主题

265

回帖

8

精华

核心会员

积分
10349
发表于 2011-11-11 13:36:12 | 显示全部楼层
留名,水晶越来越多人了~~~

4

主题

183

回帖

3

精华

钻石会员

积分
4965
发表于 2011-12-21 15:19:30 | 显示全部楼层
遇到过一样的问题,即使采用了些简单的加密,也没躲过小红伞。最后也是把文件分开执行的,但是后来的方法和你的有少些区别

4

主题

183

回帖

3

精华

钻石会员

积分
4965
发表于 2011-12-21 15:21:25 | 显示全部楼层
对了,忘记说了,在一个多月前,你若是把解压的资源放到一些合理的路径里,然后copy来copy去,小红伞也是不杀的,不过现在没用了!

6

主题

44

回帖

0

精华

铜牌会员

积分
96
发表于 2012-2-7 11:32:12 | 显示全部楼层
马大哈 发表于 2011-11-6 21:03
我一直一直都不明白的是.......为什么非要在资源里保存PE格式文件呢?

自己随便做个加密或编码算法,处理一 ...

释放的时候不还要解密吗,解密之后在内存中就会存在一个PE 释放的时候可能会被查到

275

主题

3017

回帖

1

精华

管理员

嗷嗷叫的老马

积分
17064

论坛牛人贡献奖关注奖最佳版主进步奖人气王疯狂作品奖精英奖赞助论坛勋章乐于助人勋章

QQ
发表于 2012-2-7 13:06:06 | 显示全部楼层
2012ohyeah 发表于 2012-2-7 11:32
释放的时候不还要解密吗,解密之后在内存中就会存在一个PE 释放的时候可能会被查到 ...

但至少不会被静态查出来嘛,嘿嘿

解压后的运行,也可以使用分段解压的方式,记得有个壳就是这样做的,要用到哪段内容就临时解压出来执行,搞定后再清除,保证内存里一定没有完整的映象.
我就是嗷嗷叫的老马了......

4

主题

62

回帖

1

精华

铂金会员

积分
1523
发表于 2012-5-24 08:24:18 | 显示全部楼层
过nod32和小红伞,只要有源码,还是比较容易的,虽然过了无数遍,不过偶没文章。现在比较头疼主动防御

1

主题

3

回帖

0

精华

初来乍到

积分
18
发表于 2012-6-2 03:50:18 | 显示全部楼层
求大牛指教编写dll与调用dll 或者是免杀的

1

主题

77

回帖

0

精华

金牌会员

积分
1137
发表于 2012-8-30 09:56:18 | 显示全部楼层
矛和盾永运是 相互依存的

1

主题

8

回帖

0

精华

初来乍到

积分
24
发表于 2014-1-3 15:03:34 | 显示全部楼层
本帖最后由 大胖 于 2014-1-3 15:06 编辑

厲害!

您需要登录后才可以回帖 登录 | 加入我们

本版积分规则

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