記事"MQL5 コードの保護:パスワード保護、キージェネレータ、時間制限、リモートライセンス、高度 EA ライセンスキー暗号化技術"についてのディスカッション - ページ 3

 
allicient:

玄関のドアを鉄筋のものに取り替えることもできるが、鍵をドアマットの上に置いたままでは、侵入を防ぐことはできない。 あなたが説明したような保護は、気軽なコーダーを阻止するのには問題ないが、やる気のある攻撃者に対しては確実に不利だ。

ここで問題なのは暗号化ではなく、鍵の扱い方と復号化プロセスだ。

ある攻撃者(古典的な言い方をすればマロリー)が、鍵を持っているEX5をコピーして配布したいと考えた場合、次のような方法が考えられる:

i. その鍵を使ってEX5を実行する;

ii. DLLをプロセスにアタッチするなどして、実行中のプロセスを監視し、EX5が復号された直後にその内容をダンプする;

iii. 平文になったEX5を再アセンブルする(面倒であれば、ソースに逆アセンブルすることもできる)。

もしあなたの最初のポイント保護が署名検証を含むのであれば、攻撃者がファイルを配布するために必要なことは、関連する公開鍵を置き換えた別のMQL実行ファイルを配布することです。 もしMQL5が証明書を検証するために暗号化APIを使用しているのであれば、バイナリからそれを取り除くことができます。これは無限に 続く。

これはすべて、鍵管理という悪夢を考え始める前の話だ。

この種のバイナリ解析は最近の私の能力から外れていますが、手間なく達成できる人を何人か知っています。 つまり、心配すべきは暗号化の強さではなく、無効なセキュリティモデルを持っていることなのです。 誰もMetaTraderがこの問題を解決してくれるとは期待していないので、それ 自体は特別な問題ではありません。この問題には、MQL5/EX5コードの所有者が、自分が管理する別のサーバー上でそれを実行し、バイヤーにアクセス/シグナルをライセンスするという、非常に使いやすいソリューションが他にもあります。

ですから、少なくとも改ざん防止ハードウェアがなければ、適切に実装することが非常に困難であるにもかかわらず、なぜ人々がこの機能を要求するのか理解に苦しみます。


allicient氏は 多くの有効な点を指摘している。 本当の意味での保護のためには、私は次のことを推奨する:

ソースコードの基本的な保護については、できるだけ多くの関数をdllに詰め込めば十分です。 MT5とプログラミングの間のインターフェイスのための最小限のコードであれば大丈夫です。 ソフトウェアを提供するのでない限り、ex4/ex5の完全なソースコードは信用しません。 しかし、この記事は、ソースコードが提供されない有料/商用製品または無料製品の知的財産の保護に関するものです。

ライセンスの場合、ex4/dllの組み合わせのデモ版と本番版を別々に持つことが最善の保護です。トレードオフは、開発者が自分のソフトウェアの2つのバージョンを保守/コンパイルしなければならないため、開発者とクライアントにとって少し手間がかかるということです。 しかし、誰かがソフトウェアのフルバージョンにハックしてアクセスする可能性を減らすことができます。デモの目的にもよりますが、クライアントに全機能を提供したいのであれば、デモ版を使用することができます。

CNSのSaaS(Software as a Service)では、CCoHS(Call code onhosted server)と呼ばれる機能を実装しています。 EAを正しく動作させるために必要なコードの限られた部分を、ホスティングされた形で配置することができます。そうすれば、誰かがEAを持ち去ったり、ライセンスDLLをクラックしたりしても、DLLは役に立たなくなります。 ホスティングされたコードサーバーとEAやライセンスサーバーの間には待ち時間がありますが、それを回避することはできます。 実装はそれほど難しくありませんが、ユーザーは自分のサーバーにCCoHSを実装する方法を見つけなければなりません。規模が小さいうちは、低予算のサーバーでもどこでもよいのですが、加入者数が増えてきたら、規模を拡大すればよいのです。

ホスティングされた関数は、すべてのオプションの中で最も高価ですが、万が一誰かがあなたのDLLを逆コンパイルできた場合に備えて、本当の意味での保護を提供します。 彼らはおそらく、あなたのソフトウェアを動作させるためにDLLを "クラック "するでしょう。 しかし、必要なホスティングされた関数がなければ、それはまだ役に立たないでしょう。 ここで私が何かを見逃していない限り。

 
MetaQuotes:

公開記事MQL5プログラムの保護:パスワード、キー、時間制限、リモート・ライセンス・チェック

著者:investeo

3.アカウントへのバインド - Expert Advisorの作業をアカウントにバインドしようとしました。このアカウントでの Expert Advisor の動作は許可されていません。コンパイル中のエラーはありません。何が問題なのか理解できません。

 
記事に感謝
 
メタトレーダー4用に開発されたeaにこれらのコマンドラインをどのように追加すれば よいでしょうか???
 

自分のサイトでアドバイザーを売りたい のですが、どうすればいいのかわかりません。

よろしくお願いします!

 

こんにちは、


記事をありがとうございます。パスワードを 入力する際、アスタリスク("*")またはドット("-") で表示させる方法を教えてください。

私はプログラマーではありません。


ありがとうございます。

 
Peter Maxwell:

コピープロテクトは非常に 難しい問題であり、それゆえに音楽・映画産業はDRMに取り組み、失敗を繰り返してきた。

もし彼らがあなたのアドバイスを使って製品を "保護 "することにした場合、その消費者が数時間のうちに保護を解除し、何分の一かの値段で転売したときに、彼らは多少驚くかもしれない。

マジメな話、base64エンコーディングは暗号化とは関係ない。 base64エンコーディングは、データエンコーディングを7ビットとみなすプロトコルを使って、8ビットデータを安全に伝送できるようにするために設計されたものだ。 base64エンコーディングを逆用することは些細なことだが可能で、そのために設計されている!

MQL5ソフトウェアを安全に配布する唯一の解決策は、ブローカーの限定的な委任状条項を利用するか、.ex5ファイルを含むMQL5のインスタンスをどこかのサーバーにインストールし、顧客が シンクライアントを使用してアクセスできるようにすることです(.ex5をダウンロードできないようにする)。 はい、私は15年以上情報セキュリティに携わってきました。

正直なところ、Metaquotesがこの記事を掲載したことに驚いています。

その通りです。その通りだ。
 

こんにちはこんにちは相談私はmt4で口座番号によって EAの使用を達成することができる助けを必要とし、それは私が変更することができ、ライセンス内にあるアカウントのみを動作させることができ、それは2つのmt4 1マスターと1スレーブを使用したように、リモートでそれを有効または無効にすることができます私はコードの説明を添付し、どのように私はライセンス外の別のアカウントを入力した場合、それは同じように動作するので、それがうまく動作するように改善することができます。

<?xml version="1.0" encoding="UTF-8"?

<ライセンス

<プログラムバージョン

</プログラムバージョン

<ライセンスタイプ>フル</ライセンスタイプ

<有効期間

<終了日>1/18/2080</終了日

</有効期間

<オーナー

<オーナー名

<アカウント>6789</アカウント

<アカウント>7994</アカウント

<アカウント>22302</アカウント

</ownerName

</オーナー

<Signature xmlns="http://www.w3.org/2000/09/xmldsig#">

<署名情報

<CanonicalizationMethod アルゴリズム="http://www.w3.org/TR/2001/REC-xml-c14n-20010315" />

<SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1" /> <SignatureURI= "

<参照 URI="">

<トランスフォーム

<Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature" /> <トランスフォーム

</Transforms

<DigestMethod アルゴリズム="http://www.w3.org/2000/09/xmldsig#sha1" />

<DigestValue>Cl8vF8+Uyyms3pEodjip5ol5J4s=</DigestValue>。

</参照

</SignedInfo

<署名値 p/NlTyHeUy5CVC01H/2WmvTcN8TqJhrInkhqtyzR6vqn/koJHqm6fiD6mepklpn4fud0em7vqOiyWcQ9KQ8jqoyoN9ExkJUEvepWBQT2HHcaoW2kpV17ch+CZvtFX74cHE23WrOi9/p3RoK/4G0rsgvdjvefdZRQRsM5k=</SignatureValue></SignatureValue

</シグネチャ

</ライセンス

 

アイデアがある。ウェブフローを常に見ているウェブモニターがいるとする。

1.EAクライアントがウェブサーバーを呼び出し、サーバーがランダムに生成するsha.pubキーを要求する。

2.2.EAは、そのpubキーで認可を求めるデータをサーバーに送信する。そして、そのデータにはクライアントが生成したランダムな鍵が含まれている可能性がある。モニターはsha鍵のためにデータを復号できない。

3.サーバーはデータを受信し、クライアントが送信した鍵で暗号化された認証許可情報を送信する。モニターはpubのshaキーを知っているので、この情報を復号化できるかもしれないが、クライアントのキーを知らないので、やはり役に立たない。

このようにして、サーバはEAクライアントの動作を制御する ことができる。

 

こんにちは、新しいPythonのリリースを考慮してこの記事を更新することは可能でしょうか?

私はそれを動作させることができません。PS: Pythonは私にとってまだ新しいものです。


ありがとう、

ダニー