最后由 快鑫云 于 2026-4-14 08:39 编辑
闲话不多说,这里只分享技术。
以EX4举例,
先搞清楚:ex4 到底是什么
- 源码:.mq4 文本文件,是我们能看懂的代码。编程语言类似于c语言
- 编译后:.ex4 是 MQL4 字节码 + 加密壳 / 混淆 的二进制文件。
-
- 破解的过程,首先:
1. 识别 ex4 版本是否加密
首先看编译版本:
- Build 600 以前:老 ex4,很容易反编译,几乎能完整还原。
- Build 600 以后:迈达克官方加强加密,原生字节码被加密 + 压缩。
- 特别是最新的版本,加了VPM,脱壳难度暴增。
-
如果你有Hxd,那么打开Hxd:
用Hxd打开 ex4,Hxd是十六进制的
由于EX4有壳,所以必须先脱壳,否则读不到真实字节码。
- 先内存 Dump
- 运行 MT4,加载 EA
- 等 EA 加载到内存后
- 用工具把内存里的原始 ex4 字节码 dump 出来
- 接下来就是常规操作,
- 修复 IAT ,
- 修复字节码
- Patch 验证代码
- 把账号绑定、时间验证、远程验证的代码直接 NOP 掉(跳过)
这一步纯手工逆向,需要:
- IDA Pro / Ghidra
- 汇编基础
- 了解 Windows 内存加载机制
脱壳后我们就得到干净字节码,这个时候如果破限制,就可以直接破限制,然后正常使用。
如果破源码,那么还需要其他操作。
现在一般上工具:
工具流程:
- 解析 ex4 文件结构
- 逐条翻译字节码指令翻译成 mq4 语法:int var_0 = 123;
- 重建函数结构
- 识别 OnInit()、OnDeinit()、OnTick()
- 识别循环、if-else、函数调用
- 输出伪代码
- 变量名都是自动生成:var_1008、func_401200
- 这就是你们看到的,为什么大部分破解后的代码,参量都是无意义的,因为是统一编排,自动生成。
- 工具重构后的代码
剩下的,就是靠人工修复了。这个时候,你不光得懂逆向,还需要有MT4编程的经验。
- 在 MetaEditor 打开反编译后的 mq4
- 解决报错:函数未定义、数组越界、类型不匹配
- 编译成新 ex4
- 在策略测试里跑,对比原版信号是否一致
- 不一致就继续调试、修正逻辑。
- 这就是为什么破源贵,破限制便宜了。
- 下面我给上一个EX4的原文件(无限制的),一单一结突破策略
- 然后通过两种方法破解出来的代码
- 供你们研究
- 再附上实时回测效果图
-
-
|