Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Protegiendo tu aplicación contra crackers (https://www.clubdelphi.com/foros/showthread.php?t=91142)

mamcx 21-11-2016 16:34:25

Cita:

Empezado por Neftali (Mensaje 511054)
Muchos de los cracks que aparecen por ahí se basan en aplicar unos pasos sencillos o en conocer de forma básica 4 herramientas estandard para estos temas. El hecho de hacer "algo diferente" que implica que alguien se tiene que poner a descubrirlo de forma "única para tu programa", en muchos casos "desanima" a quienes quieren hacer un trabajo sencillo y rápido (que son la mayoría).

Ok, una mejor forma de decirlo es:

- Nunca inventes tu propio esquema/algoritmo de seguridad.
(Pero la implementación se puede ajustar).

Más importante en si que cada linea de codigo, es como se construye el aparato de seguridad. Hay técnicas, procesos y pasos que se deben entender. Estamos mucho mas enfocados en "como encriptar un valor" en vez de pensar de forma holística "que pasos y medidas conducen a tener informacion protegida".

Un algoritmo criptográfico es un ejemplo. No hay que "cambiarlo" sin conocimiento claro del porque. Sin embargo, que encripto, cuándo, y qué hago con eso es algo en lo que tengo libertad.


Mejor?

Reasen 21-11-2016 16:52:54

Paso a dejar un ejemplo para detectar "breakpoints de hardware" que es lo que se suele usar en herramientas de cracking
Si el valor no devuelve 0 esque alguien nos esta intentando crackear :D


Código Delphi [-]
function checkBP(): integer;
var
  NumBps: integer;
  Context: TContext;
  hThread: Thandle;
begin

  NumBps := 0;
  ZeroMemory(@Context, sizeof(TContext));
  Context.ContextFlags := CONTEXT_DEBUG_REGISTERS;
  hThread := GetCurrentThread();

  GetThreadContext(hThread, Context);

  if (Context.Dr0 = 0) = false then
    inc(NumBps);
  if (Context.Dr1 = 0) = false then
    inc(NumBps);
  if (Context.Dr2 = 0) = false then
    inc(NumBps);
  if (Context.Dr3 = 0) = false then
    inc(NumBps);

  result := NumBps;

end;


Esto no cubre breakpoints en memoria o código.
Este tipo de breakpoint lo suele usar el cracker si se le complica la situación, como encontrarse con un anti-debugger.

juanelo 21-11-2016 17:38:18

Cita:

Empezado por Neftali;511054

Por experiencia propia puedo decir que a veces un poco de ingenio y de creatividad propia, es mucho mejor que una protección basada en métodos estándar.

Muchos de los cracks que aparecen por ahí se basan en aplicar unos pasos sencillos o en conocer de forma básica 4 herramientas estandard para estos temas. El hecho de hacer "algo diferente" que implica que alguien se tiene que poner a descubrirlo de forma [U
"única para tu programa"[/u], en muchos casos "desanima" a quienes quieren hacer un trabajo sencillo y rápido (que son la mayoría).

Muy de acuerdo con esto, y recordar que los grandes y complejos algoritmos de encriptacion han sido ideados por gente como tu o como yo, nunca menosprecies tus conocimientos (aunque tampoco te sobrevalores).


La franja horaria es GMT +2. Ahora son las 23:25:40.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi