反彙編的應用1 軟體破解

2021-06-26 02:34:13 字數 2306 閱讀 6862

下面的案例主要介紹反彙編的使用價值,即在軟體加解密方面的應用,可以很好地體會到基本的彙編指令在實踐中的應用,也可以認識到ollydbg在軟體除錯過程中的威力。

選用的示例程式crackme.exe程式來自看雪論壇的「從零開始用ollydbg cracking」系列。本文只做學習交流用途,不作其他任何用途。

下面開工:

1. 採用ollydbg開啟crackme.exe,命令:f3;

2. 註冊的正確與否,程式會彈出視窗,視窗上會帶有字串,那我們這裡就以正確與否的字串作為線索;命令:右鍵->search for-> all referred strings;

3. 找到如下的string:great work,mate! now try the next crackme!",並且雙擊進入,跳轉到呼叫該字串的地方;

4. 從下圖可見,下面兩個彈出視窗就是最後看到註冊資訊對錯的提醒視窗,那麼以這兩個為線索,檢視是從**跳轉到這兩個函式呼叫起始處的;

5. 滑鼠停在push 30處,可以看到下面的觀察視窗顯示:local call from 0040124c;

也即意味著push 30處是由0040124c處跳轉過來的;那麼檢視該處的指令;

6. 此處關鍵的指令就在401241處,通過該處指令的比較,來確定後面序列號的正確與否,再來選擇後面的跳轉。

7. 通過在cmp eax, 0指令處打斷點,我們f9執行程式,程式彈出註冊視窗,我們輸入:

然後按ok後,整個程式就停在我們下斷點的地方。如下圖所示,

8. 根據右邊的注釋,上述的流程就很清晰,401228處的指令將使用者名稱abc字串位址壓入,然後進行處理後,將結果儲存在eax中,後面的將序列號123也做同樣的處理;可以猜測對於序列號操作的結果應該輸出在ebx中,這樣後面的cmp eax, ebx這條語句才說得通;

9. 我們f7單步跟入40122d的函式呼叫,看到如下的處理過程:

簡單跟蹤下的話,可以發現上述的**等同於下面的c語言**:

int namecrack(char* str)

sum = sum ^ 0x5678;

return sum;

}

對於我們的輸入abc,上述函式的輸出為:0x56be;

10. 同樣地,我們對於401238處的指令也進行跟蹤除錯:

上述的**等同於下面的c**:

int numcrack(char* str)

return (sum ^ 0x1234);

}

11.根據除錯,eax和ebx的值分別為:56be和124f,兩者不同,因此解密失敗;為了讓兩者相同,我們保持abc不變,改變序列號來實現。

12. 56be與0x1234亦或操作後的值的十進位制表示為:17546。因此我們只要輸入的字串操作的值sum等於17546即可。又因為數字的assic碼是從」0x31」開始的,

而**中有減去0x30的操作,因此我們輸入的數字只要是17546即可。

注意事項:

1. 除錯時請關閉防毒軟體的實時保護,否則,crackme.exe會被刪除;

2. 「從零開始用ollydbgcracking」系列教材中對該問題的分析是從api getwindowtexta入手;具體分析上也是大同小異;

解密過程中的常用命令小結:

1. 定位使用的模組,ctrl + n;

2. 通過檢視堆疊,找到getwindowtexta使用的buffer的位址;

3. 採用follow in dump找到buffer位址後,可以設定memoryon access型別的break point,這樣一旦訪問到buffer中的資訊,就可以暫停,加速定位;

C 反彙編揭秘1 乙個簡單的C 程式反彙編解析

本系列主要從彙編角度研究c 語言機制和彙編的對應關係。第一篇自然應該從最簡單的開始。c 的源 如下 class my class void method int n my class private int m member int tmain int argc,tchar argv 可以直接deb...

VC下防止反彙編的辦法(1)

最近在看ida的書,講組合語言的部分提到了一種防止遞迴向下彙編器逆向程式的方法 可以看到vc生成的彙編 中新增了一些字首字尾 字首用來儲存呼叫前堆疊頂ebp,還有設定新的堆疊頂位置到ebp。如果有區域性變數,還要減少esp位置 相當於入棧幾個未知資料 以留出區域性變數的位置。注意函式堆疊是從記憶體大...

軟體破解常用彙編命令

軟體破解常用彙編命令 cmp a,b 比較a與b mov a,b 把b值送給a值,使a b ret 返回主程式 nop 無作用,英文 no operation 簡寫,意思 do nothing 機器碼90 ultraedit開啟編輯exe檔案看到90相當彙編語句的nop call 呼叫子程式,子程式...