首页
论坛
课程
招聘
[原创]对拨号器的一次手动脱壳及修复IAT
2021-3-3 23:18 3091

[原创]对拨号器的一次手动脱壳及修复IAT

2021-3-3 23:18
3091
1
学习是一个不断总结的过程。之前,自己一直学,但是后来总感觉少了点什么,原来是少了总结。
 

我在看学雪了,看了一段时间了,发现脱壳的文章不少,但是我个人觉得,对于很多像我这样的小白,也是有一些难度,所以我决定写下这篇文章,分享一下。如有不好的地方,请批评指正。
本来想录一个视频,但是没有好的录屏软件,深感抱歉。

实验环境:
OllyDBG
PEiD
teltel超速拨号器9.8.exe

 

实验流程:
1) 运行流程,观察
2) 查壳
3) 去壳
4) 再次运行,如果有问题,需要修复IAT,重新脱壳

1. 运行该程序,观察

图片描述
弹出了“软件注册失败”的关键字。如果我们需要对该软件进行逆向,则这个关键字,就是一个很好的突破口。

2. 查壳

图片描述
存在ASPack的壳。这个壳比较常见,通常我们可以使用ESP定律,单步跟踪等,方法。

3. 脱壳

使用OD载入我们的目标软件,发现寄存器窗口一片红,尤其是ESP。所以可以尝试ESP定律来脱壳。具体的步骤,我写在上面了。需要强调的是,HW break(ESP),就是一个硬件断点。
图片描述
断点弄好了后,我们运行程序。一般的,壳运行完后,就会把程序的运行权交还给程序。然后根据堆栈平衡定律,程序就会在断点处停下,这时,就很接近我们的OEP了。
然后我们一直单步步入,直到发生很大的跳转后,这个地址就是OEP的地址。
图片描述
这个时候,我们利用OD内置的插件,脱壳调试进程,然后修改入口点地址。具体如图所示。
图片描述
最后,我们选择脱壳。一个完整的ESP定律演示完毕。
图片描述
可是当我们运行程序的时候,发生了错误。这说明,我们没有脱壳成功。

4. 再次运行,如果有问题,需要修复IAT,重新脱壳

虽然没有脱壳成功,但是我们知道了OEP的确切地址,在14E0处。我们来用lordPE来纠正一下镜像。具体的步骤,如下图的8,9所示。最后我们选择完全脱壳,将程序另存为。其实这个步骤,意义不大。
图片描述
使用ImportREC导入程序,发现,这个地方,有三个数据需要填,分别是OEP,RVA,还有大小。我们先把OEP填上。接下来,需要我们来确定RVA的值。
图片描述

5. 手动寻找IAT

再次返回到OD中来,在确定的OEP地址处,如果这个时候有乱码,可以如下图所示,分析>删除分析,将代码回归正常。单步向下,找到最近的一个CALL,然后enter进去,就看到了大量的jmp。
图片描述
这个时候,右键,选择数据窗口跟随,内存地址。为什么要这样做,大家可以回忆一下PE文件结构。
图片描述
到内存窗口中,改变字段的显示形式。我们就可以看到正常的地址了。然后就是进入内存地址界面,找到PE文件头部,记下这个地址,这就是基地址。
图片描述
图片描述
图片描述
然后用函数段首地址,减去这个基地址,得到16E114。
图片描述
现在我们将这个地址也填入IAT里面,大小选择默认的00001000。点击获取导入表。因为这个时候还有一些无效的指针,所以可以显示无效指针,并删除他们。最后选择修正转储,即可。
图片描述
最后,我们检验一下。
图片描述
成功!!!!!

 

总结:
要学习壳,最关键的,还是对PE文件格式的理解,不然自己很难深入的理解,为什么会这样做。


[公告] 2021 KCTF 春季赛 防守方征题火热进行中!

收藏
点赞1
打赏
分享
最新回复 (2)
雪    币: 547
活跃值: 活跃值 (273)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
guangzisam 活跃值 2021-3-4 09:58
2
0
手动脱壳,功底不错
雪    币: 1849
活跃值: 活跃值 (4675)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
kanxue 活跃值 8 2021-3-4 18:15
3
0
虽然这款壳比较简单,设优秀鼓励一下新人,期待你的成长!
游客
登录 | 注册 方可回帖
返回