欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  网络运营

菜鸟脱壳之脱壳的基础知识(六)——手动查找IAT和修复Dump的程序

程序员文章站 2022-04-07 09:49:21
前面讲了如何寻找OEP和脱壳,有的时候,Dump出来的时候不能正常运行,是因为还有一个输入表没有进行处理,一些加密壳会在IAT加密上面大做文章,用HOOK - API的外壳...

前面讲了如何寻找OEP和脱壳,有的时候,Dump出来的时候不能正常运行,是因为还有一个输入表没有进行处理,一些加密壳会在IAT加密上面大做文章,用HOOK - API的外壳地址来代替真是的IAT的地址,让脱壳者无法正确的还原程序的原始IAT,使得程序不能被破解,所以我们处理这些被加密IAT的地址的办法是找到加密这些IAT的地址的跳转(就是Magic Jump),将它修改为强制跳转(JMP),使之无法加密IAT,从而达到脱壳修复的目的!
因为程序的IAT是连续的排列的,所以我们只需要找到IAT的起始位置和末位置,就可以确定IAT的地址和大小!有的IAT是JMP 类型的,有的是CALL类型的,所以,要想确定IAT的地址,就要先知道这个程序是怎样调用IAT的,例如:
菜鸟脱壳之脱壳的基础知识(六)——手动查找IAT和修复Dump的程序
其对应的汇编是CALL DWORD PTR DS:[465198],即直接调用[465198]里的函数,地址465198在IAT中,指向GetVersion函数,我们点击004464F7这句指令,右键,跟随到数据窗口,内存地址!
菜鸟脱壳之脱壳的基础知识(六)——手动查找IAT和修复Dump的程序
此时的465198就是IAT的一部分,可以在数据窗口查看到它的内容:
菜鸟脱壳之脱壳的基础知识(六)——手动查找IAT和修复Dump的程序
我们右键,长型,地址查看:
菜鸟脱壳之脱壳的基础知识(六)——手动查找IAT和修复Dump的程序
这样就可以看到其他的函数的函数名字了:
菜鸟脱壳之脱壳的基础知识(六)——手动查找IAT和修复Dump的程序
我们向上面翻,找到数据为0的dword的间隔,IAT最后是以0结尾的:
菜鸟脱壳之脱壳的基础知识(六)——手动查找IAT和修复Dump的程序
这个加壳程序的IAT的地址是:00464FFC,那么它的大小为:00465698 - 00464FFC = 69C.
此时就可以利用ImportREC来进行修复了!
菜鸟脱壳之脱壳的基础知识(六)——手动查找IAT和修复Dump的程序
输入程序的OEP和刚刚得到RVA和大小,点击获取输入信息,修复转存,抓取DUMP的程序,进行修复,修复完毕后,运行修复后的程序,程序可以正常的运行:
菜鸟脱壳之脱壳的基础知识(六)——手动查找IAT和修复Dump的程序

附下载版文章:
http://up.2cto.com/2012/1205/20121205071819691.zip