cafebabe.jp 日々のよしなしごとをのたまうブログ.

74月/110

難読化手法 ― 文字列暗号化


プログラム中に現われる文字列リテラルを予め暗号化しておき,実行時に復号することで,プログラム中から解析の手掛かりを隠す難読化手法である.

この手法は実装が簡単であるため,多くの難読化ツールで実現されている.バイナリをダンプしただけでは意味のないデータしか出てこないため,カジュアルハッキングを防止するためにも有効であろう.

具体例として,以下の単純なHello Worldプログラムを考える.なお,ほとんどの難読化ツールはバイナリを対象としているため,厳密には以下の例と異なっている場合がある.

public class HelloWorld{
  public static void main(String[] args){
    System.out.println("Hello World");
  }
}

このプログラムの文字列である"Hello World"をカエサル暗号(鍵1)で暗号化すると以下のようになる(実際に文字列暗号化アルゴリズムを適用するときはDESやAESなどを用いるであろう)

public class HelloWorld{
  public static void main(String[] args){
    System.out.println(decrypt("Ifmmp Xpsme"));
  }
  private static String decrypt(String cryptString){
    // decrypt routine
  }
}

この手法の問題点は,復号アルゴリズムと復号鍵もプログラムに含まれている点にある.復号アルゴリズムと復号鍵の両方がバイナリ中に含まれているために,知識のあるクラッカーにとって,機械的に逆難読化することも難しくない.

より難読化の強度を高めるためには復号アルゴリズム,復号鍵,プログラムの3つを如何に分離するかを考える必要がある.

 
Comments (0) Trackbacks (0)

No comments yet.


Leave a comment

Spam Protection by WP-SpamFree

No trackbacks yet.