Discusión sobre el artículo "Proteger el código MQL5 Protección con contraseña, generadores de claves, límites de tiempo, licencias remotas y técnicas de encriptación de claves de licencia de EA avanzadas" - página 3
Está perdiendo oportunidades comerciales:
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Registro
Entrada
Usted acepta la política del sitio web y las condiciones de uso
Si no tiene cuenta de usuario, regístrese
La protección que has descrito está bien para disuadir al codificador ocasional, pero desde luego no contra un atacante motivado.
La cuestión aquí no es el cifrado -esa es la parte fácil- sino cómo manejas las claves y el proceso de descifrado.
En el escenario en el que un atacante, en el lenguaje clásico la llamaremos Mallory, desea copiar y distribuir un EX5 del que tiene la clave, entonces seguramente puede hacerlo
i. Ejecutar el EX5 con la clave;
ii. monitorizar el proceso mientras se ejecuta, por ejemplo adjuntando una DLL al proceso, y volcando el contenido del EX5 inmediatamente después de que se descifre;
iii. reensamblar el EX5 ahora en texto plano (y potencialmente desensamblarlo en código fuente si se puede).
Si tu primer punto de protección involucra verificación de firmas, entonces todo lo que el atacante necesita hacer para distribuir archivos es distribuir un ejecutable MQL diferente con las claves públicas relevantes reemplazadas. Si MQL5 usa una API criptográfica para verificar certificaciones, entonces eso puede ser arrancado del binario. Y así hasta el infinito.
Todo esto es antes de empezar a considerar la pesadilla que será su gestión de claves.
Si bien este tipo de análisis binario está fuera de mis capacidades en estos días, Conozco a varias personas que podrían lograrlo sin problemas. Así que no es la fuerza de la encriptación que usted debe estar preocupado, sino más bien que usted tiene un modelo de seguridad no válida. No es un problema particular en sí, como nadie espera MetaTrader para resolver ese problema - hay otras soluciones muy utilizables para este problema, en concreto tener el propietario del código MQL5 / EX5 ejecutarlo en un servidor independiente que controlan y licencia de acceso / señales a los compradores.
Por lo tanto, estoy en una pérdida de entender por qué la gente está exigiendo esta facilidad cuando es tan difícil de implementar correctamente, al menos sin hardware a prueba de manipulaciones.
Para cualquier protección real, recomiendo lo siguiente:
Para la protección básica del código fuente, el relleno de tantas funciones como sea posible en una DLL debe hacer el truco. código mínimo para la interfaz entre MT5 y la programación está bien. Yo no confiaría en el código fuente completo en ex4/ex5, a menos que usted está regalando su software. Pero este artículo es acerca de la protección de su propiedad intelectual para los productos de pago / comerciales o productos gratuitos donde el código fuente no se da.
Para la concesión de licencias, la mejor protección es tener versiones separadas de demostración y de ejecución de la combinación ex4/dll. La contrapartida es que es un poco más complicado para el desarrollador y el cliente, ya que el desarrollador tiene que mantener y compilar dos versiones de su propio software, pero se reduce la posibilidad de que alguien obtenga acceso pirata a la versión completa del software, ya que sólo puede utilizar la versión de demostración. Depende mucho del objetivo de la demo. Si quiere ofrecer al cliente una funcionalidad completa, entonces
Además, implementar licencias que pueden requerir que una pequeña pieza de código esencial se ejecute de forma remota antes de que el software local se puede ejecutar. CNS SaaS (Software as a Service) en realidad ha hecho precisamente esto, y se llama CCoHS (código de llamada en el servidor alojado) funciones. Usted puede colocar una porción limitada de código necesario para que su EA se ejecute correctamente en una forma alojada.Entonces, incluso si alguien se lleva el EA, o crackea la dll de licencia de alguna manera, la dll seguiría siendo inútil. Hay latencia entre el servidor de código alojado y el EA y/o los servidores de licencias, pero se puede solucionar. La implementación no es demasiado difícil, pero el usuario tiene que encontrar una manera de implementar CCoHS en sus propios servidores. Cuando eres pequeño, puedes hacerlo en un servidor económico o donde sea, y luego ampliarlo cuando tu base de suscriptores crezca.
Las funciones alojadas, aunque son las más caras de todas las opciones, ofrecen una protección real en caso de que alguien fuera capaz de descompilar tu dll, lo cual es muy poco probable. Lo más probable es que 'crackearan' la dll para que tu software funcionara. Pero sin las funciones alojadas necesarias, seguiría siendo inútil. A menos que me haya perdido algo aquí.
Artículo publicado Protección de programas MQL5: Contraseñas, claves, límite de tiempo, comprobación remota de licencias:
Autor: investeo
3. Vinculación a la cuenta - He intentado vincular el trabajo del Expert Advisor a la cuenta. La protección no funciona, da el mensaje /el trabajo del Asesor Experto en esta cuenta no está permitido/ , pero el EA sigue operando. No hay errores durante la compilación. No entiendo lo que está mal.
¿Dónde se colocaría esta línea de código. ??
Hola, tengo una duda, quiero vender asesor en mi web pero no se como hacerlo, ¿hay alguien que me pueda ayudar?
¡Gracias de antemano!
Hola,
Gracias por el artículo. Por favor, me aconsejan para la protección de contraseña, cómo hacer cuando escriba la contraseña, la pantalla de entrada como asterisco ("*") o un punto ("-")
No soy buen programador.
Gracias
Siento ser mordaz, pero lo que se presenta en el artículo no es seguridad, sino oscuridad. La protección anticopia es un problema extremadamente difícil, de ahí los esfuerzos de la industria musical y cinematográfica con la DRM y sus repetidos fracasos.
En el mejor de los casos, la información aquí contenida hará perder el tiempo a algunas personas; en el peor, puede haber dado al lector una falsa sensación de seguridad. Si luego deciden "proteger" un producto siguiendo sus consejos, puede que se lleven alguna sorpresa cuando su consumidor elimine la protección en cuestión de horas y lo revenda por una fracción del precio.
En serio - la codificación base64 no está relacionada con el cifrado. La codificación base64 se diseñó para permitir que los datos de 8 bits se transmitieran de forma segura utilizando protocolos que consideran que la codificación de datos es de 7 bits. Se puede invertir trivialmente la codificación base64 - ¡y se diseñó con ese propósito!
La única solución que puedo ver de distribuir de forma segura el software MQL5 es ya sea a través de las disposiciones de poder limitado del corredor, o la instalación de una instancia de MQL5 con los archivos .ex5 en un servidor en algún lugar y permitir el acceso del cliente utilizando un cliente ligero (por lo que no pueden descargar el .ex5). Y sí, he trabajado en seguridad de la información durante más de 15 años, así que tengo una idea justa de lo que estoy hablando.
Para ser honesto, estoy bastante sorprendido de que Metaquotes haya publicado el artículo.
Hola buenas tardes consulta necesito ayuda para poder logar el uso de un EA por número de cuenta en mt4 y que me permita modificar y que solo puedan funcionar las cuentas que estén dentro de la licencia y que lo pueda habilitar y deshabilitar de forma remota ya que utilizó dos mt4 uno master y otro esclavo adjunto la descripción del código y como lo puedo mejor para que funciona bien ya que si ingreso otra cuenta que este por fuera de la licencia me funciona igual
<?xml version="1.0" encoding="UTF-8"?>
<license>
<programVersion>
</programVersion>
<licenseType>Full</licenseType>
<validityPeriod>
<endDate>1/18/2080</endDate>
</validityPeriod>
<Owners>
<ownerName>
<Account>6789</Account>
<Account>7994</Account>
<Account>22302</Account>
</ownerName>
</Owners>
<Signature xmlns="http://www.w3.org/2000/09/xmldsig#">
<SignedInfo>
<CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315" />
<SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1" />
<Reference URI="">
<Transforms>
<Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature" />
</Transforms>
<DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" />
<DigestValue>Cl8vF8+Uyyms3pEodjip5ol5J4s=</DigestValue>
</Reference>
</SignedInfo>
<SignatureValue>p/NlTyHeUy5CVC01H/2WmvTcN8TqJhrInkhqtyzR6vqn/koJHqm6fiD6mepklpn4fud0em7vqOiyWcQ9KQ8jqoyoN9ExkJUEvepWBQT2HHHcaoW2kpV17ch+CZvtFX74cHE23WrOi9/p3RoK/4G0rsgvdjvefdZRQRsM5k=</SignatureValue>
</Signature>
</license>
Tengo una idea. Supongamos que hay un monitor web que siempre mira a través del flujo web.
1. El cliente EA llama al servidor web para obtener una clave sha.pub que es generada por el servidor aleatoriamente.
2. 2. EA envía algunos datos pidiendo autorización al servidor con la clave pub para que el monitor no pueda saber de qué datos se trata. Y en los datos puede contener alguna clave aleatoria generada por el cliente. El monitor no puede descifrar los datos debido a la clave sha.
3. 3. El servidor recibe los datos y envía la información de autorización permitida encriptada por la clave que el cliente le envió. El monitor puede descifrar esta información porque puede conocer la clave sha del pub, pero no conoce la clave del cliente, por lo que sigue siendo inútil.
De esta manera, el servidor puede controlar el comportamiento del cliente EA.
Hola, ¿sería posible actualizar este artículo teniendo en cuenta la nueva versión de Python?
No consigo hacerlo funcionar. PD: Python es todavía nuevo para mí.
Gracias,
Danny