模擬跟蹤+修復方法之ACProtect脫殼――完美解除安裝XP V9.12

看雪資料發表於2015-11-15

模擬跟蹤+修復方法之ACProtect脫殼――完美解除安裝XP V9.12
 
 
 
下載頁面:  http://www.skycn.com/soft/6169.html
軟體大小:  4316 KB
軟體語言:  簡體中文
軟體類別:  國產軟體 / 共享版 / 解除安裝清除
應用平臺:  Win9x/NT/2000/XP
加入時間:  2003-11-06
下載次數:  332693
推薦等級:  **** 

【軟體簡介】:軟體共有3個小程式,分別是:磁碟垃圾清理軟體、軟體安裝監視器、軟體解除安裝工具,是一套功能比較強大的安裝/解除安裝/清理工具,新版更加全面的系統監視,讓軟體安裝的一舉一動歷歷在目,二次清理技術,軟體解除安裝後將不留任何垃圾,磁碟垃圾清理的數量更多,軟體執行更加穩定。

【作者宣告】:只是感興趣,沒有其他目的。失誤之處敬請諸位大俠賜教!

【除錯環境】:WinXP、flyODBG、PEiD、LordPE、ImportREC 1.4.2+、WinHex

――――――――――――――――――――――――――――――――― 
【脫殼過程】:
          
         

先說幾句多餘的話:請正確認識加密與解密(僅指技術研究)的關係――矛與盾――解密的發展無疑是促進了加密的進步!就偶個人以及偶所知道的朋友來說,學習CRACK只是個人興趣,不為稻梁謀!否則也不會寫破解筆記。

崇尚自由、共享!  :-)


1、偶使用的偵錯程式:Ollydbg Anti ACProtect For XP 修改版 ―― flyODBG 
         下載頁面:http://tongtian.net/pediybbs/viewtopic.php?t=1532 

2、反跟蹤可以參考:夢幻Ollydbg ―― 淺談 ACProtect V1.09 Pro 的反跟蹤And脫殼
         相關頁面:http://tongtian.net/pediybbs/viewtopic.php?t=1525


用  Run Trace 方法來脫殼,可以讓偶們節省一些脫殼中F7單步走的時間,難點是在何處使用模擬跟蹤以及如何設定較佳的跟蹤條件;這些只有根據具體的情況具體分析了。

ACProtect運用了變形技術,使得許多程式碼在脫殼後丟失。為了找到修復方法,偶曾經對 jingulong 兄說過偶準備3天3夜來分析,後來偶用了1天的時間終於成功。

這次的試煉品是:完美解除安裝XP V9.12的NetClean.exe  昨天升級為 V9.13 了,偶寫這篇V9.12脫殼筆記,作者不會太在意吧?筆記所寫只是偶的一點ACProtect脫殼思路,ACProtect是一款優秀的殼,以後碰到的機率不會少的。

―――――――――――――――――――――――――――――――――
一、模擬跟蹤   尋找OEP


用IsDebug 1.4外掛去掉flyODBG的偵錯程式標誌。設定 忽略 除了“記憶體訪問異常”之外的所有其他異常選項。


004AE000     60                   pushad//進入OD後斷在這!
004AE001     79 05                jns short NetClean.004AE008

F9執行,程式中斷在異常處,這個int 1異常算是ACProtect的典型異常啦 :-D

004B3E96     CD 01                int 1//ACProtect的典型異常
004B3E98     40                   inc eax//此處下斷,SHIFT+F9斷在這!CTRL+F9執行到返回!
004B3E99     40                   inc eax
004B3E9A     0BC0                 or eax,eax
004B3E9C     0F85 B6000000        jnz NetClean.004B3F58
    …… ……省 略…… ……
004B3F99     61                   popad
004B3F9A     61                   popad
004B3F9B     C3                   retn//返回到 004B7CC2

――――――――――――――――――――――――

004B7CC2     F9                   stc
004B7CC3     E9 04000000          jmp NetClean.004B7CCC

004B7CCC     83ED 01              sub ebp,1
004B7CCF     0F85 41FFFFFF        jnz NetClean.004B7C16//F4下去
004B7CD5     EB 01                jmp short NetClean.004B7CD8

004B7CD8     E8 BDB3FFFF          call NetClean.004B309A//F8帶過
004B7CDD     E9 0B000000          jmp NetClean.004B7CED


OK,偶現在開始使用模擬跟蹤!下命令:TC EIP<004B0000    當然,可以一步步F7走,也有更簡便的方法,偶這裡只是學習一下Run Trace方法。如果你有大把的時間,等數小時後程式會自動暫停在OEP處的。要想快點則需要手動干預一下!有2點需要注意:

1、jnz等的向上迴圈手動F4下去跳出迴圈
2、CALL的地址比程式當前地址低的可以F8帶過,不需要TC進入

當TC時間稍長時,可以檢視 執行跟蹤   找出上面所說的情況,手動干預一下,使模擬跟蹤加快速度!


004B88FA     E8 43D6FFFF          call NetClean.004B5F42//CALL入低地址段
004B88FF     E9 03000000          jmp NetClean.004B8907//F2下斷,暫停執行跟蹤,F9斷在這

繼續 TC EIP<004B0000  如果嫌記錄太長,可以 清除記錄 後再TC

004B9D46     E8 F7C1FFFF          call NetClean.004B5F42
004B9D4B     D3C8                 ror eax,cl//F2下斷,暫停執行跟蹤,F9斷在這

繼續 TC EIP<004B0000  

檢視 執行跟蹤   發現程式在 004B9DA5 處迴圈太多,偶們手動來協助它吧

004B9DA5     0F85 1CFFFFFF        jnz NetClean.004B9CC7//F2下斷,斷下後取消斷點,F4下去
004B9DAB     7E 03                jle short NetClean.004B9DB0


以下處理方法相同:

004BBEEC     E8 51A0FFFF          call NetClean.004B5F42
004BBEF1     75 01                jnz short NetClean.004BBEF4//F2下斷,暫停執行跟蹤,F9斷在這

004BBF3B     0F85 55FFFFFF        jnz NetClean.004BBE96//F4下去
004BBF41     E8 01000000          call NetClean.004BBF47

004BDAAC     E8 9184FFFF          call NetClean.004B5F42
004BDAB1     75 02                jnz short NetClean.004BDAB5//F2下斷,暫停執行跟蹤,F9斷在這

004BDB08     0F85 2AFFFFFF        jnz NetClean.004BDA38//F2下斷,斷下後取消斷點,F4下去
004BDB0E     E8 01000000          call NetClean.004BDB14

004BE0DA     E8 C25EFFFF          call NetClean.004B3FA1
004BE0DF     77 01                ja short NetClean.004BE0E2//F2下斷,暫停執行跟蹤,F9斷在這

004BE136     0F85 5AFFFFFF        jnz NetClean.004BE096//F2下斷,斷下後取消斷點,F4下去
004BE13C     E8 01000000          call NetClean.004BE142

004BE51D     0F85 29FFFFFF        jnz NetClean.004BE44C//F2下斷,斷下後取消斷點,F4下去
004BE523     74 03                je short NetClean.004BE528

004BE528     E8 BD5CFFFF          call NetClean.004B41EA
004BE52D     87F2                 xchg edx,esi//F2下斷,暫停執行跟蹤,F9斷在這

004BE578     E8 245AFFFF          call NetClean.004B3FA1
004BE57D     71 01                jno short NetClean.004BE580//F2下斷,暫停執行跟蹤,F9斷在這

004BE605     E8 904AFFFF          call NetClean.004B309A
004BE60A     0F82 03000000        jb NetClean.004BE613//F2下斷,暫停執行跟蹤,F9斷在這

004BE632     E8 985EFFFF          call NetClean.004B44CF
004BE637     C1DA 12              rcr edx,12//F2下斷,暫停執行跟蹤,F9斷在這

004BE63D     0F85 71FFFFFF        jnz NetClean.004BE5B4//F2下斷,斷下後取消斷點,F4下去
004BE643     EB 01                jmp short NetClean.004BE646

    …… ……省 略…… ……

004BEA52     0F85 3BFFFFFF        jnz NetClean.004BE993//F2下斷,斷下後取消斷點,F4下去
004BEA58     50                   push eax

004BEE16     0F85 36FFFFFF        jnz NetClean.004BED52//F2下斷,斷下後取消斷點,F4下去
004BEE1C     E8 01000000          call NetClean.004BEE22

004BEF72     0F85 4AFFFFFF        jnz NetClean.004BEEC2//F2下斷,斷下後取消斷點,F4下去
004BEF78     E8 01000000          call NetClean.004BEF7E

004C07B7     0F85 4CFFFFFF        jnz NetClean.004C0709//F2下斷,斷下後取消斷點,F4下去
004C07BD     EB 01                jmp short NetClean.004C07C0

004C1B9F     0F85 34FFFFFF        jnz NetClean.004C1AD9//F2下斷,斷下後取消斷點,F4下去
004C1BA5     50                   push eax

004C693E     0F85 55FFFFFF        jnz NetClean.004C6899//F2下斷,斷下後取消斷點,F4下去
004C6944     50                   push eax

004C7006     0F85 3DFFFFFF        jnz NetClean.004C6F49//F2下斷,斷下後取消斷點,F4下去
004C700C     EB 01                jmp short NetClean.004C700F

004C7C88     0F85 52FFFFFF        jnz NetClean.004C7BE0//F2下斷,斷下後取消斷點,F4下去
004C7C8E     E8 01000000          call NetClean.004C7C94


再次 TC EIP<004B0000  數分鐘後程式自動停在00445E14處!檢視執行跟蹤就知道程式是從何處返回的。


004C8612     8B85 71B64100        mov eax,dword ptr ss:[ebp+41B671]  ; NetClean.00445E14
004C8618     0385 383F4000        add eax,dword ptr ss:[ebp+403F38]
                                  //EAX=00045E14 + 00400000=00445E14   這就是OEP值  :-)
004C861E     8985 71B64100        mov dword ptr ss:[ebp+41B671],eax  ; NetClean.00445E14
004C8624     61                   popad
004C8625     8BC5                 mov eax,ebp
004C8627     E8 9493FEFF          call NetClean.004B19C0
004C862C     FFB5 71B64100        push dword ptr ss:[ebp+41B671]     ; NetClean.00445E14
004C8632     8BE8                 mov ebp,eax
004C8634     C3                   retn  //返回 00445E14               飛向光明之巔!:-D


――――――――――――――――――――――――
看來這個東東沒有被ACProtect殼 Stolen Code 呀  :-)


00445E14     55                   push ebp//在這兒用LordPE完全DUMP這個程式
00445E15     8BEC                 mov ebp,esp
00445E17     6A FF                push -1
00445E19     68 C0E24400          push NetClean.0044E2C0
00445E1E     68 D65F4400          push NetClean.00445FD6 
00445E23     64:A1 00000000       mov eax,dword ptr fs:[0]
00445E29     50                   push eax
00445E2A     64:8925 00000000     mov dword ptr fs:[0],esp
00445E31     83EC 68              sub esp,68
00445E34     53                   push ebx
00445E35     56                   push esi
00445E36     57                   push edi
00445E37     8965 E8              mov dword ptr ss:[ebp-18],esp
00445E3A     33DB                 xor ebx,ebx
00445E3C     895D FC              mov dword ptr ss:[ebp-4],ebx
00445E3F     6A 02                push 2
00445E41     FF15 60B74400        call dword ptr ds:[44B760]

――――――――――――――――――――――――

重新執行,執行ImportREC,選擇這個程式。把OEP改為00045E14,點IT AutoSearch,把大小改為:A6C 點“Get Import”,只有一個函式無效,用“追蹤層次3”修復之,FixDump。


―――――――――――――――――――――――――――――――――
二、修復 丟失程式碼


執行脫殼後的dumped_.exe當然出錯啦,找到出錯的地方:

004AF00B     FF25 6C5C1400        jmp dword ptr ds:[145C6C]
    …… ……省 略…… ……
004B076F     FF25 046C1400        jmp dword ptr ds:[146C04]

這一大段程式碼全部丟失了,現在要做的就是讓程式在執行時把這段程式碼解壓在程式內!這樣脫殼後就不會丟失了。其實偶以前的筆記已經給出瞭解決方法,只要你細心跟蹤了就能發現的。


複製NetClean.exe以防不測。用LordPE給其加個新的區段:大小00020000 ,然後用WinHex在程式末尾0007D118處貼上00020000長度的00位元組。可以在0007D118處寫入某些字元以便查詢,如:fly[FCG]

設定LordPE的“重建”選項,只保留“驗證PE”一個選項,最後用LordPE重建“增肥”後的 NetClean.exe。

――――――――――――――――――――――――
用flyODBG載入“增肥”後NetClean.exe,忽略所有異常選項,取消以前的所有斷點。偶們開始還原丟失程式碼!


004AE000     60                   pushad//進入OD後斷在這!
004AE001     79 05                jns short NetClean.004AE008

★★下命令:BP GlobalAlloc+2   ★★

77E536A3     6A 1C                push 1C
77E536A5     68 D018E677          push kernel32.77E618D0//斷在這!中斷5次後取消斷點 返回程式
77E536AA     E8 323E0000          call kernel32.77E574E1
    …… ……省 略…… ……
77E5379E     C2 0800              retn 8//返回到 004B1BAD

F9執行,在77E536A5處中斷5次,返回程式。當然,對於其它用ACProtect加殼的程式,可以返回程式看是哪裡對丟失程式碼動手腳,以確定具體的位置!

返回程式後偶們要知道剛才新增位元組的具體位置:Alt+M檢視記憶體,在整個區段搜尋:fly[FCG]

004E1118  66 6C 79 5B 46 43 47 5D 00 00 00 00 00 00 00 00  fly[FCG]........

確定新增位元組開始在004E1118處! :-)


004B1B9B     B9 70170000          mov ecx,1770
004B1BA0     68 10270000          push 2710
004B1BA5     6A 40                push 40
004B1BA7     FF95 F1434000        call dword ptr ss:[ebp+4043F1]//CALL GlobalAlloc
004B1BAD     8BF8                 mov edi,eax//EAX=00145C68  把返回值改為:004E1118  狸貓換太子:-) 
004B1BAF     81C7 A00F0000        add edi,0FA0
004B1BB5     50                   push eax
004B1BB6     B9 70170000          mov ecx,1770
004B1BBB     8DB5 05204000        lea esi,dword ptr ss:[ebp+402005]
004B1BC1     F3:A4                rep movs byte ptr es:[edi],byte ptr ds:[esi]
004B1BC3     5A                   pop edx
004B1BC4     8BF2                 mov esi,edx
004B1BC6     81C6 A00F0000        add esi,0FA0
004B1BCC     8BFE                 mov edi,esi
004B1BCE     B9 70170000          mov ecx,1770
004B1BD3     AC                   lods byte ptr ds:[esi]
004B1BD4     32C3                 xor al,bl
004B1BD6     AA                   stos byte ptr es:[edi]
004B1BD7     E2 FA                loopd short NetClean.004B1BD3
004B1BD9     8BFA                 mov edi,edx
004B1BDB     B9 E8030000          mov ecx,3E8
004B1BE0     8BC2                 mov eax,edx
004B1BE2     05 A00F0000          add eax,0FA0
004B1BE7     AB                   stos dword ptr es:[edi]
004B1BE8     83C0 06              add eax,6
004B1BEB     E2 FA                loopd short NetClean.004B1BE7
004B1BED     B9 E8030000          mov ecx,3E8
004B1BF2     8DBD 05204000        lea edi,dword ptr ss:[ebp+402005]
004B1BF8     8BC2                 mov eax,edx
004B1BFA     66:C707 FF25         mov word ptr ds:[edi],25FF
004B1BFF     8947 02              mov dword ptr ds:[edi+2],eax
004B1C02     83C7 06              add edi,6
004B1C05     83C0 04              add eax,4
004B1C08     E2 F0                loopd short NetClean.004B1BFA
004B1C0A     60                   pushad
004B1C0B     E8 00000000          call NetClean.004B1C10
004B1C10     5E                   pop esi
004B1C11     83EE 06              sub esi,6
004B1C14     B9 92000000          mov ecx,92
004B1C19     29CE                 sub esi,ecx
004B1C1B     BA 5FBEACA3          mov edx,A3ACBE5F
004B1C20     C1E9 02              shr ecx,2
004B1C23     83E9 02              sub ecx,2
004B1C26     83F9 00              cmp ecx,0
004B1C29     7C 1A                jl short NetClean.004B1C45
004B1C2B     8B048E               mov eax,dword ptr ds:[esi+ecx*4]
004B1C2E     8B5C8E 04            mov ebx,dword ptr ds:[esi+ecx*4+4]
004B1C32     33C3                 xor eax,ebx
004B1C34     C1C0 11              rol eax,11
004B1C37     03C2                 add eax,edx
004B1C39     81F2 47137A8D        xor edx,8D7A1347
004B1C3F     89048E               mov dword ptr ds:[esi+ecx*4],eax
004B1C42     49                   dec ecx
004B1C43     EB E1                jmp short NetClean.004B1C26
004B1C45     61                   popad
004B1C46     61                   popad
004B1C47     C3                   retn

現在丟失程式碼已經全部還原在偶新增的區段內了,跑不了了  :-)

在OEP值00445E14處下記憶體訪問斷點,F9執行程式,直達入口!DUMP出程式!重新修復輸入表,正常執行!


☆☆☆☆☆  三千丈紅塵   蒼茫人世   吾將何處翱翔  ☆☆☆☆☆


―――――――――――――――――――――――――――――――――
    
                                
         ,     _/ 
        /| _.-~/            _     ,        青春都一餉
       ( /~   /              ~-._ |
       `\  _/                   ~ )          忍把浮名 
   _-~~~-.)  )__/;;,.          _  //'
  /'_,   --~    ~~~-  ,;;___(  (.-~~~-.        換了破解輕狂
 `~ _( ,_..-- (     ,;'' /    ~--   /._` 
  /~~//'   /' `~         ) /--.._, )_  `~
  "  `~"  "      `"      /~'`    `\~~   
                         "     "   "~'  ""

    

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

               2003-12-15 23:00

相關文章