MT4EAを実際にデコンパイルしてみて、対策を考える

公開日: : 中級者EA開発 ,

逆コンパイルとは

逆コンパイルというのは実行ファイルからソースコードファイルを復元することで、デコンパイルとかデコードとかリバースエンジニアリングとかって言われたります。

 

高値で取引されるソフトウェアではこの逆コンパイル対策が必須で、EAも例外ではありません。

今はあまり聞かなくなりましたが、2014年2月のbuild610アップデート以前は、MT4のコンパイラのシンプルさ故に逆コンパイルソフトが存在していたようです。

MQLはもともとCをベースに開発されているため、Cの逆コンパイラーがそのまま通ってしまっていたそうですね。今回は実際に逆コンパイルされるとどうなるのか、その対策について紹介します。

実際に逆コンパイルしてみる

では、実際のこの流れをやってみましょう。

 

逆コンパイル前のサンプルソースコード

 

これはMT4にデフォルトで入っているサンプルのMACDのEAです。

これを逆コンパイルします。

逆コンパイル後のサンプルソースコード

 

逆コンパイルされるとどうなるか

まずは、実際に逆コンパイルされたコードを見てみてください。


これはコードの一部ですが、基本的にはこのように変数名とコメントが失われます。

このまま再コンパイルしても多くの場合通るので、改良・編集したり新たに口座縛りをかけたりすることが可能になってしまいます。

また、アタッカーはいろんな理由で中身のトレードロジックを読み解こうとします。

つまり、


こんな感じで経験と勘と努力で変数の意味を解読していく訳です。
組み込みの関数は逆コンパイル時に喪失しないので、MQL開発者であればfor文とオーダーの価格の取得から建玉の確認をしているということは容易に推察されてしまいます。

 

また無理して意味を読み解かなくても制限解除とかができればOKな場合も多いと考えられるので、口座縛りの個所だけ読み解かれたらそれで終わりのケースも多いのではないかと思います。

 

逆コンパイル後の特徴

・コメント情報が消える

・変数名が連番になる(変数名の意味合い情報が失われる)

・組み込み変数・関数は保持される

 

傾向と対策

問題は、こういったリバースエンジニアリングをさせないためにどういった対策を行うか、ということです。

変数名が失われているので、「変数名がxxじゃなかったら動かない」のようにプログラミングしたいところではありますが、MQLにはnameof演算子がないので変数名を取得することができません。

 

難読化処理

また一つの手として、改行を消して難読化処理をする手があります。
bandicam 2017-12-17 13-01-55-647
JavascriptやJqueryなんかで良く行われている方法で、改行が失われることで純粋に”読みにくく”なります。

ただし、コード中に//でコメントアウトしている場所がある場合は、そこで以降のコードが一気にコメントアウトされてしまうので、/**/でコメントにした方が難読化処理が捗ります。

(逆に言うと、やたら/**/でコメントしている人はそれを意識している可能性が高いのかも)

 

ダミー変数を作る

他には、ダミーの変数を作る方法です。

変数名が失われたコードを解読する際には、変数にどの値を代入したかを追っていく作業があります。そのときに、意味が分かっていない変数が何個も出てきてそれが複合的に演算されると追跡作業が困難になるという性質があります。

そのため、実際には意味のない変数をいくつか作っておき、それを変なタイミングで使うと、”多少”対策になります。

 

巨大な数は…

ちなみに、「極端に巨大な数は逆コンパイルされたときに区別がつかずに同じ数字になってしまう」という性質を使った方法もなくはないですが、

必ずしもうまくいかなかったり、逆に逆コンパイルしていない状態でもバグになったりするのでおすすめはしません。
(あとパッと見で分かるので、そこだけ削除されて終わりだと思います)

 

WEB経由のコピートレードシステムを使う

最終的に最強の手としては、”そもそもex4ファイルにトレード手法を記載しない”ことなんじゃないかと思います。

これはもちろんDLLやライブラリにコードの一部を格納するということでもあるのですが、そっちもデコードされる危険性はある訳です。

 

究極的にはトレードの演算は別のところ(サーバー)でやって、トレードタイミングになったらフラグ(シグナル)をEAに送る、というのが最強だと考えられます。要するにWEBサーバーを使ったコピートレードシステム型の認証EAです。

 

なにせ、逆コンパイルされたとしても受信機能が見られるだけなので、超安心です。

 

WEBサーバーを経由するコピートレードシステムの作り方はこちら

 

この投稿は役に立ちましたか? 役に立った 役に立たなかった 24 人中 19 人がこの 投稿 は役に立ったと言っています。

関連記事

no image

プログラマ向け自動売買開発アイディア

「MQL4/MQL5は扱えるようになったけど、プログラミングのアイディアがない」というプログラマは比

記事を読む

2chのスレをテキストマイニングするやり方

よく「大衆の逆をいけば勝てる」みたいなことが相場の世界では言われますよね。今回は2chの市況版の住民

記事を読む

[MQL4]MT4でマルチタスク/マルチスレッド処理

MT4/MT5は基本的にC言語ベースなのでマルチスレッドはできません。 しかし、複数のチャート上で

記事を読む

[MT4]チャートを分析して、一番多いパターンが来たらトレードするEA

パターン分析トレードとは 今回はMT4のファイル関数を使って、パターン分析トレードシステムを作成し

記事を読む

利用可能なトレード系金融APIまとめ FIX API,REST API,OPEN API

今まで当たり前のようにMT4/MT5/TradeStationで開発をしてきましたが、そういえばAP

記事を読む

 

Translate »
上に戻る