ブログトップ 記事一覧 ログイン 無料ブログ開設

とあるMetaTraderの備忘秘録 RSSフィード Twitter

忙しいです。ネタもないし・・・

2012-08-24

デコンパイルすると動かないコード(?!)

先日みつけた、int 最小値バグを調べていて気づいたのが、表題の「デコンパイルすると動かないコード」です。正確には、「動かない」のではなくて、挙動が変わるだけですが、デコンパイラをお持ちの人は以下のコードを試してみてください。(ちなみに、Purebeamさんは、8/10 にデコンパイラの販売を停止されています..)

f:id:fai_fx:20120823150247p:image

↑このコードをex4にコンパイルして実行すると、OK が表示されます。

f:id:fai_fx:20120823150246p:image

↑先の ex4 をデコンパイルした結果がこのコードです。

これをコンパイルして実行すると、NG が表示されます。変数に設定した値がビミョーに変化しているのが分かります。



上記は単純な例ですが、デコンパイルで数値が変わる特性を利用して、大量の変数で複雑に分岐すれば、ある種のデコンパイル対策になるかもしれません。^^;

   int a = -2147483648;
   int b = -2147483647;
   int c = -2147483648;
   int d = -2147483647;
   ↓デコンパイル結果 (フラグ情報が失われる)
   int li_0 = -2147483647;
   int li_4 = -2147483647;
   int li_8 = -2147483647;
   int li_12 = -2147483647;




ついでに、過去の記事で、デコンパイル対策に質問があったので回答します。

DLL初心者 (58.138.41.236)

『作ったDLLをただただWinlicenseでプロテクトしています。

ソースコードでマクロを利用するという手法を教えて頂けませんでしょうか?

(可能であれば全国1000万低級MQL使いの為に記事化していただけると尚嬉しいです(笑

ご指導宜しくお願い致します^^;』

ヘルプを読めば解決すると思うので・・・、以下その手順です。



(1)ヘルプを読む。

WinLicense Help から、SecureEngine(R) Macros を調べる。

その中の VM macros , CodeReplace macors , CheckCodeIntegrity macro を調べる。

(他にも有用なマクロがあったと思うけど、DLLからは使えない可能性がある..)


(2)サンプルコードを調べる。

WinLicenseSDK\ExampleSDK の Macro系サンプルフォルダ内の Visual C++ のサンプルコードを見る。


(3)試す。

#include "....\C\WinLicenseSDK.h"

↑ヘッダファイルをインクルードして、

↓処理の前後をマクロ専用の大文字の文字列で囲む。

// VM macros の例

VM_START

a=b+c;

VM_END

// CodeReplace macors の例

CODEREPLACE_START

for(int i=0;i<100;i++){

value += (value*i*4) <<1;

}

CODEREPLACE_END

その後、コンパイルして出来上がったDLLをWinlicenseでプロテクトする。


以上です。。。

(個人的には、某EAがクラックされてしまったのは残念だったけど、この辺りを見ると、WinLicense/ThemidaのUnpackingチュートリアルが出回っているので、無理もないかな..と思います。常に最新版のWinLicense で大量のマクロ(〜10個/1MB)を埋め込んで対抗するしかないです。。

ちなみに、これは、Themidaの暗号化マクロの挙動を追いかけるチュートリアル動画です。解析者がどんな画面を見て作業しているのか・・・雰囲気が分かります。

turboturbo 2012/08/25 10:37 faiさん はじめまして

ちょいと気になったので初コメします。

チュート動画のデバッガってOlly_Dbgだと思うんですが
PhantOm - [Professinal Edition]ってなってるのは何故なんでしょ?

他愛の無い質問ですいません^_^;

fai&gt;turbofai>turbo 2012/08/25 11:00 初めまして。
それは、対象アプリ側からデバッガ検出されないように、Phant0mプラグインでウィンドウタイトル名も遮蔽しているのだと思いますが、[Professinal Edition]の部分は詳しくは知りません。。

最新のプラグインにそういう機能があるのかも?しれません。

AririnAririn 2012/08/25 16:38
ブログ更新再開おめでとうですー☆
Twitterは更新されていたようですが、やはり腰を落ち着けてブログで読めるのは最高です。

ところでPurebeamさんがデコンパイラを販売終了した理由は何だろな。
どっかかの圧力か、度重なるMT4 Build更新に付いていく気がなくなったのか...。
MT5が出たというのにMT4は依然としてBuild更新し続けているのはスゴイですよね。

turboturbo 2012/08/26 20:35 faiさん こんばんわ

回答ありがとうございました。

なるほど、納得しました!
リバースエンジニア対策までは気付きませんでした・・・orz

faiさんの博学には脱帽です。

これからもお邪魔させていただきますね〜
ではでは<(_ _)>

DLL初心者DLL初心者 2012/08/27 11:51 ご質問をしていた本人です。

この度は非常にわかりやすい記事ありがとうございます!
全国1000万低級MQL使い代表としてお礼申し上げます(笑

でもチュート側と製作者側の戦いに終わりがないという事も改めて実感しました。

ちなみにですが、例えば保護したい処理が10個あったとしたら、すべて同じマクロではなく個別に違うマクロで囲った方が強固でしょうか?
あと、一つの処理を複数のマクロで囲むなんていうのは無理なんでしょうか?

いつも初歩的すぐる質問ですみません(汗

カメ吉カメ吉 2012/08/28 17:59 こんにちは。
ブログが更新されているので楽しみです。
以前2年位前に.csv→.hstにperlで変換してMT4に取り入れてオフライン表示するプログラムがありました。
以前からMT4で株や何でも時系列のデータを表示できないかと思っていましたので、これはと思い何度も行いました。
サンプルではうまくいくのですが自分の時系列データではうまくいきません。
サンプルの1321.csvの名前だけを変えてHHHH.csvにすると問題なくMT4で表示可能なのですが、excelで加工してCSV保存したCSVファイルですとperlが.hstをうまく吐き出してくれません。(中身が無い)
メモ帳で両者を見ますと改行に違いあるようです。excelではサンプルの1321.csvのような形式のcsvは作れないようです。メモ帳でやってもダメでした。

perlのどこを変更すればexcelで加工したcsvファイルでも.hstへ変更できるでしょうか。それとも自分のやり方??
これが出来ると株価でもファンドでも時系列データはお気に入りのインジで表示できるのですが。。。
mq4でも出来るのではと思いますが、自分はmq4は超初級で自分では改造するぐらいです。

それとも何方か時系列データを取り込みオフライン表示できるmq4などご存知でしたら照会してください。

よろしくお願いします。

とらふぐとらふぐ 2012/09/01 01:58 グレイモデルやニューラルネットワークはどうプログラムしましょ。
Rならやりやすそうですけど。

1本先の予想値を表示させ続け、最新値のとこだけ数本先を表示。
グレイモデルは過剰反応でトレンド向き、最近隣法は過小評価でレンジ向き
かなと思えますけど、実際はどうですかね?

http://www.datamining.jp/

esbiesbi 2012/09/12 18:23 Yahooで質問したのですが回答がつかず・・・
すみませんが、どなたかご存知なら教えていただけませんか?

commentをwindowの左ではなく右端に表示する方法はありませんか?

よろしくお願いします。

もともと 2012/09/23 15:41 こんにちは。
無料のVPS(Cent OS)を見つけたのですが、これにWineをインストールしてMT4を稼動させるって可能でしょうか?
http://www.host1free.com/

attsuattsu 2012/09/30 23:05 こんにちは
作っていただけると嬉しいインジがあるのでが、
以前、SwingPointViewEXTLと言うインジを作っていただいていましたが、、
似たようなインジなのですが、SDX- 8h.mq4 と言うインジで、下記にあります。
http://www.abysse.co.jp/mt4/indicators/SDX-%208h.mq4
このインジのラインを指定した日にちだけ、現在時間まで、延長できる
インジができると大変嬉しいのですが。
ご検討宜しくお願い致します。

ふぁんふぁん 2012/10/01 23:54 こんなことを聞けるのは御大しかおられないので、もしご関心を頂ければ、教えて頂きたいと思います。
以前はMT4 BrokerのサーバーのIPアドレスを調べて、Pingを行うと例外なく試験ができたのですが、最近、ほとんどの(全部?)MT4 BrokerでPing試験がTimeOutになってしまいます。
例のMT4のバージョンアップによるものかとも思いますが、VPS等からPingができないと折角の海外VPSの有り難味が感じられない状態です。
すいませんが、同様の事象を観測されておりますでしょうか?
また、接続時間を計るすべが御座いましたら、ぜひご教授頂きたいと存じます。

esbiesbi 2012/10/02 17:27 上記質問は自己解決できました。

commentではなくobject〜を利用する方法でわかりました。

以上ご報告まで

forexrocks78forexrocks78 2012/11/15 00:17 こんばんわ。
外部ソフトウェアを使用したDLLがついているEAをどうしてもデコンパイルしたいのですが、デコンパイルすると暗号化されている文字列などがバグるという現象が起きます。

どうにかしてデコンパイルする方法はないものでしょうか?宜しくお願い致します。

fai&gt;forexrocks78 fai>forexrocks78 2012/11/15 11:23 開発した人に相談されてみるのが良いと思います。

はいはい 2013/02/14 16:52 WinlicenseやThemidaでなくコード自体を難読化させるCode Virtualizerがデコンパイル対策には効果あるかと思います。

fai&gt;はいfai>はい 2013/02/14 17:01 Code Virtualizerの機能は、Winlicenseに含まれていると思いますが・・。

投稿したコメントは管理者が承認するまで公開されません。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/fai_fx/20120824/1345759895
Connection: close