目前最新EX4可以直接用反编译工具转换出来 ,下面提供一个简单的办法如果防止EX4被反编译工具还原成MQ4,把这段 混淆 代码复制到你的MQ4里面 ,然后 在你的初始化函数OnInit() 里面加入intX();这个代码就可以了。原理很简单,目前存在的反编译工具 功能不是很全面,只要你的代码里面 类 结构体,就没办法还原,反编译工具失效!

如果你的代码是普通的代码,没有类 结构体,那么你的代码可以直接被还原,就像 老版本EX4被 EX4-TO-MQ4 DECOMPILER
还原一样。

当然你的加入这段代码,也只能防止你的EX4不被工具还原成MQ4。纯EX4一样没办法防止被破解

破解可以直接修改EX4去掉EX4限制,这个目前没办法解决!
唯一的办法把你的EA做成MQL5市场上的EA或者采用 DLL加密 ,目前已知MQ5的EA没办法破解,但是可以通过人工分析,OLLYDBG 调试重建出来代码,只是这个工作量惊人,比较费时费力,所以成本比较高!
DLL加密 把核心代码写入DLL, 然后DLL加强壳(SHIELDEN和VMPROTECT、ZPROTECT),通过服务器验证,基本上就比较安全了。


#include <Controls\Dialog.mqh>
#include <Controls\Button.mqh>
#include <Controls\Edit.mqh>
#include <Controls\ListView.mqh>
#include <Controls\ComboBox.mqh>
#include <Controls\SpinEdit.mqh>
#include <Controls\RadioGroup.mqh>
#include <Controls\CheckGroup.mqh>
//+------------------------------------------------------------------+
//| defines                                                          |
//+------------------------------------------------------------------+
//--- indents and gaps
#define INDENT_LEFT                         (11)      // indent from left (with allowance for border width)
#define INDENT_TOP                          (11)      // indent from top (with allowance for border width)
#define INDENT_RIGHT                        (11)      // indent from right (with allowance for border width)
#define INDENT_BOTTOM                       (11)      // indent from bottom (with allowance for border width)
#define CONTROLS_GAP_X                      (-10010)      // gap by X coordinate
#define CONTROLS_GAP_Y                      (10)      // gap by Y coordinate
//--- for buttons
#define BUTTON_WIDTH                        (100)     // size by X coordinate
#define BUTTON_HEIGHT                       (20)      // size by Y coordinate
//--- for the indication area
#define EDIT_HEIGHT                         (20)      // size by Y coordinate
//+------------------------------------------------------------------+
//| Class CPanelDialog                                               |
//| Usage: main dialog of the SimplePanel application                |
//+------------------------------------------------------------------+
class CPanelDialog : public CAppDialog{
private:CEdit             m_edit;                          // the display field objectCButton           m_button1;                       // the button objectCButton           m_button2;                       // the button objectCButton           m_button3;                       // the fixed button objectCListView         m_list_view;                     // the list objectCRadioGroup       m_radio_group;                   // the radio buttons group objectCCheckGroup       m_check_group;                   // the check box group objectpublic:CPanelDialog(void);~CPanelDialog(void);//--- createvirtual bool      Create(const long chart,const string name,const int subwin,const int x1,const int y1,const int x2,const int y2);//--- chart event handlervirtual bool      OnEvent(const int id,const long &lparam,const double &dparam,const string &sparam);protected://--- create dependent controlsbool              CreateEdit(void);bool              CreateButton1(void);bool              CreateButton2(void);bool              CreateButton3(void);bool              CreateRadioGroup(void);bool              CreateCheckGroup(void);bool              CreateListView(void);//--- internal event handlersvirtual bool      OnResize(void);//--- handlers of the dependent controls eventsvoid              OnClickButton1(void);void              OnClickButton2(void);void              OnClickButton3(void);void              OnChangeRadioGroup(void);void              OnChangeCheckGroup(void);void              OnChangeListView(void);bool              OnDefault(const int id,const long &lparam,const double &dparam,const string &sparam);};
//+------------------------------------------------------------------+
//| Event Handling                                                   |
//+------------------------------------------------------------------+
EVENT_MAP_BEGIN(CPanelDialog)
ON_EVENT(ON_CLICK,m_button1,OnClickButton1)
ON_EVENT(ON_CLICK,m_button2,OnClickButton2)
ON_EVENT(ON_CLICK,m_button3,OnClickButton3)
ON_EVENT(ON_CHANGE,m_radio_group,OnChangeRadioGroup)
ON_EVENT(ON_CHANGE,m_check_group,OnChangeCheckGroup)
ON_EVENT(ON_CHANGE,m_list_view,OnChangeListView)
ON_OTHER_EVENTS(OnDefault)
EVENT_MAP_END(CAppDialog)
//+------------------------------------------------------------------+
//| Constructor                                                      |
//+------------------------------------------------------------------+
CPanelDialog::CPanelDialog(void){}
//+------------------------------------------------------------------+
//| Destructor                                                       |
//+------------------------------------------------------------------+
CPanelDialog::~CPanelDialog(void){}
//+------------------------------------------------------------------+
//| Create                                                           |
//+------------------------------------------------------------------+
bool CPanelDialog::Create(const long chart,const string name,const int subwin,const int x1,const int y1,const int x2,const int y2){
//  if(!CAppDialog::Create(chart,name,subwin,x1,y1,x2,y2))
//    return(false);
//--- create dependent controlsif(!CreateEdit())return(false);if(!CreateButton1())return(false);if(!CreateButton2())return(false);if(!CreateButton3())return(false);if(!CreateRadioGroup())return(false);if(!CreateCheckGroup())return(false);if(!CreateListView())return(false);
//--- succeedreturn(true);}
//+------------------------------------------------------------------+
//| Create the display field                                         |
//+------------------------------------------------------------------+
bool CPanelDialog::CreateEdit(void){
//--- coordinatesint x1=INDENT_LEFT;int y1=INDENT_TOP;int x2=ClientAreaWidth()-(INDENT_RIGHT+BUTTON_WIDTH+CONTROLS_GAP_X);int y2=y1+EDIT_HEIGHT;
//--- createif(!m_edit.Create(m_chart_id,m_name+"Edit",m_subwin,x1,y1,x2,y2))return(false);if(!m_edit.ReadOnly(true))return(false);if(!Add(m_edit))return(false);m_edit.Alignment(WND_ALIGN_WIDTH,INDENT_LEFT,0,INDENT_RIGHT+BUTTON_WIDTH+CONTROLS_GAP_X,0);
//--- succeedreturn(true);}
//+------------------------------------------------------------------+
//| Create the "Button1" button                                      |
//+------------------------------------------------------------------+
bool CPanelDialog::CreateButton1(void){
//--- coordinatesint x1=ClientAreaWidth()-(INDENT_RIGHT+BUTTON_WIDTH);int y1=INDENT_TOP;int x2=x1+BUTTON_WIDTH;int y2=y1+BUTTON_HEIGHT;
//--- createif(!m_button1.Create(m_chart_id,m_name+"Button1",m_subwin,x1,y1,x2,y2))return(false);if(!m_button1.Text("Button1"))return(false);if(!Add(m_button1))return(false);m_button1.Alignment(WND_ALIGN_RIGHT,0,0,INDENT_RIGHT,0);
//--- succeedreturn(true);}
//+------------------------------------------------------------------+
//| Create the "Button2" button                                      |
//+------------------------------------------------------------------+
bool CPanelDialog::CreateButton2(void){
//--- coordinatesint x1=ClientAreaWidth()-(INDENT_RIGHT+BUTTON_WIDTH);int y1=INDENT_TOP+BUTTON_HEIGHT+CONTROLS_GAP_Y;int x2=x1+BUTTON_WIDTH;int y2=y1+BUTTON_HEIGHT;
//--- createif(!m_button2.Create(m_chart_id,m_name+"Button2",m_subwin,x1,y1,x2,y2))return(false);if(!m_button2.Text("Button2"))return(false);if(!Add(m_button2))return(false);m_button2.Alignment(WND_ALIGN_RIGHT,0,0,INDENT_RIGHT,0);
//--- succeedreturn(true);}
//+------------------------------------------------------------------+
//| Create the "Button3" fixed button                                |
//+------------------------------------------------------------------+
bool CPanelDialog::CreateButton3(void){
//--- coordinatesint x1=ClientAreaWidth()-(INDENT_RIGHT+BUTTON_WIDTH);int y1=ClientAreaHeight()-(INDENT_BOTTOM+BUTTON_HEIGHT);int x2=x1+BUTTON_WIDTH;int y2=y1+BUTTON_HEIGHT;
//--- createif(!m_button3.Create(m_chart_id,m_name+"Button3",m_subwin,x1,y1,x2,y2))return(false);if(!m_button3.Text("Locked"))return(false);if(!Add(m_button3))return(false);m_button3.Locking(true);m_button3.Alignment(WND_ALIGN_RIGHT|WND_ALIGN_BOTTOM,0,0,INDENT_RIGHT,INDENT_BOTTOM);
//--- succeedreturn(true);}
//+------------------------------------------------------------------+
//| Create the "RadioGroup" element                                  |
//+------------------------------------------------------------------+
bool CPanelDialog::CreateRadioGroup(void){int sx=(ClientAreaWidth()-(INDENT_LEFT+INDENT_RIGHT+BUTTON_WIDTH))/3-CONTROLS_GAP_X;
//--- coordinatesint x1=INDENT_LEFT;int y1=INDENT_TOP+EDIT_HEIGHT+CONTROLS_GAP_Y;int x2=x1+sx;int y2=ClientAreaHeight()-INDENT_BOTTOM;
//--- createif(!m_radio_group.Create(m_chart_id,m_name+"RadioGroup",m_subwin,x1,y1,x2,y2))return(false);if(!Add(m_radio_group))return(false);m_radio_group.Alignment(WND_ALIGN_HEIGHT,0,y1,0,INDENT_BOTTOM);
//--- fill out with stringsfor(int i=0;i<4;i++)if(!m_radio_group.AddItem("Item "+IntegerToString(i),1<<i))return(false);
//--- succeedreturn(true);}
//+------------------------------------------------------------------+
//| Create the "CheckGroup" element                                  |
//+------------------------------------------------------------------+
bool CPanelDialog::CreateCheckGroup(void){int sx=(ClientAreaWidth()-(INDENT_LEFT+INDENT_RIGHT+BUTTON_WIDTH))/3-CONTROLS_GAP_X;
//--- coordinatesint x1=INDENT_LEFT+sx+CONTROLS_GAP_X;int y1=INDENT_TOP+EDIT_HEIGHT+CONTROLS_GAP_Y;int x2=x1+sx;int y2=ClientAreaHeight()-INDENT_BOTTOM;
//--- createif(!m_check_group.Create(m_chart_id,m_name+"CheckGroup",m_subwin,x1,y1,x2,y2))return(false);if(!Add(m_check_group))return(false);m_check_group.Alignment(WND_ALIGN_HEIGHT,0,y1,0,INDENT_BOTTOM);
//--- fill out with stringsfor(int i=0;i<4;i++)if(!m_check_group.AddItem("Item "+IntegerToString(i),1<<i))return(false);
//--- succeedreturn(true);}
//+------------------------------------------------------------------+
//| Create the "ListView" element                                    |
//+------------------------------------------------------------------+
bool CPanelDialog::CreateListView(void){int sx=(ClientAreaWidth()-(INDENT_LEFT+INDENT_RIGHT+BUTTON_WIDTH))/3-CONTROLS_GAP_X;
//--- coordinatesint x1=ClientAreaWidth()-(sx+INDENT_RIGHT+BUTTON_WIDTH+CONTROLS_GAP_X);int y1=INDENT_TOP+EDIT_HEIGHT+CONTROLS_GAP_Y;int x2=x1+sx;int y2=ClientAreaHeight()-INDENT_BOTTOM;
//--- createif(!m_list_view.Create(m_chart_id,m_name+"ListView",m_subwin,x1,y1,x2,y2))return(false);if(!Add(m_list_view))return(false);m_list_view.Alignment(WND_ALIGN_HEIGHT,0,y1,0,INDENT_BOTTOM);
//--- fill out with stringsfor(int i=0;i<16;i++)if(!m_list_view.ItemAdd("Item "+IntegerToString(i)))return(false);
//--- succeedreturn(true);}
//+------------------------------------------------------------------+
//| Handler of resizing                                              |
//+------------------------------------------------------------------+
bool CPanelDialog::OnResize(void){
//--- call method of parent classif(!CAppDialog::OnResize()) return(false);
//--- coordinatesint x=ClientAreaLeft()+INDENT_LEFT;int y=m_radio_group.Top();int sx=(ClientAreaWidth()-(INDENT_LEFT+INDENT_RIGHT+BUTTON_WIDTH))/3-CONTROLS_GAP_X;
//--- move and resize the "RadioGroup" elementm_radio_group.Move(x,y);m_radio_group.Width(sx);
//--- move and resize the "CheckGroup" elementx=ClientAreaLeft()+INDENT_LEFT+sx+CONTROLS_GAP_X;m_check_group.Move(x,y);m_check_group.Width(sx);
//--- move and resize the "ListView" elementx=ClientAreaLeft()+ClientAreaWidth()-(sx+INDENT_RIGHT+BUTTON_WIDTH+CONTROLS_GAP_X);m_list_view.Move(x,y);m_list_view.Width(sx);
//--- succeedreturn(true);}
//+------------------------------------------------------------------+
//| Event handler                                                    |
//+------------------------------------------------------------------+
void CPanelDialog::OnClickButton1(void){m_edit.Text(__FUNCTION__);}
//+------------------------------------------------------------------+
//| Event handler                                                    |
//+------------------------------------------------------------------+
void CPanelDialog::OnClickButton2(void){m_edit.Text(__FUNCTION__);}
//+------------------------------------------------------------------+
//| Event handler                                                    |
//+------------------------------------------------------------------+
void CPanelDialog::OnClickButton3(void){if(m_button3.Pressed())m_edit.Text(__FUNCTION__+"On");elsem_edit.Text(__FUNCTION__+"Off");}
//+------------------------------------------------------------------+
//| Event handler                                                    |
//+------------------------------------------------------------------+
void CPanelDialog::OnChangeListView(void){m_edit.Text(__FUNCTION__+" \""+m_list_view.Select()+"\"");}
//+------------------------------------------------------------------+
//| Event handler                                                    |
//+------------------------------------------------------------------+
void CPanelDialog::OnChangeRadioGroup(void){m_edit.Text(__FUNCTION__+" : Value="+IntegerToString(m_radio_group.Value()));}
//+------------------------------------------------------------------+
//| Event handler                                                    |
//+------------------------------------------------------------------+
void CPanelDialog::OnChangeCheckGroup(void){m_edit.Text(__FUNCTION__+" : Value="+IntegerToString(m_check_group.Value()));}
//+------------------------------------------------------------------+
//| Rest events handler                                                    |
//+------------------------------------------------------------------+
bool CPanelDialog::OnDefault(const int id,const long &lparam,const double &dparam,const string &sparam){
//--- restore buttons' states after mouse move'n'clickif(id==CHARTEVENT_CLICK)m_radio_group.RedrawButtonStates();
//--- let's handle event by parentreturn(false);}
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnChartEvent(const int id,const long &lparam,const double &dparam,const string &sparam){ExtDialog.ChartEvent(id,lparam,dparam,sparam);}
//+------------------------------------------------------------------+//+------------------------------------------------------------------+
CPanelDialog ExtDialog;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void  intX()  {(ExtDialog.Create(0,"Simple Panel",0,50,50,390,200));(ExtDialog.Run());}
//+------------------------------------------------------------------+

外汇EA 指标加密方法相关推荐

  1. 文华财经指标公式大全,通达信指标加密破解DLL加密防破解技术方法

    STICKLINE(做多 AND C<O,C,O,0.3,0),COLORFF00FF;  STICKLINE(做多 AND C>=O,C,O,3,1),COLOR0000FF;  {ST ...

  2. 通达信指标加密保护方法

    聊聊为什么要防护,做为金融爱好者,辛辛苦苦写了一个金融操作指标,准确率很高,身边的很多朋友粉丝知道了期望也能跟着拿来做投资.那这个时候来了,给还是不给呢,给的话一但指标一传十,十传百,那么不过多久这个 ...

  3. openstack havana块存储Cinder磁盘加密方法研究

    http://blog.csdn.net/cloudresearch/article/details/19092219 在openstack havana的release note中有如下介绍&quo ...

  4. 浅谈外汇EA,如何让交易更安全?

    外汇EA,全称Expert Advisor,是使用MQL4 编程语言,针对Meta Trader 交易平台编写的自动交易程序.通过实时获取市场报价信息,自动判断入场和出场时机,模拟交易员对MT4客户端 ...

  5. 开发Linux系统下的磁盘加密方法详解

    随着智能手机的计算能力和存储能力的提高,手机中将会存放越来越多的私有数据,这些数据的泄密可能造成严重后果.手机信息安全一直是我们的重点之一,对于一些重要的功能我们要求鉴权后才能使用,但这只能挡住初级的 ...

  6. 光盘压制:八种加密方法保护光盘数据安全

    为了防止盗版软件对软件市场的侵害,越来越多的软件商使用加密方法来保护自己的软件.尽管目前加密光盘的方法有很多种,但其主要原理是利用特殊的光盘母盘上的某些特征信息是不可再现的,而且这些特征信息大多是光盘 ...

  7. 移动硬盘加密方法赏析

    大家都知道,移动硬盘如果丢失,里面的数据对于其他用户来说完全是可自由读写的.如果你是商务或者销售,那可能会给公司利益造成严重损失.如果你是工程师,那你的劳动成果,比如文档.方案.代码就会泄漏.如果万一 ...

  8. mysql5.7 skip ssl_MySQL 5.7 的SSL加密方法

    MySQL 5.7 的SSL加密方法 MySQL 5.7.6或以上版本 (1)创建证书开启SSL验证 --安装openssl yum install -y openssl openssl versio ...

  9. xp文件夹怎么设置密码?压缩文件及Office文件加密方法

    怎么给文件夹设置密码?相信很多朋友都说使用专门的加密软件吧,今天小编教大家不需使用任何软件就可对文件夹进行加密设置,下面一起来看看是如何对文件夹进行加密的吧! 文件夹设置密码方法: 1.进入要进行加密 ...

  10. 【阿里妈妈数据科学系列】第五篇:实验指标设定方法与指标体系构建

    ▐ 前言 在[阿里妈妈数据科学系列]前四期内容中,我们介绍了 AB TEST 的基础知识与框架及每个部分的方法论与技术,本期我们主要介绍实验指标设定方法与指标体系构建. 指标体系构建在 AB Test ...

最新文章

  1. Hive Serde、Beeline、JDBC
  2. 从0开始搭建一个战棋游戏的AI(初级教程)
  3. 高校学计算机研究生录取分数排名,四川大学计算机学院2018年硕士研究生招生拟录取名单及成绩公示...
  4. 深入理解static关键字
  5. linux sysstat rpm包下载,[20141201]SYSSTAT软件包.txt
  6. liunx基本命令(文件系统的使用和查找命令)
  7. 将M进制的数转换为N进制的数(java)
  8. Mybatis(10)properties标签的使用及细节,typeAliases和package标签
  9. ssm框架中前台html如何接受后台的数据_计算机毕业设计中实现java后台的微信小程序...
  10. Emulator 29.2.12 稳定版发布,启用 Google Maps UI
  11. 广义表头尾链表存储结构_详解Redis五种数据结构的底层原理
  12. 【冰糖Python】深度森林 DeepForest
  13. WPF界面工具Telerik UI for WPF入门级教程 - Xaml VS NoXaml
  14. 2021-09-252021年中式烹调师(中级)考试技巧及中式烹调师(中级)证考试
  15. 办公软件测试题目,Office高级办公软件测试(附答案)
  16. Linux-网络工具MTR
  17. 《C++面向对象程序设计》董正言、张聪版内容概括
  18. [再寄小读者之数学篇](2014-06-21 向量公式)
  19. ‘tensorflow.python.training.experimental.mixed_precision‘ has no attribute ‘_register_wrapper_optimi
  20. 科学家发现斯格明子霍尔效应:可造新型电子储存器

热门文章

  1. SM2数字签名算法java实现
  2. 宝利通HDX7000常见故障处理
  3. Java 实现 贪吃蛇 小游戏【附源码】
  4. Java简单实现贪吃蛇经典小游戏(附源代码)
  5. 转载Prince_vegeta制作的VC知识库1-53期合订本索引文件。
  6. 【Java实例】简单彩票程序
  7. 分享几个java小程序代码
  8. java实现小程序订阅消息推送(附源码)
  9. DEVC编译器快捷键大全
  10. HTML5小游戏代码大全