Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

 
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 18-11-2016
Reasen Reasen is offline
Miembro
NULL
 
Registrado: dic 2015
Ubicación: Barcelona
Posts: 140
Poder: 9
Reasen Va por buen camino
Post Protegiendo tu aplicación contra crackers

Ya estoy bastante harto de ver el 99,9% de las aplicaciones crackeadas... Quiero explicar un poco los métodos que uso para evitarlo. Empecemos.
Esta guía trata de proteger un sistema de licencias basado en seriales conectados online, la protección offline también es posible pero no hablaré de eso aquí (por ahora) porque es mucho más complejo.

Entendiendo porque mis aplicaciones son vulnerables

Veamos un sencillo procedimiento de verificación.
Código Delphi [-]
//Comprobamos en servidor blablablabla
  If licence = false then
  Showmessage('Licencia Incorrecta ')
  Else
  frmMain.Show;
Desensamblamos el software y nos encontraremos algo como esto
Código PHP:
JE 0x194854 
El cracker solo tendrá que cambiar el JE por JMP que saltará siempre y seremos crackeados.


Implica que nos crackearian por el simple hecho de tocar un byte en memoria, ni siquiera un packer nos puede proteger contra esto porque como bien indica memoria, un packer no puede proteger la memoria, excepto si virtualizas el procedimiento, aun virtualizando el código ensamblador no es suficiente ya que puede dejar el código de frmmain.show mas arriba etc.


En resumen, No hay NADA que puedas hacer si dependes de condiciones.
(No dejo nombres de packers que virtualizan porque sería publicidad, pero es recomendable también virtualizar para complicar más las cosas)

Aplicando la protección mediante strings

Como ya visto anteriormente el cracker va a intentar cambiar el valor false a true para que el software entienda que la licencia es válida, vamos a complicarle la vida…. (risa muy malvada)

“¿Eh pero puedo encriptar todas las strings del software para dejarlo mas seguro?”
Sí pero para debuguear si luego falla algo será “problemático”, recomiendo que uses MadExcept en el proceso, es gratis (no comercial), luego lo desactivas para comercializar y listo.
“¿Pero es demasiado trabajo todo esto, no?”
Sí, por eso tocaría programar un poco unas tools para que cojan las strings y las encripten

Dejo un ejemplo de cómo tendría que ser.
Código Delphi [-]
  Mail := CreateOleObject('CDO.Message');
    Mail.From := UserSMTP;
    Mail.Subject := Title;
    Mail.HTMLBody := BodyText;
    Mail.to := Target;
    Mail.Configuration.Fields.Item('http://schemas.microsoft.com/cdo/configuration/sendusername') := UserSMTP;
  //blablablabla
  

//Ahora encriptamos las strings
   
    Mail := CreateOleObject(DeCryptDataHW(Proc[0]));
    Mail.From := UserSMTP;
    Mail.Subject := Title;
    Mail.HTMLBody := BodyText;
    Mail.to := Target;
    Mail.Configuration.Fields.Item(DeCryptDataHW(Proc[1])) := UserSMTP;

Las strings quedarían así: CDO.Message|http://schemas.microsoft.com/cdo/configuration/sendusername|
Esto se deja en un txt oculto en nuestro servidor.

Entendiendo el funcionamiento del servidor-cliente para la protección

Algoritmo recomendado: RC4, puedes usar AES etc. etc., pero con RC4 ya está bien.Es muy recomendable modificar el algoritmo RC4 ligeramente.


Puedes hacerlo en puro PHP la parte del servidor si te quieres ahorrar un VPS.


Cuando el usuario se loguee correctamente enviaremos las strings encriptadas al clientes basándonos en el HWID de la máquina. Si no haces lo de ir basándote en el HWID el cracker creará un emulador para enviar las mismas peticiones y no sirve de nada.


Dicho esto en cliente(Delphi) desencripta la cadena y luego esplitea las strings
Y la va reponiendo en un array global Proc[0] ..1..2..3


Se puede complicar mucho más todo el procedimiento como incluso hacer que la licencia auto-banee si detecta algo inusual y 100 cosas mas,

estoy dejando lo esencial (idea base) para que saquéis vuestras propias conclusiones.


Ahora el cracker se tiene que romper la cabeza reponiendo una a una cada string…
Responder Con Cita
 



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Validar XML contra un XML Schema Sagara Internet 1 09-03-2010 07:23:31
Autobus contra Elefanta...... egostar La Taberna 20 25-09-2008 19:02:13
Contra los curiosos... Faust Humor 0 08-08-2008 02:07:32
Aplicacion Dephi contra Interbase en red WAN Luis F. Orjuela Firebird e Interbase 2 19-08-2004 09:34:01
Contra la Piratería diegolf Varios 8 12-08-2004 19:01:45


La franja horaria es GMT +2. Ahora son las 04:03:29.


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
Copyright 1996-2007 Club Delphi