[翻譯]用dede破解-另一篇~請大家指正~~ (5千字)

看雪資料發表於2015-11-15

題目:        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歡迎交流~

相關文章