題目: Cracking using DeDe (用dede來破解)
作者:
Fulgore
翻譯:WiNrOOt 2002.10.7
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
引
這是一篇介紹dede的基礎文章,在這裡我將向你展示如何用dede分析軟體,將軟體
爆破,並寫出他的keygen的問題.
工具:
Hmmm... 用什麼呢?可能有dede?:-)還有 Hiew,還有Delphi(用來寫keygen)
檔案:
我自己特地為這片教程寫了一個test的檔案用來破解
下載地址:http://www.balbaro.com/dede/files/test.zip
*在最後我們將爆破這個檔案~~~~~
開工~~~~~~~~~~~
*1。執行dede
*2。選擇檔案,單擊Process。
*3。test.exe將被執行,來讓我們認識一下他(name,company&serial)
當然你也可以嘗試一下注冊按鈕(winroot:千萬不要把test關了)
*4。點選OK,dede開始工作~~~~~~~~讀取完成~~再點ok.讀取工作完成,分析正式開始
*5。點選dede中的 procedures項
*6。單擊左邊視窗的TForm1,你將會看到左邊出現 Button1Click(雙擊它)――――噢!發生了什麼?
*7。開始瀏覽程式碼……一會你見會看到這樣的資訊(winroot:這些東西不會在同一個地方顯示!廢話!!)
* Possible reference to control 'Edit2':TEdit
………………………………
* Possible reference to control
'Edit1':TEdit
這些就是呼叫我們輸入Name/Company的地方。
*8。我麼繼續看程式碼:
* Reference to: System..LStrCat3()
|
0044437D E82AF8FBFF
call 00403BAC
00444382
8D55F0 lea
edx, [ebp-$10]
T他的意思是將兩個串連起來.
9. 下面你將看到edit3.text的呼叫. 很有趣, huh?
:)
00444390 8B55F0
mov edx, [ebp-$10]
00444393 8B45FC
mov eax, [ebp-$04]
* Reference to: System..LStrCmp()
|
00444396 E8D5F8FBFF
call 00403C70
0044439B
7407 jz
004443A4
uhuh. Weeeell這意味著,edx 與eax比較,就象輸入值與序列號比較一樣。不會是明碼比較這麼簡單把?我們來看
如果我們執行到這裡:
0044439B 7407
jz 004443A4
如果string相等程式將什麼也不會做(程式自己會判斷)所以絕對不能讓他跳,
我們繼續往下看;
10. 0044439F E85C010000
call 00444500
我覺的有點可疑! :) 雙擊跟進取!
我們發現這裡好像是一函式的開始部分,把兩個值連起來.
?
00444550 E87FFEFFFF
call 004443D4
這個子程式是幹嗎的?跟進去看到
|
or: System..LStrLen()
004443F8 E863F7FBFF
call 00403B60
取字串長度
004443FF
83FB0A cmp
ebx, +$0A
00444402 7F12
jnle 00444416
一直迴圈到$0A, 就是10.
所以它等於 "for
i:=length(s) to 10"
Oki. 我們能在迴圈中做些什麼呢?
* Reference to: System..LStrCat()
在字串後加個 'A' .
結果怎麼樣呢? 程式呼叫字串, 如果字元個數小於10就在後面加'A'.
11.
單擊右上的"<"鍵推出上面那個call來到:
* Possible String Reference to: "123-"
|
00444555 683C464400 push
$0044463C
oki. 我們看到'123-'很好.
繼續看. 這個子程式將建立一個串:
a)LStrCopy(something,from,to)
b)儲存結果
c)測試結果call 00444444
12. 看這裡這裡有兩次變化:
0044455E
B905000000 mov ecx, $00000005
00444563 BA01000000 mov
edx, $00000001
呼叫eax的值,複製 $1到$5. 如果串是 'aaabbbccc' 則結果是'aaabb';
00444587 B904000000 mov
ecx, $00000004
0044458C BA05000000
mov edx, $00000005
同樣, 從第五個字母開始取四個. 所以結果是: 'bbbc'
13. 在這兩個call之間, 你會看到
* Possible String Reference to: "-321-"
|
0044457E 684C464400 push
$0044464C
記住他,他使中間的那個.
* Possible String Reference to: "-123"
|
004445A7 685C464400
push $0044465C
and another one in the end.
現在我們知道serial的結構:
123-xxx-321-xxx-123
14. 現在我們要找xxx的值, 進入 00444444 call.看到:
* Possible
String Reference to: "zZz"
在起始和結束儲存,
然後:
00444488 BA03000000
mov edx, $00000003
* Reference
to: System..LStrCatN()
從字串中呼叫第三個字母 像這樣複製他:
zZz + char + zZz
然後,
同樣的, 他們呼叫呼叫第一和第二個字母.
如果輸入 'Hello', 結果是:
'HzZzlzZze'
cool.
15.這就是演算法!
好讓我們來算自己的serial!
Name: Ful
Company:gore
a)Temp
String: Fulgore
b)第一個函式得到 我們得到: FulgoreAAA
c)然後第一個規則得到'Fulgo', 用第二個函式得到
uzZzlzZzF
d)用第2個得到'oreA', 用第二個函式得到 rzZzezZzo
e) 用第3個函式我們得到: 123-FzZzlzZzu-321-ozZzezZzr-123
f) 讓我們檢測以下!成功!!!
g) 用到下面的函式:
1st:
procedure
prepare(var s:string);
var z:string; i:integer;
begin
z:=s;
for i:=length(z) to 10 do
s:=s+'A';
end;
2nd
function
Cripple(s:String):string;
var kk:string;
begin
kk:='zZz'+s[3]+'zZz';
kk:=s[1]+kk+s[2];
result:=kk;
end;
3rd.
function
generate(name,comp:string):string;
var temp:string;
begin
temp:=name+comp;
prepare(temp);
result:='123-'+cripple(copy(temp,1,5))+'-321'+cripple(copy(temp,5,4))+'-123';
end;
爆破
Well,這一步非常簡單, 看Button1Click的程式碼,
雙擊call 00444500 進入我們會看到:
004445D2 740C
jz
004445E0
* Possible String Reference to: "screw you!"
004445D4
B86C464400 mov eax, $0044466C
* Reference to: Dialogs.ShowMessage(System.AnsiString)
004445D9
E896F9FFFF call 00443F74
004445DE EB0A
jmp 004445EA
* Possible String Reference to: "good for
you!"
004445E0 B880464400
mov eax, $00444680
很明顯的可以看到我們下一步將幹什麼,只需將 jz 變成jmp.
執行 RVA
converter (在dede的tools裡)將004445D2 變成offset: 000439D2
執行 hiew, 進入 hex 模式,
按F5 到000439D2;
這裡將出現 JE 操作碼 ,把它變成 JMP, save然後執行
收工;)
爆破已經完成, 相信你能寫出他的keygen
:)
結束語:
謝謝你讀完我這篇垃圾(誰說老外不謙虛?), 我希望你能從中體會點什麼 ;)
非常感謝DaFixer提供的的軟體,
也要謝謝 Borland 的RAD .
謝謝觀看 !(老外怎麼那麼多廢話??)
byebye
fulgore
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
winroot的結束語:
我是一名初學者,難免翻譯有不準確錯誤的地方,請各位高手指正!
我的mail:ymlianming@etang.com歡迎交流~