OD载入程序:

使用ESP定律,下硬件断点:

手脱MoleBox壳

F9断下后,执行到该call:

手脱MoleBox壳

F7跟进,到达OEP:

手脱MoleBox壳

dump,修复IAT表,删除无效指针,修正转储:

手脱MoleBox壳

完成后发现程序无法运行:

手脱MoleBox壳

【!如何查找错误,如何修复才是此壳重头戏!】

这个壳在解密指针后的某一步又加密了指针,我们需要把它找出来。在importREC中可以查看无效指针:

手脱MoleBox壳

首个无效指针是:RVA:00066178 Ptr:004BF274;

在66178加上基址400000后得466178,等一下要跟踪观察该指针的变化来寻找出错的原因。

 

Ctrl + F2重新载入程序,ctrl+G,搜索该地址466178,下硬件访问断点,注意观察数据窗口的变化,我们要看它是怎么变的!

手脱MoleBox壳

F9几次后发现数据访问断点出现了变化,是一个API的地址:

手脱MoleBox壳

这时候程序停在此处,我们F8单步跟程序,数据窗口中注意该地址的变化:

手脱MoleBox壳

跟到图中语句发现,前面调用API:VirtualProtect修改了页面属性,把eax的值送给了该地址:

手脱MoleBox壳

执行该步后,该地址处的值被加密了:

手脱MoleBox壳

这样我们就找到了地址出错的原因:数据被加密了!也找到了加密数据的语句了!

如何解决呢?

【答:】跳过该句加密语句即可,nop掉!

Ctrl + F2重新载入程序,使用ESP定律,下硬件断点后不忙执行,Ctrl+G,搜索API:VirtualProtect,F2下断(目的是找到加密语句,然后nop),F9,5次后,堆栈窗口如图,从此句看出ALT + F9返回4BAOC6,返回后离我们要nop的加密语句非常近:

手脱MoleBox壳

ALT+F9返回,不远处就是加密代码:

手脱MoleBox壳

执行到该处,nop:

手脱MoleBox壳

至此,我们完成了找到问题并解决问题的过程,ctrl+b,删除之前对VirtualProtect所下的断点:

手脱MoleBox壳

F9运行,停下来后,F7跟进该call:

手脱MoleBox壳

到达OEP:

手脱MoleBox壳

Dump,删除无效指针,修复IAT表:

手脱MoleBox壳

双击正常运行:

手脱MoleBox壳

编写语言:

手脱MoleBox壳

导入导出表正常:

手脱MoleBox壳

成功脱壳!

参考链接:https://www.52pojie.cn/thread-603801-1-1.html

相关文章:

  • 2021-08-21
  • 2021-06-23
  • 2021-05-25
  • 2021-08-12
  • 2021-08-04
  • 2021-08-20
  • 2022-12-23
猜你喜欢
  • 2021-08-10
  • 2021-09-11
  • 2021-05-04
  • 2021-09-02
  • 2021-05-16
  • 2021-10-17
  • 2021-12-14
相关资源
相似解决方案