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

94月/110

難読化手法 ― Opaque Predicate


難読化に用いられたり,電子透かしを入れる場所を確保するために使われたりする技術.常に真(もしくは偽)となる条件文を加え,実行されない部分にダミーのコードを入れておく手法.

ソースコード上でこのような条件文を加えると最適化で削除される可能性がある.そのため,バイナリに直接条件文とダミーコードを挿入したり,静的に真偽が判断できないような条件にしたりと色々考えられている.

この Opaque Predicate でよく使われるのは以下のような実数の特徴を用いたものである.

(v + (v + 1)) / 2 == 0
ある整数とそれに1を足した数を足し合わせると必ず奇数になる.そのため,この条件は常に偽となる.
(v * v) >= 0
ある整数の2乗はかならず正の数となる.そのため,この条件は常に真となる.

参考文献

  • Geneviève Arboit, "A Method for Watermarking Java Programs via Opaque Predicates," In The Fifth International Conference on Electronic Commerce Research (ICECR-5), 2002
  • Christian Collberg, Clark Thomborson, Douglas Low, "Obfuscation techniques for enhancing software security," United States Patent 6,668,325, June 1998, Published: December 20, 2003. http://www.freepatentsonline.com/6668325.html
 
Comments (0) Trackbacks (0)

No comments yet.


Leave a comment

Spam Protection by WP-SpamFree

No trackbacks yet.