【文章作者】: redrose
【软件名称】: 未知
【软件大小】: 未知
【下载地址】: 自己搜索下载
【加壳方式】: Themida|WinLicense V1.9.2.0   -> Oreans Technologies *
【编写语言】: Microsoft Visual C++ 7.0
【使用工具】: The0DBG_Themida/WinLicense V1.9.3.0,LordPE
SuperImportREC,peid0.94
【操作平台】: WinXP_SP2
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!感谢fly兄的工具及fxyang兄的脚本!!!
-------------------------------------------------------------------------
【详细过程】
   第一步:查壳后可知所加壳为Themida|WinLicense V1.9.2.0   -> Oreans Technologies * 。
   第二步:The0DBG+HideToolz设置及隐藏。
   第三步:加载被调试程序停在程序入口(如图):

接着运行fxyang兄的TMDScript-1.9.1+_0.3脚本,脚本结束前注意几个提示,第二个IAT基地址在:6C9000,修复中用到这个地址,脚本结束后到这里(如图):


0061D970      68 48796100    push 617948            ; 伪OEP,① call 0061D970

注意堆栈

0013FF88       0087E7C0     Sungame.0087E7C0
0013FF8C       006EDAA8     Sungame.006EDAA8 ; ② push 006EDAA8
0013FF90       00000060                                         ; ③ push 60  

在0061D9AA这里直接F4,F8到VM中,如图:

ALt+M在代码段00401000 F2下断后shift+F9后到这里如图:
Themida/WinLicense V1.9.2.0

00617A64        C3                    retn                  在这里直接F4,F8到VM中如图:
Themida/WinLicense V1.9.2.0

接着ALt+M在代码段00401000 F2下断后shift+F9后到这里如图:
Themida/WinLicense V1.9.2.0

注意看寄存器这里edx的值为006C9088,就是GetVersionExA所在的地址了,
到寄存器窗口中在006C9088这里跟随到数据窗口,可知
       006C9088   7C812ADE   kernel32.GetVersionExA
       006C908C   7C809BF8   kernel32.MultiByteToWideChar
       006C9090   7C80A0D4   kernel32.WideCharToMultiByte
       006C9094   7C812A09   kernel32.RaiseException
       …………………………………………………………
  往上看后往下看可以得知IAT开始及结束地址:

006C8FF8   00000000
006C8FFC   00000000
006C9000   77DC1558   ADVAPI32.CryptEncrypt
006C9004   77DA7883   ADVAPI32.RegQueryValueExA
006C9008   77DCC41B   ADVAPI32.RegOpenKeyA

…………
006C948C   0298FFE0   wzSound.wzsnd_getState_voice
006C9490   0298F870   wzSound.wzsnd_update_3d_source
006C9494   0298F9A0   wzSound.wzsnd_stop
006C9498   00000000
006C949C   00000000
006C94A0   00000000

  第四步:找回Stolen Code,Ctrl+B在数据窗口整个块中搜索33 C0 39 B1 E8 00 00 00 0F 95 C0 89 45 E4 6A 01 来到反汇窗口往上仔细看看和没加壳的程序对比一下,确定006196E3就是真正的OEP,如果看不出来请仔细看没加壳的VC++7.0的OEP入口代码,经对比分析地址006196E3开始就是真正的OEP,如图:
Themida/WinLicense V1.9.2.0
  
接着根据以 ⑺为基点有以下关系:OEP位置=③,⑴=②,⑵=①,⑶=④,⑷=⑺-04,⑸=⑺+08,⑹=⑺+0C,那么其他的都没变,对VC++ 7.0而言,以上关系是永远存在的。还原Stolen Code代码后,如图:
Themida/WinLicense V1.9.2.0
  
   第五步:脱壳和修复。
        在006196E3,也就是OEP的地方,设置为新EIP后,用LordPE工具Dump得到1.exe,打开SuperImportREC,填入以下
                   OEP=006196E3-00400000=002196E3
                   RAV=006C8FFC-00400000=002C8FFC
                   size=006C9498-006C8FFC=000004A0                
            接着获取输入表,没有无效函数,修复1.exe完成得到1_.exe,运行程序一切正常。
注意:在脱壳过程中如果不明白的地方可参考Themida/WinLicense V1.8.2.0 +的脱文。
  
                                                                                                       2007年10月21日