ASProtect 1.23RC4 以殼解殼+暗樁修復+解除自校驗+破解――ArtCursors V3.99B3

看雪資料發表於2004-06-16

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

相關文章