一個簡單LINUX程序的逆向


開始之前的准備:

反匯編:IDA

十六進制編輯器: Hexworkshop

LINUX環境: KALI LINUX

調試: EDB (KALI自帶的)

 

  一個簡單的動態追碼, 大牛們就略過吧…… 

 

用16進制打開看看,前面有個明顯的ELF標志

 

image

 

 

然后運行下看是啥樣的……

 

image

 

額。。。  一個輸入密碼   然后驗證的程序

下面說下我的做法吧:

主要是    靜態分析(IDA)    和動態調試  (EDB)   

 

把這個CM3扔到IDA中靜態分析image

 

 

 

 

 

 

在它調用的函數名稱表里可以看到   GETS,MEMCMP等函數。。。。       然后可以自己腦補一下這個程序的運作了。。。。

 

用IDA的反編譯功能,      在主界面F5一下 就能得到  接近源碼的東西

(算法看起來很復雜的樣子)

 

 

image 

 

 

 

 

 

前面還有一大堆賦值語句暫時先不管。。

 

然后這里是關鍵點,拿 2個字符串進行 比較,  正確就出答案   ……  而在IDA分析中  這2個字符串的值都是未定義,  所以可以想到應該是在動態調試中生成的。

image

 

 

 

 

然后進入第2部分  :動態調試階段  

用EDB 載入

image

 

 

一路F8來到關鍵CALL

image

 

前面的賦值對應於

image

 

繼續F8可以看到一堆CALL,   於IDA分析的  PUTS()等函數對應

image

 

 

密碼是經過算法動態生成的, 通過分析源碼中有一個CALL (MEMCMP) ,對應的反匯編也會有,所以我們一路跟至程序末尾,找到這個CALL  , 此時內存中也會有相應的密碼。

 

 

image

TEST EAX,EAX  

JNZ 。。。。

驗證密碼是否正確。

 

此時棧中也有了對應的密碼….

image

 

 

 

 

image

 

就搞定了……

image


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM