關於動態調試的一些事情(一)

0x0 前言

動態調試是指用戶跟蹤軟件的運行,從而協助自己解決軟件的問題。想成爲一個優秀的開發者或逆向工程師,動態調試都是必不可少的技術之一。接下來我們就由淺及深慢慢道來。

0x1 涉及工具

codeblocks
ida
注:截圖中工具爲codeblcoks 13.12,ida 7.0

0x2 codeblocks

對於剛剛接觸編程的人來說,codeblcoks的調試功能可能比較陌生,但是當代碼的複雜度提升後,調試可以幫助我們更好的發現代碼的錯誤。
這裏寫圖片描述
點擊File->New->Project新建一個工程
這裏寫圖片描述
選擇命令行程序,創建工程,創建時注意觀察保存路徑,成功後我們可以在Manager視圖看到剛纔所建的工程以及一個以及創建好的main.c文件。注意:創建好工程後,其餘不在工程中的代碼文件無法編譯,即編譯時會默認編譯工程中文件。
這裏寫圖片描述
接下來我們在main文件中寫一個簡單的輸入驗證程序

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
    char password[]="admin123";
    char username[]="admin";
    char user[10];
    char pass[10];
    scanf("%10s",user);
    scanf("%10s",pass);
    if(!strcmp(user,username)&&!strcmp(pass,password))
    {
        puts("welcome~");
    }
    else
    {
        puts("wrong!");
    }
    return 0;
}

對輸入的user和pass與固定字符串進行比較。
這裏寫圖片描述
在代碼左側單擊下斷點(對於斷點不瞭解的可以百度一下,這裏不再贅述),然後我們點擊Debug->Start運行程序
這裏寫圖片描述
因爲我們的斷點下在了輸入語句之後,所以我們需要先在命令行輸入user和pass的值,可以看到在原先的紅色點上面出現了一個黃色三角,這就是程序將要執行的下一行。 接下來我們點擊Debug->Debugging windows->Watches,打開變量面板
這裏寫圖片描述
可以看到我們代碼中所定義的四個變量以及他們的值,接下來我們就可以通過下一行、步入、步過指令進行分析程序了~
這裏寫圖片描述

0x3 IDA

由於這是一個學逆向的人寫的經驗分享,所以我們還是回到逆向上來。 IDA作爲逆向的神器,其可以將彙編代碼轉化爲僞代碼的功能受到無數人的喜愛。 我們在剛纔的工程文件夾下找到編譯出的Exe文件,用ida打開(注意64位程序用ida64打開,32位程序用ida打開)。打開後ida會定位到程序的入口點,按空格從視圖轉化爲代碼段,我們看到一大片不認識的代碼一定感到很慌張,不過不要緊,我們按F5就可以將代碼反編譯爲僞代碼了~
這裏寫圖片描述

和codeblocks類似,在僞代碼左邊單擊下斷點,不同的是我們需要選擇我們需要的調試器,由於我們是windows系統上的程序,這裏我們選擇Local windows debug。

這裏寫圖片描述
然後我們點擊綠色的三角開始調試,和codeblocks一樣,當對user和pass賦值後,程序停在斷點處,還是按F5將代碼變爲僞代碼。 我們單擊Debugger->debugger windows->locals打開變量視圖查看變量的值。
這裏寫圖片描述

這樣我們就成功的將程序跑了起來,調試之路正式起航~

0x4 未完待續

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章