Protección del código: Nueva protección de descompilación del lenguaje MQL4(Build 600+) y otras técnicas de crack.

 

Hola,

He leído sobre el nuevo mql4(Build 600+) y ya he actualizado mis EAs, ahora tengo una pregunta. Que tan segura es la nueva protección contra crackers y otros tipos de crackeo de ejecutables y modificación del código. EX: edición hexadecimal de la fecha de caducidad, volcados de memoria, etc. ¿Qué tan segura es una simple restricción de tiempo( fecha de expiración) en un EA ahora? ¿Cómo implementar nuevas técnicas de protección utilizando el nuevo lenguaje?

Ej:

bool Expire=TimeCurrent()>StrToTime("2014.09.30 00:00");
    if( Expire ) {
                Print("Demo period has expired: 2014.09.30 00:00 -  Contact: investguy@gmail.com ");
                return(1);
        }  

Gracias

 

Por lo que dijo Renat (CEO de Metaquotes) :

  • Los nuevos ex4 son código nativo (como DLL) y no más pseudocódigo. Así que son más difíciles de descompilar.
  • Los ex4 están comprimidos (u otra técnica de ofuscación no conocida) por lo que al descompilarlos es difícil entenderlos.
  • Los ex4 para Market están encriptados. La técnica exacta utilizada no está disponible públicamente.

Informo de estos datos de memoria, así que espero no cometer un error. Tampoco compruebo estas informaciones en la práctica.

 
Gracias por la respuesta, pero no ha aportado mucho a mis conocimientos. ¿Es posible descompilar? ¿Podría ser posible en un futuro próximo? (¿alguna apuesta?)
 
investguy:
Gracias por la respuesta, pero no ha aportado mucho a mis conocimientos. ¿Es posible descompilar? ¿Podría ser posible en un futuro próximo? (¿alguna apuesta?)

Según tengo entendido, un producto encriptado no se puede descompilar. Primero hay que desencriptarlo. Un producto siempre se puede descompilar. Pero es una cuestión de costes. Si te costó 10$ descompilar un ex4 antiguo, puede que el nuevo ex4 necesite 1.000.000$ (por decir algo). ¿Te haces una idea?

 
StrToTime("2014.09.30 00:00");

Una cadena pura es fácil de hackear. Intenta compilarlo y ver si la cadena es visible en el ex4. Se supone que está encriptada ahora (Build 6xx). Verifica.

Además, ¿por qué usar una cadena? Usa una fecha real de 8 bytes.

#define  EXPIRATION D'2014.09.30 00:00'
 

Está encriptado pero desgraciadamente las variables de propiedad siguen siendo visibles.

 
investguy: Está encriptado, pero desgraciadamente las variables de propiedad siguen siendo visibles.
Eso no es desafortunado, es a propósito. Si no puedes leer el copywrite en el archivo, entonces no está copiado. Pero la cadena de fecha no es visible.
 
investguy:

Hola,

He leído sobre el nuevo mql4(Build 600+) y ya he actualizado mis EAs, ahora tengo una pregunta. Que tan segura es la nueva protección contra crackers y otros tipos de crackeo de ejecutables y modificación del código. EX: edición hexadecimal de la fecha de caducidad, volcados de memoria, etc. ¿Qué tan segura es una simple restricción de tiempo (fecha de expiración) en un EA ahora? ¿Cómo implementar nuevas técnicas de protección utilizando el nuevo lenguaje?

Ej:

Gracias


AFAIK, no existe la posibilidad, hasta ahora, de un descompilador que funcione actualmente para .ex4 compilado con Build 6xx


PERO, el problema con su código, para cualquier persona realmente interesada en descifrarlo, es que es muy fácil convertir su

if (condition...)

a

if (!condition

O incluso más fácil, a NOP que return(1)

Para resumir, Descompilar no es posible ahora.


Pero lo que aún es posible es desensamblar el código. Y para cualquier persona con poco conocimiento de ensamblador, hacer ingeniería inversa de tu código y crackearlo sería bastante fácil.

 
yokinfx: Pero lo que sí es posible es desensamblar el código. Y para cualquier persona con pocos conocimientos de ensamblador, hacer ingeniería inversa de su código y descifrarlo sería bastante fácil.
No se supone que sea código de máquina, se supone que esté encriptado.
 
yokinfx:


AFAIK, no existe la posibilidad, hasta ahora, de un descompilador que funcione actualmente para .ex4 compilado con Build 6xx


PERO, el problema de tu código, para quien esté realmente interesado en descifrarlo, es que es muy fácil convertir tu

a

O incluso más fácil, a NOP que return(1)

Para resumir, Descompilar no es posible ahora.


Pero lo que sí es posible es desensamblar el código. Y para cualquiera con pocos conocimientos de ensamblador, hacer ingeniería inversa de tu código y crackearlo sería bastante fácil.

¿De verdad? ¿Puedes probarlo?
 
Ponga su código en una DLL. Esa es la respuesta premiada desde MQL2.