【文章作者】: 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日