概要
Dotfuscator を使用すると、アセンブリに存在するユーザー文字列を隠すことができます。 一般的な攻撃手法は、バイナリ内部の文字列参照を検索して、重要なコード セクションを見つけることです。
たとえば、次のような例です。
- ユーザーのアプリケーションが時間でロックされる場合、アプリケーションは、タイムアウトが発生するときにメッセージを表示する可能性があります。 攻撃者は逆アセンブルまたは逆コンパイルした出力に対し検索を行うことで、そのようなメッセージを検索します。そしてメッセージを見つけてしまったとき、攻撃者は機密性の高い時間ロック アルゴリズムに非常に近いところにいることでしょう。
- 登録と検証の処理を迂回しようと試みる者は、プログラムがユーザーにシリアル番号を要求する文字列を検索することがあります。 その文字列を見つけると、その文字列の周辺の命令を探して、ロジックを変更するのです。
文字列の暗号化は、アプリケーション内の文字列をスクランブルすることによって、これら両方の攻撃を減らせる可能性があります。攻撃者が検索しても文字列が見つからなくなるためです。
例
処理前:
処理後:
制限事項
const
文字列は暗号化されませんが、それらを使用するすべての場所は、文字列を暗号化したもので更新されます。 これを回避するには、除去を有効にし、[除去]エディターの[オプション]タブで、[除去の種類]を[リテラルのみ削除(const 定義)]に設定します。
いくつかの計算集約型(高度な繰り返しコード)が文字列を生成している(おそらく、ログ記録の目的のため)場合は、それらの文字列を復号するために余分なメソッド呼び出しを実行する必要があるため、パフォーマンスが低下するかもしれません。
対象選択の指定
名前の変更や制御フローは、具体的に項目が対象から除外されない限り、できるだけ多くのコードを変換しますが、文字列の暗号化は、既定では文字列を一切暗号化しません。 アセンブリ内のすべての文字列の暗号化を有効にするには、単に[文字列の暗号化]エディターの[対象]タブを開き、アセンブリ ノードのチェック ボックスをオンにするだけです(再帰的に、すべてのサブ項目もオンになります)。
関連