21.03.2013 Views

Problem - Kevin Tafuro

Problem - Kevin Tafuro

Problem - Kevin Tafuro

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

ure or to examine a hardware validation protection. Dealing with such attackers<br />

requires using every technique at your disposal. Encrypt the application in memory,<br />

embed a virtual machine to disassociate machine code instructions from effects in<br />

the application, or even embed the core algorithms in custom hardware.<br />

The goal of software protection<br />

You must realize that the goal of any specific software protection is not to protect the<br />

software but instead to discourage the potential cracker. For any given application<br />

that is being protected, you should assume that the cracker has absolute control over<br />

the physical and software components of the system on which the application is running.<br />

Hardware may be emulated or custom-designed; the operating system and relevant<br />

tools may be patched or written from scratch; the network may be an isolated<br />

LAN or even a series of loopback devices on a single machine. What this boils down<br />

to is that there are few, if any, components of the system that the application can<br />

assume to be trusted. This does not mean that writing software protection is futile;<br />

rather, it means that you must set realistic goals for the software protection.<br />

The most basic goal of a protection is to increase the level of skill required to crack<br />

the application. Anyone with reasonable programming knowledge and a good<br />

debugger can trace through an application, find the conditional jumps that a protection<br />

makes in the course of its validation, and disable them. A custom packing utility<br />

that unpacks only a few instructions at a time, contains a fair amount of antidebugging<br />

code, and reuses code and data addresses to make reconstructing a process<br />

image difficult, will require a good deal of experience in protection cracking to<br />

defeat.<br />

The ultimate goal is to disguise the nature of the protection itself. Software protections<br />

fail primarily because they are easy to spot. When the correct location of a protection<br />

is known, the application is 90% cracked. The strongest encryption and the<br />

most innovative anti-debugging techniques only serve to lead the cracker directly to<br />

your software protection. At that point, it is simply a matter of time before the protection<br />

is circumvented. The protection checks should be as unpredictable as possible,<br />

so that the cracker finds it difficult to consistently trigger the protection;<br />

likewise, the effects of the protection should be hidden, performing long-term code<br />

or data corruption that will eventually render the application useless, rather than displaying<br />

a message or refusing to execute portions of the application.<br />

The cost of software protection<br />

There is obviously a cost associated with developing a software protection. Often,<br />

this cost is extremely high in comparison to the benefits obtained. A protection that<br />

takes a week to develop will take an hour or two to defeat, while a month of development<br />

might produce a protection that takes a day to bypass. In short, the cost for the<br />

attacker, in terms of time and skill, is almost always much lower than the cost for the<br />

developer.<br />

Understanding the <strong>Problem</strong> of Software Protection | 651<br />

This is the Title of the Book, eMatter Edition<br />

Copyright © 2007 O’Reilly & Associates, Inc. All rights reserved.

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!