首页
社区
课程
招聘
代码乱序变形引擎的设计思路
发表于: 2009-4-22 20:07 26093

代码乱序变形引擎的设计思路

2009-4-22 20:07
26093

不会写文章,不过还是写了一篇,有人有兴趣可以照着山寨,我玩腻了.
另外免得无bin无真相,带个bin和map.

摘一段


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

上传的附件:
收藏
免费 7
支持
分享
最新回复 (44)
雪    币: 7309
活跃值: (3788)
能力值: (RANK:1130 )
在线值:
发帖
回帖
粉丝
2
我居然是第一个。。
2009-4-22 20:09
0
雪    币: 82
活跃值: (10)
能力值: (RANK:210 )
在线值:
发帖
回帖
粉丝
3
你刷新按得太快了。
2009-4-22 20:19
0
雪    币: 192
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
4
我是来膜拜的!
2009-4-22 20:23
0
雪    币: 105
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
123456
2009-4-22 20:40
0
雪    币: 8201
活跃值: (2701)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
6louzhanwei
2009-4-22 20:43
0
雪    币: 334
活跃值: (22)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
7
先支持,后拜读....
2009-4-22 21:04
0
雪    币: 212
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
下了看看,支持
2009-4-22 21:34
0
雪    币: 360
活跃值: (77)
能力值: ( LV9,RANK:250 )
在线值:
发帖
回帖
粉丝
9
占楼学习
2009-4-22 22:17
0
雪    币: 494
活跃值: (629)
能力值: ( LV9,RANK:1210 )
在线值:
发帖
回帖
粉丝
10
例子加壳了看不见啊

是否改变了原程序的结构? 既然使用了map文件估计是做了的
2009-4-22 22:35
0
雪    币: 82
活跃值: (10)
能力值: (RANK:210 )
在线值:
发帖
回帖
粉丝
11
例子的壳没有改变代码段, 401000处是一个MD5,直接bp就可以.
2009-4-22 22:38
0
雪    币: 494
活跃值: (629)
能力值: ( LV9,RANK:1210 )
在线值:
发帖
回帖
粉丝
12
我也在玩这个,没有搞完.用mistfall直接搞原来的代码,不是壳,因为不能保证反汇编的正确性,只能做成个玩具,过段时间也贴个样本

象这样的代码,反汇编不好做:

.text:00402728                 and     eax, 3
.text:0040272B                 add     ecx, eax
.text:0040272D                 jmp     dword ptr ds:(loc_40273C+4)[eax*4]
.text:0040272D
.text:00402734 ; ---------------------------------------------------------------------------
.text:00402734
.text:00402734 loc_402734:                             ; CODE XREF: _memcpy+46j
.text:00402734                 jmp     dword ptr ds:TrailUp0_0[ecx*4]
.text:00402734
.text:00402734 ; ---------------------------------------------------------------------------
.text:0040273B                 align 4
.text:0040273B _memcpy         endp
.text:0040273B
.text:0040273C
.text:0040273C loc_40273C:                             ; CODE XREF: _memcpy+31j
.text:0040273C                                         ; LeadUp1_0+1Ej
.text:0040273C                                         ; LeadUp2_0+18j
.text:0040273C                                         ; LeadUp3_0+Ej
.text:0040273C                                         ; DATA XREF: _memcpy+4Dr
.text:0040273C                 jmp     ds:UnwindUpVec_0[ecx*4]

我是想直接变换原程序的代码段,可惜反汇编是个致命问题,只能凑合玩玩.

我的带驱动的OD没在家里的机器上(XP Sp3)试过,OllyIce过不了你的壳呵呵.
2009-4-22 22:41
0
雪    币: 82
活跃值: (10)
能力值: (RANK:210 )
在线值:
发帖
回帖
粉丝
13
跳转表的我是直接放弃的,VC的可以,Delphi的给我MAP我也不能保证稳定.
2009-4-22 22:46
0
雪    币: 494
活跃值: (629)
能力值: ( LV9,RANK:1210 )
在线值:
发帖
回帖
粉丝
14
我上面列的代码就是VC6生成的,我也用了map文件,反汇编不能保证,mistfall也就大打折扣了.

如果能直接变换原程序的代码段就太爽了,即使脱壳也没有干净代码,就象刘涛涛的扭曲.

我不清楚他是怎么做的,看他的文章似乎是从obj得到asm做的,难道直接处理的asm文件?
出来的结果还是obj。如果直接处理二进制文件,用mistfall可以做出更强的东西,比如抽代码,
可以把原始代码占用的空间真正拿掉,大大增加修复的难度
2009-4-22 22:50
0
雪    币: 82
活跃值: (10)
能力值: (RANK:210 )
在线值:
发帖
回帖
粉丝
15
我现在的做法只从可靠的入口搜索函数,类似于IDA的启发式.
可以直接跳过这种表,当成不可重塑的指令,放弃这段代码.毕竟这样的情况是少数.

ltt是分析obj的,可以利用link生成代码,我是直接分析bin的,提供map是方便给人找入口的.壳处理的时候是不需要的,原地方的空间可以用来放bytecode,也可以放代码,不过真正用起来就会发现其实空间很有限,因为乱序的时候必须考虑最大指令长度,最后很零散,利用率很低.
2009-4-22 22:55
0
雪    币: 494
活跃值: (629)
能力值: ( LV9,RANK:1210 )
在线值:
发帖
回帖
粉丝
16
那段代码是memcpy里的,不清楚为什么编译器会生成这样的代码,z0mbie举过这个例子,问题在于40272D 的jmp跳到指令中间了,显然实际上是不会的,eax不会为0。

不过我没有实际跟过这段代码。
2009-4-22 23:01
0
雪    币: 494
活跃值: (629)
能力值: ( LV9,RANK:1210 )
在线值:
发帖
回帖
粉丝
17
我就是想把原地方干掉,不留空间。比如抽走的代码,原始IAT占的空间,或者jmp [iat] -> E9
之类的,把空间压缩掉,修复者只能自己另外找地方重建这些东西。

有的程序可以处理,反汇编失败就只有放弃了。
2009-4-22 23:10
0
雪    币: 82
活跃值: (10)
能力值: (RANK:210 )
在线值:
发帖
回帖
粉丝
18
程序里肯定有分析不了的地方的,比如函数未必都是retn结尾.这个时候map pdb都帮不上忙.

如果要全挪,可能工作量比还原还大..
2009-4-22 23:27
0
雪    币: 137
活跃值: (430)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
好东西
2009-4-22 23:32
0
雪    币: 494
活跃值: (629)
能力值: ( LV9,RANK:1210 )
在线值:
发帖
回帖
粉丝
20
Nooby可能没明白我的意思,我现在做的不是壳,就是个直接变形原代码的工具。 我说压掉空间,只是说如果在这基础上做壳,可以做出比较强的功能。

用mistfall引擎,不用关心函数起止的问题,可以随便挪动代码位置,只要建立好代码之间及PE文件头的参考关系就行。

真正的问题还是反汇编,用mistfall要求正确地识别出所有的代码和数据。这几乎是做不到的,有map稍好点,所以注定是个玩具。原来在某篇文章上对这引擎评价很高,说是感染若干样本无一失败,我觉得很奇怪。看他的代码应该成功率不高才对,况且病毒还没有map的帮助。

做不出实用的东西,做个玩具自己玩也行啊。
2009-4-22 23:43
0
雪    币: 82
活跃值: (10)
能力值: (RANK:210 )
在线值:
发帖
回帖
粉丝
21
大概明白了,以后有机会可以放个bin研究一下.
2009-4-23 01:15
0
雪    币: 263
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
22
把sm引出来了,只能说神作
2009-4-23 08:44
0
雪    币: 203
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
区分代码和数据的确没有什么办法,就是目前最好的反汇编IDA也需要人工干预。借助于重定位表也只能区分一部分数据(如跳转表)。幸好中、高级语言除非内联汇编外一般很少有代码、数据混合编程。
再说代码乱序变形引擎,个人觉得在防代码分析、防破解方面没有什么作用,老实说现在谁还完全靠静态分析?一般都是一边调式一边动态分析,那么什么乱序、变形都无法阻止分析,更无法防止破解,只是增加一点难度而已。
建议nooby有时间写代码乱序、变形引擎不如写VM引擎。相对来说,VM拥有更高的强度。
2009-4-23 09:27
0
雪    币: 263
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
24
你还真是无知啊
没办法
jr无知是正常的
2009-4-23 09:31
0
雪    币: 82
活跃值: (10)
能力值: (RANK:210 )
在线值:
发帖
回帖
粉丝
25
1.我无视VM。
2.你如果觉得VM足够强,怎么不叫老毛子把1.8降到1.2,速度还快些。

另外,这个文章大概你没看,整个过程就是兼容VM的,不多说了,cj时间到,不谈技术了。
2009-4-23 09:32
0
游客
登录 | 注册 方可回帖
返回
//