[論文レビュー] Automated Deobfuscation of Android Native Binary Code
本稿では、Obfuscator-LLVM (O-LLVM) で保護された Android ネイティブバイナリコードを自動で復号化する最初のシステムである DiANa を提案する。静的タグ分析とフローフレンドリーな記号実行を組み合わせることで、高精度な制御フローダイアグラムの復元が可能となり、実世界の変換済み関数において最大 0.963 の類似度スコアを達成した。
With the popularity of Android apps, different techniques have been proposed to enhance app protection. As an effective approach to prevent reverse engineering, obfuscation can be used to serve both benign and malicious purposes. In recent years, more and more sensitive logic or data have been implemented as obfuscated native code because of the limitations of Java bytecode. As a result, native code obfuscation becomes a great obstacle for security analysis to understand the complicated logic. In this paper, we propose DiANa, an automated system to facilitate the deobfuscation of native binary code in Android apps. Specifically, given a binary obfuscated by Obfuscator-LLVM (the most popular native code obfuscator), DiANa is capable of recovering the original Control Flow Graph. To the best of our knowledge, DiANa is the first system that aims to tackle the problem of Android native binary deobfuscation. We have applied DiANa in different scenarios, and the experimental results demonstrate the effectiveness of DiANa based on generic similarity comparison metrics.
研究の動機と目的
- O-LLVM で保護された Android ネイティブコードの復号化を支援する自動化ツールの不足に応えること。
- ARM 固有の命令最適化、制御フローフラットネス、記号実行におけるパス爆発といった課題を克服すること。
- セキュリティ分析やマルウェアの逆解析を支援するため、変換済みネイティブバイナリから元のプログラム論理を正確に回復できること。
- 元のコードと復号化済みコードの意味的同等性を保ちながら、スケーラブルかつ高精度な復号化ソリューションを提供すること。
提案手法
- 静的タグ分析を適用し、変換済み命令間で意味論的情報を特定・伝搬することで、意味論的レベルでの復号化を可能にする。
- フローフレンドリーな記号実行を用いて、制御フローフラットネスによって破壊された複雑な制御フローデザインを再構築する。
- 静的特徴に基づいて制御フローを切断し、キーブロックを選択することで、分析ターゲットのシーケンスを動的に調整し、文脈継承を最大化する。
- 記号実行における状態保存を再構成可能にするメカニズムを導入し、パス爆発を抑制しながら重要な実行パスを保持する。
- 初期のバイナリディスアセンブリには IDA Pro を、記号実行には Angr を使用し、統合された復号化パイプラインに統合する。
- 構造的類似度指標(例:CFG 類似度)と、入力出力比較による意味的同等性テストを用いて、復号化結果を検証する。
実験結果
リサーチクエスチョン
- RQ1O-LLVM で保護された Android ネイティブバイナリの自動復号化は、高い構造的忠実性で達成可能か?
- RQ2タグ分析と記号実行の組み合わせは、ARM アーキテクチャの変換済みネイティブコードから制御フローを回復するのにどの程度有効か?
- RQ3DiANa は、元の関数と復号化済み関数との間で意味的同等性をどの程度保持しているか?
- RQ4O-LLVM を用いた ARM バイナリの復号化において、主な課題は何か。実務的にそれらをどのように軽減できるか?
- RQ5DiANa は、さまざまな変換タイプ(例:CFF、ALL)および実世界の Android アプリケーションにおいて、どの程度の性能を示すか?
主な発見
- 制御フローフラットネス(CFF)変換の下で、"send_magicmsg" 関数では制御フローダイアグラム(CFG)類似度スコアが 0.963、"search_goodnum" 関数では 0.939 を達成した。
- すべての O-LLVM テクニックを含むより複雑な "ALL" 変換シナリオにおいても、DiANa は高い正確性を維持し、同じ関数で類似度スコアが 0.962 および 0.900 を記録した。
- 1,500 個の入力でテストした結果、すべてのテストケースで意味的同等性が確認され、元の関数と復号化済み関数の出力が同一であった。
- 被呼出し関数の処理や状態損失に起因する記号実行におけるわずかな不一致が見られたが、手動での分析により、意味論が保持されていることが確認された。
- パス爆発を抑制するため、記号実行の状態を制限し、知的かつ的確に管理することで、効率性を向上させつつ正確性を損なわずに実現した。
- 復号化済みの CFG は、元の変換済みバージョンよりもはるかに人間が読みやすいものであり、特にシステムコールのシーケンスと主要な論理が明確に浮き彫りになった。
より良い研究を、今すぐ始めましょう
論文の読解から最終レビューまで、研究時間を劇的に削減しましょう。
クレジットカード登録不要
このレビューはAIが作成し、人間の編集者が確認しました。