Mega Code Archive

 
Categories / Delphi / Examples
 

Protecting code the ... dizzy way

Title: Protecting code the ... dizzy way Question: Code crackers do not only use debuggers but also reverse dissassemblers, that allow viewing code in a more readable form. Crackers set breakpoints (typically on windows calls or messages), and "peek" on the source code before actually single-stepping back. This is a small example of how to insert VARIABLE dummy code between valid statements, which can make reverse-dissassembling and single-stepping a nightmare. Answer: Conditional ASM statements that actually insert dummy code are of this kind: JMP here DB byte,byte,byte,byte ; garble data here: so actually the garble data never get executed. One can find a LOT of combinations that actually drive reverse dissassemblers nuts. This include file, when used, includes variable length dummy statements ----- This is the Include file AsmDizzy.inc: ------ {$IFDEF DIZZY4} {$UNDEF DIZZY1} {$UNDEF DIZZY2} {$UNDEF DIZZY3} {$UNDEF DIZZY4} {$ENDIF} {$IFDEF DIZZY3} {$IFNDEF DIZZY4} Asm DB $EB,$06,$55,$44,$55,$03,$a8,$09; end; {$DEFINE DIZZY4} {$ENDIF} {$ENDIF} {$IFDEF DIZZY2} {$IFNDEF DIZZY3} {$IFNDEF DIZZY4} Asm DB $EB,$04,$75,$13,$a2,$14; end; {$DEFINE DIZZY3} {$ENDIF} {$ENDIF} {$ENDIF} {$IFNDEF DIZZY1} {$IFNDEF DIZZY2} {$IFNDEF DIZZY3} {$IFNDEF DIZZY4} Asm DB $EB,$04,$55,$03,$a7,$44; end; {$DEFINE DIZZY2} {$ENDIF} {$ENDIF} {$ENDIF} {$ENDIF} ; ---- End of incude file ---- Having this include file, try putting this code in the event of a button click. The code executes normally, but a lot of VARIABLE garble code is between the statements, some times 4,5 or 6 bytes wide. procedure TForm1.Button1Click(Sender: TObject); begin {$I AsmDizzy.inc} ShowMessage('1'); {$I AsmDizzy.inc} ShowMessage('2'); {$I AsmDizzy.inc} ShowMessage('3'); {$I AsmDizzy.inc} ShowMessage('4'); {$I AsmDizzy.inc} ShowMessage('1'); end; This can make singlestepping a nightmare, even with simple statements (ShowMessage) in-between. The .inc file can be enhanced to produce real random code, but this is a task for you to do.