/$$ /$$ /$$
| $$ /$$/ | $$
| $$ /$$/ /$$$$$$ /$$$$$$ /$$$$$$ /$$$$$$
| $$$$$/ |____ $$ /$$__ $$|_ $$_/ |____ $$
| $$ $$ /$$$$$$$| $$ \__/ | $$ /$$$$$$$
| $$\ $$ /$$__ $$| $$ | $$ /$$ /$$__ $$
| $$ \ $$| $$$$$$$| $$ | $$$$/| $$$$$$$
|__/ \__/ \_______/|__/ \___/ \_______/
"Karta"(俄语中意为"地图")是一个 IDA Python 插件,用于识别并匹配给定二进制文件中的开源库。该插件采用独特技术,能够支持超大型二进制文件(超过20万个函数),且几乎不影响整体性能。
匹配算法基于位置驱动。这意味着其主要目标是定位不同的已编译文件,并根据每个文件的函数在文件中的原始顺序进行匹配。这样一来,匹配的复杂度取决于 K(开源库中的函数数量),而非 N(二进制文件的大小),由于通常 N >> K,从而获得了显著的性能提升。
我们认为该 IDA 插件主要有三个使用场景:
对于使用 Python 3 的最新版本,只需 git clone 仓库并运行 setup.py install 脚本即可。从 v2.0.0 版本开始支持 Python 3。
自 IDA 7.4 发布以来,Karta 仅针对 IDA 7.4 或更新版本以及 Python 3 进行积极开发。Python 2 和旧版 IDA 仍可通过 v1.2.0 版本支持,由于 Python 2.X 已停止维护,该版本很可能是最后一个受支持的版本。
Karta 的识别器是一个小型插件,用于识别二进制文件中存在的(受支持的)开源库并指纹化其版本。无需反复逆向分析同一个开源库,只需运行识别器插件即可获得已使用开源库的详细列表。 Karta 目前支持 10 多个开源库,包括:
识别出所使用的开源库后,可以针对特定库(例如 libpng version 1.2.29)编译一个 .JSON 配置文件。配置完成后,Karta 将自动尝试匹配已加载二进制文件中开源库的函数(符号)。此外,如果您的开源库使用了外部函数(如 memcpy、fread 或 zlib_inflate),Karta 也会尝试匹配这些外部函数。
本项目由我(联系方式见下文)在 Check Point 研究团队(Check Point Research)的支持下开发。
本仓库由我 Eyal Itkin 在 Check Point Research 期间开发并维护。遗憾的是,随着我离开研究团队,我将无法再维护此仓库。这主要是因为运行所有回归测试以及涉及多个 IDA Pro 版本所需的诸多要求。
请接受我诚挚的歉意。