1.查壳
![](https://img2018.cnblogs.com/blog/1886020/201912/1886020-20191204102013514-748603306.png)
2.找到OEP
![](https://img2018.cnblogs.com/blog/1886020/201912/1886020-20191204102013892-54107116.png)
![](https://img2018.cnblogs.com/blog/1886020/201912/1886020-20191204102014127-1842478348.png)
![](https://img2018.cnblogs.com/blog/1886020/201912/1886020-20191204102014347-1767887271.png)
对第二个Call使用ESP定律,再跳转后的位置进入第一个Call,这里就是OEP了,在这里直接dump的话会失败,那是因为MoleBox壳对IAT进行二次跳转,我们先在OEP位置设置软件断点;
3.手动修复IAT
![](https://img2018.cnblogs.com/blog/1886020/201912/1886020-20191204102014593-1918314070.png)
我们数据窗口跟随到这个加载系统函数的地址就是IAT;
![](https://img2018.cnblogs.com/blog/1886020/201912/1886020-20191204102014876-853049208.png)
我们看到有部分IAT被隐藏到了其它位置,我们使用硬件写入断点,从新运行此程序,找到写入位置;
![](https://img2018.cnblogs.com/blog/1886020/201912/1886020-20191204102015154-1548769536.png)
![](https://img2018.cnblogs.com/blog/1886020/201912/1886020-20191204102015463-177771216.png)
我们通过硬件写入断点找到IAT被写入的位置,我们从这单步向下,找到使IAT变化的语句,在语句上下硬件执行断点,删除硬件写入断点(因为我们必须要找到第一次加密IAT表的位置,所以要下硬件执行断点),从新运行程序;
![](https://img2018.cnblogs.com/blog/1886020/201912/1886020-20191204102015738-1052997395.png)
我们NOP掉这条指令,删除硬件执行断点,然后恢复OEP上的软件断点,运行;
![](https://img2018.cnblogs.com/blog/1886020/201912/1886020-20191204102015991-647377261.png)
这次IAT表就能够被完整加载,我们这时在dump下再修复IAT表就能正常运行;
![](https://img2018.cnblogs.com/blog/1886020/201912/1886020-20191204102016224-390343842.png)
在脱壳时,我们要去掉重建输入表;
![](https://img2018.cnblogs.com/blog/1886020/201912/1886020-20191204102016434-670535287.png)
![](https://img2018.cnblogs.com/blog/1886020/201912/1886020-20191204102016711-1379363053.png)
成功运行;
4.总结
在进行MoleBox脱壳时,OEP都是能够正常找到,重点在MoleBox壳对IAT表做了跳转,将IAT的函数指向其它地址,再通过其它地址指向函数,所以,我们通过系统函数找到IAT表的位置,通过硬件写入断点追踪到写入跳转的位置,将跳转代码nop掉,就能完整加载IAT表了(注:我们要找到第一个写入跳转的时候,所以,还有在代码上下硬件执行断点);