duelist crackme 1 破解 (希望轉載的時候保持完整)
作者 丁丁蝦 ddxia/[CCG]
目標 duelist crackme 1
目標URL http:\\go.163.com\~ddxia\crackme\DueList\Due-cm1.zip
工具 SoftIce4.01 for NT
樂趣 可以直接修改程式程式碼,得到序列號(懶人方法)^_^
首先看看它的readme.txt(建議在Crack Crackme前,讀一讀,會有些幫助的),是 Duelist寫的第一個純ASM的Crackme。
執行,會發現它需要一個序列號,別忙下中斷,看看是那一種出錯資訊,隨便填下123,然後按check按鈕,會彈出一個出錯對話方塊!然後按OK返回主程式。
對症下藥啦!:)
Ctrl+D 啟用SICE
BPX MESSAGEBOXA
Ctrl+D 返回程式。
再按check按鈕,就會攔截下來,跟著按F11跳出MESSAGEBOXA的系統程式碼(有點象TRW的Pmoudle),光帶會停在001B:00401193
001B:0040117D 6800200000 PUSH
00002000
001B:00401182 6801204000 PUSH
00402001
001B:00401187 6863204000 PUSH
00402063
001B:0040118C 6A00
PUSH 00
001B:0040118E E85C010000 CALL
USER32!MessageBoxA
001B:00401193 E95CFFFFFF JMP
004010F4
^^^^^^^^^^^^^^^^^^^^^^^^^^^---->游標會停在此處
有了結果,於是我們很想去知道原因是為什麼?對嗎?所以我們要回顧一下歷史,(是啊!在程式碼的歷史中,永遠都不會過期,可以追尋,可以重新來過,也可以重頭來過,但在現實中,歷史永遠是歷史,現在的我們只能是回憶、留戀,如果想在你的歷史長河裡留下精彩瞬間,請把握好今天吧!!)
簡單註冊方式:得到程式碼------》進行變化-----》然後進行比較----》對否?
我們可以看到如下的程式碼:
001B:004010FB 6A24
PUSH 24
001B:004010FD 68F7204000
PUSH 004020F7
^^^^^^^^^^^^^^^^^^^^^^^^----->GetDlgItemTextA是存放你輸入註冊碼的地方
001B:00401102 6A01
PUSH 01
001B:00401104 FF7508
PUSH DWORD PTR [EBP+08]
001B:00401107 E855020000
CALL USER32!GetDlgItemTextA
^^^^^^^^^^^^^^^^^^^^^^^^----->得到註冊碼
001B:0040110C 33C0
XOR EAX,EAX
001B:0040110E 80B8F720400000 CMP
BYTE PTR [EAX+004020F7],00
^^^^^^^^^^^^^^^^^^^^^^^^----->比較是否輸入?
001B:00401115 7418
JZ
0040112F
001B:00401117 80B0F720400043 XOR
BYTE PTR [EAX+004020F7],43
001B:0040111E 80B0F72040001E XOR
BYTE PTR [EAX+004020F7],1E
001B:00401125 80B0F720400055 XOR
BYTE PTR [EAX+004020F7],55
^^^^^^^^^^^^^^^^^^^^^^^^----->進行註冊碼變化
001B:0040112C 40
INC EAX
001B:0040112D E2DF
LOOP 0040110E
001B:0040112F 83F800
CMP EAX,00
001B:00401132 7518
JNZ 0040114C
^^^^^^^^^^^^^^^^^^^^^^^^----->轉化完沒有??
001B:00401134 6800200000 PUSH
00002000
001B:00401139 6801204000 PUSH
00402001
001B:0040113E 689D204000 PUSH
0040209D
001B:00401143 6A00
PUSH 00
001B:00401145 E8A5010000 CALL
USER32!MessageBoxA
001B:0040114A EBA8
JMP 004010F4
001B:0040114C 6A24
PUSH 24
001B:0040114E 68D3204000 PUSH
004020D3
001B:00401153 68F7204000 PUSH
004020F7
001B:00401158 E864000000 CALL
004011C1
^^^^^^^^^^^^^^^^^^^^^^^^----->進行比較的子程式
001B:0040115D 83F800
CMP EAX,00
^^^^^^^^^^^^^^^^^^^^^^^^----->是否正確??
001B:00401160 741B
JZ 0040117D
(JUMP )
001B:00401162 6800200000 PUSH
00002000
001B:00401167 6801204000 PUSH
00402001
001B:0040116C 6817204000 PUSH
00402017
001B:00401171 6A00
PUSH 00
001B:00401173 E877010000 CALL
USER32!MessageBoxA
我們可以注意到兩個地址
一個是 004020D3 -----存放著進過變化的註冊碼
另一個是004020F7 -----用輸入的註冊碼
:d 4020d3 4020f5
0023:004020D3 7B 61 65 78 64 6D 26 6B-7A 69 6B 63 65 6D 26 3C {aexdm&kzikcem&<
0023:004020E3 26 66 6D 7F 6A 61 6D 7B-26 6A 71 26 6C 7D 6D 64 &fmjam{&jq&l}md
0023:004020F3 61 7B 7C 00 31 32 33 00-00 00 00 00 00 00 00 00 a{|.123.........
程式進行變化的程式碼僅僅是XOR,一種非常簡單加密方法,有BUG呵呵~~~~,於是用SICE修改程式碼為如下:
001B:0040110E 80B8D320400000 CMP
BYTE PTR [EAX+004020D3],00
001B:00401115 7418
JZ
0040112F
001B:00401117 80B0D320400043 XOR
BYTE PTR [EAX+004020D3],43
001B:0040111E 80B0D32040001E XOR
BYTE PTR [EAX+004020D3],1E
001B:00401125 80B0D320400055 XOR
BYTE PTR [EAX+004020D3],55
僅僅是把這四句中的004020F7換為004020D3,即修改F7為D3,然後讓程式再執行一遍,呵呵~~程式會自動顯示正確註冊碼!趕緊抄下來!
0023:004020D3 73 69 6D 70 6C 65 2E 63-72 61 63 6B 6D 65 2E 34 simple.crackme.4
0023:004020E3 2E 6E 65 77 62 69 65 73-2E 62 79 2E 64 75 65 6C .newbies.by.duel
0023:004020F3 69 73 74 00 31 32 33 00-00 00 00 00 00 00 00 00 ist.123.........
退出程式,重新執行,輸入simple.crackme.4.newbies.by.dueist,OK
收工 :D
總結:在Crack中,可以發揮自己的主觀能動性(譁!上青少年修養課啊!我倒.........) 發揮想象力,不需要居伲於哪一種方法,儘管去發揮。Crack的精華之處在於不斷的探索和創新!
時間:2000.10.16 19:45
提議:該回家,愛護一下自己的胃了 :)