知識センター

リバースエンジニアリング
Reverse Engineering

Androidパッケージ(APK)ファイルにおいて、ソースコードと様々なリソースを抽出する行為は、リバースエンジニアリングを代表する例だと言えます。Apktool、dex2jar、jd-gui、JADなどのAPKファイルの逆コンパイルには、多様に役立つツールがあります。このようなツールによって、Androidモバイルアプリケーションをとても簡単にハッキングできるようになりました。ハッカーは、様々な検証プロセスを迂回し、アプリ内の広告を非アクティブ化することができます。一部は、より改善されたアプリを開発・再生産するために、あるいはアプリケーションの操作や特殊機能を見つけるために、アプリをハッキングすることもできます。そのため、モバイルアプリがリバースエンジニアリングされないよう、最高レベルのセキュリティを維持することは大変重要です。

Objective-CやJavaなどの言語のコンパイラには、クラスとインターフェースの定義とバイナリ内のクラス間の相互関係が含まれます。このような情報は、攻撃者がアプリを攻撃する際、まずはじめに探し出すものです。Objective-Cのランタイムは、アプリケーションがセレクターにおいてインプリメンテーションでマッピングされるよう修正します。攻撃者は、このような特性を活用し、システムライブラリインターフェースをモニタリングし、復号化関数に対する呼出を横取りします。アプリケーションは、適切なキーをこの関数のパラメータとして送り、攻撃者はキーを盗むことができます。そのため、ランタイムのときにアプリ自らが防御できるようロジックを階層化し、適切に具現化しなければなりません。こうすることで、ルーティングやジェルブレイクされたモバイルデバイスからの攻撃も弾力的に防御することができます。