- UID
 - 77505
 
 注册时间2014-9-3
阅读权限10
最后登录1970-1-1
周游历练 
  
 
 
 
TA的每日心情  | 擦汗 2022-12-5 14:15 | 
|---|
 
  签到天数: 34 天 [LV.5]常住居民I  
 | 
 
论坛脱壳这块比较冷清,刚好本人在学这方面的,于是把过程写了下,菜鸟文章,大牛路过。VMP版本很老了,主要为练手。 
 
最近在看天草的VMP和他乡的VMP教程,感觉都是脚本党啊,看了只能明白一些东西,有很多很模糊的概念,他乡这个纯碎是只讲操作不讲原理,坑爹,幸好没买他的教程,不然亏死。 
因为想练习一下脱这壳,于是上菲凡下了这个东西练手: 
EP: 
007C3B5E >  68 394693A7     PUSH    0xA7934639 
 007C3B63    E8 D3541900     CALL    PhotoDat.0095903B 
 007C3B68    68 7C3C930F     PUSH    0xF933C7C 
 007C3B6D    E8 C9541900     CALL    PhotoDat.0095903B 
 007C3B72    82EB 7A         SUB     BL, 0x7A 
 007C3B75    C2 F0A7         RETN    0xA7F0 
 
不确定是哪个版本,先尝试一下: 
virtualProtect 下断点(这个断点教程都有,但为什么用这个却没一个说明。。{:soso_e101:}),具体找这个的理由我分析有2个: 
1.因为原来的代码段是只读,但是由於VMP把代码压缩到另一个位置,要还原这些代码,必须先把代码段变成可读写 
2.我用ollydbg的TC命令,第一个调用API的地方也是VirtualProtect,但也有可能是GetModuleHande 
利用vritualprotect,然后看看保护的地方,当代码段还原为readonly,则是返回时机了,这时对.text下内存访问断点,然后F9几下,直到来到.text段的位置(或者是代码像OEP的地方,代码会很整齐的) 
 
这里找到的OEP的RVA是:0019F46C,看到入口是DELPHI,没被抽取,庆幸。 
于是,到这里看看第一调用CALL,发现第一个API是GetModuleHande,被处理成jmp xxxx,xxxx是VMP段的位置了。 
因为在之前看过kissy的脚本,于是改了下,将入口点和生成API地址的地方记下来,跑脚本修复。 
这个过程中因为有好些地址出现了JMP 到一些并没有意义的指令里,于是,个人调了很多次,将无意义的地方记下来,如果找到这些地方就不执行。 
后面终於修复成功. 
调试了下,发现是网络验证,暂时没能破解,待后面有时间再爆它菊花吧。{:soso_e113:} 
看了后续版本的VMP脱壳教程,感觉难了不少,不过继续努力吧,相信能脱掉它的外衣。 
附上脚本 
 
 
 
 |   
 
 
 
 |