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.

When planning to implement a protection, keep these three costs in mind:<br />

Development time<br />

Designing and writing an effective software protection is quite difficult. The programmer<br />

must have knowledge of assembly language and operating system<br />

internals and some experience with protection cracking techniques. Writing and<br />

testing a protection takes valuable resources away from application development.<br />

As a result, it is tempting to use a third-party software protection rather<br />

than to develop one from scratch. This is often a mistake, however, because<br />

most commercial software protections are well known to protection crackers<br />

and can be bypassed quite easily. If you are using a third-party software protection,<br />

be sure to supplement it with additional in-house protection mechanisms.<br />

Debugging difficulty<br />

Any software protection worth using is going to make the application difficult to<br />

debug; after all, this is what a protection is designed to prevent. Protections that<br />

rely on CPU-specific instructions or data structures internal to the operating system<br />

may very well introduce bugs into an otherwise working application. Supporting<br />

such applications on a wide variety of hardware and operating systems<br />

can be a nightmare, especially with a large number of users actively reporting<br />

problems. Once again, these factors may seem to favor the use of third-party<br />

software protections; however, as mentioned above, the gain from such protections<br />

is often minimal.<br />

Maintainability<br />

Incorporating a software protection into an application often comes at the price<br />

of code understandability. Months or years after the protection has been developed,<br />

the programmers maintaining the application may no longer be able to<br />

understand the protection or the code it protects. This can result in modifications<br />

to the application that result in the protection’s failing.<br />

The techniques of software protection are often at odds with the goals of code reusability<br />

and maintainability. Most methods entail the obfuscation of code and data<br />

within the binary, while some attempt to foil the use of standard analysis tools such<br />

as debuggers and disassemblers. Because the obfuscation must take place at a binary<br />

level rather than a source-code level, and because binary analysis tools work with an<br />

assembly language representation of the binary rather than with the original source<br />

code, many of the anti-tampering techniques presented are implemented at the<br />

assembly-language level.<br />

Anti-tampering techniques<br />

This chapter is concerned with preventing software tampering: detecting changes in<br />

a compiled application, combating the use of common cracking tools, and preventing<br />

the understanding of code and data. There are four main approaches to anti-tampering<br />

covered here:<br />

652 | Chapter 12: Anti-Tampering<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!