IDA+windbg除錯設定
心血來潮想到做crackme來練練手,只借助IDA吧,很難跟蹤程式執行過程中的資料;只借助windbg吧,沒法修改變數名。開著IDA邊改函式名,邊根據程式碼偏移在windbg中定位實在很低效,所以我想有沒有什麼辦法能把兩者結合起來?最後在hex-ray.com上找到了解決方案:<Debugging Windows Applications with IDA Windbg Plugin>。
這篇文章介紹了4種除錯情景,具體操作步驟完全可以參考這篇文章。本文對文中提到的設定除錯Win32 App所需的步驟做一點簡化:IDA的"windbg plugin"依賴於windbg目錄下的dbgeng.dll,hex-ray.com建議修改IDA安裝目錄下cfg/ida.cfg中的DBGTOOLS的路徑,使他指向windbg.exe所在的目錄。作為替代方案,可以把windbg.exe所在目錄新增到環境變數PATH中。如下:
設定環境變數後在IDA中選擇偵錯程式:Debugger-“Select a debugger”,選擇windbg:
完成後IDA中F9(執行),啟動除錯介面,紅框中輸入windbg命令,不過部分元命令(如 .cls)好像沒什麼用:
需要注意的是除錯時用到的快捷鍵是IDA的快捷鍵,如下斷點是F2,而不是windbg的F9;單步分別是F7,F8,而不是windbg的F10/F11。
最後的Tips:
按IDA的說法idb程式碼資料庫檔案可以在不同機器間傳輸,供其他人逆向分析。我在實際除錯過程中發現,除錯時,最好把逆向的程式放到c:\之類跟使用者名稱無關的目錄下,比如我把逆向的程式放在c:\studio下。為什麼這麼做?.idb檔案好像記錄了IDA載入的exe檔案的路徑。如果IDA在A機器上的d:\studio下載入並生成1.idb檔案,當把1.idb檔案拷貝到B機器c:\studio下並開啟進行除錯,IDA會一直報錯:找不到目標,哪怕把1.exe拷貝到B機器c:\studio下,仍然無法除錯。唯一的解決方案是在不同機器間,用相同的路徑名存放idb檔案