首页
社区
课程
招聘
IDA技巧——动静结合修复IAT
2021-1-28 15:24 11119

IDA技巧——动静结合修复IAT

2021-1-28 15:24
11119

本实例可以通过app.any.run获取:https://app.any.run/tasks/0feaad68-539d-4ef8-9090-f4e59e4d0c61/
样本家族名称:Ransomeware/Paradise
MD5:3e94ad15587dc71173bbd10bda5d56e4
在IDA第一次解析PE文件时,往往会首先会咨询我们使用什么配置。它会默认忽略Load resources选项,该选项可以为我们提供更多信息,应当手动勾选。
图片描述
进入OEP按住空格键即可删除图形化界面从而切换到反汇编界面。从OEP处反汇编处可以看到病毒连续调用两个call指令。
图片描述
进入第一个call指令,看到熟悉的fs:[0x30]和相关的模块名,可以判断该函数和动态获取API有关。
图片描述
仔细观察这段函数,可以发现病毒将一段4字节16进制数据和模块基址作为参数传入了sub_401ca0。该函数返回的值存入一个全局变量地址dword_406004。接下来每个加载dll相关的操作都和dword_406004函数相关,所以基本可以确定sub_401ca0函数用于根据模块基址和函数hash动态获取API地址。
图片描述
查看dword_406004地址处数据发现为未知内存,则证实了dword_406004存储动态获取API地址。
图片描述
修改参数名和函数名,使用交叉引用X快捷键产看hash参数被引用位置。
图片描述
找到hash引用上方调用了一个函数,而且紧接着会将返回值eax与hash参数进行比较,所以猜测sub_4016f0为hash运算相关的函数。
图片描述
进入函数查看基本可以确定在进行hash运算。
图片描述
接下来返回第一个函数起始位置向下浏览代码。发现有大量将数据存入临时变量的行为。其中有一些ida无法解析的数据,以offset开头。
图片描述
双击进入可以看到一些全局数据。
图片描述
继续向下观察,可以看到病毒又在根据hash动态获取API的操作,而且每次传入的hash都是通过esi中取出,由此我们很容易联想到,病毒将输入按照一定规律连续存储在栈内,并通过循环获取不同的参数,最终将获取的API存储在ecx指向的内存。所以可以确定上面图中数据为要获取的hash值。
图片描述
由此我们也理解了第一个函数是用来动态解析API的。
图片描述
返回入口点代码变得更加直观。
图片描述
我们继续向下观察代码,我们可以发现有很多call指向一个全局变量地址。这种代表间接调用IAT处函数。
图片描述
但是当我们点击该函数会发现IDA无法解析API。因为病毒自己构造了自己的IAT,需要我们动态对IAT表进行修复。
图片描述
首先在动态解析API函数地点设置断点。
图片描述
启动IDA的动态调试功能,我是用的被接管调试器为Windbg。(也可以选择远程调试,全凭大家喜好)
图片描述
在病毒填充IAT位置设置断点。并让程序跑起来直到断住。
图片描述
断住后继续向下执行一条,让导入表被EAX填充。然后打开一个新的反汇编窗口。
图片描述
通过新的反汇编窗口查看IAT表。
图片描述
可以看到API数据已经动态填充到了IAT表中.
图片描述
接下来选择API的地址,按下O快捷键,让IDA解析出符号名。
图片描述
了解重新解析IAT的方法后,我们只需要在动态获取API函数的ret指令下断点,让其自动解析。
图片描述
执行到ret指令查看IAT表内存,已经填充完毕。
图片描述
我们可以通过手动解析来验证一下是否填充完整。
图片描述
接下来我们需要记录IAT表的起始地址和结束地址。

1
01175FA8 01176014

然后选择Edit->Universal Unpacker Manual Recounstruct通用脱壳插件。
图片描述
分别填写OEP、代码节起始位置和结束位置、IAT表起始位置和结束位置。
图片描述
修复IAT完成后可以看到IDA已经解析了所有IAT表中的API符号。接下来我们就可以终止调试了。
图片描述
结束调试后使用Rebase program。
图片描述
将IDB的基址重新定向回0x00400000。
图片描述
图片描述
可以看到IDA已经可以解析病毒构造的IAT表中API地址。
图片描述


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

最后于 2021-1-28 15:25 被独钓者OW编辑 ,原因:
收藏
点赞8
打赏
分享
最新回复 (12)
雪    币: 52
活跃值: (2183)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
实都 2021-1-28 17:26
2
0
棒棒 !!好技巧
雪    币: 3776
活跃值: (5379)
能力值: ( LV7,RANK:115 )
在线值:
发帖
回帖
粉丝
独钓者OW 2 2021-1-28 17:50
3
0
实都 棒棒 !!好技巧
对您有帮助我感到很开心
雪    币: 951
活跃值: (6723)
能力值: (RANK:462 )
在线值:
发帖
回帖
粉丝
jux1a 8 2021-1-28 17:57
4
0
干货,感谢分享
雪    币: 3776
活跃值: (5379)
能力值: ( LV7,RANK:115 )
在线值:
发帖
回帖
粉丝
独钓者OW 2 2021-1-28 19:39
5
0
顾何 干货,感谢分享
雪    币: 10
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
rdbjx 2021-1-30 14:35
6
0
好好学习
雪    币: 3776
活跃值: (5379)
能力值: ( LV7,RANK:115 )
在线值:
发帖
回帖
粉丝
独钓者OW 2 2021-1-30 15:28
7
0
rdbjx 好好学习
收到
雪    币: 4398
活跃值: (1241)
能力值: ( LV7,RANK:113 )
在线值:
发帖
回帖
粉丝
Adventure 2021-1-31 13:08
8
0
谢谢分享
雪    币: 1507
活跃值: (853)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
guangzisam 2021-2-1 15:01
9
0
分析病毒,最好用IDA而非olldbg
雪    币: 3924
活跃值: (3935)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
0xEEEE 2 2021-2-2 20:58
10
0
感谢分享
雪    币: 377
活跃值: (5996)
能力值: ( LV4,RANK:55 )
在线值:
发帖
回帖
粉丝
zx_838741 2021-5-2 10:33
11
0
好文
雪    币: 3858
活跃值: (3485)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
APT_华生 1 2021-5-5 13:52
12
0
学习了
雪    币: 3372
活跃值: (1445)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
baobao雅 1 2021-5-18 14:35
13
0
好文,学习了
游客
登录 | 注册 方可回帖
返回