required in order to run the program. One solution employed by some dongle
developers has been to divide the program into numerous small chunks that
are each encrypted using a different key. During runtime only part of the pro-
gram remains decrypted in memory at any given moment, and decryption
requires different keys for different areas of the program.
When you think about it, even if the protected program is divided into hun-
dreds of chunks, each encrypted using a different key that is hidden in the
dongle, the program remains vulnerable to cracking. Essentially, all that
would be needed in order to crack such a protection would be for the cracker
to obtain all the keys from the dongle, probably by just tracing the traffic
between the program and the dongle during runtime. Once those keys are
obtained, it is possible to write an emulator program that emulates the dongle
and provides all the necessary keys to the program while it is running. Emula-
tor programs are typically device drivers that are designed to mimic the
behavior of the real dongle’s device driver and fool the protected program into
thinking it is communicating with the real dongle when in fact it is communi-
cating with an emulator. This way the program runs and decrypts each com-
ponent whenever it is necessary. It is not necessary to make any changes to the
protected program because it runs fine thinking that the dongle is installed. Of
course, in order to accomplish such a feat the cracker would usually need to
have access to a real dongle.
The solution to this problem only became economically feasible in recent
years, because it involves the inclusion of an actual encryption engine within
the dongle. This completely changes the rules of the game because it is no
longer possible to rip the keys from the dongle and emulate the dongle. When
the dongle actually has a microprocessor and is able to internally decrypt data,
it becomes possible to hide the keys inside the dongle and there is never a need
to expose the encryption keys to the untrusted CPU. Keeping the encryption
keys safe inside the dongle makes it effectively impossible to emulate the don-
gle. At that point the only approach a cracker can take is to rip the decrypted
code from memory piece by piece. Remember that smart protection technolo-
gies never keep the entire program unencrypted in memory, so this might not
be as easy as it sounds.
Software as a Service
As time moves on, more and more computers are permanently connected to the
Internet, and the connections are getting faster and more reliable. This has cre-
ated a natural transition towards server-based software. Server-based software
isn’t a suitable model for every type of software, but certain applications can
really benefit from it. This model is mentioned here because it is a highly secure
protection model (though it is rarely seen as a protection model at all). It is effec-
tively impossible to access the service without the vendor’s control because the
vendor owns and maintains the servers on which the program runs.
Piracy and Copy Protection 317