• 标 题:ASPROtect 1.22加壳的Any to Icon 1.3脱壳 (7千字)
  • 作 者:fwnl
  • 时 间:2002-3-23 13:43:10
  • 链 接:http://bbs.pediy.com

ASPROtect 1.22加壳的Any to Icon 1.3脱壳
crack by fwnl
软件说明:可以把BMP、JPEG、GIF、PNG、WMF、CUR图形文件转换为图标(ICO)的工具,还可以更改彩度及大小
软件下载:http://sq.onlinedown.net/down/any2icon.zip
破解工具:trw2000, superbpm,Import REConstructor v1.4.2+ ,UltraEdit32, Peditor.

    首先我要感谢zombieys,小球,hume等高手的帮忙和鼓励,不然我是脱不了这个壳的。其实这次脱壳有很大部分是参照小球写的Iconxp的脱壳来做的.
   
    由于这个程序是用Aspr1.22(FI 249查的)加壳,所以caspr不能脱此壳,于是就只有手动来脱了。

一.找入口点

    由于是delphi程序,所以利用快速寻找aspr入口的方法:

    执行Any2Icon.exe,用prodump选dump(full)脱壳,存为dump.exe。接着用UltraEdit32打开dump.exe,ALT+F3,填runtime,选中查找ASCⅡ,执行搜索,搜到后,向上查找离runtime最近的机器码为55 8B EC的地方就是程序的oep,而在Any2Icon.exe里这个位置在offset:000bc178处,用peditor的flc功能将它转换为virtual address就是004bcb78----oep。

二.用trw2000初步脱壳

  下面要在入口处脱壳,打开SuperBPM,点erase,用trw载入Any2Icon.exe,下g 4bcb78,接着下pedump脱出程序.

三.修复import table

  打开原加壳程序,在Import REConstructor v1.4.2+ 的 Attach to an Active Process 窗口中选取ang2icon.exe的进程,然后在下方的oep处填入000bcb78,点IAI AutoSearch,再点Get Imports 然后点Show Invalid,在Imported Functions Found窗口里的无效地址上点鼠标右键,选Trace Leve11(disasm),再点show invaids,发现还有几个没有修复,再次在那几个没有修复的地址上点鼠标右键.
  选中Plugin Tracer(Asprotect 1.2X Emul),再点show invaids应发现所有的dll显示 valid:Yes了。然后点Fix Dump,选中你用trw2000 pedump出的文件修复.
  这样修复后的程序还是不能运行.于是我们要看程序在那里出错,然后再用原版的对比看.

四.修复脱壳后的程序

0167:004BCB78  PUSH    EBP
0167:004BCB79  MOV      EBP,ESP
0167:004BCB7B  ADD      ESP,BYTE -0C
0167:004BCB7E  MOV      EAX,004BC810
0167:004BCB83  CALL    00406320
0167:004BCB88  MOV      EAX,[004C13EC]
0167:004BCB8D  MOV      EAX,[EAX]
0167:004BCB8F  CALL    0044FA8C
0167:004BCB94  CALL    NEAR [004C10EC] ==>这个call指向c9c8fc,F8进去全是?号
0167:004BCB9A  CALL    00403AB0

用原未脱壳的程序进入0167:004BCB94  CALL  NEAR [004C10EC]发现到了下面这里:

0167:00C9C8FC  CMP      DWORD [00CA35A8],BYTE +00
0167:00C9C903  JZ      00C9C90B
0167:00C9C905  CALL    NEAR [00CA35A8] ==>F8进入       
0167:00C9C90B  RET   
0167:00C9C90C  PUSH    EBP
0167:00C9C90D  MOV      EBP,ESP
    F8进入就到了下面这里:
0167:004BC6B0  PUSH    EBX            ==>上面那个CALL  NEAR [004C10EC]真正的指向
0167:004BC6B1  MOV      EAX,[004C1580]
0167:004BC6B6  CMP      DWORD [EAX],BYTE +00
0167:004BC6B9  JNZ      004BC730
0167:004BC6BB  CALL    004B7050

于是知道脱出的程序少了CXXXXX到CXXXXXX这段。
听电神大哥说可以把CALL  NEAR [004C10EC]改成call 4bc6b0.不过后面还有不少地方指向CXXXXX,要
都改过来才行. 我改了好久也没完全成功。于是用小球的方法来补数据

我们首先d c9c8fc,然后Alt+Page Up ,当看到数据框内如下显示
可知道这段数据从c90100开始.

0030:00C90FD0 ?? ?? ?? ?? ?? ?? ?? ??-?? ?? ?? ?? ?? ?? ?? ?? 
0030:00C90FE0 ?? ?? ?? ?? ?? ?? ?? ??-?? ?? ?? ?? ?? ?? ?? ?? 
0030:00C90FF0 ?? ?? ?? ?? ?? ?? ?? ??-?? ?? ?? ?? ?? ?? ?? ?? <---空地址了
0030:00C91000 0A 06 73 74 72 69 6E 67-00 00 00 00 00 00 00 00 ..string........
0030:00C91010 00 00 00 00 00 00 00 00-3C 10 C9 00 00 00 00 00 ........<.?....
0030:00C91020 6D 11 C9 00 04 00 00 00-00 00 00 00 B0 29 C9 00 m.?........??
0030:00C91030 98 28 C9 00 C0 28 C9 00-04 29 C9 00 11 00 0B 00 ????.)?....
0030:00C91040 10 29 C9 00 04 46 72 65-65 13 00 1C 29 C9 00 0C .)?.Free...)?.

然后Alt+Page Down ,当看到数据框内如下显示
可知道这段数据从ca8000结束.

0030:00CA7FD0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
0030:00CA7FE0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
0030:00CA7FF0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
0030:00CA8000 ?? ?? ?? ?? ?? ?? ?? ??-?? ?? ?? ?? ?? ?? ?? ?? <---空地址了
0030:00CA8010 ?? ?? ?? ?? ?? ?? ?? ??-?? ?? ?? ?? ?? ?? ?? ?? 
0030:00CA8020 ?? ?? ?? ?? ?? ?? ?? ??-?? ?? ?? ?? ?? ?? ?? ?? 

    于是我们就在trw2000中w c90100 ca8000 new.bin.来保存出new.bin
用winhex打开dump_.exe和NEW.bin把NEW.bin的内容粘贴到dump_.exe的最后,然后再用peditor载入dump_.exe,点sections,然后右键点add a section添加一个新段名字为new.然后选中new这段section,右键点edit ection编辑它,由于ca8000-c91000=17000,所以在Virtuel Siae填入00017000,Virtuel Offsize 填00891000 ,因为(c91000-400000=891000), Raw填00017000,然后点apply changes来保存修改。最后再点rebuilder,去掉所有的勾,只保留 make PE Header win nt/2k compatible这一项.然后点do这样就重建好的Pe头了.
    这时程序就可以运行了,不过退出时会发生错误.听说aspr的壳用到findfirstfilea作为检查是否被脱壳的判断。于是用bpx findfirstfilea来下断.

0167:0040874B E8ECDCFFFF      CALL    `KERNEL32!FindFirstFileA`
0167:00408750 8BF0            MOV      ESI,EAX
0167:00408752 897314          MOV      [EBX+14],ESI
0167:00408755 83FEFF          CMP      ESI,BYTE -01
0167:00408758 7416            JZ      00408770
0167:0040875A 8BC3            MOV      EAX,EBX
0167:0040875C E86BFFFFFF      CALL    004086CC
0167:00408761 8BF0            MOV      ESI,EAX ==>改inc esi,还要补一个nop,也就是把8bf0改为4690
0167:00408763 85F6            TEST    ESI,ESI
0167:00408765 7410            JZ      00408777==>上面改后就可跳过下面的`KERNEL32!GetLastError`
0167:00408767 8BC3            MOV      EAX,EBX
0167:00408769 E836000000      CALL    004087A4
0167:0040876E EB07            JMP      SHORT 00408777
0167:00408770 E847DDFFFF      CALL    `KERNEL32!GetLastError`
0167:00408775 8BF0            MOV      ESI,EAX
0167:00408777 8BC6            MOV      EAX,ESI
0167:00408779 5F              POP      EDI
0167:0040877A 5E              POP      ESI
0167:0040877B 5B              POP      EBX
0167:0040877C C3              RET   
这样改后程序就可正常运行了。
对于上面说的那个退出错误电神大哥的改法是:
0167:00448F94 53              PUSH    EBX
0167:00448F95 6683B87A02000000 CMP      WORD [EAX+027A],BYTE +00
0167:00448F9D 7412            JZ      00448FB1    ==>这里一定要跳,就是7412改eb12
0167:00448F9F 8BCA            MOV      ECX,EDX
0167:00448FA1 8BD8            MOV      EBX,EAX
0167:00448FA3 8BD0            MOV      EDX,EAX
0167:00448FA5 8B837C020000    MOV      EAX,[EBX+027C]
0167:00448FAB FF9378020000    CALL    NEAR [EBX+0278]
0167:00448FB1 5B              POP      EBX
这样改后,一样的程序也可正常运行了
    不过这样脱出的程序还是未注册版,听电神大哥说aspr用注册码给自身解压,所以最完美的脱法是注册后再脱,这样脱出是文件就是完美版了.
    电神大哥脱壳后的修复方法我还是不会,这个程序的破解我也搞了好久,发现好像一定要在脱壳前破解还只能够正常运行,在未注册版上脱壳后的程序中好难找到关键代码。

    由于本人水平太菜,加之又是第一次脱ASPR的壳,所以一定还有不少问题,谢谢各高手指正.

    最后还是很想知道电神大哥倒底是怎样注册脱壳的?因为我搞了好久还是不行,
    不知是不是太笨了 :)
    这次脱壳共耗时:  4天*9小时(脱壳)+1天*4小时(写文章)=40小时,希望下次脱VC的程序不要这么欠了,
    不然我可真要@#!#%$^%$了. :)
                                                                                fwnl
                                                                              2002.3.23
                                                                                长沙

  • 标 题:刚刚在网上找到了这个软件的注册码,大家注册后再脱就是完美脱壳版了,呵呵 (177字)
  • 作 者:fwnl
  • 时 间:2002-3-23 14:02:33
  • 链 接:http://bbs.pediy.com

HNVNW9S9rGFgWa6Z0XWuvsNXbCZ03LzAewoeTQKH10jYdIbrCSbILy9LgAMjvZDVXYecxqy6/q
4ovFAEqluU4QGIPj7gM7d2KT7Q0XEAi15wKLMOrodHXiyMpeXQeFRb+AEEmgNgjoNK6heWsk4Wj
YVsfkfxtuNtbwNXVG9SLyg=