首页
社区
课程
招聘
[原创]看雪论坛2007逆向分析挑战赛[第二阶段◇第三题]脱壳机分析(附原码)
发表于: 2007-9-7 19:40 9517

[原创]看雪论坛2007逆向分析挑战赛[第二阶段◇第三题]脱壳机分析(附原码)

2007-9-7 19:40
9517
挺简单的一个壳。
1:
首先, 在最后petite追加的sfx节中, 把自己的后续处理代码, 以及原来的压缩
的节都解出来, 这里他一共用了2个算法。
0压缩 是zlib库的inflate, 应该是113版的, 因为压缩代码中可以看到这个版本号,
     根据代码的对比也知道是113版的, 网上流行的是123的最新版, 所以用123的
     www.zlib.net,  其实他是有点修改, 关键在于inflateblock函数中,
     他没有case 1的fix table, 而是case 1是原来2的dynamic table,
     所以改了一下, 另, 他是一个raw stream, 所以需要在inflateInit2调用的bitwidth中
     填写-15。
1~9压缩是aplib的一种变形, 为什么这么说呢, 因为几个关键子, d00, 500, 80太熟了。
     但是他有另几种比较值, 而且比aplib要简单, 但有雏形, 包括getbit以及getrepeat等
     还有, 他每次src->dest的时候, 都需要xor一下当时的留下size.
       算法都比较简单, 就不多说.
所以: 注定有2个stub,   所以: 需要定义2中偏移量.

2:
所有的节都解出来了后, 就构造一个异常, 跑到程序开始设置的seh去执行,
也就是第一次解出来的SMC代码.  这里, 需要修复下e8e9,  还有一个操作, 就是padding zero.
其实: 这里能知道原来的节的信息, 包括为了section align所需要的0都有,
但是我这并没优化, 因为一般样本, 这样效率不高... 说远了.
e8e9的修复是壳经常用的手段, 因为跳的地方相对与自己的地方这个查值一般比较小.
有助于后面的压缩.  其实还包括f0这样的长跳.  代码很段. 自己看原代码吧.
再次构造一个jmp eax(eax=0)的seh, 去执行3. 同时把sfx给清楚.
把自己拷贝一点自己给原来的入口, 以给以后做变换.

3:
这里给代码进行自效验. 包括pe头的, 包括smc的. 同时需要
得到xorkey, 这个就是把smc的代码的某些字节进行一下hash,
那个fs:12, fs:2c(没记错的话), 其实就是一个0和一个1起作用. 估计是反虚拟机的..
然后不停的xor那个buf然后循环移位, 每次移动前都把自己最低位置上
这个算出来的xorkey, 跟原来的entrypoint的旁边的16个字节xor后, 这样
如果没出问题, entrypoint就是一个e9.... jmp xxxxxxxx(记错maigc x)
恢复导入表, 始终没看到重定位的信息.. 不知道他怎么敢加dll....
导入表的位置,函数名字位置跟原来没变, 只是把原来的5*4一条的导入表信息用一个4字的
firstthunk代替了.直接的dllname被拷贝到pe头去了.  因为5*4比4大嘛,  所以他敢这么放.
我这简单的把他放回去..  0000 0000 0000 pe头的名 原来的thunk.
然后2次循环, 一次是dll的, 一次是函数的, 把函数的thunk填对就ok了。
值得注意的是name和序号是不一样的, 如果是序好, 那么不走流程x.
名字就要走流程x
流程x: 每次走的时候, 每次计数值都减1, 看是否比0大, 如果没有, 那么就hook掉这个api,
并且把hook后的地址的地方&7做下一次计数值, 计数值的初史值需要从exe中读,
可能是0,1等...
最后, 把入口magic x跟api数量进行变换.
如果hook了, 就 x = ror(x-2,3) 否则就x = ror(x-1,3)
这样能算出入口来,
修正pe头, entrypoint,  imagesize, 取掉最后一个节,  然后dump就完了.

看下原代码就什么都清楚了.
这里没有idb, 所以很多东西都是凭记忆写的, 难免有失误, 见谅.

vc7工程

[课程]Linux pwn 探索篇!

上传的附件:
收藏
免费 7
支持
分享
最新回复 (20)
雪    币: 1746
活跃值: (287)
能力值: (RANK:450 )
在线值:
发帖
回帖
粉丝
2
崇拜~~~~
2007-9-7 19:42
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
支持

学习
2007-9-7 19:43
0
雪    币: 1969
活跃值: (46)
能力值: (RANK:550 )
在线值:
发帖
回帖
粉丝
4
学习~~
2007-9-7 19:49
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
膜拜ing。。。
2007-9-7 19:54
0
雪    币: 398
活跃值: (343)
能力值: (RANK:650 )
在线值:
发帖
回帖
粉丝
6
我也来加入膜拜大军
2007-9-7 20:21
0
雪    币: 202
活跃值: (77)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
7
学海无涯,学习了
2007-9-7 20:27
0
雪    币: 1829
活跃值: (1357)
能力值: (RANK:50 )
在线值:
发帖
回帖
粉丝
8
榜样级的Cracker,本来只想潜水的,实在忍不住了
2007-9-7 20:54
0
雪    币: 44229
活跃值: (19965)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
9
jjnet对压缩引擎很熟悉
2007-9-7 20:58
0
雪    币: 233
活跃值: (10)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
10
继续学习  
2007-9-7 22:28
0
雪    币: 226
活跃值: (15)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
11
连做了5天,结果99%的时候12点了。
2007-9-7 23:11
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
连续3头大牛发了这个文章
严重学习加支持
2007-9-8 00:32
0
雪    币: 203
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
下了,感觉差距太大了,自己要严重补课。谢谢
2007-9-8 10:32
0
雪    币: 2575
活跃值: (487)
能力值: ( LV2,RANK:85 )
在线值:
发帖
回帖
粉丝
14
楼主分析能力好强
2007-9-8 10:35
0
雪    币: 8209
活跃值: (4458)
能力值: ( LV15,RANK:2459 )
在线值:
发帖
回帖
粉丝
15
赞,很强大

不过好像缺少重定位的处理
2007-9-8 10:49
0
雪    币: 101
活跃值: (12)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
16
是的.. 下了shoooo的代码看才知道.
当时没给dll加了做实验.
2007-9-8 11:10
0
雪    币: 8209
活跃值: (4458)
能力值: ( LV15,RANK:2459 )
在线值:
发帖
回帖
粉丝
17
我爱吃猪肉,但是长不胖,为什么??
2007-9-8 12:15
0
雪    币: 101
活跃值: (12)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
18

google真不是好东西
2007-9-8 13:06
0
雪    币: 8209
活跃值: (4458)
能力值: ( LV15,RANK:2459 )
在线值:
发帖
回帖
粉丝
19
果然呢,下面的资料都有了
姓名:hjj
出生年月日:
qq号码:
2007-9-8 13:09
0
雪    币: 1919
活跃值: (901)
能力值: ( LV9,RANK:490 )
在线值:
发帖
回帖
粉丝
20
支持哈~~~
2007-9-8 16:54
0
雪    币: 200
活跃值: (13)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
痛苦中的,幻影的壳不知道怎么自动脱不了???

找高手:::QQ 271178066
2007-9-8 21:21
0
游客
登录 | 注册 方可回帖
返回
//