• 标 题:EXEStealth2.73+ASPack 脱壳And破解——棋隐开局精灵 V1.03
  • 作 者:fly
  • 时 间:2004-1-25 周日, 下午6:42
  • 链 接:http://bbs.pediy.com

下载页面:  http://www.skycn.com/soft/14632.html
软件大小:  366 KB
软件语言:  简体中文
软件类别:  国产软件 / 共享版 / 棋牌游戏
应用平台:  Win9x/NT/2000/XP
加入时间:  2003-12-02 15:14:40
下载次数:  1677
推荐等级:  ***

【软件简介】:本软件是高速制作棋隐开局库的最强工具之一,有助于象棋爱好者创建适合自己的棋隐开局库。[功能:]1.支持棋隐中国格式、ICCS格式以及棋隐内部格式;2.自动根据棋局的胜、负、和结果学习,无须手工分类;3.自动学习对称棋谱,抵抗对方反手策略;4.可保存开局库制作进度,随时中断,或恢复开局库的制作进程;5.支持用户指定未知棋局的学习方式;6.可以学习到指定的任意回合数;7.速度高,非对称学习每小时可达3000局以上;8.完全后台执行,让你在工作和游戏同时制作棋隐开局库;9.良好的用户界面,用户可以任意查看、添加、删除文件到正在学习列表。

【保护方式】:EXEStealth+ASPack 加壳、功能限制

【作者声明】:只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!

【调试环境】:WinXP、Ollydbg1.09、PEiD、LordPE、ImportREC

————————————————————————————————— 
【过    程】:
          
         
         
一、脱壳
 
 
老规矩:用IsDebug 1.4插件去掉Ollydbg的调试器标志。忽略所有的异常选项。
PEiD报是 EXEStealth 壳,所以直接下断:BP CloseHandle
   

00528060     EB 00                    jmp short XqlBuild.00528062//进入OD后停在这!
00528062     EB 2F                    jmp short XqlBuild.00528093

77E57963     64:A1 18000000           mov eax,dword ptr fs:[18]//断在这,取消断点。 Ctrl+F9执行到返回 
77E57969     8B48 30                  mov ecx,dword ptr ds:[eax+30]
77E5796C     8B4424 04                mov eax,dword ptr ss:[esp+4]
77E57970     83F8 F4                  cmp eax,-0C
77E57973     0F84 4CB4FFFF            je kernel32.77E52DC5
77E57979     83F8 F5                  cmp eax,-0B
77E5797C     0F84 38B4FFFF            je kernel32.77E52DBA
77E57982     83F8 F6                  cmp eax,-0A
77E57985     0F84 0F500200            je kernel32.77E7C99A
77E5798B     8BC8                     mov ecx,eax
77E5798D     81E1 03000010            and ecx,10000003
77E57993     83F9 03                  cmp ecx,3
77E57996     50                       push eax
77E57997     0F84 26870000            je kernel32.77E600C3
77E5799D     FF15 3C10E477            call dword ptr ds:[<&ntdll.NtClose>]; ntdll.ZwClose
77E579A3     85C0                     test eax,eax
77E579A5     0F8C 02B4FFFF            jl kernel32.77E52DAD
77E579AB     33C0                     xor eax,eax
77E579AD     40                       inc eax
77E579AE     C2 0400                  retn 4 //返回到 005283B0

005283B0     58                       pop eax
005283B1     8B85 B62F4000            mov eax,dword ptr ss:[ebp+402FB6]
005283B7     BB 01000000              mov ebx,1
005283BC     E8 08000000              call XqlBuild.005283C9
005283C1     8D85 F52B4000            lea eax,dword ptr ss:[ebp+402BF5]
005283C7     50                       push eax
005283C8     C3                       retn  //返回到 0052849F

0052849F     8B9D B62F4000            mov ebx,dword ptr ss:[ebp+402FB6]  ; XqlBuild.00400000
005284A5     039D BA2F4000            add ebx,dword ptr ss:[ebp+402FBA]
                                      //EBX=00400000 + 00125001=00525001 
005284AB     C1CB 07                  ror ebx,7//这段代码可以看做是EXEStealth壳的典型代码 icon_smile.gif
005284AE     895C24 10                mov dword ptr ss:[esp+10],ebx
005284B2     8D9D EB2E4000            lea ebx,dword ptr ss:[ebp+402EEB]
005284B8     895C24 1C                mov dword ptr ss:[esp+1C],ebx
005284BC     8BBD B62F4000            mov edi,dword ptr ss:[ebp+402FB6]
005284C2     037F 3C                  add edi,dword ptr ds:[edi+3C]
005284C5     8B9F C0000000            mov ebx,dword ptr ds:[edi+C0]
005284CB     83FB 00                  cmp ebx,0
005284CE     74 0F                    je short XqlBuild.005284DF


OK,在00525001内存处下 内存访问断点,F9运行,断在第2层壳的入口处!

00525001     60                       pushad
00525002     E8 03000000              call 0052500A

0052500A     5D                       pop ebp 
0052500B     45                       inc ebp
0052500C     55                       push ebp
0052500D     C3                       retn


可以看出里面还有1层壳,是:ASPack  所以直接下断:BP GetProcAddress

77E5A5FD     55                       push ebp//中断3次,取消断点。 Ctrl+F9执行到返回 
77E5A5FE     8BEC                     mov ebp,esp
77E5A600     51                       push ecx
77E5A601     51                       push ecx
77E5A602     53                       push ebx
77E5A603     57                       push edi
77E5A604     8B7D 0C                  mov edi,dword ptr ss:[ebp+C]
77E5A607     BB FFFF0000              mov ebx,0FFFF
77E5A60C     3BFB                     cmp edi,ebx
77E5A60E     0F86 6B83FFFF            jbe kernel32.77E5297F

77E5A65A     C2 0800                  retn 8 //返回到 00525302

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
在GetProcAddress处中断3次时的堆栈:

0012FF94       00525302  /CALL 到 GetProcAddress 来自 005252FC
0012FF98       77E40000  |hModule = 77E40000 (kernel32)
0012FF9C       004DF910  ProcNameOrOrdinal = "DeleteCriticalSection"
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆


005252FC     FF95 490F0000            call dword ptr ss:[ebp+F49]//GetProcAddress
00525302     85C0                     test eax,eax //返回到这里

下面不远处就是ASPack的典型入口代码:

005253AF     61                       popad //直接F4到这里
005253B0     75 08                    jnz short 005253BA
005253B2     B8 01000000              mov eax,1
005253B7     C2 0C00                  retn 0C
005253BA     68 D0924D00              push 4D92D0
005253BF     C3                       retn //飞向光明之巅!icon_smile.gif 返回OEP=004D92D0
  
  
———————————————————————

004D92D0     55                       push ebp//在这儿用LordPE纠正ImageSize后完全DUMP这个进程
004D92D1     8BEC                     mov ebp,esp
004D92D3     83C4 F0                  add esp,-10
004D92D6     B8 08904D00              mov eax,4D9008
004D92DB     E8 00D0F2FF              call 004062E0
004D92E0     A1 70C54D00              mov eax,dword ptr ds:[4DC570]
004D92E5     8B00                     mov eax,dword ptr ds:[eax]
004D92E7     E8 F841FAFF              call 0047D4E4
 
   
运行ImportREC,选择这个进程。把OEP改为000D92D0,点IT AutoSearch,点“Get Import”。FixDump,正常运行!  
   
 
—————————————————————————————————
二、破解
 
 
机器码:101135322
试炼码:13572468
  
N久没玩破解了,脱壳后顺手看看这个东东的破解。Sorry,希望作者加强保护吧。 
————————————————————————
 
程序是重启验证的注册方式,反汇编很容易看见关键字符
 
 
004D7C74     E8 530BF3FF              call dumped_.004087CC
004D7C79     8B55 FC                  mov edx,dword ptr ss:[ebp-4]//EDX=101135322  机器码
004D7C7C     8B83 A0030000            mov eax,dword ptr ds:[ebx+3A0]
004D7C82     E8 3D5EF8FF              call dumped_.0045DAC4
004D7C87     E8 C8FEFFFF              call dumped_.004D7B54//关键CALL!
004D7C8C     84C0                     test al,al
004D7C8E     74 5B                    je short dumped_.004D7CEB//跳则OVER!

————————————————————————
进入关键CALL:004D7C87  call 004D7B54
 
 
004D7B54     55                       push ebp
004D7B55     8BEC                     mov ebp,esp
004D7B57     51                       push ecx
004D7B58     53                       push ebx
004D7B59     E8 6EFEFFFF              call dumped_.004D79CC//读取、还原 保存在注册表中的变形试炼码
004D7B5E     8BD8                     mov ebx,eax//EAX=00CF1974=13572468  试炼码
004D7B60     E8 8FFBFFFF              call dumped_.004D76F4//算法CALL
004D7B65     8945 FC                  mov dword ptr ss:[ebp-4],eax
004D7B68     8D45 FC                  lea eax,dword ptr ss:[ebp-4]
004D7B6B     E8 84FCFFFF              call dumped_.004D77F4//得出注册码 EBX=03B3F04B=62124107
004D7B70     3BC3                     cmp eax,ebx//真假码比较  
004D7B72     75 04                    jnz short dumped_.004D7B78
004D7B74     B0 01                    mov al,1   //置1则OK
004D7B76     EB 02                    jmp short dumped_.004D7B7A
004D7B78     33C0                     xor eax,eax//完美爆破点  ★
004D7B7A     5B                       pop ebx
004D7B7B     59                       pop ecx
004D7B7C     5D                       pop ebp
004D7B7D     C3                       retn
 
程序取C盘分区序列号进行运算,结合查表运算,懒得看这些循环多次的算法了。 icon_smile.gif
 
    
————————————————————————
【完 美  爆 破】:


      4D7B78     33C0                   xor eax,eax
改为:4D7B78     B001                   mov al,1

———————————————————————
【注册信息保存】:
 
 
[HKEY_CURRENT_USER.DEFAULTSoftwareuilder]
"Data"=">11=4288"
 
———————————————————————
【整        理】:

 
机器码:101135322
注册码:62124107

  
—————————————————————————————————
    
                                
         ,     _/ 
        /| _.-~/            _     ,        青春都一饷
       ( /~   /              ~-._ |
       `\  _/                   ~ )          忍把浮名 
   _-~~~-.)  )__/;;,.          _  //'
  /'_,   --~    ~~~-  ,;;___(  (.-~~~-.        换了破解轻狂
 `~ _( ,_..-- (     ,;'' /    ~--   /._` 
  /~~//'   /' `~         ) /--.._, )_  `~
  "  `~"  "      `"      /~'`    `\~~   
                         "     "   "~'  ""

    

     Cracked By 巢水工作坊——fly [OCN][FCG][NUKE][DCM]

                2004-01-25  18:30