My earliest memory defeating copy protection went like this: typical for games of my system in those days, programs were loaded from tape, and often consisted of a small stub program in BASIC to do loading/protection, followed by raw assembly loaded directly into memory .. if you tried to break out of the game and return to the BASIC interpreter, the stub loader would trap the break and issue a "NEW" command, 'wiping' the program from memory.<p>Well, someone figured out that all the NEW command did was set a single byte to #400, which was the top of usable memory or something, and then the interpreter would see .. nothing. So we wrote an "OLD" command that simply replaced that value with maximum memory avialable - and voila, program loaded again! I'll never forget the joy of typing in that 10-line OLD command, loading up a protected game, breaking into BASIC, seeing that the game had been 'wiped', then typing 'OLD' to get it all back again .. so I could save it to tape again. That moment sent me off on a wonderful journey that is still not over, 30 years later .. I think copy protection is responsible for motivating more software development by hackers over the decades than, perhaps, any other aspect ..