ASProtect 1.23RC4之System Cleaner 4.91d脫殼修復and破解
【脫文作者】 weiyi75[Dfcg]
【作者郵箱】 weiyi75@sohu.com
【作者主頁】 Dfcg官方大本營
【使用工具】 Ollydbg1.09d,ImportREC1.6F
【破解平臺】 Win2000/XP
【軟體名稱】 System Cleaner 4.91d
【下載地址】 http://218.63.244.68:1010/ckkd/attachment.php?aid=253
【軟體簡介】 提供了三種簡單有效的減肥方式。執行清除的速度很快,如果你不想清理某檔案也可以設定
System Cleaner 2000把檔案先放到一個目錄暫存,或是執行ZIP把檔案壓縮起來。有定時的功能,可以讓
你訂定大掃 除的時間 ,或是定時清理你的硬碟。
【軟體大小】 1.01M
【加殼方式】 ASProtect 1.23 RC4 - 1.3.08.24 -> Alexey Solodovnikov
【破解宣告】 我是一隻小菜鳥,偶得一點心得,願與大家分享:)
--------------------------------------------------------------------------------
【破解內容】
前言,在我開始嘗試脫這個程式的程式的時候,我dump下來的檔案都是錯誤的,因為我在錯誤的地方dump程式,並因此常常導致脫殼後的程式崩潰。百思不解,後來看了Jeffzhang的動畫,知道了這個程式不能在入口處脫殼,不然即使修復Iat和補上程式碼也不能執行。本文沒有用AsprDbgr1b輔助修復IAT,全部IAT修復用ImportREC 1.6F,鍛鍊一下手動修復的能力。又經過jwh51指點破解過程,jwh51和Jeffzhang兄真是脫殼高手,吾望塵莫及,吾水平不行,克隆能力還是不錯的。
好,脫殼開始。
OD異常設定不忽略記憶體異常,其餘全部忽略,載入程式,用外掛隱藏OD。
00401000 > 68 01B05F00 PUSH SystemCl.005FB001 //停在這裡,F9執行。
00401005 E8 01000000 CALL SystemCl.0040100B
0040100A C3 RETN
0040100B C3 RETN
0040100C 0F39 ??? ; 未知命令
0040100E 44 INC ESP
0040100F 15 2F5BD708 ADC EAX,8D75B2F
00401014 58 POP EAX
00401015 A3 026254BC MOV DWORD PTR DS:[BC546202],EAX
0040101A 8C4F DE MOV WORD PTR DS:[EDI-22],CS
0040101D 1084D6 77A87E09 ADC BYTE PTR DS:[ESI+EDX*8+97EA877],AL
00401024 B5 D4 MOV CH,0D4
00401026 CF IRETD
00401027 2F DAS
00401028 B4 7C MOV AH,7C
0040102A 23D8 AND EBX,EAX
.....................................................................
記憶體異常。
00C341E4 3100 XOR DWORD PTR DS:[EAX],EAX
00C341E6 EB 01 JMP SHORT 00C341E9
00C341E8 68 648F0500 PUSH 58F64
00C341ED 0000 ADD BYTE PTR DS:[EAX],AL
00C341EF 00EB ADD BL,CH
00C341F1 02E8 ADD CH,AL
00C341F3 0158 68 ADD DWORD PTR DS:[EAX+68],EBX
00C341F6 6C INS BYTE PTR ES:[EDI],DX ; I/O 命令
00C341F7 AF SCAS DWORD PTR ES:[EDI]
00C341F8 C2 0068 RETN 6800
00C341FB 54 PUSH ESP
00C341FC 42 INC EDX
00C341FD C3 RETN
.....................................................................
繼續Shift+F9 27次忽略異常到最後一次異常處。
00C33A2C 3100 XOR DWORD PTR DS:[EAX],EAX //到這裡就可以用Loadpe脫殼了。
00C33A2E 64:8F05 0000000>POP DWORD PTR FS:[0]
00C33A35 58 POP EAX
00C33A36 833D B07EC300 0>CMP DWORD PTR DS:[C37EB0],0
00C33A3D 74 14 JE SHORT 00C33A53
00C33A3F 6A 0C PUSH 0C
00C33A41 B9 B07EC300 MOV ECX,0C37EB0
00C33A46 8D45 F8 LEA EAX,DWORD PTR SS:[EBP-8]
00C33A49 BA 04000000 MOV EDX,4
00C33A4E E8 EDD0FFFF CALL 00C30B40
00C33A53 FF75 FC PUSH DWORD PTR SS:[EBP-4]
00C33A56 FF75 F8 PUSH DWORD PTR SS:[EBP-8]
00C33A59 8B45 F4 MOV EAX,DWORD PTR SS:[EBP-C]
00C33A5C 8338 00 CMP DWORD PTR DS:[EAX],0
00C33A5F 74 02 JE SHORT 00C33A63
00C33A61 FF30 PUSH DWORD PTR DS:[EAX]
00C33A63 FF75 F0 PUSH DWORD PTR SS:[EBP-10]
00C33A66 FF75 EC PUSH DWORD PTR SS:[EBP-14]
00C33A69 C3 RETN //按F2在RET那裡設定一個斷點,然後再次按Shift+F9
.......................................................................
我們會在停在RET這一行,清除斷點。
接著按ALT+M開啟記憶體映象。在第一個塊上下記憶體訪問斷點。
記憶體映象
地址 大小 Owner Section Contains 型別 訪問 初始訪問 對映為
00400000 00001000 SystemCl PE header Imag R RWE
00401000 00164000 SystemCl code Imag R RWE //在此處上下內
存訪問斷點
按F9執行,程式到達這裡。
00407278 - FF25 2C235700 JMP DWORD PTR DS:[57232C] //這裡
0040727E 8BC0 MOV EAX,EAX
00407280 - FF25 28235700 JMP DWORD PTR DS:[572328]
00407286 8BC0 MOV EAX,EAX
00407288 - FF25 24235700 JMP DWORD PTR DS:[572324]
0040728E 8BC0 MOV EAX,EAX
00407290 - FF25 20235700 JMP DWORD PTR DS:[572320]
00407296 8BC0 MOV EAX,EAX
00407298 50 PUSH EAX
00407299 6A 40 PUSH 40
0040729B E8 E0FFFFFF CALL SystemCl.00407280
004072A0 C3 RETN
.......................................................................
如果我們按一次F8我們將回到殼的程式碼中,按Ctrl+F9返回到程式領空。
0040734D A3 68E65600 MOV DWORD PTR DS:[56E668],EAX ; SystemCl.00400000
00407352 A1 68E65600 MOV EAX,DWORD PTR DS:[56E668]
00407357 A3 D8505600 MOV DWORD PTR DS:[5650D8],EAX
0040735C 33C0 XOR EAX,EAX
0040735E A3 DC505600 MOV DWORD PTR DS:[5650DC],EAX
00407363 33C0 XOR EAX,EAX
00407365 A3 E0505600 MOV DWORD PTR DS:[5650E0],EAX
0040736A E8 C1FFFFFF CALL SystemCl.00407330
0040736F BA D4505600 MOV EDX,SystemCl.005650D4
00407374 8BC3 MOV EAX,EBX //這裡的EAX裡面的值要記錄下來,EAX=564344,模擬Oep時
要用到。
00407376 E8 75D8FFFF CALL SystemCl.00404BF0
0040737B 5B POP EBX
0040737C C3 RETN
.......................................................................
這些是什麼東西??這個問題花了我一些時間但在除錯了更多的別的程式之後,我認為這是對GetModuleHandleA的呼叫程式碼的一部分。
地址0040734D並不是OEP,我們按F8單步執行,直到RET,返回(ret)後我們來到這裡:
00564A64 FF15 A4D15600 CALL DWORD PTR DS:[56D1A4] 這裡是臨時OEP
00564A6A E8 4903EAFF CALL SystemCl.00404DB8
00564A6F 90 NOP
00564A70 0000 ADD BYTE PTR DS:[EAX],AL
00564A72 0000 ADD BYTE PTR DS:[EAX],AL
00564A74 0000 ADD BYTE PTR DS:[EAX],AL
00564A76 0000 ADD BYTE PTR DS:[EAX],AL
.................................................................
但哪裡才是OEP ?
如果你往上看,你會發現這樣的程式碼:
00564A4F 001C43 ADD BYTE PTR DS:[EBX+EAX*2],BL
00564A52 56 PUSH ESI
00564A53 0000 ADD BYTE PTR DS:[EAX],AL
00564A55 0000 ADD BYTE PTR DS:[EAX],AL
00564A57 0000 ADD BYTE PTR DS:[EAX],AL
00564A59 0000 ADD BYTE PTR DS:[EAX],AL
00564A5B 0000 ADD BYTE PTR DS:[EAX],AL
00564A5D 0000 ADD BYTE PTR DS:[EAX],AL
00564A5F E8 D828EAFF CALL SystemCl.0040733C
真正的OEP是 :
00564A54
你可能會問\"為什麼 ?\"...
ASPR使用了一種叫做 \"Steal-Bytes\"的技術:
asrp隱藏了PE檔案OEP開始處的位元組,並把這些位元組從原始PE檔案中擦除..
=====================
關於stolen bytes
=====================
稍微說明一下:
每一種編譯工具例如 : VC++ , Delphi , Borland , etc..
在OEP有一個唯一的/相同的PE頭
其中的一些是這樣的:
Push EBP
MOV Ebp,Esp
Add ESP , -010
Mov EAX, SOME_VALUE
(共11bytes)
或者:
Push EBP
MOV Ebp,Esp
Add ESP , -010
Push EBX
Push ESi
Push EDi
Mov EAX, SOME_VALUE
(共14 bytes)
這個程式被抽掉多少位元組,11個,因為
00564A4F 001C43 ADD BYTE PTR DS:[EBX+EAX*2],BL
00564A52 56 PUSH ESI
00564A53 0000 ADD BYTE PTR DS:[EAX],AL //這裡往下一共12個位元組,被抽掉的位元組會用
00補充,故Oep判斷為564a54
00564A55 0000 ADD BYTE PTR DS:[EAX],AL
00564A57 0000 ADD BYTE PTR DS:[EAX],AL
00564A59 0000 ADD BYTE PTR DS:[EAX],AL
00564A5B 0000 ADD BYTE PTR DS:[EAX],AL
00564A5D 0000 ADD BYTE PTR DS:[EAX],AL
00564A5F E8 D828EAFF CALL SystemCl.0040733C
用Peid掃描一下脫殼的檔案,Borland Delphi 6.0 - 7.0,我們模擬入口點11個位元組。
Push EBP //固定格式
Mov EBP,ESP //固定格式
Add ESP,-010 //ADD ESP 的值一般 Delphi 程式都是-010
Mov eax, 00564344 //這裡EAX的值就是剛才記錄下來的。
將模擬入口碼先記錄下來。
ok,現在剩下的工作就是修復IAT了。
先關閉OD,開啟單獨的程式。
在improved ImpRec 1.6 Final中選取程式,然後
Oep處的1000別修改
點選: 自動搜尋IAT (IAT AutoSearch)
RVA 0017221C 大小為0C8 //太小了
修改RVA的大小(Size of the RVA )為1000
然後點選獲取輸入表(GetImports)
點選顯示非法函式(Show Invalid)
在無效地址列表(invalid list)中點選右鍵選擇\"Trace Level 1\" 修復。
還有452個指標要手動修復。
然後用ASProtect 1.22再減輕一下壓力,注意不能用1.2x和1.3版的外掛修復,也修復不了。
還有441個指標要手動修復。
現在的問題是,這441個指標是有用的嗎?ImpRec 1.6會告訴你
點選show invalid並右鍵單擊選擇其中的一個,讓我們來修復它 :
001722E8<- 右鍵單擊選擇Deasm\HexView檢視:
ImpRec 1.6提示你,read error!好,夠了,只要有這個提示的一律可以安全的Cut。
如果這個指標有效,裡面會顯示彙編指令。
找了一會,發現001724D8處的指標是唯一一個沒識別的指標。
右鍵單擊選擇Deasm\HexView檢視,究竟它是Kernel32.dll中的哪個函式呢,按Page Down兩次,看到
00C31D6E call 00C25158 // = kernel32.dll/00D9/FindResourceA
第一個看到的Api函式就是要修復的指標。
呵呵,修復它吧,雙擊00C31D6E這行,填入Api函式FindResourceA。
最後面幾百個靠一塊的指標一眼看出全是垃圾,用Deasm\HexView驗證一下。
現在點選show invalid,將剩下440個垃圾指標全部Cut掉,提示所有指標修復完成,爽啊!
Btw:我是除了未部幾百個垃圾指標,其餘20多個指標一個個驗證的。
將Oep填入00164A54,然後修復脫殼檔案。
補上抽掉的11個位元組。
換Od上場,載入修復的檔案,補上我們剛才分析的程式碼,儲存檔案,正常執行。
脫殼後發現和原版一樣有隨機NAG提示和30天限制,想半法去掉它的30天時間限制。各位脫殼愛好都也可能發現脫Aspr經常有這種現象,有一種解決方案是脫殼後再把NAG視窗想法NOP掉,其實沒必要這麼做,在脫殼過程中就可以解決這個問題,以前有在SoftICE下的操作方案,這裡就談談OD下的操作方案.
例子就用這個systemClean,這裡主要說一下如何解決時間過期問題:
1.用OD載入加殼的主程式,F9執行,異常後按SHIFT+F9共23次,為什麼是23次,因為總共有27次異常,我們要提前4-5次中斷,所以是23次,這個是前輩的經驗,要多看些脫文才能完全理解。
2.接著按ALT+M開啟記憶體映象。在第一個塊上下記憶體訪問斷點。
記憶體映象
地址 大小 Owner Section Contains 型別 訪問 初始訪問 對映為
00400000 00001000 SystemCl PE header Imag R RWE
00401000 00164000 SystemCl code Imag R RWE //在此處上下內
存訪問斷點,按SHIFT+F9,程式碼來到了這裡:
00563EB0 55 PUSH EBP
00563EB1 8BEC MOV EBP, ESP
00563EB3 A1 2CD75600 MOV EAX, DWORD PTR DS:[56D72C] //注意這一行
00563EB8 8B55 08 MOV EDX, DWORD PTR SS:[EBP+8]
00563EBB 8910 MOV DWORD PTR DS:[EAX], EDX
00563EBD 5D POP EBP
00563EBE C2 0400 RETN 4
注意以上程式碼的第三行mov eax dword ptr[56d72c];
[56d72c]中的值為566578,
我們輸入命令:dd 566578 看看記憶體:
00566578 0049D74C SystemCl.0049D74C ,存放的是註冊名的地址,改成自己的.
0056657C FFFFFFFF ,這一行是試用天數.
00566580 FFFFFFFF ,這一行是剩下的天數.
00566584 00000000
00566588 00000001
0056658C 00000002
前三行就是我們要改的東西了.
用OD開啟脫殼後的檔案,把兩個時間的地址全改為FF(共8個位元組),然後在檔案後面的某個空白處輸入你的大名,我選擇了在56DFB4處,
輸入例如:Crack By weiyi75[Dfcg] Thank Jwh51[Dfcg]
在566578處改為 B4 DF 56 00 ,也就是我們大名的地點,儲存.再執行看看.呵呵,時間限制沒有了,在關於對話方塊中出現了Licensed to 你的大名。
感謝:某老外,Jeffzhang,Jwh51提供技術指點。
--------------------------------------------------------------------------------
【版權宣告】 本文純屬技術交流, 轉載請註明作者並保持文章的完整, 謝謝
相關文章
- Asprotect1.23 Rc4 之SynchroMagic脫殼修復+破解2015-11-15
- ASProtect
1.23RC4 以殼解殼+暗樁修復+解除自校驗+破解――ArtCursors V3.99B32004-06-16
- 以殼解殼――ASProtect
1.23RC4殼的Stolen Code簡便解決方案2004-05-13
- 老妖的 C32Asm V0.4.12 脫殼+修復+破解2015-11-15ASM
- Blaze Media Pro5.05脫殼+基本修復CC(int3)+破解2015-11-15
- FTPrint的脫殼(asprotect) (2千字)2001-02-05FTP
- 淺談DBPE2.33脫殼修復2015-11-15
- ASProtect V1.2脫殼――Asterisk Password
Recovery XP2015-11-15AST
- Krypton
0.5加殼程式脫殼及輸入表修復記2004-10-06
- ASProtect 1.23RC4之Dephi語言篇2015-11-15
- ASProtect
1.23 RC4 - 1.3.08.24-[Awicons V9.20 ]脫殼AND破解2004-07-01
- 淺談SVKP 1.3X殼的輸入表修復――登錄檔醫生 V2.96 脫殼+破解2015-11-15
- 以殼解殼--SourceRescuer脫殼手記破解分析2004-11-16
- Acprotect之完美解除安裝XP V9.15脫殼修復+偽破解篇祝賀FLY大俠2015-11-15
- ASPROtect 1.22加殼的ahaview2.0脫殼 (5千字)2002-03-24View
- 也談ASProtect 1.3之stolen code的修復2015-11-15
- HTMLZip脫殼後的Import Table的修復 (750字)2001-02-10HTMLImport
- 手動脫ASProtect 的殼-Synchromagic
v3.5 build 5572003-08-03UI
- MySQL Manager 2.8.0.1脫殼破解手記破解分析2004-11-03MySql
- ASProtect 1.23 SDK之 Aspack2.12r 主程式脫殼去暗樁2015-11-15
- SYSTEM CLEANER 暴力破解 (1千字)2001-01-04
- 對Asprotect脫殼的一點總結
(20千字)2000-08-12
- 幻影 V2.33 脫殼+修復――dbpe.exe主程式2015-11-15
- 偽 SVK Protector 1.32 脫殼+修復――SVK Protector
DEMO 1.32 主程式2015-11-15
- Asprotect 1.2x 加殼的 Advanced Direct
Remailer 2.17 脫殼 (3千字)2002-06-20REMAI
- ASProtect 1.23
b18脫殼淺談 (5千字)2015-11-15
- 用OD對Aspr加殼程式的手動脫殼及修復 (7千字)2015-11-15
- Acprotect之完美解除安裝XP V9.15脫殼修復 (狗尾續貂)2015-11-15
- “天音怒放”手動脫殼及破解2015-11-15
- 菜鳥脫 UltraFXP 0.9941 殼( SVKP )+ 破解2015-11-15
- 另類PEtite V2.2 脫殼+修復+破解――英漢漢英雙向學習詞典
V1.02015-11-15
- 模擬跟蹤+修復方法之ACProtect脫殼――完美解除安裝XP V9.122015-11-15
- 手動脫掉Asprotect的殼,(給初學者的) (9千字)2002-01-24
- 小甜餅 --- 有關新版Asprotect加殼程式的脫殼的又一種思路
(798字)2000-09-10
- jdpack的脫殼及破解 (5千字)2002-06-25
- iOS逆向學習之五(加殼?脫殼?)2019-10-10iOS
- 某殼分析+修復(二)2018-05-14
- 關於用ASProtect v1.3加殼軟體的脫殼方法體會 (5千字)2001-11-21