PreEmptive Solutions

PreEmptive Solutions


PreEmptive Protection for iOS
Dotfuscator for .NET/Xamarin
DashO for Java/Android

参考情報 サポート

AG-TECH製品ライン


ご利用いただくお客様層に合わせた AG-TECH サポートサービスをご用意しております。



製品別FAQ参考資料
サポートサービスサポートフォーム

お問い合わせはこちら



* Dotfuscator、DashO、Overload-Induction、Runtime Intelligence、PreEmptive Analytics、PreEmptive Analytics for TFS、PreEmptive Solutions ロゴ、Dotfuscator ロゴ、および DashO ロゴは PreEmptive Solutions, LLC の商標です。
*その他、会社名、アプリケーション名、システム名などは一般に各メーカの登録商標または商標です。

難読化およびアプリケーションセキュリティ技術について

ソースコードの難読化は、幾重もの防御を作成するために、互いに補完することができる多くの異なる技術から構成されています。難読化およびアプリケーションセキュリティ技術の典型的な例には、次のものがあります。



名前変更

メソッドと変数の名前を変更いたします。これは、コンパイルされていないソースを人間には理解しづらくしますが、プログラムの実行には影響しません。新しい名前は、 "a"、 "b"、 "c"、数字、印字不能文字、または不可視文字のような異なる規則を利用することができます。また、スコープが異なる限り、名前をオーバーロードすることができます。名前の難読化は、ほとんどの .NET、iOS、Java および Android の難読化ツールで使用される基本的な変換です。

文字列暗号化

実行ファイルからは、すべての文字列が明確に検出でき、読み取り可能です。メソッドと変数の名前が変更されても、バイナリ内の文字列を検索することによって、重要なソースコードの箇所を見つけることができます。これには、ユーザーに表示されるメッセージ(特にエラーメッセージ)が含まれます。この種の攻撃に対して有効なバリアを提供するために、文字列の暗号化は実行ファイル内の文字列を隠し、必要なときだけ元の値に戻します。実行時に文字列を復号すると、通常、実行パフォーマンスがわずかに低下します。

制御フロー難読化

制御フローの難読化は、実行可能なロジックを生成するように条件付き分岐や繰り返しの構文を合成しますが、逆コンパイル時にはロジック的に意味のない多くのコードも生成します。簡単に言うと、逆コンパイルされたコードは、ハッカーが理解することが非常に難しいスパゲッティロジックのように見えます。これらの手法は、実行時のパフォーマンスに影響を与える可能性があります。

命令パターンの変換

コンパイラによって生成された一般的な命令を、理解しにくい他の構造に変換します。これらは、Java や C# のような高水準の言語にきれいにマッピングされないかもしれないですが、文法的には完全に正しい機械語の命令です。1つの例は、Java および .NET ランタイムのスタックベースの性質を利用する、可変長のキャッシングです。

ダミーコードの挿入

プログラムのロジックに影響を与えず、逆コンパイラを止めたり、リバースエンジニアリングされたコードを分析するのがはるかに難しくなるように、コード中、にダミーのコードを挿入する。

未使用コードとメタデータの削除

アプリケーションからデバッグ情報や重要でないメタデータとコードを削除することで、実行コードを小さくし、攻撃者が入手できる情報を最小限に減らすことができます。これにより、実行時のパフォーマンスが向上する可能性があります。

バイナリのリンク・マージ

この変換は、複数の実行ファイルやライブラリを、1つ以上の出力バイナリにリンクします。リンクすることで、アプリケーションのサイズを小さくすることができます。特に、名前の変更や不要コードの削除をした上でリンクすると、展開されるコードが単純化され、ハッカーが利用できる情報が減少する可能性があります。

不明瞭な述語(predicate)挿入

条件付き分岐を追加することで、定まっている結果(値)を、静的分析では判別できない結果(値)に見えるように難読化します。これは、実際には実行されない不正なコードを導入する方法ですが、逆コンパイルされた出力を理解しようとする攻撃者にとって混乱を招きます。

改ざん検出

難読化ツールは、アプリケーションの自己保護機能をコードに挿入して、アプリケーションが改ざんされていないことを確認できます。改ざんが検出された場合、アプリケーションのシャットダウン、機能の制限、ランダム的なクラッシュ(クラッシュの理由を隠すため)、またはその他のユーザー定義したコードの実行が可能です。また、管理者やクラウド上のアクセス解析ツールなどのサービスにメッセージを送信して、検出された改ざんの詳細データを提供することもできます。

デバッガ検出

ハッカーがアプリケーションの違法コピーや偽造を試みたり、データを盗んだり、インフラストラクチャソフトウェアの重要な部分の動作を変更したりするときは、逆コンパイラでリバースエンジニアリングをし、デバッガでアプリケーションを実行することから始めます。難読化ツールは、アプリケーションがデバッガ内で実行されているかどうかを検出するためのコードを注入することで、アプリケーションの自己保護機能を実現します。デバッガを使用すると、機密データが壊れたり(盗難から保護される)、ランダムなクラッシュが発生したり(デバッグチェックの結果であることを隠すため)、その他のユーザー定義したコードの実行が可能です。また、警告を出すために設定されたサービスにメッセージを送信することもあります。

リバースエンジニアリングコード
この資料では、.NETとJavaの世界で「バイナリとソースコードが等しい」ことを実証し、リバースエンジニアリングがもたらす可能性のある種類のリスクと、アプリケーションの難読化がどのように役立つかについて説明します。 >>> 詳しくはこちら