Einführung
Viele Programmierer wollen ihre MQL5 Anwendungen schützen. In diesem Beitrag werden verschiedene Möglichkeiten vorgestellt. Die Beispiele beziehen sich nicht nur auf den Schutz von Expert Advisors sondern auch für Indikatoren und Skripte. Wir beginnen mit einem einfachen Passwortschutz gefolgt von Key Generatoren, Lizenzierung auf bestimmte Broker Konten, Testversionen auf Zeit. (Trial-Version) Zum Schluss folgt das remote-Lizenz-Server-Konzept. Mein letzter Beitrag erklärt die Remote Procedure Calls von MetaTrader 5 an jedem XML-RPC-Server.
Ich werde anhand eines Beispiels die Möglichkeit zeigen für das benutzten von Remote-Lizenz in MQL5. Und ich Erkläre eine verbesserte Lösung mit base64-Codierung und der PGP Unterstützung, für einen sehr sicheren Schutz bei Expert Advisors, Skripte und Indikatoren.
Ich bin mir natürlich bewusst, dass ein Lizenzierungsschutz der MetaTrader 5 Anwendungen im MQL5.com Market direkt von der MetaQuotes Software Corp. angeboten wird. Was wirklich gut für alle MQL5 Entwickler ist, und ich will mit meinem Beitrag dies nicht als abwertend beurteilen. Beide Lösungen zusammen verwendet, sind ein starker und sicherer Schutz gegen Software-Diebstahl.
1. Passwortschutz
Beginnen wir mit der einfachsten Methode. Die am häufigsten verwendete Lösung für den Schutz von Computer Software, ist das Passwort oder ein Lizenzschlüssel. Während oder nach der Installation einer Software wird dem Benutzter ein Dialogfeld zu Eingabe eines Passworts angezeigt( wie z.b. die Microsoft Windows oder Microsoft Office Seriennummer), wenn das Passwort übereinstimmt, ist es Erlaubt eine einzelne registrierte Kopie der Software zu verwenden. Wir können eine "Input Variable" oder eine direkte "TextBox" zur eine Eingabe des Passworts verwenden. Wie das untere Beispiel zeigt:
Der folgende MQL5 Code initialisiert eine CChartObjectEdit Box, für die Eingabe des Passwortes.
Es wird ein Array benutzt um gleich mehre Passwörter zu erlauben. Das Passwort wird im OnChartEvent() Ereignis überprüft nach dem das
Eingabe Ereignis CHARTEVENT_OBJECT_ENDEDIT empfangen wurde.
//+------------------------------------------------------------------+//| PasswordProtectedEA.mq5 |//| Copyright 2012, Investeo.pl |//| http://www.investeo.pl |//+------------------------------------------------------------------+#property copyright "Copyright 2012, Investeo.pl"#property link "http://www.investeo.pl"#property version "1.00"#include <ChartObjects/ChartObjectsTxtControls.mqh>CChartObjectEdit password_edit;const string allowed_passwords[] = { "863H-6738725-JG76364", "145G-8927523-JG76364", "263H-7663233-JG76364" }; int password_status = -1;string password_message[] = { "WRONG PASSWORD. Trading not allowed.", "EA PASSWORD verified." };//+------------------------------------------------------------------+//| Expert initialization function |//+------------------------------------------------------------------+int OnInit() {//--- password_edit.Create(0, "password_edit", 0, 10, 10, 260, 25); password_edit.BackColor(White); password_edit.BorderColor(Black); password_edit.SetInteger(OBJPROP_SELECTED, 0, true);//--- return(0); }//+------------------------------------------------------------------+//| Expert deinitialization function |//+------------------------------------------------------------------+void OnDeinit(const int reason) {//--- password_edit.Delete(); }//+------------------------------------------------------------------+//| Expert tick function |//+------------------------------------------------------------------+void OnTick() {//--- if (password_status>0) { // password correct } }//+------------------------------------------------------------------+//| ChartEvent function |//+------------------------------------------------------------------+void OnChartEvent(const int id, const long &lparam, const double &dparam, const string &sparam) {//--- if (id == CHARTEVENT_OBJECT_ENDEDIT && sparam == "password_edit" ) { password_status = -1; for (int i=0; i<ArraySize(allowed_passwords); i++) if (password_edit.GetString(OBJPROP_TEXT) == allowed_passwords[i]) { password_status = i; break; } if (password_status == -1) password_edit.SetString(OBJPROP_TEXT, 0, password_message[0]); else password_edit.SetString(OBJPROP_TEXT, 0, password_message[1]); } }//+------------------------------------------------------------------+
Diese Methode ist sehr einfach, aber ohne großem Schutz. Denn das Passwort oder die Seriennummer wird gehackt und kann auf Webseiten für jeden öffentlich gemacht werden. Der Entwickler kann nichts tun, bis er eine neue Version seines Expert Advisors anbietet und dann die gestohlenen Passwörter auf eine Schwarze Liste setzt.
2. Key-Generator
Key-Generator ist ein Mechanismus, um eine Reihe von Passwörtern anhand von vor definierten Regeln zu erstellen. Ich werde ein kleines Beispiel eines Key Generator zeigen. In diesem Beispiel wird der Schlüssel(Key) durch drei Zahlenpaare dargestellt, die durch zwei Bindestriche getrennt sind. Das Format des zulässigen Key würde dann so aussehen. XXXXX-XXXXX-XXXXX.
© --
Übersetzung von Alexander Piechotta alias FinGeR
Leider ist die Übersetzung des gesamten Beitrags nicht gestattet.
Quelle, Englische Fortsetzung : Continue Reading...
6 Comments
Recommended Comments