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

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

2021-1-28 15:24
12347

本实例可以通过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表的起始地址和结束地址。

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

01175FA8 01176014

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

最后于 2021-1-28 15:25 被独钓者OW编辑 ,原因:
收藏
免费 8
支持
分享
最新回复 (12)
雪    币: 66
活跃值: (2791)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
棒棒 !!好技巧
2021-1-28 17:26
0
雪    币: 3776
活跃值: (5549)
能力值: ( LV7,RANK:115 )
在线值:
发帖
回帖
粉丝
3
实都 棒棒 !!好技巧
对您有帮助我感到很开心
2021-1-28 17:50
0
雪    币: 968
活跃值: (6823)
能力值: (RANK:462 )
在线值:
发帖
回帖
粉丝
4
干货,感谢分享
2021-1-28 17:57
0
雪    币: 3776
活跃值: (5549)
能力值: ( LV7,RANK:115 )
在线值:
发帖
回帖
粉丝
5
顾何 干货,感谢分享
2021-1-28 19:39
0
雪    币: 10
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
6
好好学习
2021-1-30 14:35
0
雪    币: 3776
活跃值: (5549)
能力值: ( LV7,RANK:115 )
在线值:
发帖
回帖
粉丝
7
rdbjx 好好学习
收到
2021-1-30 15:28
0
雪    币: 4402
活跃值: (1396)
能力值: ( LV7,RANK:113 )
在线值:
发帖
回帖
粉丝
8
谢谢分享
2021-1-31 13:08
0
雪    币: 1507
活跃值: (853)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
分析病毒,最好用IDA而非olldbg
2021-2-1 15:01
0
雪    币: 4502
活跃值: (4254)
能力值: ( LV9,RANK:140 )
在线值:
发帖
回帖
粉丝
10
感谢分享
2021-2-2 20:58
0
雪    币: 377
活跃值: (5996)
能力值: ( LV4,RANK:55 )
在线值:
发帖
回帖
粉丝
11
好文
2021-5-2 10:33
0
雪    币: 3922
活跃值: (3624)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
12
学习了
2021-5-5 13:52
0
雪    币: 3372
活跃值: (1470)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
13
好文,学习了
2021-5-18 14:35
0
游客
登录 | 注册 方可回帖
返回
//