Obfuscationテクニック
Obfuscationについて書かれた書籍は日本語ではほとんどないが広い範囲でテクニックがある。使用する言語や条件によって様々である。一覧にしておく。
- 変数名、メソッド、クラス名のリネーム。
言語によってコンパイル時になくなってしまうものとそうでないものがある。
- パッキング
コードを動的に圧縮することで一手間をかけさせる。
- 制御フロー
このロジックをトレースしづらくする。
- 指示パターン変換
コンパイラによって生成されるコードを通常とは異なるものにする。
- 数学、ロジック表現変換
シンプルな数学、ロジック表現を複雑で同等なものに置き換える。
- ダミーコード挿入
リバースエンジニアリング時のコード理解を邪魔する。
- メタデータ、未使用コード削除
ヒントとなる情報を攻撃者に与えない。
- バイナリリンク
複数のライブラリを一つのバイナリにすることで、得られる情報を少なくする。
- Opaque Predicate
常に成立する条件をif文に用いることでフロー解析を邪魔する。
例えば、
2つの連続する整数をかけたものは2で割り切れる。
3つの連続する整数をかけたものは3で割り切れる。
- 文字列の暗号化
バイナリ内の文字列を隠すため暗号化を行う。
- コード転置
ルーチンを並び替える