*

EAを実際に逆コンパイルしてみて、対策を考える(追記あり)

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

Originally posted 2019-04-03 18:11:14.

逆コンパイルとは

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

 

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

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

MQLはもともとCをベースに開発されているため、Cの逆コンパイラーがそのまま通ってしまっていたそうですね。ちなみにbuild610以降、MQL5では大丈夫だと思います。(希望的観測~~)

今回は実際に逆コンパイルされるとどうなるのか、その対策について紹介します。

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

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

逆コンパイラーはこちら

※この逆コンパイラーは”検証用”なので、最新版のMT4のメタエディタでコンパイルされたEAは逆コンパイルできません。

古いMT4を使ってください。(2014年以前の~build600のEAならOKです。)

 

古いMT4をインストールします。

FXDD MT4 build221 ダウンロード

Alpari MT4 build219 ダウンロード

どっちかでOKです。Windows10だと動かなかったので、Windows8以下推奨です。

インストールしたら、起動する前にオフラインにします。オフラインにしていないとMT4が強制的にアップデートを開始して最新版のMT4になってしまいます。

fxantenna.com img

UIがふるーーい

 

あとはこの古い古いMT4に付属している古い古いメタエディタでコンパイルすればOKです。

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

 

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

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

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

あとはIQ勝負です。

 

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

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


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

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

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

つまり、


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

 

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

 

逆コンパイル後の特徴

・コメント情報が消える

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

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

 

傾向と対策

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

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

 

難読化処理

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

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

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

 

ダミー変数を作る

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

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

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

 

巨大な数は…

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

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

 

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

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

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

 

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

 

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

 

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

 

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

関連記事

[MQL]ティック更新よりも早い頻度で演算させる方法 と ちょっとした注意事項

MT4のEAは基本的にティックレートを受信する度に一回演算する仕組みになっています。 USDJPY

記事を読む

2chの市況版のスレをテキストマイニングして逆張りするやり方

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

記事を読む

(MQL4プログラマのための)先に知っておくと時間を節約できるMQL4の仕様

ほとんどの人には関係ない記事だと思います。 開発者の方が検索してたまたま見てもらうような覚書です。

記事を読む

(MQL4)WEBサイトの情報を引っ張ってくるやり方[EA自作]

MT4のチャート上にWEBサイトの情報を参照する方法について紹介します。   背景

記事を読む

iCustomではEA化できないインジケーターをEA化するやり方

世の中にはいろいろなMT4用インジケーターがあるわけですが、その中にもEA化できるインジケーターとE

記事を読む

 
  • fxfx.work

    (↑広告です。このサイトの管理者の運営ではありません)

     


  • 横瀬兼元(ペンネーム)です。

    プロフィール
    商材を買わせようとする偽者がいるらしいのでご注意ください。
    ツイッター始めました(イマサラー)
    https://twitter.com/FxantennaC
    (埋め込みするとページ表示が極端に遅くなるので、リンクでご容赦を) 4000文字未満のトピックや話題はツイッターで発信しています。
  • fxfx.work

    (↑広告です。このサイトの管理者の運営ではありません)

Translate »
ページトップへ