1. 程式人生 > 實用技巧 >攻防世界 高手區 serial-150 WP \ IDA遠端動態除錯適合新手

攻防世界 高手區 serial-150 WP \ IDA遠端動態除錯適合新手

攻防世界 高手區 serial-150 WP \ IDA遠端動態除錯適合新手

1.脫殼分析

發現是一個64位ELF檔案,拖進IDA64靜態分析,找不到入口函式,判斷是程式碼混淆,但我比較菜,還不知道把結構改好,所以我只能採取IDA遠端動態除錯。

2.IDA遠端動態除錯——連線

這裡我踩到坑了,我IDA無法連線到Linux虛擬機器,我查了很多資料,最開始以為是防火牆沒關,我用的kali,採用指令ufw disable關閉了防火牆,但是依然連線不上。
然後我看到一個資料,說IDA要遠端動態除錯,有一個非常重要的前提條件,即主機可以和虛擬機器互ping通,我ping了一下,果然ping不通,虛擬機器可以ping主機,但是主機ping不了虛擬機器。看了很多部落格也沒有解決,幾經波折,終於找到原因,操作如下(我使用的VMware):

在這裡插入圖片描述

補充一下遠端連線前面的步驟:

第一步

在這裡插入圖片描述

第二步

虛擬機器中執行Linux_server64(指令:Linux_server64),若出現下圖則執行成功:
在這裡插入圖片描述

第三步

在這裡插入圖片描述
1、檔名
2、檔案地址
3、不填
4、虛擬機器IP地址(在Linux終端使用ifconfig檢視IP)
5、虛擬機器密碼,可以不填

3.IDA遠端動態除錯——除錯

(1)開始除錯:
在這裡插入圖片描述
(2)在這裡插入圖片描述
先點1按鈕,程式執行停止時,點選2按鈕,然後在虛擬機器終端中輸入任意字串,然後回車,在IDA中按F8(但步步過),直到地址變為4開頭
在這裡插入圖片描述
在這裡插入圖片描述
可以發現這個出現cmp指令,這是一個關鍵地方,我們通過彙編指令可以知道flag的長度為10h即16,在此處設下斷點

(3)F8繼續向下除錯
在這裡插入圖片描述
通過這個cmp指令可以判斷flag第一個字元是E;
繼續除錯
在這裡插入圖片描述
劃重點!!!!! 這張圖包含資訊很多,ptr[rbp-200h]是輸入的第一個字元,ptr[rbp-1F1h]是輸入的最後一個字元(為什麼?因為200h-1F1h=15D),通過add指令可以知道,這裡把第一個字元和最後一個字元相加了,然後和9Bh作比較,因為首字元是E,那麼據此,做減法,可以得到最後一個字元應該是V。
(4)重複(2)和(3)的步驟可以得到完整的flag
EZ9dmq4c8g9G7bAV