The present invention relates generally to computer software, and more
specifically, to a method and system of making computer software
resistant to tampering and reverse-engineering. Tampering refers to
changing computer software in a manner that is against the wishes of the
original author, and is distinct from obscurity techniques which do not
change the underlieing data or control flow of a program. Broadly
speaking, the method of the invention is to analyse the effectiveness of
various encoding techniques by measuring the number of possible decodings
corresponding to a given encoded world. This analysis gave rise to a
number of new data flow encoding techniques including alternative mixed
encoding (a combination of linear and residue number encoding), and
multinomial encoding.