*

EAのデコンパイルの実際とその対策

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

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

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

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

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

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

これはコードのほんの一部ですが、基本的にはこのように変数名とコメントが失われます。このまま再コンパイルしてももちろん通るのですが、アタッカーはいろんな理由で中身を読み解こうとします。

つまり、

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

問題は、こういったリバースエンジニアリングをさせないためにどういった対策を行うか、ということです。MQLにはnameof演算子がないので変数名の変化を使うことはできません。

一つは、改行を消して難読化処理をする手があります。
bandicam 2017-12-17 13-01-55-647
JavascriptやJqueryなんかで良く行われている方法で、改行が失われることで純粋に”読みにくく”なります。ただし、コード中に//でコメントアウトしている場所がある場合は、そこでコメントアウトされてしまうので、/**/でコメントにした方が難読化処理が捗ります。

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

二つ目は、ダミーの変数を作る方法です。

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

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

ちなみに、
faiさんのブログで「極端に巨大な数はデコンパイルされたときに一緒になる」という性質を使った方法もなくはないですが、必ずしもうまくいかなかったり、
逆にデコンパイルしていない状態でもバグになったりするのでオススメはしません。
(あとパッと見で分かるので、そこだけ削除されて終わりだと思います)

Comment

  1. Hi there, I enjoy reading all of your article post.
    I like to write a little comment to support you.

このコメントはWEBに公開されるので、問い合わせ等はメールでお願いします。

関連記事

MT4のメールを複数アドレスに送るには

MT4が出すメールを複数のアドレスに送信したいときがあります。 ほとんどは"シグナルのメール通

記事を読む

MT4チャート上で動画を表示する

MT4にはチャート上に画像を表示させる機能があります。 しかし、動画を表示させる機能はありません。

記事を読む

第7回:条件の書き方 == && ||

今回はif文の中の条件を記述します。 == 等しいことを条件にする A == B でAとBが

記事を読む

ここが変だよMQL5

MT5を久しぶりにちょっといじってみたので、所見(愚痴)を書かせてください。 ここが変だよMQ

記事を読む

MT4から取引所のビットコインレートを取得して比較する

今までMQLしか触ったことがない人にとって、jSONだのHASHだのが出てくるAPIの処理は荷が重か

記事を読む

 
  • ブログ管理人の横瀬兼元(ペンネーム)です。

    "FX"の自動売買システムに興味がある方はinfo@aiforex.infoにご連絡ください。
    担当の方が対応します

    トレード成績はこのブログに掲載しています。


    株、仮想通貨、それ以外の私に対するご連絡は
    infoあっとfxantenna.com
    まで

ビットコイン自動売買システムの作り方 一覧

今ならAPIの仕様の改良により、 CoinCheck、ZAIF、bi

ライトコインLTCのアービトラージ取引結果 binance vs poloniex

今回はライトコインのアービトラージ結果です。 最初はレート差1USD

仮想通貨アービトラージに取引所間の送金は必ずしも必要ではない

ここまで話を進めてきていまさら~な感じもするのですが、そもそものところ

BCH(ビットコインキャッシュ)のアービトラージの取引結果(Binance vs Poloniex)

今回はビットコインキャッシュのアービトラージの取引結果です。

ETH(イーサリアム)のアービトラージの取引結果(Binance vs Poloniex)

前回まででアルトコインのアービトラージの作り方や背景について説明しまし

→もっと見る

PAGE TOP ↑