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

 

Neuer Artikel Schutz von MQL5-Programmen: Passwörter, Schlüssel, Zeitbegrenzung, Berechtigungsfernabfrage :

Die Mehrzahl der Entwickler benötigt Schutz für ihren Programmcode. In diesem Beitrag werden einige unterschiedliche Möglichkeiten zum Schutz von in MQL5 geschriebenen Programmen vorgestellt, so etwa zur Ausstattung von MQL5-Skripten, automatischen Handelssystemen und Indikatoren mit Zugriffskontrollverfahren. Dazu zählen Passwortschutz, Schlüsselgeneratoren, Zugriffskonten, Zeitbegrenzungsprüfungen sowie der Schutz mittels MQL5-RPC-Aufrufen aus der Ferne.

Passwortschutz

Fangen wir mit dem Elementarsten an. Am häufigsten erfolgt der Schutz von Software mithilfe eines Passwortes bzw. eines Lizenz- oder Berechtigungsschlüssels. Beim ersten Programmaufruf nach der Installation wird der Benutzer zur Eingabe des Passwortes für die betreffende Programminstanz (wie die Seriennummer bei Microsoft Windows oder Microsoft Office) aufgefordert. Nach Eingabe des richtigen Passworts oder Schlüssels ist der Benutzer berechtigt, die angemeldete Programminstanz im Rahmen der Nutzungsbedingungen unbeschränkt zu nutzen. Zur Eingabe des Passwortes können sowohl ein Eingangsparameter als auch ein eingabefähiges Textfeld verwendet werden. Ein Beispiel für einen solchen „Platzhalter“ folgt etwas weiter unten.

In dem Code wird das Feld CChartObjectEdit bereitgestellt, das zur Eingabe des Passwortes genutzt wird. Das von dem Benutzer eingegebene Passwort wird mit den Werten eines vorgegebenen Datenfeldes mit allen zulässigen Passwörtern abgeglichen. Die Passwortprüfung erfolgt mithilfe der Methode OnChartEvent() nach Eintreten des Ereignisses CHARTEVENT_OBJECT_ENDEDIT.


Wird MQL5-Code aus der Maschinensprache zurückübersetzt (dekompiliert), sind selbst die sichersten Schutzmechanismen für erfahrene Datendiebe nicht mehr unüberwindbar. Nachdem ich im Internet etwas herumgesucht habe, fand ich eine Webseite, auf der angeboten wurde, MQL5-Code zu knacken. Aber ich halte das für Schwindel, um von naiven Menschen, die irgendwelchen Code stehlen wollen, Geld abzuziehen. Ich habe es jedenfalls nicht probiert und könnte mich irren. Selbst wenn es so eine Lösung geben würde, sollten wir in der Lage sein, mithilfe der Übertragung der Eingangsparameter in verschlüsselter Form oder der Indizierung der übertragenen Objekte einen noch zuverlässigeren Schutz zu schaffen.


Autor: investeo

 

Trotz korrekter angabe des CXMLRPCServerProxy kann keine Verbindung zum Server hergestellt werden.

Zusäzlich bekomme ich die Meldung 3 leaked strings left.

Das getestete Beispiel was diese Fehler bringt ist RemoteProtectedEABase64.mq5


Wie kann ich diese Fehler beheben?

 
Steht etwas in den Logs?
Hast Du schon mal versucht mit dem Debugger durchs Programm zu gehen, um zu sehen wo es hakt und wie die Variablen sind?
 
Carl Schreiber #:
Steht etwas in den Logs?
Hast Du schon mal versucht mit dem Debugger durchs Programm zu gehen, um zu sehen wo es hakt und wie die Variablen sind?

Der Log gib:

2022.12.14 16:36:20.310    RemoteProtectedEABase64 (FRA40,H1)    3 leaked strings left (warnung)
2022.12.14 16:36:29.310    RemoteProtectedEABase64 (FRA40,H1)    License server not connected. (print)

im Debug finde ich keine sinnvollen Meldungen dies bezüglich.

 

und, was sagt Dir das: " License server not connected. " ?

Übrigens kennst Du: https://www.mql5.com/en/forum/432897?

Eine einfache Suche nach RemoteProtectedEABase6.

Communicating with an api/custom server using a HTTP request inside of .mq5 indicator code - I'm trying to find out what I was doing with A. Mq5 indicator and Winlet DLL?
Communicating with an api/custom server using a HTTP request inside of .mq5 indicator code - I'm trying to find out what I was doing with A. Mq5 indicator and Winlet DLL?
  • 2022.09.19
  • www.mql5.com
Indicator code: python flask server code: so i was toying with the idea of just using winlet or using something like curl in a c++. In essence a service and a script behave basically the same, but to keep a service alive and running you have to use a loop
 
Carl Schreiber #:

und, was sagt Dir das: " License server not connected. " ?

Übrigens kennst Du: https://www.mql5.com/en/forum/432897?

Eine einfache Suche nach RemoteProtectedEABase6.

und, was sagt Dir das: " License server not connected. " ?

Was es mir sagt? Na was wohl, Keine verbindung ... ich weis nicht was Du mit der Frage bezweckst.

Der verlinkte Artikel ist zwar nett aber hilt mir leider nicht weiter.

WinInet.dll verwende ich.

Mir fällt beim besten wissen nicht ein wo der Fehler sein sollte.

 

Ich habe auch früher mal versucht sockets zu verwenden, bin aber davon abgekommen, weil der server blockiert, bis er was kriegt ...

Es gab auch mal eine Lösung über shared memeory - die habe ich auch nicht hin gekriegt.

Ich würde eine RAM-Disk verwenden und dann mit den Windows-Funktionen (kernel32.dll) dort einfach Dateien schreiben, lesen und löschen, das klappt und ist recht einfach.

 
Carl Schreiber #:

Ich habe auch früher mal versucht sockets zu verwenden, bin aber davon abgekommen, weil der server blockiert, bis er was kriegt ....

Sehe ich das richtig das ich erst alle Daten senden muss und dann fragen soll ob es eine Verbindung gibt?

 

Naja, nach dem Client-Server-Modell wird erst der Server gestartet, denn der wartet auf die Fragen der (vieler) Client(s) und dann der/die Clients.

Im Programm des Servers passiert nix (blockiert) bis etwas von den Clients kommt, dann macht er kurz 'was und fällt dann wieder in seine Warte-Starre.

Such mal nach trade copier in der CodeBase...
 
Carl Schreiber #:

Naja, nach dem Client-Server-Modell wird erst der Server gestartet, denn der wartet auf die Fragen der (vieler) Client(s) und dann der/die Clients.

Im Programm des Servers passiert nix (blockiert) bis etwas von den Clients kommt, dann macht er kurz 'was und fällt dann wieder in seine Warte-Starre.

Ahhh logisch, erst alles senden dann antwortet der Server. In den Fall das der Server eine Antwort gibt besteht die Verbindung und ich kann die Antwort abfragen und entsprechend reagieren. Wenn keine Antwort kommt dann die Meldung " License server not connected. "
 

Deepl sagt dies: https://www.deepl.com/translator#en/de/License%20server%20not%20connected

Die Frage ist jetzt warum? Läuft er? Geschützt? ...

Grund der Beschwerde: