作 者: RegKiller
時 間: 2006-03-26,13:52
鏈 接: [url]http://bbs.pediy.com/showthread.php?t=23174[/url]
【脫殼作者】 剎那恍惚
【作者郵箱】 [email][email protected][/email]
【使用工具】 OllyDBG ,LordPE,ImportREC,PEiD v0.94
【脫殼平臺】 WinXP SP2
【軟件名稱】 Win98 記事本
【軟件大小】 568 KB
【保護選項】 Standard protection only 僅僅標准保護 + KEY 保護 (單進程)
【加殼方式】 Armadillo v4.40
【脫殼聲明】 我是一隻小菜鳥,偶得一點心得,願與大家分享:)
【作者郵箱】 [email][email protected][/email]
【使用工具】 OllyDBG ,LordPE,ImportREC,PEiD v0.94
【脫殼平臺】 WinXP SP2
【軟件名稱】 Win98 記事本
【軟件大小】 568 KB
【保護選項】 Standard protection only 僅僅標准保護 + KEY 保護 (單進程)
【加殼方式】 Armadillo v4.40
【脫殼聲明】 我是一隻小菜鳥,偶得一點心得,願與大家分享:)
--------------------------------------------------------------------------------
【脫殼內容】
【脫殼內容】
關於 ARM 帶 KEY 的問題 N 多人問過了。再次解答一次,首先我們必須有一個可用的 KEY 否則程序是無法解碼的(前輩的話,我只是站了一下他們的肩膀.嘿嘿),對於 ARM 我瞭解甚少,我的理解是如果你的程序無 KEY 的話就好像你有個 RAR 卻沒密碼無法解壓一樣。又有人要說 RAR 可以窮舉了,拜託,我加 RAR 密碼從來都是中文做密碼,你舉出來的話可以發一份給我做紀念。呵呵。跑題了沒?跑了大家記得把我叫回來。OK。我們繼續,首先我們要弄個可用的 KEY,然後替換我們的機器指紋爲可用 KEY 的機器指紋,註冊正確之後開始脫殼基本上就跟沒脫沒 KEY 的 ARM 完全相同了。下面是這個程序的一個可用 KEY 是我用 ARM 在另一臺機器上加殼的。
Hardware fingerprint: 5F48-DD41
Name: RegKiller
Key: 00001K-VKY502-J4WZFV-GXFK3Z-KD82T6-C0K6UK-6PCH59-WUAZP9-EX7HGD-4K9KVF-W0CRJZ
一、準備工作
偵殼:用PEiD查殼 Armadillo 1.xx - 2.xx -> Silicon Realms Toolworks
老規矩設置Ollydbg忽略所有異常,用IsDebug 1.4插件去掉Ollydbg的調試器標誌。
OD 載入
Shift+F9 運行,直到程序提示:This program requires a security key. If you have one, select OK to enter it. After entering a valid key, you will not be prompted again.
按 OK 按鈕讓程序彈出輸入 KEY 的對話框,記下你自己的 Hardware fingerprint(我這裏是 Hardware fingerprint: 0073-3907 這個值一會要用) 然後回到 OD下 he GetDlgItem 斷點後回到程序隨便輸入一個名字和 KEY 後按 OK 按鈕。斷下後看堆棧提示
00128088 00C244FC /CALL 到 GetDlgItem 來自 00C244FA
0012808C 000607F0 |hWnd = 000607F0 ('Enter Key',class='#32770')
00128090 00000407 \ControlID = 407 (1031.)
0012808C 000607F0 |hWnd = 000607F0 ('Enter Key',class='#32770')
00128090 00000407 \ControlID = 407 (1031.)
ALT+F9 返回程序領空
00C244FC 85C0 TEST EAX,EAX ; 返回到此處
00C244FE 74 33 JE SHORT 00C24533
00C244FE 74 33 JE SHORT 00C24533
此時你可以找這段代碼的開始處下硬件執行斷點然後 Ctrl+F2 重載程序再分析。
這裏我就不這麼做了。刪除剛纔的硬件斷點,向下找到這段代碼
00C2467D /0F84 B7000000 JE 00C2473A
00C24683 |53 PUSH EBX
00C24684 |B9 98FAC300 MOV ECX,0C3FA98
00C24689 |E8 253CFEFF CALL 00C082B3 ; 右鍵跟隨
00C2468E |53 PUSH EBX
00C2468F |B9 98FAC300 MOV ECX,0C3FA98
00C24694 |8945 08 MOV DWORD PTR SS:[EBP+8],EAX
00C24697 |E8 353CFEFF CALL 00C082D1
00C2469C |837D 14 01 CMP DWORD PTR SS:[EBP+14],1
00C246A0 |75 27 JNZ SHORT 00C246C9
00C246A2 |8B45 08 MOV EAX,DWORD PTR SS:[EBP+8]
00C246A5 |8BC8 MOV ECX,EAX
00C246A7 |81E1 FFFF0000 AND ECX,0FFFF
00C246AD |C1E8 10 SHR EAX,10
00C246B0 |51 PUSH ECX
00C246B1 |50 PUSH EAX
00C246B2 |8D85 00FFFFFF LEA EAX,DWORD PTR SS:[EBP-100]
00C246B8 |68 C496C300 PUSH 0C396C4 ; ASCII "%04X-%04X"
00C246BD |50 PUSH EAX
00C246BE |FF15 1063C300 CALL DWORD PTR DS:[C36310] ; msvcrt.sprintf
00C24683 |53 PUSH EBX
00C24684 |B9 98FAC300 MOV ECX,0C3FA98
00C24689 |E8 253CFEFF CALL 00C082B3 ; 右鍵跟隨
00C2468E |53 PUSH EBX
00C2468F |B9 98FAC300 MOV ECX,0C3FA98
00C24694 |8945 08 MOV DWORD PTR SS:[EBP+8],EAX
00C24697 |E8 353CFEFF CALL 00C082D1
00C2469C |837D 14 01 CMP DWORD PTR SS:[EBP+14],1
00C246A0 |75 27 JNZ SHORT 00C246C9
00C246A2 |8B45 08 MOV EAX,DWORD PTR SS:[EBP+8]
00C246A5 |8BC8 MOV ECX,EAX
00C246A7 |81E1 FFFF0000 AND ECX,0FFFF
00C246AD |C1E8 10 SHR EAX,10
00C246B0 |51 PUSH ECX
00C246B1 |50 PUSH EAX
00C246B2 |8D85 00FFFFFF LEA EAX,DWORD PTR SS:[EBP-100]
00C246B8 |68 C496C300 PUSH 0C396C4 ; ASCII "%04X-%04X"
00C246BD |50 PUSH EAX
00C246BE |FF15 1063C300 CALL DWORD PTR DS:[C36310] ; msvcrt.sprintf
ASCII "%04X-%04X" 這個是誰?小誰家那小誰嘛,呵呵。向上看.我們再 00C24689 處的 CALL 右鍵跟隨(也就是進入這個 CALL)來到下面代碼處
00C082B3 56 PUSH ESI ; 來到此處
00C082B4 8BF1 MOV ESI,ECX
00C082B6 FF7424 08 PUSH DWORD PTR SS:[ESP+8]
00C082BA 8B8E 5C060000 MOV ECX,DWORD PTR DS:[ESI+65C]
00C082C0 6A 00 PUSH 0
00C082C2 E8 24D70000 CALL 00C159EB ; 右鍵跟隨
00C082C7 3386 5C200000 XOR EAX,DWORD PTR DS:[ESI+205C] ; 問題 1 下面解答
00C082CD 5E POP ESI
00C082CE C2 0400 RETN 4
00C082B4 8BF1 MOV ESI,ECX
00C082B6 FF7424 08 PUSH DWORD PTR SS:[ESP+8]
00C082BA 8B8E 5C060000 MOV ECX,DWORD PTR DS:[ESI+65C]
00C082C0 6A 00 PUSH 0
00C082C2 E8 24D70000 CALL 00C159EB ; 右鍵跟隨
00C082C7 3386 5C200000 XOR EAX,DWORD PTR DS:[ESI+205C] ; 問題 1 下面解答
00C082CD 5E POP ESI
00C082CE C2 0400 RETN 4
這裏有 2 種方式(我測試了2個帶KEY的ARM殼,所以我只碰到了2種方式。一會說明)
我們繼續在 00C082C2 處的 CALL 右鍵跟隨來到下面代碼處
00C159EB 8B4424 04 MOV EAX,DWORD PTR SS:[ESP+4]
00C159EF C1E0 06 SHL EAX,6
00C159F2 034424 08 ADD EAX,DWORD PTR SS:[ESP+8]
00C159F6 8B4481 18 MOV EAX,DWORD PTR DS:[ECX+EAX*4+18]
00C159FA 35 8AC0E665 XOR EAX,65E6C08A
00C159FF C2 0800 RETN 8 ; 在此設置個斷點
00C159EF C1E0 06 SHL EAX,6
00C159F2 034424 08 ADD EAX,DWORD PTR SS:[ESP+8]
00C159F6 8B4481 18 MOV EAX,DWORD PTR DS:[ECX+EAX*4+18]
00C159FA 35 8AC0E665 XOR EAX,65E6C08A
00C159FF C2 0800 RETN 8 ; 在此設置個斷點
現在在 00C159FF 上設置一個硬件執行斷點,然後 Ctrl+F2 重載程序並 SHIFT+F9 執行.斷下後注意看 EAX 的值,我這裏是 00733907,這個是什麼?不就是剛纔的 0073-3907 機器指紋嗎?現在你應該知道怎麼做了吧 ? 找個空白地方寫個補丁代碼就可以了。我這裏用 OD 的動態分配內存插件分配個空間寫個補丁.我得到的地址是 30000000 . 補丁代碼入下,你也可以直接找個地方寫代碼而不用插件分配內存。
原代碼:
00C159FA 35 8AC0E665 XOR EAX,65E6C08A
00C159FA 35 8AC0E665 XOR EAX,65E6C08A
補丁代碼:
00C159FA - E9 01A63E2F JMP 30000000
注意當前的 EIP 是 00C159FF .我們把 EIP 重新定位到 00C159FA 處後 F8 一次就來到我們要寫修改指紋的空間了。寫下如下代碼
30000000 35 8AC0E665 XOR EAX,65E6C08A ; 恢復原來的代碼
30000005 3D 07397300 CMP EAX,733907 ; 判斷當前是否是機器指紋 0073-3907
3000000A 75 05 JNZ SHORT 30000011 ; 不是跳走
3000000C B8 41DD485F MOV EAX,5F48DD41 ; 替換成可用 KEY 的指紋 5F48-DD41
30000011 C2 0800 RETN 8 ; 原來的代碼
30000005 3D 07397300 CMP EAX,733907 ; 判斷當前是否是機器指紋 0073-3907
3000000A 75 05 JNZ SHORT 30000011 ; 不是跳走
3000000C B8 41DD485F MOV EAX,5F48DD41 ; 替換成可用 KEY 的指紋 5F48-DD41
30000011 C2 0800 RETN 8 ; 原來的代碼
改好後 SHIFT+F9 然後輸入 KEY.就能看到正確提示了:Key is valid, and has been stored.確定後就可以按照無 KEY 的 ARM 脫殼了。
關於剛纔的問題 1 現在解答一下,那個地方其實也是個 ARM KEY 斷點的好地方,不過 ARM 的 KEY 分幾種,簡單說下,本例子是個長的 KEY.還有種比較短的 KEY ,當你遇到短 KEY 的時候根據下面的方法下斷打補丁.
長 KEY 的時候在這裏開始補丁.
XOR EAX,65E6C08A
RETN 8
RETN 8
短 KEY 的時候在上面的 RENT 8 返回後會來到下面這個地方。
00C082C7 3386 5C200000 XOR EAX,DWORD PTR DS:[ESI+205C] ; 問題 1 下面解答
00C082CD 5E POP ESI
00C082CE C2 0400 RETN 4
00C082CD 5E POP ESI
00C082CE C2 0400 RETN 4
F8 單步走過 00C082C7 後再看 EAX 的值就是你的本機指紋了,補丁方法跟上面相同,不多說了。
--------------------------------------------------------------------------------
【脫殼總結】
--------------------------------------------------------------------------------
【脫殼總結】
本問沒什麼技術含量,如有錯誤之處請各位賜教。
--------------------------------------------------------------------------------
【版權聲明】 本文純屬技術交流, 轉載請註明作者並保持文章的完整, 謝謝!
--------------------------------------------------------------------------------
【版權聲明】 本文純屬技術交流, 轉載請註明作者並保持文章的完整, 謝謝!