Como proteger tu codigo

Los crackers utilizan desensambladores que permiten ver el código de una forma más clara, para ello ponen breakpoints (típicamente en llamadas de windows o mensajes) y modifican el código antes del siguiente salto.
Por tanto para dificultar el desensamblado, lo que hacemos es insertar código ASM en nuestros procedimientos

Las declaraciones condicionales ASM que insertan código son de este tipo:

JMP aquí
DB byte,byte,byte,byte ; datos basura

Lo que vamos a realizar es un archivo que se insertará en nuestro programa, que genere complejidad en el conjunto de instrucciones ASM, pero que sea transparente a nuestra aplicación.

----- Este es el archivo include: AsmParam.inc: ------
{$IFDEF Param4}
{$UNDEF Param1}
{$UNDEF Param2}
{$UNDEF Param3}
{$UNDEF Param4}
{$ENDIF}
{$IFDEF Param3}
{$IFNDEF Param4}
asm
DB $EB,$06,$55,$44,$55,$03,$a8,$09;
end;
{$DEFINE Param4}
{$ENDIF}
{$ENDIF}
{$IFDEF Param2}
{$IFNDEF Param3}
{$IFNDEF Param4}
asm
DB $EB,$04,$75,$13,$a2,$14;
end;
{$DEFINE Param3}
{$ENDIF}
{$ENDIF}
{$ENDIF}
{$IFNDEF Param1}
{$IFNDEF Param2}
{$IFNDEF Param3}
{$IFNDEF Param4}
asm
DB $EB,$04,$55,$03,$a7,$44;
end;
{$DEFINE Param2}
{$ENDIF}
{$ENDIF}
{$ENDIF}
{$ENDIF}
;
---- Fin del archivo include----


Una vez que tenemos este archivo se inserta entre las líneas de código del evento Onclic de un botón.
El procedimiento se ejecuta normalmente, con la diferencia de que en este caso se incluye un montón de código basura.

procedure TForm1.Button1Click(Sender: TObject);
begin
{$I AsmParam.inc}
ShowMessage('1');
{$I AsmParam.inc}
ShowMessage('2');
{$I AsmParam.inc}
ShowMessage('3');
{$I AsmParam.inc}
ShowMessage('4');
{$I AsmParam.inc}
ShowMessage('1');
end;
Esto puede convertir el desensamblado en una pesadilla incluso con procedimientos simples como Showmessage. El archivo ".inc" puede ser mejorado para producir código aleatorio.

No hay comentarios:

Publicar un comentario