EA のプロテクト手法の考察 4

執筆者: ソフトゲート  日時: 2013-05-05  カテゴリ: MT4

近々 EA のプロテクトシステム (というかプロテクトサービス) の提供を開始するつもりなので、今回の記事では、簡単にそのサービスの紹介をしながら、 既存の EA プロテクトシステムの現状 (特に問題点) などをざっと見ていきたいと思います。

まず、以前の記事でも説明しましたが、EX4 ファイルは必ずデコンパイルが可能です。デコンパイルできない EX4 ファイルが稀に存在するように見えますが、それは

  • 実はそもそも中身が有効な EX4 ファイルではない
  • デコンパイラのバージョンが古い (broken function とか出るのはこれ)

のいずれかのケースに該当します。

したがって、EX4 ファイルは必ずデコンパイルされるものだという前提で配布する必要があります。

そこで、多くの EA の販売者の方々は、一般に、売買ロジックの一部をネイティブ DLL に実装することで、EX4 ファイルがデコンパイルされても簡単にはロジックが割れないように工夫をしています。

ロジックを DLL に実装する場合の主なデメリットとしては、

  • プログラミングが得意ではない人には実装がやや難しい
  • 関数コールが多すぎるとバックテストが遅くなる

などが考えられますが、デコンパイラに通せば一発で MQ4 が復元できてしまう素の EX4 で配布するよりは遙かに安心でしょう。

DLL の問題点

しかしながら、最近のネイティブデコンパイラも結構性能が向上しており、C ソースそのままとまではいかないものの、かなりそれに近いアウトプットを出せるようになっています。

ひとつ実例をお目にかけましょう。次の図は、とある EA の DLL を逆アセンブルした様子です:

20130505-Disassembly 

もちろん、逆アセンブルしただけでは決して読みやすいとは言えませんが、これにデコンパイラプラグインを適用すると・・・・・

20130505-PseudoCode

こんな風に、この関数の場合には ほぼ C 風なソースが復元できます。

おや? ところで、2006 という値と a4 を比較している箇所が気になるのは私だけでしょうか?

『これって、もしかして、2006 年以前かそれ以降かを、条件文で判定している???』

・・・興味本位で、この関数を呼んでいる EX4 側のコードを見てみると・・・

20130505-Mq4Caller

あぁ、やっぱり、Year() を呼んでますね・・・。さすがに年で処理を分けちゃ反則でしょ・・・。

この EA の名誉(?)のために言っておくと、このような判定をしている箇所はいくつかあるものの、どれも 2006 年以前かどうかの判断だけで、それ以上に細かい条件分岐はしていないようです。^^;

すっかり話が脱線しましたが、要するに、DLL にロジックを移しても、最近では結構簡単にソースを復元される恐れがあると言うことです。

そのため、現在は、ネイティブ DLL のロジックを容易に解析できないように、DLL をパッカーで保護して配布するのが主流です。海外の有名どころの EA は、ほぼ例外なくパッカーで保護されています。

ただ、パッカーは結構デリケートなところがあり、一つのオプション設定を変えただけで、DLL がまったく動かなくなったりすることもあります。また、パッカーで処理しておくだけでも解析の難易度はかなりアップするものの、重要な箇所はやはりきちんと仮想化しておかないと、結局はデバッガでコードを追跡されてしまいます。

効果的にパッカーを使いこなすには、ある程度の技術的な知識が要求されるので、こうした事情を考慮して、弊社のプロテクトソリューションでは、プロテクトするソフトウェアをユーザに配布するのではなく、弊社が 安価かつ高速仕上げで プロテクトを請け負う形でサービスをご提供するつもりです。

もちろん、DLL 部分は最新のパッカーで仮想化を施して保護した上で、数種類のアンチウイルスソフトを利用して、誤検出されないかどうかのチェックも行います。

EX4 の問題点

さて、売買ロジックは DLL に移してなんとか隠蔽できたとしても、MQL の関数にアクセスする箇所は依然として EX4 側に残っているため、どうしてもそこは簡単に解析されてしまうことになります。

また、特に口座番号でライセンス制御などを実装するときには、こうした EX4 の部分が書き換え可能であることが大きな弱点になります。

しかしながら、残念なことに、既存のプロテクトシステムには、EX4 自体の保護をほとんど考慮していないものが多いのです。

これに対して、弊社のプロテクトシステムでは、MQL レベルでの難読化を多用する設計になっているため、非常に鬱陶しい MQL コードに変換した上で EX4 にコンパイルします。

たとえば、MT4 にデフォルトでついてくる MACD の EA を例にとると、オリジナルはこんな感じですが

20130505-MacdOriginal

これを弊社のプロテクトシステムを通すと・・・

20130505-MacdObfuscate

こんな風に、えらい読みにくいコードに変換されます。もちろん、これは読みにくいというレベルの代物ではなく、コードの一部は DLL 側に実装されているため、デコンパイルした MQL を永遠に眺めていても、ロジックを解析することはできません。

また、DLL には、EX4 を書き換えると動作しなくなるような仕組みも実装されているので、デコンパイルしたコードを書き換えた上で再コンパイルするという手法も通用しません。

このプロテクトサービスについては、近々サービス価格などを決定してアナウンスしたいと思いますが、ご興味のある EA 開発者/販売者の方は、是非メールにてご質問/ご要望などお寄せください。

 

 

執筆者について

ソフトゲート

ソフトゲート

MT4 支援ソフトウェアパッケージ Forex Studio を開発/販売しています。