论坛风格切换切换到宽版
  • 5182阅读
  • 0回复

asprotect手动脱壳篇之一(转载) [复制链接]

上一主题 下一主题
离线小楼
 
发帖
*
金钱
*
威望
*
只看楼主 倒序阅读 0 发表于: 2001-07-08
从看雪论坛转载此文
【标题:用Import REConstructor v1.2 beta2修复输入表     --- 之HiClock Pro v2.2 及S-Spline 2.04】
作者:BestFont
--------------------------------------------------------------------------------
【下载处】
1)Import REConstructor v1.2 beta2
http://www.digitalrice.com/kaparo/files/utilities/imprec.zip (取自protoools)
以下两个程序皆用Asprotect1.2以后的版本加壳
2)HiClock Pro version 2.2 build 126 - released on April 9, 2001
http://www.downme.com/download/6815hiclockpro.zip
http://www.kgsoft.com/ (官方网址)
3)S-Spline 2.04
http://202.108.252.24/stcsr/rj/txtx/S-Spline%202.04.zip   (康乐园)
http://www.shortcut.nl/S-Spline/Shortcut_S-SplineDemo.zip (官方下载)
--------------------------------------------------------------------------------
【前言】
    本文只简述输入表的修复,没涉及软件的破解。
    主角是ImpREC1.2 beta2, 目标软件是 HiClockPro v2.2 及 S-Spline2.04 。
    其中, HiClockPro 2.2 可一次性修复完成,S-Spline 2.04 还需要手工修复/填补。
    本文在win98se下完成,当然也适合在windows2k下做参考
【工具】 1) ImpREC1.2beta2(必须是beta2 或其最新版本)
    2) SoftIce4.05build334 , icedump6.022   (《=必备!)
    3) PE-Editor1.7
    4) BW2000 v0.2 (for win9x only)
    工具简述:ImpREC的说明文件指出,使用ImpREC时系统中最好已加载icedump。
        这样建立的输入表比较少跨平台的问题。而运行icedump前,当然得先加
        载Softice。
          Softice + icedump:使用Icedump 的/tracex 命令可以找到可能
        是OEiP 的地址。
          PE-Editor 的dumpfixer可以使dump 出来的文件的 RS=VS, RO=VO
          BW2000 v0.2 是为了查找被加壳的程序的OEiP(ImpREC中需要此值)
        若已经知道软件的OEiP,可省略。
--------------------------------------------------------------------------------
【准备工作】
    加载Softice 及 Icedump 。先追踪目标程序(使用/tracex命令),得到OEiP,
    并/dump出一个脱壳版本。使用 PE-Editor 的dumpfixer修正脱壳后的文件.
==》注意1:HiClockPro 2.2 的必须采取特别步骤脱壳,否则程序无法运行。
      具体请参考以下两篇:
    1) http://001.com.cn/forum/toye/14781.html
      标 题:简述ICEDUMP中/tracex命令在HiClock脱壳中的应用(1千字)
      发信人:henryw
   
    2) http://www.001.com.cn/forum/toye/14335.html
      标 题:不是不愿写,我真的是只知其然而不知其所以然。
          我那样改的原因如内。 (690字)
      发信人:hying
==》注意2: S-Spline 必须是未注册的,否则脱壳后的程序将无法正常运行。
        S-Spline的破解可以参考下面这篇:
        http://001.com.cn/forum/toye/14799.html
        标 题:v2.04的 (9千字)
        发信人:blowfish
  附:这里有一篇ImpRECT 1.2 beta1 (不是beta2!!) 的使用方法。
    http://001.com.cn/forum/toye/14358.html (本文参考这篇)
    标 题:这样试试...... (1011字)
    发信人:ljtt

【修复HiClockPro 2.2】
---------------------
0.运行HiClockPro 2.2 及 ImpRECT
1.在ImpRECT下拉列表框中选择HiClock.exe进程;
2.在左下角的OEP添入BF260 (即这个程序的OEP)
3.按IAT AutoSearch,让其自动检测IAT位置;
  出现对话框Found Something!=》
  “Found address which may be in the Original IAT.Try 'GetImport'”
  这表示我们输入的OEP发挥作用了。
4.按Get Import,让其分析IAT结构得到基本信息;
5.按Show Invalids 按钮。
    在Imported Function Found栏中点击鼠标右键,选择"Trace Level1(Disasm)"
  再按Show Invalids 按钮。如果成功,可以看到所有的dll都为valid:YES字样;
6. (很明显第5步时,这个程序的输入表已经完全修复好了)
7.现在我们要修复已脱壳的程序HiClock.exe。选择Add new section (缺省是选上的) 来
  为Dump出来的文件加一个Section(虽然文件比较大,但避免了许多不必要的麻烦)
8.按Fix Dump,并选择你Dump出来的文件;
9.ImpRECT 会在该文件所在目录生成一个新的文件:HiClock_.exe ,这就是修复后的文件。
TIPS1: 在Imported Function Found栏中点击鼠标右键,可以选择"Expand all nodes" 及
    "Collapse all nodes" 来打开/关闭所有节点。
TIPS2: 若因操作上的错误需要重新按GetImport钮, 最好先按程序右边的ClearImports 及
    Clear Logs 按钮。否则,Imported Functions Found栏可能会出现奇怪的现象。
修复前
- ?Fthunk:000C317C NbFunc:2E (decimal:46) valid:NO
  -rva:00000000 ptr:00505A4D
  -rva:00000004 ptr:00000002
  -rva:00000008 ptr:000F0004
  -.....
修复后
- KERNEL32.dll FThunk:000C317C NbFunc:2E (decimal:46) valid:YES <===[看这个YES]
  -rva:000C317C mod:KERNEL32.dll ord:015D name:GetCurrentThreadId
  -rva:000C3180 mod:KERNEL32.dll ord:00D6 name:DeleteCriticalSection
  -rva:000c3184 mod:KERNEL32.dll ord:0228 name:LeaveCriticalSection
  -.....

【修复S-Spline 2.04】
---------------------
0.运行S-Spline 及 ImpRECT
1.在ImpRECT下拉列表框中选择S-Spline.exe进程;
2.在左下角的OEP添入7E910
3.按IAT AutoSearch,让其自动检测IAT位置;
  出现对话框Found Something!=》
  “Found address which may be in the Original IAT.Try 'GetImport'”
  这表示我们输入的OEP发挥作用了。
4.按Get Import,让其分析IAT结构得到基本信息;
4.1.发现只有一个dll的 valid 为NO
5.按Show Invalids 按钮。
  在Imported Function Found栏中点击鼠标右键,选择"Trace Level1 (Disasm)"
再按Show Invalids 按钮。如果成功,可以看到所有的dll都为valid:YES字样;
5.1.看到长长的一堆函数名,我们知道至少有一个dll未修复。故使用
鼠标右键”Collapse all nodes",发现只剩下一个dll未完成。
从Log栏中可以看到有一个地址修复失败。
6.按Show Invalids 按钮
在Imported Function Found栏中点击鼠标右键选择"Trace Level2 (Hook)"。
再按Show Invalids 按钮。如果成功,可以看到所有的dll都为valid:YES字样;
若还不成功,目前只能手工修复了(Trace Level3 这个功能还没开发完成)。
6.1.从Log栏可以看到”Tracer failed in 008927E4 “修复失败。
  我们找到那个修复失败的是 rva:0009C2AC
(到此,这个程序的输入表还没修复完成,我们必须手工修复这两个地址)
6.2.在Imported Function Found栏,找 rva:0009C2AC ,并用鼠标左键双击它。
    在Module中选 KERNEL32.dll
    在Function中选 ord:032C name:WinExec
    按OK
  (至于这个函数名如何获得?看看下面)
6.3按Show Invalids 按钮, 都为valid:YES字样,输入表到此完成。
7.现在我们要修复已脱壳的程序S-Spline.exe。选择Add new section (缺省是选上的) 来
为Dump出来的文件加一个Section(虽然文件比较大,但避免了许多不必要的麻烦)
8.按Fix Dump,并选择你Dump出来的文件;
9.ImpRECT 会在该文件所在目录生成一个新的文件:S-Spline_.exe ,这就是修复后的文件。

《找rva:0009C2AC 的函数名》
---------------------------
以下方法只是一个参考,它不是万能的。另一方面,以后的Asprotect 的小小改变足
以使它失效,诸位姑且看之。。。

此时Softice已经运行.
1.进入S-Spline 领空(不知道这样说对不对 8-) ) :
    我们只需CTRL+D ,用bpx getwindowtexta 设拦, F5 。
    在S-Spline 的Serial Number 栏中添入任何资料。
    程序就会被拦。此时已进入S-Spline 领空

2.寻找函数名:
    此时下指令 dd 49c2ac (= 9c2ac + ImageBase) , 看见该数据区显示8972B4 。
    再 u 8972B4 , 看见代码区显示 PUSH EDX
                      JMP C0188DC2
    再 u C00188DC2 , 看见代码区显示 MOV EDX,C0197490 (<==注意这里!!!)
                        JMP C0188DD
    再 dd C0197490 , 看见该数据区显示 C0197327 。
    最后 db C0197327 就可以看到我们的函数名了 (注:这里是用db 不是dd)
    bc * 再 F5 回到程序。    
----作者:BestFont ------------【全文完】------------------------------------
--------------------------------------------------------------------------------

《加密及解密技术交流站》由ljtt 制作 版权所有
&copy;2000 -2001 All Rights Reserved

转载本站所有文章请注明出处,尊重作者的劳动也是尊重你自己。让我们一同撑起绿色的天空!