動態調試ELF文件Crackme

文件運行

文件放入虛擬機 /root 目錄下

查看文件信息

是讀寫屬性

修改文件屬性,添加可執行

運行

大體意思是:運行時須要輸入命令行參數 --key <內容>

帶命令行參數運行

提示錯誤的key

IDA 動靜結合調試

靜態分析

查看文件信息

使用32位IDA打開這個程序

跟蹤call main 發現跟到了交叉引用

跟蹤main 上一條的offset,有一個流程圖

具體行爲

先申請了一個內存空間

命令行參數的比較

爲--key的時候 不跳轉,而後取出第二個命令行參數。比較完不爲 --key 後,要進行下一輪的比較,繼續往下觀察

對另外一個字符串作了個操做 而這個字符串恰好是第二個命令行參數

對字符串(亂碼)作了些操做並輸出猜想是解密函數,有多是輸出正確或者錯誤的提示

觀察對字符串作操做的函數

會對申請的空間作一些操做,能夠下斷點在calloc處,觀察後續 對這個內存的操做

基本上流程也就這些了,接下來進行動態調試

動態調試

調試器設置

命令行參數傳遞


直接寫參數,多個參數以空格間隔

設置斷點

比較命令行參數處設置斷點

除去 --key 比較第二個參數的函數

解密字符串caloc處下斷點,須要它的返回值EAX

循環結束後設置一個斷點,觀察內存變成什麼樣了

程序運行狀態

點擊運行按鍵
兩條警告後彈出一個選擇調試信息文件(經嘗試選擇原文件自己就能夠了)

比較key的地方

與明文字符串比較的地方

比較完以後對比 EAX的值 跟蹤接下來的流程

解密字符串 F7 進入上邊的 CALL 804853B
caloc 後內存窗口跟蹤EAX的值,F9 到函數結束的地方

因此,應該傳入的參數是hello15

從新設置參數動態觀察

比較完長度,比較完每個字符後,返回1

跟蹤接下來的解密 函數F9 到函數結束處的斷點

解密出正確的提示

直接驗證

總結

這個簡單小程序複習了Linux的一些經常使用操做指令,如:

文件的信息    ls -l         readelf -h Crackme
文件屬性的修改    chmode 777 Crackme
可執行文件的運行:    ./Crackme
Linux下IDA 的靜態分析和動態分析方法

因爲這個IDA6.4版本不能直接F5 查看C語言代碼,能夠在Windows下靜態分析完,再到Linux 下進行測試,不過,仍是但願進行直接看彙編代碼。熟能生巧嘛!
相關文章
相關標籤/搜索