難読化技術

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 の商標です。
*その他、会社名、アプリケーション名、システム名などは一般に各メーカの登録商標または商標です。

オーバーロード誘導

Dotfuscator および DashO™ には PreEmptive Solutions 社が特許を保有する「オーバーロード誘導 (Overload Induction™)」名前変更システムが実装されています。 オーバーロード誘導は、その名が示す通り可能な限り多くのメソッドに対しオーバーロードを誘導します。

このアルゴリズムは名前を再利用可能な機会を全て検出し、それらを利用します。 多くのお客様からご報告いただいた平均では、全メソッドの 33% が "a" 1文字にリネームされ、さらに 10% のメソッドが "b" にリネームされました。



オーバーロード誘導の動作


このアルゴリズムは 1文字の名称へのリネームに限定されているわけではありませんが、 本アルゴリズムの開発のきっかけとなったのは、可能な限り小さな Java 実行可能形式を作成したいという要望でした。通常のリネームアルゴリズムでは、"getX" のような名称を見つけるとその全てのインスタンスを全体を通じて "a"という 短い名称へと変換します。ただ不幸なことに、文字 "a" はそれ以降メソッド名の衝突の恐れがあるため利用できません。PreEmptive Solutions 社が特許を保有するオーバーロード誘導名前変更システムでは、そのような衝突を全て検出し、利用可能な名称の最小集合を生成するのです。

その効果が顕著に現れる例としては、Adobe Acrobat® の内部用 Java バージョンでは全てのメソッドの 30% が "a" にリネームされました。また Activerse 社の Ding™ 製品では 28% が "a" にリネームされ、さらに 11% が "b" にリネームされました。DashO-Pro v2.2 では、自分自身を処理してみたところ全メソッドの 41% が "a" に、またさらに 12% が "b" にリネームされました。

なお、これらの数値はリネーム不能なメソッドを含めた全メソッドに対する値である点に留意してください。 例えば、コンストラクタやスタティックなイニシャライザおよびシステムメソッドのオーバーライドはリネームできません。従って、リネーム可能なメソッドに対するパーセンテージを調べれば、結果はより高い変換率を示すはずです。


プログラムのサイズ縮小

オーバーロード誘導により、極限までサイズの最小化と情報の除去を実現します。
以下に実際の除去結果をいくつか示します。

Adobe™社の Acrobat™ Reader の Java バージョンを DashO-Pro で処理してみました。
メインビューアの main メソッドをトリガとした場合:


プロジェクトの最終クラス数 694
解析中にアクセスされたクラス数 846
メソッド数 (処理後/オリジナル) 3521/3999 (除去率: 11.95%)
フィールド数 (処理後/オリジナル) 2728/3614 (除去率: 24.51%)
コンスタント数 (処理後/オリジナル) 66713/85832 (除去率: 22.27%)

リネームの結果、サイズは jar ファイル状態で 30% 縮小されました。
JavaFig - Unix の xfig の移植版です。 UI ベースの Java プログラムでは最良のものの1つです。


プロジェクトの最終クラス数 66
解析中にアクセスされたクラス数 155
メソッド数 (処理後/オリジナル) 785/910 (125 個のメソッドを除去 - 13.7%)
フィールド数 (処理後/オリジナル) 756/963 (207 このフィールドを除去 - 21.4%)
コンスタント数 (処理後/オリジナル) 15544/16400 (856 個のエントリを除去 - 5.2%)