亚洲日本免费-啊轻点灬太粗太长了三男一女-麻豆av电影在线观看-日韩一级片毛片|www.grbbt.com

學(xué)OD -- 函數(shù)參考

  這一篇講的是函數(shù)參考

  同上結(jié)合一小軟件進(jìn)行講解軟件特點(diǎn)大概如下

  點(diǎn)一下“Check It”按鈕試一下,沒反應(yīng)!再輸個(gè)“78787878”試試,還是沒反應(yīng)。再試試輸入字母或其它字符,輸不進(jìn)去。由此判斷注冊碼應(yīng)該都是數(shù)字,只有輸入正確的注冊碼才有反應(yīng)。這個(gè)狀態(tài)下我們沒有什么字符串可以參考的所以想到在API上下斷點(diǎn),讓被調(diào)試的程序停在我們希望的地方。具體操作:

  在OllyDBG的反匯編窗口中右擊,選擇查找->當(dāng)前模塊中的名稱(標(biāo)簽),或者CTR+N組合鍵也可以(注意在進(jìn)行此操作時(shí)要在OllyDBG中保證是在當(dāng)前被調(diào)試程序的領(lǐng)空,如果調(diào)試這個(gè)程序時(shí)OllyDBG的標(biāo)題欄顯示的就是“[CPU -主線程,模塊- CrackHea]”,這表明我們當(dāng)前在被調(diào)試程序的領(lǐng)空)。通過上面的操作后會彈出一個(gè)對話框。

  對于這樣的編輯框中輸注冊碼的程序一般會設(shè)斷點(diǎn)首選的API函數(shù)是

  GetDlgItemText及GetWindowText。每個(gè)函數(shù)都有兩個(gè)版本,

  一個(gè)是ASCII版,在函數(shù)后添加一個(gè)A表示,如GetDlgItemTextA,

  一個(gè)是UNICODE版,在函數(shù)后添加一個(gè)W表示。如GetDlgItemTextW。

  對于編譯為UNCODE版的程序可能在Win98下不能運(yùn)行,因?yàn)閃in98并非是完全支持UNICODE的系統(tǒng)。而NT系統(tǒng)則從底層支持UNICODE,它可以在操作系統(tǒng)內(nèi)對字串進(jìn)行轉(zhuǎn)換,同時(shí)支持ASCII和UNICODE版本函數(shù)的調(diào)用。一般我們打開的程序看到的調(diào)用都是ASCII類型的函數(shù),以“A”結(jié)尾。

  我們現(xiàn)在就是要找一下我們調(diào)試的程序有沒有調(diào)用GetDlgItemTextA或GetWindowTextA函數(shù)。找到一個(gè)GetWindowTextA。下斷點(diǎn)可以在這個(gè)函數(shù)上右擊,選擇“在每個(gè)參考上設(shè)置斷點(diǎn)”,我們會在OllyDBG窗口最下面的那個(gè)狀態(tài)欄里看到“已設(shè)置2個(gè)斷點(diǎn)”。也可以就是那個(gè)GetWindowTextA函數(shù)上右擊,在彈出菜單上選擇“查找輸入函數(shù)參考”(或者按回車鍵)彈出所有含有GetWindowTextA的地方我們只要在callGetWindowTextA下斷點(diǎn)即可F9運(yùn)行輸入注冊碼點(diǎn)check按鈕 程序會斷在咱下的這個(gè)斷點(diǎn)處

  同上一篇用F7進(jìn)入分析程序.如果之前下API斷點(diǎn)是采用方式一即所有的都下了此時(shí)程序會跑到非程序領(lǐng)空中(可以看OllyDBG的標(biāo)題欄顯示)此時(shí)先將此多余斷點(diǎn)刪掉,按一下 ALT+F9 組合鍵回到程序領(lǐng)空,F(xiàn)7繼續(xù)進(jìn)入分析部分程序如下

  004013D2  /$  56            PUSH ESI

  004013D3  |.  33C0          XOR EAX,EAX

  004013D5  |.  8D35 C4334000 LEA ESI,DWORD PTR DS:[4033C4]把框中的數(shù)值送到ESI

  004013DB  |.  33C9          XOR ECX,ECX

  004013DD  |.  33D2          XOR EDX,EDX

  004013DF  |.  8A06         MOV AL,BYTE PTR DS:[ESI] 把注冊碼中的每個(gè)字符送AL

  004013E1  |.  46            INC ESI

  004013E2  |.  3C 2D         CMP AL,2D

  把取得的字符與16進(jìn)制值為2D的字符(即“-”)比較,這里用于判斷輸入的是不是負(fù)數(shù)

  004013E4  |.  75 08         JNZ SHORT CrackHea.004013EE

  004013E6  |.  BA FFFFFFFF   MOV EDX,-1

  004013EB  |.  8A06          MOV AL,BYTE PTR DS:[ESI]

  004013ED  |.  46            INC ESI

  004013EE  |>  EB 0B         JMP SHORT CrackHea.004013FB

  004013F0  |>  2C 30         /SUB AL,30

  004013F2  |.  8D0C89        |LEA ECX,DWORD PTR DS:[ECX+ECX*4]

  004013F5  |.  8D0C48        |LEA ECX,DWORD PTR DS:[EAX+ECX*2]

  004013F8  |.  8A06          |MOV AL,BYTE PTR DS:[ESI]

  004013FA  |.  46            |INC ESI

  004013FB  |>  0AC0           OR AL,AL

  004013FD  |.^ 75 F1         JNZ SHORT CrackHea.004013F0

  004013FF  |.  8D040A        LEA EAX,DWORD PTR DS:[EDX+ECX]

  00401402  |.  33C2          XOR EAX,EDX

  00401404  |.  5E           POP ESI

  00401405  |.  81F6 53757A79 XOR ESI,797A7553

  0040140B  .  C3            RETN

  當(dāng)走到最后

  再按一下F8,我們就走出00401328地址處的那個(gè)CALL了。現(xiàn)在我們回到了這里:

  0040132D |. 3BC6 CMP EAX,ESI ;比較

  0040132F|. 75 42 JNZ SHORT CrackHea.00401373 ; 不等則出錯

  看出來的時(shí)候是比較的EAX和ESI所以就看哪個(gè)里邊是咱輸入的哪個(gè)是正確的

  由程序分析可知這是一個(gè)小的加密算法就是將咱輸入的數(shù)字按照一定的規(guī)律給加密了整成咱不認(rèn)識的了并放在了EAX中而ESI是之前的壓棧后邊進(jìn)行了一個(gè)XOR運(yùn)算     這種時(shí)候兩者是看信息窗口ESI = 68AFCD59   EAX = 00BC6142

  直接右擊信息窗口的這兩行選擇修改寄存器此時(shí)就豁然開朗了

  將得到的數(shù)字貼到編輯框中即可

  一個(gè)簡單的函數(shù)參考

 

上一篇:安卓防火墻 PS DroidWall

下一篇:學(xué)OD -- 字符參考