緩沖區溢位攻擊——使用ollydbg進行除錯
- 一、程式代碼
- 二、尋找main函式入口
- 1、區域分布
- 2、尋找入口
- 3、設定斷點
- 4、進行單步除錯
- 三、實驗總結
一、程式代碼
使用ollydbg除錯進行除錯的程式代碼為
#include <stdio.h>
#include <string.h>
void cpyFrom(char*);
int main(){
char* srcStr="12345678aaaabbbbccccddd";
cpyFrom(srcStr);
printf("welcome back!\n");
return 0;
}
void cpyFrom(char* src){
char dstStr[8];
strcpy(dstStr,src);
printf("%s\n",dstStr);
}
在Dev-C++中的編譯選項選擇32-bit Debug

二、尋找main函式入口
1、區域分布
打開產生的Demo.exe可執行檔案后,ollydbg的界面顯示如下,其功能分布如圖所示,

2、尋找入口
點擊選單欄中的查看(view)→可執行模塊(Executable module),顯示如下:
其中Demo對應的入口即為可執行檔案的main函式入口(004014E0),右擊該行,選擇在CPU中查看代碼(view code in CPU),找到該入口,在該入口下面(可能需要下拉較多的行數),可以看到我們在main函式中賦值的“123”以及要列印的“welcome back!”,可以確認該部分就是main函式,分析代碼也可以看到call Demo.00401535為呼叫void cpyFrom(char* src)函式,所以我們可以考慮在00401535處設定斷點,

3、設定斷點
函式void cpyFrom(char* src)的匯編指令如下,在入口處設定斷點,打開程式后點擊運行程式(F9)則直接在該點處暫停,分析程序省略,

4、進行單步除錯
有意思的是,在單步除錯該函式時,可以通過堆疊觀察到,雖然我們定義了char dstStr[8];,但是實際上在堆疊中分配了16byte的空間,所以如果要讓程式不正常運行,則輸入字串長度要>=16字符(不要忘記每個字串后面還有一個‘\0’),

三、實驗總結
破壞Ebp和回傳地址后可能產生不同的結果,我們都可以通過單步除錯分析出這其中的原因,比如為什么會重復列印字串、為什么會卡住等,對于理解緩沖區溢位的原理很有幫助,在此僅對一些準備程序中的問題給出自己的愚見,不再對具體的程序進行詳細分析,不當之處還請諒解并給予反饋,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/374603.html
標籤:其他
上一篇:【總結】密碼學詳細學習
