首页
社区
课程
招聘
请教ZProtect脱壳中,IAT范围该如何寻找?
发表于: 2010-4-5 22:53 9682

请教ZProtect脱壳中,IAT范围该如何寻找?

2010-4-5 22:53
9682
1.4.8的壳,有6个模拟DLL,通过程序入口代码可以判断为VC的入口格式,也就是有可能是VC或者易语言的程序。

我打算使用网上搜集到的脱壳脚本进行脱壳,但这些脚本都需要填写IAT的开始&结束处地址。我想请问的则是如何找到这个地址。网上方法有两种,以下分别是他们的方法描述,以及我使用这些方法时遇到的问题。红字部分为问题。

方法一、“自己计算IAT的Start和End,计算方法,相信有过脱壳经验的都明白,到OEP后(ZP的到OEP,ESP定律即可),随便找个CALL,不断进几次就会发现了。”,转自ximo的脱壳脚本说明。
方法二、“通过查找FF25 很容易确定IAT的位置”,转自hyperchem的脱壳笔记。

=====================================================
方法一遇到的问题
我的经历:
首先,直接靠ESP定律,无法到达OEP处,最终会停止在注册码输入框处。
使用了以下方法,最终找到OEP,参照的是破吧《脱壳第三十六课》的视频:
a.跟到PUSHAD处,HR ESP,F9,程序弹出注册码输入框。
b.F12,停止程序,进度调用堆栈列表,点击USER32.DialogBoxIndirectParamAorW,右键显示函数过程,对代码77D56D7D 下硬件访问断点。
c.重启程序,F9一次到之前的HR ESP处,再F9一次到达USER32.DialogBoxIndirectParamAorW的函数过程出。修改,EAX=232C,
77D56D7D > 8BFF             MOV EDI,EDI
77D56D7F   55               PUSH EBP
77D56D80   8BEC             MOV EBP,ESP
77D56D82   6A 02            PUSH 2
77D56D84   FF75 18          PUSH DWORD PTR SS:[EBP+18]
77D56D87   FF75 14          PUSH DWORD PTR SS:[EBP+14]
77D56D8A   FF75 10          PUSH DWORD PTR SS:[EBP+10]
77D56D8D   FF75 0C          PUSH DWORD PTR SS:[EBP+C]
77D56D90   FF75 08          PUSH DWORD PTR SS:[EBP+8]
77D56D93   E8 38DCFCFF      CALL USER32.DialogBoxIndirectParamAorW
77D56D98   5D               POP EBP
77D56D99   C2 1400          RETN 14
d.对77D56D99行右键,此处为新EIP。
e.F9运行程序,成功断在HR ESP处。

以上方法并没有使用网上找到的LPK.DLL,同样可以绕过注册码输入框到OEP处,所以并没有导致之前的死机,也成功进入到了OEP处。

这时如果按F9运行程序,程序会因为异常导致结束,也不知道是什么问题。。
想用脚本脱壳的话必须改IATS IATE,但到了这一步,怎么获取IAT,完全不懂了~~~

=====================================================
方法二遇到的问题
一进入程序时,搜索FF25,无结果,搜索FF15,有一个结果。
而通过方法一的方法到达OEP时,搜索FF25,可以搜索到很多处地方~~搜索FF15也是。

不知道需要的是到达OEP前还是后的搜索结果,搜索到了又怎样可以找到IAT的起始与结束地址呢?
=====================================================
以下是再之前的经历,不太重要吧。。
=====================================================
=====================================================
以下问题是旧的~~可以不看~
=====================================================
我遇到的程序是1.4.8的壳。

开始程序后,F9弹出注册码输入框,搜索,可以找到FF15
00527CDB   FF15 48735200    CALL DWORD PTR DS:[527348]
DS:[00527348]=00B610A7

然后怎么找IATS和IATE啊??不懂哦~~~可以详细说说吗~

另外,网上有个lpk.dll文件,放到程序目录下,运行程序,就没有弹出注册码输入框了,不过程序自动关闭了。

如果我在有LPK.DLL的情况下,使用OD调试这个程序,不管是用StrongOD.dll还是PhantOm.dll。。OD都会过一会就死机。。死了无数次了。。。

另外,如果不适用LPK.DLL,ESP定律是无法到达OEP处的~而用LPK.DLL,就要冒十次运行九次死机的风险。。~~~~(>_<)~~~~

我只想知道如何获得IATS和IATE~请指教~谢谢~

---------------------------------------
补充说明:
厄,你的脚本,我没有填写如iats和iate的情况下进行了测试,如果没有LPK.DLL的情况下使用,脚本运行到程序运行,即弹出注册码输入框时就停止住了。
如果有LPK.DLL,则可以完成执行完,不过要求事后修复OEP。

想了一想,在网上看了这么多ZPROTECT的脱壳教材,获取OEP的方法一般有两种,一种就是通过OEP,另一种则是通过FF15或者FF25,但FF15与FF25必须程序运行下来时才会有跳转数值,而我用LPK.DLL时,一运行程序就结束了,而不用LPK.DLL,程序运行就会运行到注册码输入框那里。而这时FF15跳转到的地方就是上面的代码段:
00527CDB   FF15 48735200    CALL DWORD PTR DS:[527348]
DS:[00527348]=00B610A7

通过这个代码段,如何获取IATS IATE?获取到又是否是正确的了?
=====================================================

[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 209
活跃值: (26)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
2
hyperchem 2010-4-7 06:38
不是IAT的下限,而是IAT调用的下限。确定的方式是通过通过搜索特征码(我的文章里面应该提到了特征码是什么)。直到找不到为止。稍微比最后一处IAT调用的地址大一些就可以看做是IAT调用的下限。

IAT上限为第一个FF25处。。

问题解决。。
2010-4-7 21:02
0
雪    币: 43
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
这个加密软件已经淘汰了
2010-4-8 20:15
0
雪    币: 209
活跃值: (26)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
4
你确定么。。最新版无KEY不脱壳~~更无法破解。。郁闷中……
2010-4-9 10:13
0
雪    币: 195
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
这个壳还有很多变化,一时半会不能全部搞定呀,太难搞了,我都想了N天了
2010-10-3 17:11
0
游客
登录 | 注册 方可回帖
返回
//