• 标 题:ASProtect 1.23RC4 以壳解壳+暗桩修复+解除自校验+破解——ArtCursors V3.99B3
  • 作 者:fly
  • 时 间:004-06-16,01:06
  • 链 接:http://bbs.pediy.com

ASProtect 1.23RC4 以壳解壳+暗桩修复+解除自校验+破解——ArtCursors V3.99B3
        
       
        
下载页面:  http://www.onlinedown.net/soft/27328.htm
软件大小:  993KB
软件语言:  英文
软件类别:  国外软件/共享版/图标工具
运行环境:  Win9x/Me/NT/2000/XP
加入时间:  2004-6-10 20:18:29
下载次数:  707
软件评级:  ****
软件介绍:  Aha-soft继ArtIcons后,又一套极佳的鼠标光标编辑工具,支持标准的16x16、32x32..及自订尺寸图示,除可观看、绘制、抓取、收集、和管理等功能外,亦有渐层着色功能及齐全的编辑工具。支持格式包括:ico、ani、cur、wmf、emf、bmp、jpg、jpeg、gif、png,它并从图像ICO、JPG等文件中导入。
       
【作者声明】:只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
       
【调试环境】:WinXP、Ollydbg、PEiD、LordPE、ImportREC
       
————————————————————————————————— 
【脱壳过程】:
                 
                
       
有兄弟让看看这个东东,抽空看了一下,发现和以前版本的没有太多区别。
还看了一下其同门软件ArtIcons Pro V4.06b,脱壳方法和这个一样。
————————————————————————————————— 
一、以壳解壳:Stolen Code + OEP
       
       
设置Ollydbg忽略除了“内存访问异常”之外的所有其它异常选项。老规矩:用IsDebug 1.4插件去掉Ollydbg的调试器标志。
       

代码:
00401000     68 01C05900         push ARTCUR.0059C001//进入OD后停在这 00401005     E8 01000000         call ARTCUR.0040100B 0040100A     C3                  retn

       
Shift+F9 运行,来到ASProtect壳最后一次典型异常处。
       
代码:
00B539EC     3100                xor dword ptr ds:[eax],eax//最后1次异常 00B539EE     64:8F05 00000000    pop dword ptr fs:[0] 00B539F5     58                  pop eax 00B539F6     833D B07EB500 00    cmp dword ptr ds:[B57EB0],0 00B539FD     74 14               je short 00B53A13 00B539FF     6A 0C               push 0C 00B53A01     B9 B07EB500         mov ecx,0B57EB0 00B53A06     8D45 F8             lea eax,dword ptr ss:[ebp-8] 00B53A09     BA 04000000         mov edx,4 00B53A0E     E8 2DD1FFFF         call 00B50B40 00B53A13     FF75 FC             push dword ptr ss:[ebp-4] 00B53A16     FF75 F8             push dword ptr ss:[ebp-8] 00B53A19     8B45 F4             mov eax,dword ptr ss:[ebp-C] 00B53A1C     8338 00             cmp dword ptr ds:[eax],0 00B53A1F     74 02               je short 00B53A23 00B53A21     FF30                push dword ptr ds:[eax] 00B53A23     FF75 F0             push dword ptr ss:[ebp-10] 00B53A26     FF75 EC             push dword ptr ss:[ebp-14] 00B53A29     C3                  retn//此处下断,Shift+F9,断在这!

       
此时ESP=0012FF5C,看看堆栈:
代码:
0012FF5C    00B67190 0012FF60    00400000  ASCII "MZP" 0012FF64    32C336F0 0012FF68    0012FFA4 //注意这里 ★

       
下命令:HR 0012FF68  F9运行,中断
       
代码:
00B672D3     03C3                add eax,ebx 00B672D5     BB AC060000         mov ebx,6AC//注意这个值 ★ 这里就可以按“以壳解壳”的方法来脱壳了 00B672DA     0BDB                or ebx,ebx 00B672DC     75 07               jnz short 00B672E5

       
代码:
00B672E5     E8 00000000         call 00B672EA 00B672EA     5D                  pop ebp 00B672EB     81ED 4DE14B00       sub ebp,4BE14D 00B672F1     8D85 F2E04B00       lea eax,dword ptr ss:[ebp+4BE0F2] 00B672F7     8D8D 94E14B00       lea ecx,dword ptr ss:[ebp+4BE194] 00B672FD     03CB                add ecx,ebx 00B672FF     8941 01             mov dword ptr ds:[ecx+1],eax 00B67302     8D85 36E14B00       lea eax,dword ptr ss:[ebp+4BE136] 00B67308     8D8D FAE04B00       lea ecx,dword ptr ss:[ebp+4BE0FA] 00B6730E     8901                mov dword ptr ds:[ecx],eax 00B67310     B8 5E140000         mov eax,145E 00B67315     8D8D FFE04B00       lea ecx,dword ptr ss:[ebp+4BE0FF] 00B6731B     8901                mov dword ptr ds:[ecx],eax 00B6731D     8D8D 94E14B00       lea ecx,dword ptr ss:[ebp+4BE194] 00B67323     8D85 94F34B00       lea eax,dword ptr ss:[ebp+4BF394] 00B67329     51                  push ecx 00B6732A     50                  push eax 00B6732B     E8 76FFFFFF         call 00B672A6 00B67330     61                  popad 00B67331     F3:                 prefix rep: 00B67332     EB 02               jmp short 00B67336

       
程序代码已经解开,可以用LordPE纠正ImageSize后完全DUMP这个进程了!
接着 区域脱壳:00B60000,大小=0000C000,也就是脱出上面的部分壳处理代码段。
       
       
顺手看看Stolen Code的处理:
       
代码:
00B67362     FF53 0E             call dword ptr ds:[ebx+E]//这个CALL里面处理 Stolen Code  ★         00B67399     896C24 04           mov dword ptr ss:[esp+4],ebp 00B673A1     8D6424 04           lea esp,dword ptr ss:[esp+4]//push ebp ★ 00B673A5     8BEC                mov ebp,esp ★ 00B673A7     81EC 0C000000       sub esp,0C//ADD ESP,-0C  ★         00B674DE     8BC3                mov eax,ebx  ; ARTCUR.00544CC3 00B674E3     83C0 51             add eax,51//mov eax,00544D14 ★

       
Ctrl+F9 几次,返回005451BC
       
代码:
005451AC     55                  push ebp 005451AD     8BEC                mov ebp,esp 005451AF     83C4 F4             add esp,-0C 005451B2     B8 144D5400         mov eax,00544D14//Stolen Code 005451B7     E8 7018ECFF         call ARTCUR.00406A2C 005451BC     FF15 14BC5400       call dword ptr ds:[54BC14]; ARTCUR.00544BC0 005451C2     E8 4DEAEBFF         call ARTCUR.00403C14

       
这个Delphi程序的Stolen Code不多,但是为何还要使用“以壳解壳”的方法?
因为这个东东的入壳暗桩不少,使用“以壳解壳”的方法可以使修复工作变得简单点啦。
       
现在我们来“组装”一下dumped.exe。呵呵,用LordPE打开dumped.exe,从磁盘载入刚才区域脱壳的Region00B60000-00B6C000.dmp区段,修改其Voffset=00760000,只保留LordPE的“验证PE”选项,重建PE。Dump完成!
       
       
————————————————————————————————— 
二、用AsprDbgr搞定输入表
       
       
AsprDbgr可谓是ASProtect 1.23壳输入表杀手!难怪ASProtect要不断的升级呀。
       
代码:
AsprDbgr v1.0beta (:P) Made by me... Manko.           iEP=401000 (E:\试炼场\脱壳学习\ASProtect\ArtCursors 4.02 Beta\ARTCUR.EXE           GST returns to: B42667     Trick aspr GST... (EAX=12121212h)   GV returns to: B51A61     IAT Start: 54E1A4           End: 54E994        Length: 7F0       IATentry 54E1F8 = B517A4 resolved as GetProcAddress       IATentry 54E1FC = B51C64 resolved as GetModuleHandleA       IATentry 54E210 = B51CD8 resolved as GetCommandLineA       IATentry 54E2B0 = B51C64 resolved as GetModuleHandleA       IATentry 54E340 = B51CC8 resolved as LockResource       IATentry 54E38C = B51C8C resolved as GetVersion       IATentry 54E3A8 = B517A4 resolved as GetProcAddress       IATentry 54E3B0 = B51C64 resolved as GetModuleHandleA       IATentry 54E3E4 = B51CC0 resolved as GetCurrentProcessId       IATentry 54E3F0 = B51CF0 resolved as FreeResource     SymbolInitialize seems to have frozen.     Any invalid IAT entries was NOT erased...   Dip-Table at adress: B57AB4     0 4FEE78 0 0 4FEECC 0 0 544BC0 544CBC 544CDC 0 4FEEF4 4FEEE4 0   Last SEH passed. Searching for signatures. Singlestepping to OEP!     Call + OEP-jump-setup at: B68015 ( Code: E8000000 5D81ED )     Mutated, stolen bytes at: B68060 ( Code: 61F3EB02 CD20EB01 )     Erase of stolen bytes at: B67FC4 ( Code: 9CFCBF03 80B600B9 )       Repz ... found. Skipping erase of stolen bytes. ;)   Dip from pre-OEP: 40692C (Reached from: B67FD5)   Sugested tempOEP at: 5451B7

       
       
运行ImportREC,选择这个进程。填入:RVA=0014E1A4,Size=000007F0,点“Get Import”,剪切掉几个无效的指针,把OEP改为00760000,FixDump!
       
       
————————————————————————————————— 
三、暗桩消除
       
       
载入dumped_.exe,修改其入口代码为:
代码:
00B60000     BB AC060000         mov ebx,6AC 00B60005     E9 DB720000         jmp UnPacked.00B672E5//跳至“以壳解壳”代码段

       
F9运行,中断在内存异常处:
代码:
00B6896B     00A4E1 14006B65     add byte ptr ds:[ecx+656B0014],ah//异常

       
看看堆栈提示:
代码:
0012FDFC    00539780  返回到 dumped_.00539780

       
当然:Ctrl+G:00539780
       
代码:
00539776     8B35 24C25400       mov esi,dword ptr ds:[54C224]; dumped_.0054B4C4 0053977C     8B36                mov esi,dword ptr ds:[esi] 0053977E     FFD6                call esi//入壳 ★ 00539780     E9 17000000         jmp dumped_.0053979C

       
下面也是一样:
代码:
0053979C     8B35 A8C15400       mov esi,dword ptr ds:[54C1A8]; dumped_.0054B4C8 005397A2     8B36                mov esi,dword ptr ds:[esi] 005397A4     FFD6                call esi//入壳 ★

       
0054B4C4和0054B4C8处的地址入壳了,随便从程序中个ret的地址替换这2处就行了。
其实在看到硬盘指纹的时候,这2个地址没有被壳替换,是4FEF04,索性直接原样修改,保存之。
       
代码:
0054B4C4  A4 1B B5 00 D8 1B B5 00 1E 00 00 00 1E 00 00 00  ................ 0054B4C4  04 EF 4F 00 04 EF 4F 00 1E 00 00 00 1E 00 00 00  ..O...O.........

       
       
00539776和0053979C之间的代码需要key才能正确解压,没有key就没办法啦。
       
        
————————————————————————————————— 
四、自校验解除
       
       
自校验失败的话就会爆发“窗口炸弹”了。草原猎豹 兄弟尝过“窗口炸弹”的滋味,呵呵。
下断:BP FileTimeToLocalFileTime 跟踪一段就会发现目标了。
       
代码:
00461A79     E8 2274FAFF         call dumped_.00408EA0//取得校验参数 00461A7E     85C0                test eax,eax 00461A80     75 08               jnz short dumped_.00461A8A 00461A82     8B9D ACFEFFFF       mov ebx,dword ptr ss:[ebp-154]//脱壳前[ebp-154]=0009D400 00461A88     EB 03               jmp short dumped_.00461A8D

       
索性把00461A82处修改为固定值吧,这样省点事啦。
代码:
00461A82     BB 00D40900         mov ebx,9D400//脱壳前的值 00461A87     90                  nop//补个NOP 00461A88     EB 03               jmp short dumped_.00461A8D

       
也可以修改下面3个校验的地方:
       
代码:
004FEFBE     3D A0BB0D00         cmp eax,0DBBA0//校验 ① ★ 004FEFC3     0F9CC3              setl bl//改为:mov bl,01         004FF014     8BD8                mov ebx,eax 004FF016     81FB 40420F00       cmp ebx,0F4240//校验 ② ★ 004FF01C     7E 34               jle short dumped_.004FF052//改为:jmp 004FF052         004FEF3B     3D 804F1200         cmp eax,124F80//校验 ③ ★ 004FEF40     7E 30               jle short dumped_.004FEF72//改为:jmp 004FEF72

       
OK,炸弹被拆除引线了,不会疯狂开窗口耗尽系统资源了。
没有key只能这样了,脱壳基本完成!
       
       
————————————————————————————————— 
五、破解:去除NAG
       
       
现在时间限制没有了,但启动和退出时的NAG比较烦人。
感谢[FCG]的DarkNess0ut老大帮忙破解!修改以下几个地方:
       
1、
代码:
00539754     837D F0 00          cmp dword ptr ss:[ebp-10],0 00539758     75 05               jnz short UnPacked.0053975F//改为:JMP 0053975A     E8 29BCFCFF         call UnPacked.00505388 0053975F     A1 14C05400         mov eax,dword ptr ds:[54C014] 00539764     8038 00             cmp byte ptr ds:[eax],0 00539767     74 0D               je short UnPacked.00539776//改为:JMP

       
2、
代码:
00505645     8038 00             cmp byte ptr ds:[eax],0 00505648     74 04               je short UnPacked.0050564E 0050564A     33D2                xor edx,edx 0050564C     EB 02               jmp short UnPacked.00505650 0050564E     B2 01               mov dl,1 改为: 00505645     8038 00             cmp byte ptr ds:[eax],0 00505648     EB 00               jmp short Cr-UnPac.0050564A 0050564A     C640 47 00          mov byte ptr ds:[eax+47],0 0050564E     B2 00               mov dl,0

       
3、
代码:
0053A04B     8A12                mov dl,byte ptr ds:[edx] 0053A04D     80F2 01             xor dl,1 改为: 0053A04B     C602 01             mov byte ptr ds:[edx],1 0053A04E     B2 00               mov dl,0

       
4、
代码:
0053A061     807F 47 00          cmp byte ptr ds:[edi+47],0 0053A065     0F84 AA000000       je UnPacked.0053A115//改为:JMP

       
5、
代码:
0053C8C6     837D FC 00          cmp dword ptr ss:[ebp-4],0 0053C8CA     75 19               jnz short UnPacked.0053C8E5//改为:JMP

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

    

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

                2004-06-15  17:00