Christian Collberg
(collberg@cs.arizona.edu)
Gregg Townsend
(gmt@cs.arizona.edu)
This algorithm is a dynamic software watermarking method
that embeds the watermark in the topology of a graph
structure built at runtime.
Watermarking a Java jar-file using the CT algorithm
and recognizing that watermark requires several
phases. First, the source program has to be annotated.
This means that calls to
sandmark.watermark.trace.Annotator.mark()
are added to the source program in locations where it
is OK to insert watermarking code. Next, the source
program is compiled and packaged into a jar-file.
Then the program is traced, i.e. run with a
special (secret) input sequence. This constructs a trace-file,
a sequence of mark()-calls that were encountered during the
tracing run. The next step is embedding which is
where the watermark is actually added to the program, using
the data from the tracing run.
Before distributing the resulting watermarked program it should be obfuscated, otherwise it will be susceptible to collusive attacks.
The watermark is recognized by again running it with the special input sequence.
These different steps are described further here: