見出し画像

自動売買EAの口座縛りが破られる(実演)

 まさか!!というと問い合わせも頂いたので、テスト環境を作って実演します。このやり方を自分が作った自動売買EAで検証してみてください。
※素晴らしい開発者はいろいろ策を練られているので、このやり方で口座縛りが突破されるとは限りません。内容を見て自分の自動売買EAは大丈夫と判断できる開発者さんは問題ありません。


1.前提条件

今回、テストした環境は以下の通りです。

1.1 自動売買EAがwininet.dllを使用している(ユーザーは見える)

1.2 自動売買EAのソースコード(ユーザーは見えない)

すべての自動売買EAがこうなっているとは限りません。
認証のところは、適当(笑)
string account = "12345";
string auth_url = "http://*.*.*.*:8000/?account="+account;
が、口座番号を添えてサーバーに問い合わせを行うURL
実際の自動売買EAは、AccountNumber()でログインしている口座番号を取得しています。

#property  strict

string account = "12345";
string auth_url = "http://*.*.*.*:8000/?account="+account;
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
int OnInit(){
  Comment("");
  //DLLの使用が許可されているかを確認する
  if(!MQLInfoInteger(MQL_DLLS_ALLOWED)){
    Comment("DLLの使用が許可されていません");
  }
  //認証サーバーに問い合わせ
  string text = ReadInternet(auth_url, CP_UTF8);
  //レスポンスにOKという文字が入っているか?
  Print(text);
  if(0<StringFind(text,"OK"))
    Comment("口座番号",account,"認証OK");
  else
    Comment("口座番号",account,"認証NG");
  return INIT_SUCCEEDED;
}

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
#import  "wininet.dll"
int InternetOpenW(string agent, int accessType, string proxyName, string proxyByPass, int flags);
int InternetOpenUrlW(int internetSession, string url, string header, int headerLength, int flags, int context);
int InternetReadFile(int, uchar &arr[], int, int &byte);
int InternetCloseHandle(int winINet);
#import 

string ReadInternet(string url, int cp){
   int inet = InternetOpenW("MetaTrader", 0, "0", "0", 0);
   if(inet == 0)
     {
      return("MetaTrader Error");
     }
   else
     {
      int handle = InternetOpenUrlW(inet, url, NULL, 0, 0, 0);
      string text = "";
      int    byteSize = 0;
      uchar  receive[1024];
      while(InternetReadFile(handle, receive, 1024, byteSize))
        {
         if(byteSize <= 0)
            break;
         text += CharArrayToString(receive, 0, byteSize, cp);
        }
      InternetCloseHandle(handle);
      InternetCloseHandle(inet);
      return(text);
     }
   return("Error");
}

1.3 認証サーバー(ユーザーは見えない)

口座番号でリクエストするとデータベースに口座番号があれば「OK」のレスポンス。逆に口座番号がなければ「NG」のレスポンス。

1.4 サーバーとMT4の認証を確認してみる(ユーザーは見えない)

ブラウザで「http://*.*.*.*:8000/?account=12345」にアクセスすると「OK」の文字が返ってくる通常の動作。

登録されていない口座番号123456だと「NG」の文字が返ってくる通常の動作。

2.レスポンスを差し替えるとすべてがOKになる

レスポンスをすべてOKという文字に差し替えると何をやっても「OK」という文字が返ってくる

うんこでもOK!!

テスト環境の自動売買EAは、レスポンスに「OK」という文字があれば認証OKというプログラムなので認証が破られることとなります。

3.具体的な検証操作

 ここからは有料記事となります。Windows版での内容となっています。
windowsの基本的な操作方法(インストール、フォルダー操作、txtファイルの新規作成)ができるかたのみご購入下さい。mql4プログラムを書けるぐらいのスキルがあるなら大丈夫でしょう。
 この操作においてトラブルや事故、及びそれが原因で発生した損失や損害について、一切責任を負いかねます。

ここから先は

4,269字 / 25画像

¥ 4,980

期間限定 PayPay支払いすると抽選でお得に!

この記事が参加している募集

#スキしてみて

527,285件

この記事が気に入ったらサポートをしてみませんか?