*

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

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

関連記事

第12回:消えてしまう数値を一時的に保存して利用する~変数~

変数の役割 これまでにもあまり大した説明をせずに変数を扱ってきましたが、 ここでは変数について重

記事を読む

第3回:新規作成後に記述されているコードの意味

ここでは新規作成で現れた記述に対する解説を行います。 // と /**/ と コメントアウ

記事を読む

第21回:パラメータ設定で変更できる数値を作る

パラメータ変数の作り方 EAはMT4側で設定できるようにした方がユーザーフレンドリーです。

記事を読む

第22回:チャート上にデータを表示させる

MT4のチャート上にデータを表示させる Comment()という関数を使うとビジュアルモードのバッ

記事を読む

【MQL4】外部ソフトなしで稼働するコピートレードツールを作る。その④

前回はコピー元(配信元)のコードを書きました。(先頭の変数の宣言が含まれていないので、コピペしてもま

記事を読む

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

    各トピックに対するコメントは各記事のコメント欄にお願いします。それ以外のご質問、ご相談などは
    infoあっとfxantenna.com
    まで
    私の偽物がいるらしいので偽物にご注意ください。
no image
AWSでWebサーバ構築 (EC2xUbuntu) その6

■メールサーバーの設置 ■AWSにメール用のポート開放の申請

AWSでWebサーバ構築 (EC2xUbuntu) その5

■■FTPサーバーを入れる■■ AWSではちょっと特殊な作業が必要で

AWSでWebサーバ構築 (EC2xUbuntu) その4

■■SSHでサーバに入る■■ いよいよサーバーに入ります。ここからの

AWSでWebサーバ構築 (EC2xUbuntu) その3

■■SSLで接続できるようにする■■ 昨今ではいろいろな理由からSS

AWSでWebサーバ構築 (EC2xUbuntu) その2

■(オプション)Elastic Beanstalk(インスタンスの自動

→もっと見る

PAGE TOP ↑