اقتباس:
المشاركة الأصلية كتبت بواسطة dr_forex
السلام عليكم
اخواني الاعزاء كل عام وانتم بخير ورمضان كرم عليكم وعلينا وعلى الجميع
لدي استفسار
هل يمكن عمل كود للاكسبيرت بحيث لا يستطيع احد ان يعمل نسخ اخري منه ؟
وأنت بخير .. لا يوجد شي أسمه "لا يستطيع أحد" فكلها مسائلة وقت لا أكثر .. مهما كان الكود محصّن سيأتي زمن ويستطيع شخص أن يكسره .. ممكن ليس اليوم ولا السنة القادمة ولكن ذلك اليوم قادم لا محالة فمن كتبت خوارزميات الحماية هم بشر فالضعف موجود
لنستعرض بعض صور الحماية وسأترك مجال لمن يريد أن يشارك بأفكاره:
- حماية الأكسبيرت بكلمة مرور
[PHP]
//+------------------------------------------------------------------+
//| Protect 1.0.mq4 |
//| Copyright 2016, SMoWaLeD |
//| http://forum.borsaat.com/f14/ |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, SMoWaLeD"
#property link "http://forum.borsaat.com/f14/"
#property version "1.00"
#property strict
#include <ChartObjects/ChartObjectsTxtControls.mqh>
CChartObjectEdit passEdit;
const string CorrectPass = "AoE-21638-55212";
string WrongMsg = "Wrong Password";
bool statusLic = false;
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
passEdit.Create(ChartID(), "password", 0, 20, 20, 260, 25);
passEdit.BackColor(White);
passEdit.BorderColor(Black);
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
passEdit.Delete();
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
if(statusLic == false) return;
Comment(" ..... You are Licensed !! ..... ");
// continue code
}
//+------------------------------------------------------------------+
//| ChartEvent function |
//+------------------------------------------------------------------+
void OnChartEvent(const int id,
const long &lparam,
const double &dparam,
const string &sparam)
{
if (id == CHARTEVENT_OBJECT_ENDEDIT && sparam == "password" )
{
statusLic = false;
if(passEdit.GetString(OBJPROP_TEXT) == CorrectPass)
{
statusLic = true;
passEdit.Delete();
}
else passEdit.SetString(OBJPROP_TEXT, 0, WrongMsg);
}
}
[/PHP]الطريقة سهلة وبمجرد معرفة كلمة المرور أنتهت الحماية
- حماية الأكسبيرت بأستخدام رقم الحساب والبروكر
[PHP]
//+------------------------------------------------------------------+
//| Protect 2.0.mq4 |
//| Copyright 2016, SMoWaLeD |
//| http://forum.borsaat.com/f14/ |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, SMoWaLeD"
#property link "http://forum.borsaat.com/f14/"
#property version "1.00"
#property strict
const int AuthorizedAccount = 54249;
const string AuthorizedBroker = "International Capital Markets Pty Ltd.";
bool statusLic = false;
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
if(AccountCompany() == AuthorizedBroker && AccountNumber() == AuthorizedAccount)
statusLic = true;
else
Alert("EA is NOT Auhorized to run on this account !!!");
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
if(statusLic == false)
{
Comment(" ..... EA is NOT Auhorized to run on this account !! ..... ");
return;
}
Comment(" ..... Authorized Account !! ..... ");
// continue code
}
[/PHP]هذي الحماية الأكثر رواجاً وهي فعّالة كون الهكر يحتاج أن يكسر حماية mql أولاً ثم يغيير رقم الحساب .. ونستطيع أن نستخدم متغييرات أخرى بعمليات حسابية أكثر تعقيداً ولكن نفس النتيجة بمعرفة الكود فتعديلها أمر سهل
- حماية الأكسبيرت بمكتبة DLL وهذا أفضل من الفكرة السابقة بما أن بعض الكود سيكون داخل المكتبة فكسر حماية mql لن يعطي الهكر كل الكود .. المشكلة أن كسر حماية الـ DLL ليس بالأمر الصعب كما يظن الكثيرون بالعكس أسهل من mql ... لا يوجد لدي compiler حالياً فلم أستطع أن أعمل مثال لهذه الحالة
- حماية الأكسبيرت بسيرفر خارجي وهي أفضل حماية موجود الآن .. لايوجد لدي سيرفر لعمل المثال لكن الفكر بسيطة .. ومنها طريقة مشروحة في موقع mql بأستخدام RPC وكود Python للسيرفر https://www.mql5.com/en/articles/342 .. ويمكن إضافة encryption للـ calls لحمايته من الـ sniffing