Discussion de l'article "Sécurisation du code MQL5 : Protection par mot de passe, générateurs de clés, délais, licences à distance et techniques avancées de cryptage des clés de licence EA" - page 3

Vous manquez des opportunités de trading :
- Applications de trading gratuites
- Plus de 8 000 signaux à copier
- Actualités économiques pour explorer les marchés financiers
Inscription
Se connecter
Vous acceptez la politique du site Web et les conditions d'utilisation
Si vous n'avez pas de compte, veuillez vous inscrire
Vous pouvez également remplacer votre porte d'entrée par de l'acier renforcé, mais cela n'empêchera pas l'entrée si vous laissez la clé sur le paillasson. La protection que vous avez décrite est suffisante pour dissuader le codeur occasionnel, mais certainement pas contre un attaquant motivé.
La question ici n'est pas le cryptage - c'est la partie facile - mais plutôt la façon dont vous gérez les clés et le processus de décryptage.
Dans le scénario où un attaquant, que nous appellerons Mallory dans le langage classique, souhaite copier et distribuer un EX5 dont il a la clé, il peut certainement le faire en
i. exécuter l'EX5 avec la clé ;
ii. surveiller le processus en cours d'exécution, par exemple en attachant une DLL au processus, et extraire le contenu de l'EX5 immédiatement après qu'il a été décrypté ;
iii. réassembler l'EX5 en clair (et éventuellement le désassembler en source si l'on peut s'en donner la peine).
Si votre premier point de protection implique la vérification de la signature, tout ce que l'attaquant doit faire pour distribuer des fichiers est de distribuer un exécutable MQL différent avec les clés publiques correspondantes remplacées. Si MQL5 utilise une API cryptographique pour vérifier la certitude, celle-ci peut être extraite du binaire. Et ainsi de suite à l'infini.
Et tout cela avant de commencer à envisager le cauchemar que sera la gestion des clés.
Bien que ce type d'analyse binaire soit hors de ma portée ces jours-ci, je connais plusieurs personnes qui pourraient l'effectuer sans problème. Ce n'est donc pas la force du cryptage qui devrait vous préoccuper, mais plutôt le fait que vous avez un modèle de sécurité invalide. Ce n'est pas un problème particulier en soi, car personne ne s'attend à ce que MetaTrader résolve ce problème - il existe d'autres solutions très utilisables à ce problème, en particulier le fait que le propriétaire du code MQL5/EX5 l'exécute sur un serveur séparé qu'il contrôle et accorde une licence d'accès/signaux aux acheteurs.
Je n'arrive donc pas à comprendre pourquoi les gens demandent cette facilité alors qu'elle est si difficile à mettre en œuvre correctement, du moins sans matériel inviolable.
allicient soulève de nombreux points valables. Pour une protection réelle, je recommande ce qui suit :
Pour une protection de base du code source, insérer autant de fonctions que possible dans une dll devrait suffire. Un code minimal pour l'interface entre MT5 et la programmation est acceptable. Je ne ferais pas confiance au code source complet dans ex4/ex5, à moins que vous ne donniez votre logiciel. Mais cet article traite de la protection de votre propriété intellectuelle pour les produits payants/commerciaux ou les produits gratuits où le code source n'est pas donné.
Pour les licences, la meilleure protection est d'avoir des versions démo et live séparées de la combinaison ex4/dll. La contrepartie est que cela représente un peu plus de tracas pour le développeur et le client, car le développeur doit maintenir/compiler deux versions de son propre logiciel. Mais vous réduisez le risque que quelqu'un obtienne un accès piraté à la version complète du logiciel ; il ne peut utiliser que la version de démonstration. Cela dépend beaucoup de l'objectif de la démo : si vous voulez offrir au client toutes les fonctionnalités, alors vous pouvez utiliser la version de démonstration.
Mettez également en place un système de licence qui peut exiger qu'un petit morceau de code essentiel soit exécuté à distance avant que le logiciel local puisse être exécuté. CNS SaaS (Software as a Service) a justement fait cela, et cela s'appelle les fonctions CCoHS (Call code on hosted server). Vous pouvez placer une partie limitée du code nécessaire au bon fonctionnement de votre EA de manière hébergée.Ainsi, même si quelqu'un s'enfuit avec l'EA, ou craque la dll de licence d'une manière ou d'une autre, cela rendra la dll inutile. Il y a une latence entre le serveur de code hébergé et les serveurs d'EA et/ou de licence, mais vous pouvez contourner ce problème. La mise en œuvre n'est pas trop difficile, mais l'utilisateur doit trouver un moyen de mettre en œuvre CCoHS sur ses propres serveurs. Lorsque vous êtes petit, vous pouvez le faire sur un serveur à budget limité ou n'importe où, puis l'augmenter lorsque votre base d'abonnés s'accroît.
Les fonctions hébergées, bien que les plus chères de toutes les options, offrent une réelle protection au cas où quelqu'un serait en mesure de décompiler votre fichier dll, ce qui est très improbable. Il est probable qu'il "craquerait" le fichier dll pour faire fonctionner votre logiciel. Mais sans les fonctions hébergées requises, il serait toujours inutile. À moins que quelque chose ne m'ait échappé ici.
Article publié Protection des programmes MQL5 : mots de passe, clés, limite de temps, vérification de la licence à distance:
Auteur : investeo
3. Lier au compte - J'ai essayé de lier le travail de l'Expert Advisor au compte. La protection ne fonctionne pas, elle donne le message /le travail de l'Expert Advisor sur ce compte n'est pas autorisé/ , mais l'EA continue à travailler. Il n'y a pas d'erreur lors de la compilation. Je ne comprends pas ce qui ne va pas.
Où placer cette ligne de code ? ? ?
Bonjour, j'ai une question, je veux vendre des conseillers sur mon site mais je ne sais pas comment faire, est-ce que quelqu'un peut m'aider ?
Merci d'avance !
Bonjour,
Merci pour cet article. Merci de me conseiller pour la protection par mot de passe, comment faire pour que lorsque l'on tape le mot de passe, l'entrée s'affiche sous forme d'astérisque ("*") ou de point ("-").
Je ne suis pas un bon programmeur.
Je ne suis pas un bon programmeur.
La protection contre la copie est un problème extrêmement difficile, d'où les efforts de l'industrie de la musique et du cinéma avec les DRM et leurs échecs répétés.
Au mieux, les informations présentées ici feront perdre du temps à certaines personnes ; au pire, vous aurez peut-être donné au lecteur un faux sentiment de sécurité. S'il décide ensuite de "protéger" un produit en suivant vos conseils, il risque d'être quelque peu surpris de voir son consommateur retirer la protection en l'espace de quelques heures et revendre le produit pour une fraction du prix.
Plus sérieusement, l'encodage base64 n'a rien à voir avec le cryptage. L'encodage base64 a été conçu pour permettre de transmettre en toute sécurité des données de 8 bits à l'aide de protocoles qui considèrent que l'encodage des données est de 7 bits. Il est possible d'inverser l'encodage base64 de manière triviale - et il a été conçu dans ce but !
La seule solution que je vois pour distribuer en toute sécurité le logiciel MQL5 est soit d'utiliser les dispositions de la procuration limitée du courtier, soit d'installer une instance de MQL5 avec les fichiers .ex5 sur un serveur quelque part et de permettre au client d'y accéder à l'aide d'un client léger (afin qu'il ne puisse pas télécharger le .ex5). Et oui, j'ai travaillé dans le domaine de la sécurité de l'information pendant plus de 15 ans, j'ai donc une idée assez précise de ce dont je parle.
Pour être honnête, je suis plutôt surpris que Metaquotes ait publié cet article.
Bonjour bonjour consultation j'ai besoin d'aide pour pouvoir réaliser l'utilisation d'un EA par numéro de compte dans mt4 et qui me permet de modifier et qui ne peut fonctionner que les comptes qui sont dans la licence et qui peut l'activer et le désactiver à distance car il utilisait deux mt4 un maître et un esclave je joins la description du code et comment je peux mieux pour que cela fonctionne bien car si j'entre un autre compte qui est hors licence cela fonctionne de la même façon.
<?xml version="1.0" encoding="UTF-8"?>
<license>
<programVersion>
</programVersion>
<licenseType>Full</licenseType>
<validityPeriod>
<endDate>1/18/2080</endDate>
</validityPeriod>
<Owners>
<ownerName>
<Compte>6789</Compte>
<Compte>7994</Compte>
<Compte>22302</Compte>
</ownerName>
</Propriétaires>
<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" />
<Référence URI="">
<Transformations>
<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>
</Référence>
</SignedInfo>
<SignatureValue> p/NlTyHeUy5CVC01H/2WmvTcN8TqJhrInkhqtyzR6vqn/koJHqm6fiD6mepklpn4fud0em7vqOiyWcQ9KQ8jqoyoN9ExkJUEvepWBQT2HHcaoW2kpV17ch+CZvtFX74cHE23WrOi9/p3RoK/4G0rsgvdjvefdZRQRsM5k=</SignatureValue>
</Signature>
</license>
J'ai une idée. Supposons qu'il y ait un moniteur web qui regarde toujours le flux web.
1. Le client EA appelle le serveur web pour obtenir une clé sha.pub qui est générée par le serveur de manière aléatoire.
2. L'EA envoie des données demandant une autorisation au serveur avec la clé pub, de sorte que le moniteur ne peut pas savoir ce que sont les données. Les données peuvent contenir une clé aléatoire générée par le client. Le moniteur ne peut pas décrypter les données à cause de la clé sha.
3. Le serveur reçoit les données et envoie les informations autorisées cryptées par la clé que le client lui a envoyée. Le moniteur peut décrypter ces informations parce qu'il connaît la clé sha du pub, mais il ne connaît pas la clé du client, et ces informations restent donc inutiles.
De cette manière, le serveur peut contrôler le comportement du client EA.
Bonjour, serait-il possible de mettre à jour cet article en tenant compte de la nouvelle version de Python ?
Je n'arrive pas à le faire fonctionner. PS : Python est encore nouveau pour moi.
Merci beaucoup,
Danny