從IDA數據庫中提取信息的工具。 idbtool知道如何從V2.0 i64和idb文件)開始所有IDA版本中處理數據庫。您也可以使用idbtool從未封閉的數據庫中恢復信息。
idbtool與IDA v7.0無需更改。
使用IDBTool,您可以在幾秒鐘內搜索數千個.IDB文件。
更準確地說:在我的筆記本電腦上需要:
在IDA中加載大約5 GBYTE IDB文件,大約需要45分鐘。雖然IDB3.H基本上根本不花任何時間,但不超過幾毫秒。
存在此工具的兩個版本:
用蟒蛇寫的
用C ++寫的
兩個存儲庫都包含一個可用於讀取.idb或.i64文件的庫。
用法:
idbtool [options] [database file(s)]
-n或--names將在數據庫中列出所有命名值。-s或--scripts將列出數據庫中存儲的所有腳本。-u或--structs將列出數據庫中存儲的所有結構。-e或--enums將列出數據庫中存儲的所有枚舉。--imports將列出數據庫中的所有導入符號。--funcdirs將列出數據庫中存儲的功能文件夾。-i或--info將打印一些有關數據庫的一般信息。-d或--pagedump dump btree頁面樹內容。--inc , --dec列出了所有記錄中的所有記錄。-q或--query搜索數據庫中的特定記錄。-m或--limit限制-q返回的結果數。-id0 , -id1僅轉儲一個特定部分。--i64 , --i32告訴IDBTool指定的文件來自64或32位數據庫。--recover從包裝的數據庫中回收組文件。--classify總結數據庫中的節點用法--dump Hexdump原始二進制數據需要在命令行上最後指定查詢。
例子:
idbtool [database file(s)] --query "Root Node;V"
將為命令行上指定的所有數據庫列出源二進製文件。
查詢是帶有以下格式的字符串:
示例查詢:
Root Node;V >打印記錄包含源二進制名稱?Root Node - >打印指向根的名稱記錄>Root Node - >打印以根節點ID開頭的前10個記錄。<Root Node - >在rootnode之前用記錄打印10個記錄啟動。.0xff000001;N >打印rootnode名稱條目。#1;N >打印rootnode名稱條目。以兩種不同的方式列出數據庫中的最高節點和後續記錄,第一個:從ffc00000下方的第一個記錄開始,然後列出下一個記錄。第二個:從ffc00000之後的第一個記錄開始,並列出上一張:
--query "<#0xc00000" --limit 2 --inc -v--query ">#0xc00000" --limit 2 --dec -v請注意,這應該是$ MAX NODE記錄中的nodeid。
列出最後兩個記錄:
--limit 2 --dec -v列出前兩個記錄, $ MAX LINK和$ MAX NODE記錄:
--limit 2 --inc -v有幾種方法用於打印數據庫中的所有記錄。如果您想調查更多IDA的內部設備,這可能會很有用。但也可用於從損壞的數據庫中恢復數據。
--inc , --dec可以用來向前或向後方向枚舉所有B樹記錄。-v以獲取更漂亮的密鑰/值輸出--id0走在頁面樹上,而不是記錄樹,打印每個頁面的內容--pagedump線性跳過文件,這還將在已刪除頁面中揭示信息。當IDA或您的計算機在拆卸時崩潰而您尚未保存數據庫時,您將留下幾個文件,其中包含.id0 , .id1 , .nam ,等等的擴展名。
這些文件是未包裝的數據庫,我稱它們naked文件。
使用--filetype和--i64或--i32選項,您可以單獨檢查這些naked文件。或使用--recover選項將它們視為完整的數據庫。 idbtool將自動找出哪些文件將屬於哪個文件。
idbtool可以從.id0文件中找出數據庫的BITSize,但沒有(尚未)來自其他文件。
文件idblib.py包含一個庫。
Willem Hengeveld [email protected]