首页
社区
课程
招聘
手动脱Arma壳,终于可以脱掉了,但是修复IAT遇到问题
发表于: 2004-5-10 17:43 9346

手动脱Arma壳,终于可以脱掉了,但是修复IAT遇到问题

2004-5-10 17:43
9346
多谢Fly的文章指点,本文将补充Fly兄的没提及的问题,另,本文只涉及脱壳

软件下载页面:  http://www.skycn.com/soft/11437.html

【软件简介】:Mr.Captor 是一个非常好用的屏幕截图程序!后略...

【调试环境】:Win2000 server + sp4、Ollydbg、PEiD、LordPE、ImportREC 1.6
―――――――――――――――――――――――――――――――――
单刀直入,应该采取6个步骤脱壳:
1)BP OpenMutexA
2)BP GetModuleHandleA
3)修改Magic jmp
4)下内存断点
5)LordPE做dump处理
6)Import修正IAT

  前面5个步骤可以参考Fly兄的破解文章,关于修复IAT,这里要说一下。
  脱到6),可以看到获得输入表的树型结构里有两个父节点,第一个父节点里有很多dll在一起,仔细看一下,发现未能分析的垃圾指针都存在于各个dll之间,这个时候虽然有的垃圾指针可以通过Level1来分析出来),但是,实际上这是假象。
  众所周知,一般的垃圾指针都是靠填充dll与dll之间的空余段的,也就是说如果出现如下情况,应该先考虑Cut,而不是用Level1:

FThunk: 0006FA3C        NbFunc: 00000007
1        0006FA3C        comdlg32.dll        0075        PrintDlgA
1        0006FA44        comdlg32.dll        0073        PageSetupDlgA
1        0006FA48        comdlg32.dll        0070        GetSaveFileNameA
1        0006FA4C        comdlg32.dll        006C        GetFileTitleA
1        0006FA50        comdlg32.dll        006E        GetOpenFileNameA
1        0006FA54        comdlg32.dll        0065        ChooseColorA
1        0006FA58   ptr:00xxxxx  // 这里就是分界线,不要轻易Level1
1        0006FA5C        ole32.dll        0096        DoDragDrop
1        0006FA60        ole32.dll        0112        OleUninitialize
1        0006FA64        ole32.dll        00FB        OleInitialize
1        0006FA68        ole32.dll        0120        ReleaseStgMedium

汗,贴不了图,只能用文字了:(

遇到如此情况,要义无反顾的Cut掉:D ,我就被折磨够呛阿,一看到可以修复(Level1)就疯狂修复,汗,各位大大不要嘲笑我啊。

通过这个方法,基本上可以把大家分离出来了,分离到最下面,发现:

1        0006FB58   ptr:00xxxxx
1        0006FB5C   ptr:00xxxxx
1        0006FB60   ptr:00xxxxx

要判断这里是垃圾指针还是可用指针,那么先用Level1分析,分析的结果如果未出现在已分析的列表,那么就是可用指针,反之,可以Cut掉了。

好了,总结了一下经验,哎,照葫芦画瓢,还花了这么长时间,还要继续修炼ing。

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

收藏
免费 6
支持
分享
最新回复 (21)
雪    币: 898
活跃值: (4039)
能力值: ( LV9,RANK:3410 )
在线值:
发帖
回帖
粉丝
2
如果是无用的垃圾指针,直接用ImportREC剪切掉就行了

至于脱壳后文件的大小,这个似乎不是固定的多少倍,你可以删掉无用的区段,然后用LordPE优化一下
2004-5-10 23:02
0
雪    币: 222
活跃值: (100)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
Cut掉后,所有的dll都在一个目录下,正确性是假,这样可以吗?
2004-5-11 09:06
0
雪    币: 898
活跃值: (4039)
能力值: ( LV9,RANK:3410 )
在线值:
发帖
回帖
粉丝
4
正确性是假――似乎这样是有问题的
2004-5-11 11:16
0
雪    币: 301
活跃值: (300)
能力值: ( LV9,RANK:290 )
在线值:
发帖
回帖
粉丝
5
最初由 ghost_cracker 发布
Cut掉后,所有的dll都在一个目录下,正确性是假,这样可以吗?


请问哪里说明正确的真假呢
2004-5-11 14:54
0
雪    币: 222
活跃值: (100)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
正确是假,是因为不同的dll混杂在一起的缘故,这样也不对吗?
不知道为什么,我用Import获取的列表,就是一个只有一个节点,所有的dll都在这个节点下,所以,就算都是有效指针,正确性也是假:(
fly兄是如何把这个问题解决的?
2004-5-12 09:15
0
雪    币: 222
活跃值: (100)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
最初由 clide2000 发布


请问哪里说明正确的真假呢


每一个父节点后面都有一个正确性的描述
中文版是:[正确性:真]
英文版是:[TRUE]
2004-5-12 09:16
0
雪    币: 222
活跃值: (100)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
还有,看fly兄写的关于Mr.Captor V2.7版的脱壳,我是照着做的,但是dump的程序,却非法操作。
只有一个地方,我觉得可能是我有问题:
BP OpenMutexA之后,我就Ctrl+G,然后写代码,重新建立EIP。F9,回到OpenMutexA。去掉OpenMutexA断点,BP GetModuleHandleA。
就这里不一样,不知道fly兄断了几次?
用Import的时候,cut掉了将近20个函数
2004-5-12 09:49
0
雪    币: 898
活跃值: (4039)
能力值: ( LV9,RANK:3410 )
在线值:
发帖
回帖
粉丝
9
BP GetModuleHandleA+5  一般看堆栈
出现那些基本固定的DLL名就可以返回了
2004-5-12 12:48
0
雪    币: 207
活跃值: (40)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
fly大人的文章在哪里啊?
给个连接可以吗?
我马上要上班了
2004-5-12 13:12
0
雪    币: 222
活跃值: (100)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
最初由 jerry 发布
fly大人的文章在哪里啊?
给个连接可以吗?
我马上要上班了


看密界脱壳文集第一版,本站有帖子提供下载。
里边汇集了多种脱壳方法。http://bbs.pediy.com/showthread.php?s=&threadid=595
2004-5-12 13:25
0
雪    币: 222
活跃值: (100)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
最初由 fly 发布
BP GetModuleHandleA+5 一般看堆栈
出现那些基本固定的DLL名就可以返回了


也就是说一次BP OpenMutexA,之后就是按照GetModuleHandleA的DLL名字变化来判断,但是之后的操作,我们是一样的,为什么不行呢?Import后的exe,无法执行,我是:
Win2000 server + sp4

看图:
获得输入表:

发现很多dll都在一个父节点下

把全部无效指针Cut掉后的树状节点
2004-5-12 13:36
0
雪    币: 898
活跃值: (4039)
能力值: ( LV9,RANK:3410 )
在线值:
发帖
回帖
粉丝
13
Magic Jump 改好了没有?
应该是没有什么问题的
2004-5-12 22:31
0
雪    币: 222
活跃值: (100)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
老兄,和你改的一样子阿,改一次magic jmp,然后再改回来,对吧?
2004-5-13 08:52
0
雪    币: 898
活跃值: (4039)
能力值: ( LV9,RANK:3410 )
在线值:
发帖
回帖
粉丝
15
输入表,你参考一下

点击下载:附件!
2004-5-13 14:54
0
雪    币: 222
活跃值: (100)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
我们差好多阿,怎么你得可以这么规则??我的却是很多dll的函数混杂调用
2004-5-13 15:06
0
雪    币: 222
活跃值: (100)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
fly兄,已搞定,谢。
2004-5-13 17:37
0
雪    币: 898
活跃值: (4039)
能力值: ( LV9,RANK:3410 )
在线值:
发帖
回帖
粉丝
18
可能还是你改的Magic Jump的问题
改好Magic Jump 之后就不需要再用ImportREC追踪修复了
2004-5-13 17:45
0
雪    币: 222
活跃值: (100)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
看到第一页第一篇文章吧,里边是我的错误原因:)
我想改一下我的标题,可是不成功,能不能解决一下?
我还想知道,动态的修复Import该如何做?有没有文章参考?谢谢
2004-5-13 17:50
0
雪    币: 898
活跃值: (4039)
能力值: ( LV9,RANK:3410 )
在线值:
发帖
回帖
粉丝
20
已经说过了,对于标准壳,改好Magic Jump 之后直接剪切掉无效函数就行了
2004-5-13 17:53
0
雪    币: 222
活跃值: (100)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
关键要知道为什么,不是怎么做,我觉得是这样的(可能我没看到原因,这是自己分析的)
2004-5-13 17:54
0
雪    币: 222
活跃值: (100)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
另外,也想是否可以多一个论坛,贴一些有难度的软件(加壳的),然后供大家脱壳,脱正确的,可以加分之类的?
2004-5-13 17:58
0
游客
登录 | 注册 方可回帖
返回
//