糖尿病康复,内容丰富有趣,生活中的好帮手!
糖尿病康复 > Re-脱壳技术 脱壳实战(3): 脱壳及修复IAT

Re-脱壳技术 脱壳实战(3): 脱壳及修复IAT

时间:2020-03-20 11:53:13

相关推荐

Re-脱壳技术 脱壳实战(3): 脱壳及修复IAT

题目:

链接: /s/1wQIwaCu99mYHX8gyqMfMMQ 提取码: qwcm

脱壳最好在windows XP环境中

使用工具:

ODlordPEImportREC

第一题:IT修复

1.查壳

UPX的壳,无难度

2.寻找OEP

用OD载入

先F8单步运行一步

发现ESP寄存器被改变,可以使用ESP定律

右键数据窗口跟随,||或者直接点HW break[ESP],此插件会自动帮忙下好硬件断点

数据窗口设置

从最开始的数据开始选,(别选太少就行)然后右键→断点→硬件访问→这里的三个随便选一个都可以,我一般选word

此时菜单栏→调试→硬件断点 已经有了我们下的断点

然后F9运行程序,来到这里,此时可以删除硬件断点了

然后F8单步往下

如果遇到向上图这样的,向上的代码,则在下一行代码(上图中的为地址0x004052E8)右键→断点→运行到选定位置(快捷键F4)

删除图中的灰色代码(db 00)可以选择右键→分析→从模块中删除分析

分析完的模样

然后继续F8,此时出现了一个jmp大跳转(说明离OEP很近了)我们继续F8向下。

此时我们来到了OEP

脱壳的话,可以右键→用OllyDump脱壳调试进程,点脱壳就好

而此时我们练习手动修复IAT

3.使用lordPE进行dump

不要关闭OD,打开lordPE

然后将进程的浮块滑到最底部(lordPE的进程,最新的进程在最底部)

然后点击要附加的程序

右键→修正镜像大小

然后继续右键→完整转存

4.使用Import REC进行IAT修复

OD还是不能关

先打开ImportREC附加没有脱壳的已经到达OEP的进程(新的进程在最上面)

我们要记住OD脱壳插件中显示的OEP地址

或者记住OEP前面的地址也行

importREC有几个参数

OEP栏:这里填写OEP的相对偏移地址就行,上面401000-400000=1000(也就是OD脱壳插件显示的那个OEP)RVA:虚拟内存地址,这里填IAT的起始位置大小:填写导入表大小,需要用IAT的末地址减去首地址。(大小可以写大,但绝不能写小)

相对地址则为实际地址减去基址(基址在OD中e窗口中查看)

如果自动搜索IAT的话,用如下步骤

获取导入表之后,点按钮【显示无效的】,如果有导入表函数,右键删除即可

无效函数删除之后,再点【修正转储】

点击后会弹出一个窗口选择一个PE文件,我们选择之前lordPEdump出来的文件

然后脱壳完成。

5.手动查找IAT并修复

在OD中 右键→查找→所有模块间的调用

然后双击一个程序本身的函数不要选系统函数

来到函数调用处

右键→跟随,进入函数(快捷键:回车)

来到这里

然后再右键→数据窗口中跟随→内存地址

为了便于查看, 可以更改一下数据窗口的显示方式

右键→长型→地址

或者在下面的窗口里输入d xxx,其中xxx为jmp后的地址

IAT段是连续的,向上找到开头,向下找到结尾

可以知道

起始:0x00402000

结束:0x0040200C

RVA:0x00402000 - 0x00400000 = 0x00002000(相对偏移地址)

大小:0x0040200C - 0x00402000 = 0xC

填入

然后获取导入表,删除无效函数(此程序没有无效函数),【修正转储】,选择之前用lordPE软件dump出的文件,确定。

可以正常打开,成功。

另一种寻找函数的方法:

用ImportREC进行IAT自动搜索,获取导入表,在导入表中找到一个函数,记录此函数的相对偏移

然后0x0000 + 0x0040000 = 0x0040得到此函数的地址,然后在od底部的命令框中输入d xxx,其中xxx为jmp后的地址,来达到找到IAT段的目的

第二题:脱壳练习2

步骤同第一题

如果觉得《Re-脱壳技术 脱壳实战(3): 脱壳及修复IAT》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。