Diskussion zum Artikel "Schutz von MQL5-Programmen: Passwörter, Schlüssel, Zeitbegrenzung, Berechtigungsfernabfrage" - Seite 3

Sie verpassen Handelsmöglichkeiten:
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Registrierung
Einloggen
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
Sie könnten auch Ihre Haustür durch eine verstärkte Stahltür ersetzen, aber das wird nichts daran ändern, dass Sie nicht eindringen können, wenn Sie den Schlüssel auf der Fußmatte liegen lassen. Der von Ihnen beschriebene Schutz ist gut geeignet, um einen Gelegenheits-Codierer abzuschrecken, aber sicherlich nicht gegen einen motivierten Angreifer.
Die Frage ist hier nicht die Verschlüsselung - das ist der einfache Teil - sondern vielmehr, wie Sie mit den Schlüsseln und dem Entschlüsselungsprozess umgehen.
In dem Szenario, in dem ein Angreifer, nennen wir ihn klassisch Mallory, einen EX5 kopieren und verbreiten möchte, für den er den Schlüssel hat, kann er dies sicherlich tun, indem er
i. die EX5 mit dem Schlüssel ausführen;
ii. den laufenden Prozess überwachen, z.B. durch Anhängen einer DLL an den Prozess, und den Inhalt des EX5 sofort nach dessen Entschlüsselung ausgeben;
iii. den nun im Klartext vorliegenden EX5 wieder zusammensetzen (und möglicherweise in den Quellcode disassemblieren, wenn man sich die Mühe machen kann).
Wenn der erste Punkt des Schutzes die Überprüfung der Signatur beinhaltet, muss der Angreifer nur eine andere ausführbare MQL-Datei mit den entsprechenden öffentlichen Schlüsseln verteilen. Wenn MQL5 eine kryptografische API zur Überprüfung der Zertifizierung verwendet, kann diese aus der Binärdatei herausgelöst werden. Dies setzt sich ad infinitum fort.
Und das alles, bevor Sie den Alptraum der Schlüsselverwaltung in Betracht ziehen.
Diese Art von Binäranalyse übersteigt zwar derzeit meine Fähigkeiten, aber ich kenne mehrere Leute, die das ohne Probleme bewerkstelligen könnten. Es ist also nicht die Stärke der Verschlüsselung, über die Sie sich Sorgen machen sollten, sondern eher, dass Sie ein ungültiges Sicherheitsmodell haben. Es ist kein besonderes Problem an sich, da niemand erwartet, dass MetaTrader dieses Problem löst - es gibt andere sehr brauchbare Lösungen für dieses Problem, insbesondere, dass der Eigentümer des MQL5/EX5-Codes diesen auf einem separaten Server laufen lässt, den er kontrolliert und für den er den Zugang/die Signale für Käufer lizenziert.
Ich kann also nicht verstehen, warum die Leute diese Möglichkeit verlangen, wenn es so schwierig ist, sie richtig zu implementieren, zumindest ohne manipulationssichere Hardware.
allicient bringt viele gute Argumente vor. Für einen echten Schutz empfehle ich Folgendes:
Für den grundlegenden Schutz des Quellcodes sollte es ausreichen, so viele Funktionen wie möglich in eine dll zu packen. Ein minimaler Code für die Schnittstelle zwischen MT5 und der Programmierung ist in Ordnung. Ich würde dem kompletten Quellcode in ex4/ex5 nicht trauen, es sei denn, Sie verschenken Ihre Software. Aber in diesem Artikel geht es um den Schutz Ihres geistigen Eigentums für bezahlte/kommerzielle Produkte oder kostenlose Produkte, bei denen der Quellcode nicht weitergegeben wird.
Für die Lizenzierung ist der beste Schutz, getrennte Demo- und Live-Versionen der ex4/dll-Kombination zu haben. Der Nachteil ist, dass es für den Entwickler und den Kunden etwas mühsamer ist, da der Entwickler zwei Versionen seiner eigenen Software pflegen/kompilieren muss. Aber Sie verringern die Chance, dass sich jemand durch einen Hack Zugang zur Vollversion der Software verschafft; er kann nur die Demoversion benutzen. Vieles hängt vom Ziel der Demo ab: Wenn Sie dem Kunden die volle Funktionalität bieten wollen, dann
Führen Sie außerdem eine Lizenzierung ein, die es erforderlich macht, dass ein kleiner Teil des wesentlichen Codes aus der Ferne ausgeführt werden muss, bevor die lokale Software ausgeführt werden kann. CNS SaaS (Software as a Service) hat genau das getan und nennt es CCoHS-Funktionen (Call code on hosted server). Sie können einen begrenzten Teil des Codes, der für die ordnungsgemäße Ausführung Ihres EA erforderlich ist, in einer gehosteten Form platzieren.Selbst wenn sich jemand mit dem EA aus dem Staub macht oder die Lizenzierungs-Dll irgendwie knackt, wäre die Dll dann immer noch unbrauchbar. Zwischen dem gehosteten Codeserver und den EA- und/oder Lizenzierungsservern besteht eine Latenz, aber das kann man umgehen. Die Implementierung ist nicht allzu schwierig, aber der Benutzer muss einen Weg finden, CCoHS auf seinen eigenen Servern zu implementieren. Wenn Sie klein sind, können Sie dies auf einem Budgetserver oder wo auch immer tun, und dann aufstocken, wenn Ihr Abonnentenstamm wächst.
Gehostete Funktionen sind zwar die teuerste aller Optionen, bieten aber einen echten Schutz für den Fall, dass jemand in der Lage ist, Ihre DLL zu dekompilieren, was sehr unwahrscheinlich ist. Höchstwahrscheinlich würde er die DLL "knacken", um Ihre Software zum Laufen zu bringen. Aber ohne die erforderlichen gehosteten Funktionen wäre sie immer noch nutzlos. Wenn ich hier nicht etwas übersehen habe.
Veröffentlichter Artikel Schutz von MQL5-Programmen: Passwörter, Schlüssel, Zeitlimit, Fernlizenzprüfung:
Autor: investeo
3. Bindung an Konto - Ich habe versucht, die Arbeit des Expert Advisors an das Konto zu binden. Der Schutz funktioniert nicht, es erscheint die Meldung /die Arbeit des Expert Advisors auf diesem Konto ist nicht erlaubt/, aber der EA handelt trotzdem. Bei der Kompilierung treten keine Fehler auf. Ich verstehe nicht, was falsch ist.
Wo würde diese Codezeile platziert werden. ??
Hallo, ich habe eine Frage, ich möchte Berater auf meiner Website verkaufen, aber ich weiß nicht, wie man das macht, kann mir jemand helfen?
Vielen Dank im Voraus!
Hallo,
vielen Dank für den Artikel. Bitte beraten Sie mich für Passwort-Schutz, wie zu machen, wenn Sie das Passwort eingeben, die Eingabe-Anzeige als Sternchen ("*") oder ein Punkt ("-")
Ich bin kein guter Programmierer.
Danke
Der Kopierschutz ist ein äußerst schwieriges Problem, daher die Bemühungen der Musik- und Filmindustrie mit DRM und deren wiederholten Fehlschlägen.
Im besten Fall werden die Informationen hier die Zeit einiger Leute verschwenden; im schlimmsten Fall könnten Sie dem Leser ein falsches Gefühl von Sicherheit vermitteln. Wenn er dann beschließt, ein Produkt mit Ihren Ratschlägen zu "schützen", wird er vielleicht etwas überrascht sein, wenn der Verbraucher den Schutz innerhalb weniger Stunden entfernt und es für einen Bruchteil des Preises weiterverkauft.
Im Ernst: Base64-Kodierung hat nichts mit Verschlüsselung zu tun. Base64-Kodierung wurde entwickelt, um die sichere Übertragung von 8-Bit-Daten mit Hilfe von Protokollen zu ermöglichen, die die Datenkodierung als 7-Bit betrachten. Base64-Kodierung kann auf triviale Weise rückgängig gemacht werden - und dafür ist sie auch gedacht!
Die einzige Lösung, die ich für die sichere Verteilung von MQL5-Software sehe, ist entweder die eingeschränkte Vollmacht des Brokers oder die Installation einer Instanz von MQL5 mit den .ex5-Dateien auf einem Server und die Ermöglichung des Zugriffs für den Kunden über einen Thin Client (so dass er die .ex5-Datei nicht herunterladen kann). Und ja, ich habe über 15 Jahre im Bereich der Informationssicherheit gearbeitet und weiß daher ziemlich genau, wovon ich spreche.
Um ehrlich zu sein, bin ich ziemlich überrascht, dass Metaquotes den Artikel veröffentlicht hat.
Hallo guten Tag Beratung Ich brauche Hilfe, um in der Lage sein, die Verwendung eines EA von Kontonummer in mt4 zu erreichen und das erlaubt mir zu ändern und das kann nur die Konten arbeiten, die innerhalb der Lizenz sind und das kann aktivieren und deaktivieren Sie es aus der Ferne, wie es zwei mt4 ein Master und ein Sklave verwendet Ich füge die Beschreibung des Codes und wie kann ich besser für es gut zu funktionieren, weil, wenn ich ein anderes Konto eingeben, die außerhalb der Lizenz ist es funktioniert das gleiche.
<?xml version="1.0" encoding="UTF-8"?>
<Lizenz>
<ProgrammVersion>
</programVersion>
<licenseType>Full</licenseType>
<validityPeriod>
<endDate>1/18/2080</endDate>
</validityPeriod>
<Besitzer>
<Besitzername>
<Buchführung>6789</Buchführung>
<Konto>7994</Konto>
<Buchhalter>22302</Buchhalter>
</Besitzername>
</Besitzer>
<Signatur xmlns="http://www.w3.org/2000/09/xmldsig#">
<SignedInfo>
<CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315" />
<SignaturMethode Algorithmus="http://www.w3.org/2000/09/xmldsig#rsa-sha1" />
<Referenz URI="">
<Transformationen>
<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>
</Referenz>
</SignedInfo>
<SignatureValue> p/NlTyHeUy5CVC01H/2WmvTcN8TqJhrInkhqtyzR6vqn/koJHqm6fiD6mepklpn4fud0em7vqOiyWcQ9KQ8jqoyoN9ExkJUEvepWBQT2HHHcaoW2kpV17ch+CZvtFX74cHE23WrOi9/p3RoK/4G0rsgvdjvefdZRQRsM5k=</SignatureValue>
</Signatur>
</license>
Ich habe eine Idee. Angenommen, es gibt einen Web-Monitor, der immer durch den Web-Flow schauen.
1. Der EA-Client fordert vom Webserver einen sha.pub-Schlüssel an, der vom Server nach dem Zufallsprinzip generiert wird.
2. EA sendet einige Daten mit dem Pub-Schlüssel zur Autorisierung an den Server, so dass der Monitor nicht weiß, was die Daten sind. Und die Daten können einen vom Client generierten Zufallsschlüssel enthalten. Der Monitor kann die Daten aufgrund des sha-Schlüssels nicht entschlüsseln.
3. Der Server empfängt die Daten und sendet die erlaubten Informationen verschlüsselt mit dem Schlüssel, den der Client an ihn gesendet hat. Der Monitor kann diese Informationen entschlüsseln, weil er den Sha-Schlüssel des Pubs kennt, aber er kennt den Schlüssel des Clients nicht, so dass sie immer noch nutzlos sind.
Auf diese Weise kann der Server das Verhalten des EA-Clients kontrollieren.
Hallo, sollte es möglich sein, diesen Artikel unter Berücksichtigung der neuen Python-Version zu aktualisieren?
Ich schaffe es nicht, ihn zum Laufen zu bringen. PS: Python ist noch neu für mich.
Vielen Dank!
Danny