Zach Heidepriem
(zachary@cs.arizona.edu)
A signature is embedded into the executable via a reordering of basic blocks. The signature is unique to each authorized copy of the code.
The watermark, a string, is encoded into a permutation, for example "hi" may be encoded into {2,1,3}. The watermarker will find a method in the input jar file with at least three basic blocks. It will rearrange these blocks so that the second block is first, the first is second, and the second is third, as prescribed by {2,1,3}. The recognizer uses the original jar file to recover the ordering from the watermarked jar. This ordering is then decoded into the original watermark (a string).
Patent #5,559,884, Sep. 24, 1996 (by the Microsoft Corporation).