
IDA Pythonプラグイン。バイナリ内のオープンソースライブラリシンボルを高速かつロケーションベースでマッチングし、大規模なファームウェアやマルウェアの効率的なリバースエンジニアリングと脆弱性分析を可能にします。
/$$ /$$ /$$
| $$ /$$/ | $$
| $$ /$$/ /$$$$$$ /$$$$$$ /$$$$$$ /$$$$$$
| $$$$$/ |____ $$ /$$__ $$|_ $$_/ |____ $$
| $$ $$ /$$$$$$$| $$ \__/ | $$ /$$$$$$$
| $$\ $$ /$$__ $$| $$ | $$ /$$ /$$__ $$
| $$ \ $$| $$$$$$$| $$ | $$$$/| $$$$$$$
|__/ \__/ \_______/|__/ \___/ \_______/
「Karta」(ロシア語で「地図」)は、指定されたバイナリ内のオープンソースライブラリを識別しマッチングするIDA Pythonプラグインです。このプラグインは独自の技術を使用しており、巨大なバイナリ(>200,000関数)を全体的なパフォーマンスにほとんど影響を与えずにサポートできます。
マッチングアルゴリズムは位置駆動型です。つまり、異なるコンパイル済みファイルを特定し、各ファイルの関数をファイル内での元の順序に基づいてマッチングすることに主眼を置いています。この方法により、マッチングはN(バイナリのサイズ)ではなくK(オープンソース内の関数数)に依存するため、通常N >> Kであることから大幅なパフォーマンス向上が得られます。
このIDAプラグインには主に3つのユースケースがあると考えています:
最新バージョン(Python 3使用)では、リポジトリをgit cloneし、setup.py installスクリプトを実行するだけです。
Python 3はv2.0.0以降でサポートされています。
IDA 7.4のリリース以降、KartaはIDA 7.4以降およびPython 3に対してのみ積極的に開発されています。 Python 2および古いIDAバージョンはリリースバージョンv1.2.0を使用して引き続きサポートされていますが、Python 2.Xのサポート終了により、これが最後のサポートバージョンになる可能性が高いです。
Kartaの識別子は、バイナリ内に存在する(サポートされている)オープンソースライブラリの存在を特定し、そのバージョンを指紋認証する小型のプラグインです。同じオープンソースライブラリを何度もリバースエンジニアリングする必要はもうありません。識別子プラグインを実行するだけで、使用されているオープンソースの詳細リストが得られます。 Kartaは現在10以上のオープンソースライブラリをサポートしており、以下を含みます:
使用されているオープンソースを特定した後、特定のライブラリ(例えばlibpngバージョン1.2.29など)用の.JSON設定ファイルをコンパイルできます。コンパイルすると、Kartaはロードされたバイナリ内のオープンソースの関数(シンボル)を自動的にマッチングしようとします。さらに、オープンソースが外部関数(memcpy、fread、zlib_inflateなど)を使用している場合、Kartaはそれらの外部関数もマッチングしようとします。
このプロジェクトは、私(連絡先は以下を参照)がCheck Pointの研究グループ(Check Point Research)からの助けとサポートを受けて開発しました。
このリポジトリは、私、Eyal ItkinがCheck Point Researchに在籍中に開発・メンテナンスしていました。残念ながら、研究グループを離れたため、このリポジトリを維持できなくなります。これは主に、すべての回帰テストを実行するための多数の要件と、プロセスに関わるIDA Proのバージョンが原因です。
どうか私の心からの謝罪をお受け入れください。