1. 问题

一些程序经过脱壳后(如用OD的dump插件),一些导入表信息丢失了,导致拖入IDA后看不到API的信息(如右图所示,第一个红圈处实际是GetCurrentProcessId),给分析造成极大影响。

IDA分析脱壳后丢失导入表的PE-LMLPHP  IDA分析脱壳后丢失导入表的PE-LMLPHP

2. 分析

从OD来看,41F480处的值就是API GetCurrentProcessId的地址,也就是壳修改后的导入表的位置,该地址在.rsrc Section内,即程序的资源段内,那么我们需要修复其导入表,以指向资源段内的地址

IDA分析脱壳后丢失导入表的PE-LMLPHP

3. 修复导入表

《加密与解密》第3版的13.4.4节”重建输入表”(P340)就详细的讲解了利用ImportREC重建输入表的方法。

1> 用OD脱壳后断下(如本demo就在CreateMutexW或者CreateEventW上下断点即可断到脱壳后的代码)

2> 找个函数头作为OEP输入到Import REC中(当然如果能找到真正的OEP也是可以的),然后点击”IDAT AutoSearch”,然后点击”Get Imports”,得到下图的结果

IDA分析脱壳后丢失导入表的PE-LMLPHP

3> 用OD dump脱壳后的PE后,再用Import REC点击”Fix Dump”即可修复导入表

4. IDA导入修复后的dump

1> 由于dump的导入表不在.rdata中了,IDA不会去自动加载.rsrc段的数据,这样即使修复了导入表后IDA也不能正常识别API函数,这时需要勾选”Manual Load”项,让IDA加载.rsrc段

IDA分析脱壳后丢失导入表的PE-LMLPHP               IDA分析脱壳后丢失导入表的PE-LMLPHP

2> IDA分析完成后,就能正常的显示dump调用的API了

IDA分析脱壳后丢失导入表的PE-LMLPHP

04-26 23:54