壹次脫殼法――Armadillo 雙程式標準殼 快速脫殼

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

壹次脫殼法――Armadillo 雙程式標準殼 快速脫殼
 
 
 
下載頁面:  http://www.skycn.com/soft/11437.html
軟體大小:  1686 KB
軟體語言:  英文
軟體類別:  國外軟體 / 共享版 / 影像捕捉
應用平臺:  Win9x/NT/2000/XP
加入時間:  2003-11-19 10:36:07
下載次數:  1332
推薦等級:  ****

【軟體簡介】:Mr.Captor 是一個非常好用的螢幕截圖程式!他可以幫助你把看到的任何圖片忠實的保留下來!並可以儲存為BMP, PCX, GIF, JPEG, PNG, TIFF, TGA, CUR, ICO, AVI等格式!支援自定義熱鍵!非常容易使用呀!

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

【除錯環境】:WinXP、Ollydbg、PEiD、LordPE、ImportREC 1.6

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

這次試驗的目標是Mr.Captor V2.7版。這個版本是N久以前下載的,小貓上網就不去找新版了。看到罈子上各位兄弟脫Armadillo脫的如火如荼,呵呵,索性也濫竽充數來一篇啦,除了添柴加火外,沒有什麼價值啦。 

MrCaptor.exe用PEiD看:Armadillo 3.00a-3.61,執行看是雙程式,其實還是標準殼。

以前脫Armadillo標準殼一般有兩種流程的操作方法:
1、先走到OEP,DUMP後第2次除錯,直接修改Magic Jump處為JMP,得到輸入表。
2、在Magic Jump 處下硬體斷點,每次改變標誌位使其跳轉。這樣也是一次就脫殼、修復輸入表。但是很慢,如果碰到加密函式多的程式就會吐血的。

OK,請看一下我的方法,壹次脫殼法――Armadillo 雙程式標準殼 快速脫殼  :-)


設定Ollydbg忽略所有的異常選項。老規矩:用IsDebug 1.4外掛去掉Ollydbg的偵錯程式標誌。

――――――――――――――――――――――――
一、使程式把自己當成子程式執行


004BC000     60                       pushad//進入OD後停在這!
004BC001     E8 00000000              call MrCaptor.004BC006
004BC006     5D                       pop ebp
004BC007     50                       push eax
004BC008     51                       push ecx
004BC009     EB 0F                    jmp short MrCaptor.004BC01A

下斷:BP OpenMutexA    當然是用mysqladm大蝦的方法啦

77E6074A     55                       push ebp//斷在這,看看堆疊
77E6074B     8BEC                     mov ebp,esp
77E6074D     51                       push ecx
77E6074E     51                       push ecx
77E6074F     837D 10 00               cmp dword ptr ss:[ebp+10],0

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
BP OpenMutexA 時的堆疊:

0012F574    0049D7D2  /CALL 到 OpenMutexA 來自 MrCaptor.0049D7CC
0012F578    001F0001  |Access = 1F0001
0012F57C    00000000  |Inheritable = FALSE
0012F580    0012FBB4  MutexName = "50C::DAB0194A96"  ★注意0012FBB4
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

Ctrl+G:401000  鍵入以下程式碼

00401000     60                  pushad
00401001     9C                  pushfd
00401002     68 B4FB1200         push 12FBB4 ★ 堆疊裡看到的值
00401007     33C0                xor eax,eax
00401009     50                  push eax
0040100A     50                  push eax
0040100B     E8 B4B2A577         call kernel32.CreateMutexA
00401010     9D                  popfd
00401011     61                  popad
00401012     E9 33F7A577         jmp kernel32.OpenMutexA


在401000處新建起源,F9執行,再次中斷在OpenMutexA處。
呵呵,可以把這段程式碼儲存起來,下次用時直接貼上,修改00401002處push的值就OK了。


―――――――――――――――――――――――――――――――――
二、Magic Jump,避開IAT加密


取消以前斷點,下斷:BP GetModuleHandleA+5 

77E59F93     837C24 04 00        cmp dword ptr ss:[esp+4],0
77E59F98     0F84 23060000       je kernel32.77E5A5C1//斷在這,注意看堆疊
77E59F9E     FF7424 04           push dword ptr ss:[esp+4]
77E59FA2     E8 55080000         call kernel32.77E5A7FC
77E59FA7     85C0                test eax,eax
77E59FA9     74 08               je short kernel32.77E59FB3
77E59FAB     FF70 04             push dword ptr ds:[eax+4]
77E59FAE     E8 B0060000         call kernel32.GetModuleHandleW
77E59FB3     C2 0400             retn 4

在這裡中斷十幾次,然後Alt+F9返回程式。其實很好判斷返回程式的時機。

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
注意看BP GetModuleHandleA+5 時的堆疊變化:

0012D3AC    00C86622  返回到 00C86622 來自 kernel32.GetModuleHandleA
0012D3B0    0012D4E8  ASCII "kernel32.dll"

0012D3AC    00C86622  返回到 00C86622 來自 kernel32.GetModuleHandleA
0012D3B0    0012D4E8  ASCII "user32.dll"

0012D3AC    00C86622  返回到 00C86622 來自 kernel32.GetModuleHandleA
0012D3B0    0012D4E8  ASCII "MSVBVM60.DLL"

0012D3AC    00C86622  返回到 00C86622 來自 kernel32.GetModuleHandleA
0012D3B0    0012D4E8  ASCII "advapi32.dll"

0012D638    00C9C236  返回到 00C9C236 來自 kernel32.GetModuleHandleA ★OK
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

當堆疊如上變化後,就可以Alt+F9返回程式程式碼了。


00C9C230     FF15 D4A0CA00       call dword ptr ds:[CAA0D4] ; kernel32.GetModuleHandleA
00C9C236     3945 E4             cmp dword ptr ss:[ebp-1C],eax//返回這裡
00C9C239     75 09               jnz short 00C9C244
00C9C23B     C745 D0 40E2CA00    mov dword ptr ss:[ebp-30],0CAE240
00C9C242     EB 51               jmp short 00C9C295
00C9C244     391D 38E8CA00       cmp dword ptr ds:[CAE838],ebx
00C9C24A     BF 38E8CA00         mov edi,0CAE838
00C9C24F     74 44               je short 00C9C295//Magic Jump ★
00C9C251     8B35 5855CB00       mov esi,dword ptr ds:[CB5558]
00C9C257     A1 1C96CB00         mov eax,dword ptr ds:[CB961C]
00C9C25C     F647 08 01          test byte ptr ds:[edi+8],1
00C9C260     74 0E               je short 00C9C270
00C9C262     8B48 74             mov ecx,dword ptr ds:[eax+74]
00C9C265     3348 70             xor ecx,dword ptr ds:[eax+70]
00C9C268     3348 60             xor ecx,dword ptr ds:[eax+60]
00C9C26B     F6C1 80             test cl,80
00C9C26E     75 13               jnz short 00C9C283

以前脫Armadillo 3.0以上的殼時總是在Magic Jump處下 硬體執行 斷點,每次斷下後改標誌Z=1,使其JMP。如果直接改為JMP,程式會異常出錯!Armadillo舊版可以直接改的。今天晚上(或者說是凌晨啦)為了這個問題,我細心跟蹤了數個小時,終於搞定了這個問題!

1、直接改00C9C24F jmp 00C9C295,這樣就不必下硬體斷點每次改標誌位了! :-)
2、Ctrl+F在當前位置查詢命令: salc   在00C9C5A8處,當看到jmp、salc、salc程式碼連在一起時,呵呵,恭喜,找到地方了,在salc上面的jmp處下斷! 8)

00C9C594     FF75 F4             push dword ptr ss:[ebp-C]
00C9C597     E8 A7540000         call 00CA1A43
00C9C59C     FF75 BC             push dword ptr ss:[ebp-44]
00C9C59F     E8 8E430000         call 00CA0932
00C9C5A4     59                  pop ecx
00C9C5A5     59                  pop ecx
00C9C5A6     EB 03               jmp short 00C9C5AB//此處下斷
00C9C5A8     D6                  salc
00C9C5A9     D6                  salc


F9執行,斷在00C9C5A6處。當然,由於是動態解碼,每次除錯看到的地址可能是不同的,但程式碼是相同的!其實斷在00C9C5A6處時,IAT解密已經完成了。現在我們返回Magic Jump 處,改回原先修改的程式碼,在00C9C24F處點右鍵->“撤銷選擇”即可。

00C9C24F     EB 44               jmp short 00C9C295//修改的Magic Jump,撤銷選擇
00C9C24F     74 44               je short 00C9C295//改回原先的程式碼

為何要這樣做?我發現程式在下面會依據原先的程式碼進行解碼,以前下 硬體斷點 操作沒有修改原始碼,所以解碼正確。而直接修改Magic Jump後改變了原先的程式碼,導致解碼不正確而異常出錯!現在我們在解碼以前恢復原先的程式碼,因此就不會再出錯了! 8)

取消以前的所有斷點。現在就可以在401000段下記憶體斷點了,不用分兩步來操作了,爽!


―――――――――――――――――――――――――――――――――
三、401000段 記憶體斷點 大法,直達OEP


這個方法jwh51兄、fxyang兄等許多兄弟經常使用,我試了一下,果然挺爽。
Alt+M 檢視記憶體,在401000開始的段上下 記憶體訪問斷點,F9執行,直接中斷在OEP處 

004378EF     55                  push ebp//在這兒用LordPE糾正ImageSize後完全DUMP這個程式
004378F0     8BEC                mov ebp,esp
004378F2     6A FF               push -1
004378F4     68 98AF4700         push MrCaptor.0047AF98
004378F9     68 546A4300         push MrCaptor.00436A54
004378FE     64:A1 00000000      mov eax,dword ptr fs:[0]
00437904     50                  push eax
00437905     64:8925 00000000    mov dword ptr fs:[0],esp
0043790C     83EC 58             sub esp,58
0043790F     53                  push ebx
00437910     56                  push esi
00437911     57                  push edi
00437912     8965 E8             mov dword ptr ss:[ebp-18],esp
00437915     FF15 00F44600       call dword ptr ds:[46F400] ; kernel32.GetVersion


執行ImportREC 1.6,選擇這個程式。把OEP改為000378EF,點IT AutoSearch,CUT掉無效函式。FixDump,正常執行!
 
測試了一下,這個快速脫殼發對於fxyang兄發的 圍棋助手 等標準殼同樣有效!


――――――――――――――――――――――――
四、破解


程式採用了Armadillo的註冊模組,脫殼後自然就不必註冊了,30天的時間限制也不存在了。

“You have X days left for evaluation”的NAG可以修改以下地方:

00423BE8     3D E7030000         cmp eax,3E7
00423BED     74 3D               je short 00423C2C//改為JMP

至於“Unregistered copy of Mr. Captor”等等字樣就隨你改啦。



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

    

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

                    2004-03-16  03:33

相關文章