duelist crackme 2 破解(上) (希望轉載的時候保持完整)
作者 丁丁蝦 ddxia/[CCG]
目標 duelist crackme 2
目標URL http:\\go.163.com\~ddxia\crackme\DueList\Due-cm2.zip
工具 SoftIce4.01 for NT WinHex
winapi.hlp
我們讀一下它的readme.txt,就知道這是一道解keyfile型別crackme。
keyfile型別解決方法:
1、得到檔名
2、透過分析程式碼來獲得檔案內容!
首先執行它,看看有什麼出錯訊息---->>"你的使用期限到了,請複製keyfile到
該目錄下!"。它要讀取檔案一定用CreateFileA這個API函式。於是在目標程式執行前下
中斷
bpx CreateFileA
被攔截下來,按F11回到程式程式碼中
001B:0040105C 6A00
PUSH 00
001B:0040105E 686F214000 PUSH 0040216F
001B:00401063 6A03
PUSH 03
001B:00401065 6A00 PUSH
00
001B:00401067 6A03
PUSH 03
001B:00401069 68000000C0 PUSH C0000000
001B:0040106E 6879204000 PUSH
00402079
001B:00401073 E80B020000 CALL KERNEL32!CreateFileA
001B:00401078 83F8FF CMP
EAX,-01
^^^^^^^^^^^^^^^^^^^^^^^^^^------>如果開啟檔案失敗,eax=-01
001B:0040107B 751D
JNZ 0040109A
001B:0040107D 6A00
PUSH 00
001B:0040107F 6801204000 PUSH
00402001
001B:00401084 6817204000 PUSH
00402017
001B:00401089 6A00
PUSH 00
001B:0040108B E8D7020000 CALL
USER32!MessageBoxA
^^^^^^^^^^^^^^^^^^^^^^^^^^------>出錯資訊
001B:00401090 E824020000 CALL
KERNEL32!ExitProcess
讓我們看一下呼叫CreateFileA API的引數含義。
HANDLE CreateFile(
LPCTSTR lpFileName, // 指向檔名的指標
DWORD dwDesiredAccess, //讀寫模式
DWORD dwShareMode, // 共享模式
LPSECURITY_ATTRIBUTES lpSecurityAttributes, //
安全屬性指標
DWORD dwCreationDistribution, // 建立標誌
DWORD dwFlagsAndAttributes, // 檔案屬性
HANDLE hTemplateFile // 檔案屬性的複製控制程式碼
);
其中我們最關心的是 LPCTSTR lpFileName這個引數。需要注意的是在API
的呼叫中ASM和高階語言是有區別的,最先出現的引數,ASM中最後PUSH。然後我們
就看出是以下這行程式碼是檔名指標
PUSH 00402079
d 402079
看到什麼??-----due-cm2.dat----->>>keyfile的名字
到目前我們就完成了第一步!
接著我們進行下面一步進行挖掘檔案的內容,好象有的點觀看挖掘老山漢墓的
感覺 呵呵~~~~~~
在目錄下建一個檔名字為due-cm2.dat,再跟蹤看一看是怎樣的情形。
001B:00401073 E80B020000 CALL KERNEL32!CreateFileA
001B:00401078 83F8FF CMP
EAX,-01
^^^^^^^^^^^^^^^^^^^^^^^^^^------>如果開啟檔案失敗,eax=-01
001B:0040107B 751D
JNZ 0040109A
^^^^^^^^^^^^^^^^^^^^^^^^^^------>如果成功,就跳到40109A
然後看一看40109A的程式碼
001B:0040109A 6A00
PUSH 00 //資料結構指標
001B:0040109C 6873214000 PUSH 00402173
//實際讀取的位元組數
001B:004010A1 6A46
PUSH 46 //需要讀取的位元組數
001B:004010A3 681A214000 PUSH 0040211A
//存放內容的檔案指標
001B:004010A8 50
PUSH EAX
//檔案的控制程式碼
001B:004010A9 E82F020000 CALL KERNEL32!ReadFile
^^^^^^^^^^^^^^^^^^^^^^^^^^------>返回引數為非零,就成功
ReadFile API中需要注意的三個引數:402173 46
40211A
001B:004010AE 85C0
TEST EAX,EAX
001B:004010B0 7502
JNZ 004010B4
001B:004010B2 EB43
JMP 004010F7
^^^^^^^^^^^^^^^^^^^^^^^^^^------>出錯跳遠
001B:004010B4 33DB
XOR EBX,EBX
001B:004010B6 33F6
XOR ESI,ESI
001B:004010B8 833D7321400012 CMP
DWORD PTR [00402173],12
^^^^^^^^^^^^^^^^^^^^^^^^^^------>檔案的位元組數是否大於12,
注意12是十六進位制=18,小於18個位元組就出錯!
001B:004010BF 7C36
JL 004010F7
001B:004010C1 8A831A214000 MOV
AL,[EBX+0040211A]
^^^^^^^^^^^^^^^^^^^^^^^^^^------>取每一個位元組進行比較
001B:004010C7 3C00
CMP AL,00
001B:004010C9 7408
JZ 004010D3
001B:004010CB 3C01 CMP
AL,01
001B:004010CD 7501
JNZ 004010D0
001B:004010CF 46
INC ESI
^^^^^^^^^^^^^^^^^^^^^^^^^^------>ESI是累計01的個數
001B:004010D0 43
INC EBX
^^^^^^^^^^^^^^^^^^^^^^^^^^------>檔案偏移指標
001B:004010D1 EBEE JMP
004010C1
001B:004010D3 83FE02 CMP
ESI,02
^^^^^^^^^^^^^^^^^^^^^^^^^^------>01的個數要大於等於2
001B:004010D6 7C1F
JL 004010F7
001B:004010D8 33F6
XOR ESI,ESI
001B:004010DA 33DB
XOR EBX,EBX
001B:004010DC 8A831A214000 MOV
AL,[EBX+0040211A]
001B:004010E2 3C00
CMP AL,00
001B:004010E4 7409
JZ 004010EF
^^^^^^^^^^^^^^^^^^^^^^^^^^------>判斷是否到檔案尾部
001B:004010E6 3C01
CMP AL,01
001B:004010E8 7405
JZ 004010EF
001B:004010EA 03F0
ADD ESI,EAX
^^^^^^^^^^^^^^^^^^^^^^^^^^------>當不等於01和00的時候進行
累加
001B:004010EC 43
INC EBX
001B:004010ED EBED JMP
004010DC
001B:004010EF 81FED5010000 CMP
ESI,000001D5
^^^^^^^^^^^^^^^^^^^^^^^^^^------>當累加到1D5時,就跳轉,
否則出錯!!!
001B:004010F5 741D
JZ 00401114
001B:004010F7 6A00
PUSH 00
001B:004010F9 6801204000 PUSH 00402001
001B:004010FE 6886204000 PUSH 00402086
001B:00401103 6A00
PUSH 00
001B:00401105 E85D020000 CALL USER32!MessageBoxA
^^^^^^^^^^^^^^^^^^^^^^^^^^------>錯誤資訊。
001B:0040110A E8AA010000 CALL KERNEL32!ExitProcess
到這裡我們中場休息10分鐘,看看目前戰果如何?^_^
1、檔案的長度至少18個位元組。
2、檔案中01的位元組至少有2個。
3、檔案中再遇到01位元組前,至少累加和為1D5。
aa+aa+81=1d5 (十六進位制數字順便取)
檔案內容至少是這樣 AA AA 81 01 01 00 00......湊夠18個位元組就行了
下課了,3點俺要上班了,下回接著講啊!呵呵~~~~~~~~~~~~
啊哦!!遲到了,沒有關係,領導不在!!呵呵~~~~~~~~~~~~
時間:2000.10.17
15:02:33