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

154月/110

難読化手法 ― If 文をtry-catchに置換


If文を隠すため,If文の代わりにtry-catch節を使う難読化手法.ダミーの例外クラスを作成し,try 節の中で作成した例外クラスを投げる.投げられた例外クラスに応じた catch 節で条件分岐を行う.

作成された例外クラス間の継承関係が複雑なほど,また,どの例外クラスのインスタンスが作成されたのかがわからないほど制御フローがわかりにくくなる.実際に作成される例外クラスはOpaque Predicateで隠すことになるだろう.

難読化前
class Example{
  public void m(){
    int i = 0;
    if(some condition) i = 3;
    else               i = 0;
  }
}
難読化後
class BranchException extends Exception{ ... }
class E1 extends BranchException{ ... }
class E2 extends BranchException{ ... }
class E3 extends BranchException{ ... }
class E4 extends BranchException{ ... }
class E5 extends BranchException{ ... }
class RIITCBObfuscationExample{
  public void m{
    int i = 0;
    try{
      BranchException e = new BranchException();
      if(opaque predicate 1)      e = new E1();
      else if(opaque predicate 2) e = new E2();
      else if(opaque predicate 3) e = new E3();
      else if(opaque predicate 4) e = new E4();
      else if(opaque predicate 5) e = new E5();
      throw e;
    }
    catch(E1 e1){ i = 1; }
    catch(E2 e2){ i = 2; }
    catch(E3 e3){ i = 3; }
    catch(E4 e4){ i = 4; }
    catch(E5 e5){ i = 5; }
    catch(BranchException e){ i = 0; }
  }
}

参考文献

  • Martha A. Mercaldi, "Using exceptions to obstruct analysis of control flow structure," Bachelor\'s Thesis, Harvard College, Cambridge, Massachusetts, Apr. 2002.
  • Yusuke Sakabe, Masakazu Soshi, and Atsuko Miyaji. Java obfuscation with a theoretical basis for building secure mobile agents. In Antonio Lioy and Daniele Mazzocchi, editors, Seventh IFIP TC-6 TC-11 Conference on Communications and Multimedia Security (CMS\'03), volume 2828 of Lecture Notes in Computer Science, pp.89-103. Springer-Verlag, October 2003.
  • http://www.sable.mcgill.ca/JBCO/examples.html#RIITCB
 
Comments (0) Trackbacks (0)

No comments yet.


Leave a comment

Spam Protection by WP-SpamFree

No trackbacks yet.