1.查壳
2.找到OEP
对第二个Call使用ESP定律,再跳转后的位置进入第一个Call,这里就是OEP了,在这里直接dump的话会失败,那是因为MoleBox壳对IAT进行二次跳转,我们先在OEP位置设置软件断点;
3.手动修复IAT
我们数据窗口跟随到这个加载系统函数的地址就是IAT;
我们看到有部分IAT被隐藏到了其它位置,我们使用硬件写入断点,从新运行此程序,找到写入位置;
我们通过硬件写入断点找到IAT被写入的位置,我们从这单步向下,找到使IAT变化的语句,在语句上下硬件执行断点,删除硬件写入断点(因为我们必须要找到第一次加密IAT表的位置,所以要下硬件执行断点),从新运行程序;
我们NOP掉这条指令,删除硬件执行断点,然后恢复OEP上的软件断点,运行;
这次IAT表就能够被完整加载,我们这时在dump下再修复IAT表就能正常运行;
在脱壳时,我们要去掉重建输入表;
成功运行;
4.总结
在进行MoleBox脱壳时,OEP都是能够正常找到,重点在MoleBox壳对IAT表做了跳转,将IAT的函数指向其它地址,再通过其它地址指向函数,所以,我们通过系统函数找到IAT表的位置,通过硬件写入断点追踪到写入跳转的位置,将跳转代码nop掉,就能完整加载IAT表了(注:我们要找到第一个写入跳转的时候,所以,还有在代码上下硬件执行断点);
原文地址:https://www.cnblogs.com/HOPEAMOR/p/11981180.html
时间: 2024-11-05 12:35:39