从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]