開始之前的准備:
反匯編:IDA
十六進制編輯器: Hexworkshop
LINUX環境: KALI LINUX
調試: EDB (KALI自帶的)
一個簡單的動態追碼, 大牛們就略過吧……
用16進制打開看看,前面有個明顯的ELF標志
然后運行下看是啥樣的……
額。。。 一個輸入密碼 然后驗證的程序
下面說下我的做法吧:
主要是 靜態分析(IDA) 和動態調試 (EDB)
在它調用的函數名稱表里可以看到 GETS,MEMCMP等函數。。。。 然后可以自己腦補一下這個程序的運作了。。。。
用IDA的反編譯功能, 在主界面F5一下 就能得到 接近源碼的東西
(算法看起來很復雜的樣子)
前面還有一大堆賦值語句暫時先不管。。
然后這里是關鍵點,拿 2個字符串進行 比較, 正確就出答案 …… 而在IDA分析中 這2個字符串的值都是未定義, 所以可以想到應該是在動態調試中生成的。
然后進入第2部分 :動態調試階段
用EDB 載入
一路F8來到關鍵CALL
前面的賦值對應於
繼續F8可以看到一堆CALL, 於IDA分析的 PUTS()等函數對應
密碼是經過算法動態生成的, 通過分析源碼中有一個CALL (MEMCMP) ,對應的反匯編也會有,所以我們一路跟至程序末尾,找到這個CALL , 此時內存中也會有相應的密碼。
TEST EAX,EAX
JNZ 。。。。
驗證密碼是否正確。
此時棧中也有了對應的密碼….
就搞定了……