Jump to content






Photo
* * * * * 1 votes

Passwortschutz für deinen Expert Advisor mit MQL5

Posted by FinGeR , in MetaTrader 5, Know-How, Codesnips 15. October 2013 · 2,819 views

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...

  • 3



Sehr interessant! 


Danke Alex!

    • 0
  • Report
Photo
Der Wolf
23. October 2013

Vielen Dank Alex für den Link !

 

Dieser Link verweist in Punkt 6  Secure License Encryption auf die folgenden beiden Links, eine Base64-Implementierung für MQ4:

Base64 - Wikipedia

    • 0
  • Report
Photo
RAiNWORM
25. October 2013
Ein sehr interessantes Thema.

Aber gerade von Passwörtern, die im Quelltext gespeichert werden, möchte ich dringend abraten. Oftmals muss man noch nicht einmal "hacken" können. Meistens reicht es, sich die kompilierte EXE/DLL (oder was auch immer) in einem Texteditor anzuschauen. Textkonstanten sind dann häufig direkt ersichtlich.

Wenigstens könnte man die Textkonstanten leicht verschlüsseln, dass sie eben nicht direkt lesbar sind. Einen fähigen Reverse Engineerer hält aber auch das nicht auf.
    • 0
  • Report

Leider darf man den Artikel nicht komplett Übersetzen. Dort steht weiter unten noch was über Remote licenses.

 

Ich bin am Überlegen ein eigenes Tutorial zu schreiben. Ist besser alles immer diese Stückel Übersetzung.

    • 0
  • Report

Hi Alex,

 

wir werden in Kürze dem Forum ein CMS vorschalten,

welches weit mehr Möglichkeiten bietet, als das Blogsystem, dass hier integriert ist.

 

Wenn Du magst, kannst Du dort gerne als Autor / Redakteur mitmachen.

Würde mich freuen!

 

 

Viele Grüße

Fabian

    • 0
  • Report

Hi Alex,

 

wir werden in Kürze dem Forum ein CMS vorschalten,

welches weit mehr Möglichkeiten bietet, als das Blogsystem, dass hier integriert ist.

 

Wenn Du magst, kannst Du dort gerne als Autor / Redakteur mitmachen.

Würde mich freuen!

 

 

Viele Grüße

Fabian

 

Das klingt toll.  Bin gerne dabei.

    • 0
  • Report