【文章标题】: Themida脱壳(VC++ 7.0之Stolen Code还原的一种思路)
【文章作者】: wynney
【软件名称】: 奇迹世界
【下载地址】: 下面FTP打包下载
【编写语言】: Microsoft Visual C++ 7.0
【作者声明】: 一个朋友让帮弄的,看了下,借用okdodo的脚本到达伪OEP,被抽取了近60字节
--------------------------------------------------------------------------------
【详细过程】
一、前言
很多加壳软件对OEP的VM大多数对VC++的VM一般都很多,而且基本上是最多的,其他语言就稍少些了,VB就更少了=没有,呵呵
二、达到伪OEP[用脚本]
如果大家想研究如何修复IAT,到达伪OEP的话,可以研究下okdodo的脚本,大大减少体力劳动,感谢ing
0013FF8C 009433DC
0013FF90 0069A378 ②,push 0069A378
0013FF94 00000060 ③,push 60
在Code段F2,Shift+F9
在Code段F2,Shift+F9
EDX里面的值得就是GetVersionExA所在的地址了
从上面的kernel32.GetVersionExA可以看得出来,这个应该是VC++ 7.0编译的
找来一个VC++ 7.0的例子,或者就用程序目录下没有加壳的SUN.exe[也是VC++ 7.0编译的]以做下用:)
三、找回Stolen Code
Alt+M,Ctrl+B搜索这么一段代码,VC++ 7.0都有的,而且一般VM不到这里:)
找到了0060CC7C,Ctrl+G:0060CC7C,看看被VM了不少字节,可以确认0060CBC3就是OEP了
我们需要找的上面被Stolen Code的代码了
根据自己找来的VC++ 7.0程序对比下
看得出来,我们需要找的4点中⑷、⑸两点是最麻烦的,但是,大家看看⑷、⑸、⑹、⑺有啥关系?
以 ⑺为基点有以下关系
◆=③
⑴=②,⑵=①,⑶=④
⑷=⑺-04,⑸=⑺+08,⑹=⑺+0C
那么其他的都一样的啦
对VC++ 7.0而言,以上关系是永远存在的
OK了,Stolen Code还原了,可以运行了
Dump,Fix IAT,拿Resource Binder稍微优化下巴
目标程序打包下载,FTP:/upload/09.04.07.Themida.UnPacking.SunGame.By.wynney/
--------------------------------------------------------------------------------
【经验总结】
1、对各种编译语言的OEP熟悉一些的话,对修复Stolen Code大有帮助
2、各种语言的OEP都有某些固定结构的,多观察下有好处:)
3、在恢复Stolen Code的时候要学会看寄存器和堆栈
--------------------------------------------------------------------------------
【版权声明】: 本文原创于看雪技术论坛, 转载请注明作者并保持文章的完整, 谢谢!
2007年04月09日