2017-10-17 28 views
2

私のゲームがどのようにしてコンパイル/リコンパイルされたのか修正されたのかを判断するUnity関数を探しています。ゲームがコンパイル/変更されているかどうかを確認します

+1

(サーバーとIP上のコードは、コードを理解しようとしているため禁止)あなたがコントロールサーバとその動​​作を模倣してみてください:多分、OPは、それが変更されていた場合、自分のゲームをチェックしたいです。誰かが再コンパイルを行うことができれば、チェックを一括して取り除くこともできます(または、それを比較しているチェックサムを変更する)。 – Flater

+0

@LiamこれはWindows 7用ではありません。私はOPが簡単に変更できるAndroid、特にAndroidデバイスにもっと興味があると思います。ハッシュチェックは削除することもできます。かもね。 if文はコードから削除できます。 – Programmer

+1

@ Liam確かに、ハッシュは確かに異なっていますが、ハッシュをチェックして間違ったプログラムを実行しないので、ハッシュが間違っているという事実は無関係です* *は関係ありません。 – Servy

答えて

4

はい、これにはUnity機能がありますが、引き続き回避することができます。

これは、Application.genuineで実行できます。これは、アプリケーションの作成後にアプリケーションが変更された場合にfalseを返します。

if (Application.genuineCheckAvailable) 
{ 
    if (Application.genuine) 
    { 
     Debug.Log("Not tempered"); 
    } 
} 

問題は、人が、デコンパイルし、変更し、ゲームをコンパイルするために十分にスマートである場合は、上記のチェックは無用になるように、彼/彼女はまた、上記のチェックを外すことができるということです。どのような種類のプログラムの純粋さや真偽のチェックは、プレーヤーのマシン上で実行されている限り、削除することができます。


EDIT

あなたはそれが困難に以下を実行することによって回避されるようにすることができます:

.GOファイルに - >ビルド設定.. 。あなたのプラットフォームを選択してください。

Player設定に.Click - 次いで>その他の設定とIL2CPP(C++)にモノからスクリプトバックエンドを変更します。

これで回避することは難しくなりますが、それでも回避することは可能です。

+2

@Liam両方を考慮すると、簡単に削除されます。いいえ、実際はありません。彼らは同じように転覆する。 – Servy

+1

@Servy:ポイントを拡張するには、カスタムチェックサムをどこかに保存する必要があります。チェックサムを保存するセキュリティを**追加**弱にします。ストレージを改ざんする可能性がある場合は、比較しているチェックサムを変更することができます。 – Flater

+0

あなたのご協力ありがとうございます。私には明らかです。 –

0

TL; DR:それは率直には不可能です。

プログラムがデコンパイルされているかどうかは決して判断できません。プログラムがデコンパイルされているかどうかは決して判断できません。また、すべての実行ファイルは、データをスクランブルしてスクランブルしても、少なくともアセンブラに逆アセンブルすることができます。難読化されたソフトウェアを使っても、ソースコードを理解するのは難しくなります。究極のobfuscatorはM/o/Vuscatorで、すべてのアセンブラコマンドをmov命令に変更するので、何かを理解するのに尻を痛めます。しかし、それはまた、おそらくあなたが望むものではありません(これは、mov命令は、x86命令セットでは完走しているためです)。hereについての素晴らしい話があります。このトレンドに従うと、further down the rabbit holeにも同じアセンブラコード(約10-20ish命令)を使用してすべてのプログラムを作成することができます。これにより、単純にコードを逆アセンブルしてソースコードに到達することは不可能になります。

いいえ、あなたのコードを逆アセンブルまたは逆コンパイルできないようにすることはできません。しかし、理解するのが難しい(不可能ではない)ことができます。

実行可能ファイルの変更を検出することも可能ですが、あなたにとってはおそらく実現可能ではないでしょう。

変更を検出するためにアプリケーションに組み込んだコードは、パッチを当てることができないという主な問題があります。だからそれを防ぐ必要があります。しかし、それを防ぐ実際的な方法はありません...

元の署名を使用してアプリの変更を検出し、それを実際の署名と比較しようとすると、再コンパイルされたバージョンでそのチェックを除外できます。サーバーとの署名を検証しようとすることはできますが、サーバーチェックを取り除くことで回避できます。マルチプレイヤーゲームのサーバーチェックを強制することはできますが、偽の署名だけを使用します。改ざんを防ぐためにサーバー上の署名を計算する場合は、元のファイルを与えて、再コンパイルしたファイルを実行します。

逆コンパイルからコードの部分を実際に完全に保護するための方法があります(前述のように実現できません)。この機構は "BlurryBox"と呼ばれ、ドイツのKITで開発されました。適切な文書を参考にすることができないように見えますが、これを達成するためには何が行われますか。

このメカニズムでは、暗号化されたストレージとマイクロコントローラを備えたスティックを使用して暗号化を行います。保護したいコードの部分(定期的に呼び出されるものは必要ですが、時間的に重要ではないもの)を暗号化された記憶域に入れます。鍵を取得することは不可能であるため、コードにアクセスすることはできません。次に、マイクロコントローラは、指定されたパラメータを使用してストレージ内の暗号化された関数の1つを呼び出し、その結果を返すように、プログラムからコマンドを受け取ります。コードを読み取ることは不可能であるため、その動作を分析する必要があります。ここでは、ボックスの "ぼやけた"部分が来る。格納する各関数には、小さく、明確に定義された許容パラメータのセットが必要です。他のすべてのパラメータは、あなたのデバイスを殺すトラップにつながります。攻撃者は有効なパラメータが何であるかに関する仕様を持っていないので、この方法では、コードを改ざんすること(セキュリティ状態を示す)に対して安全なセキュリティが提供されます。私がこれを私の記憶から執筆している間に、これがどうやって正しく機能するかについて、いくつかの間違いがあるかもしれません。

あなたは@Liam

+0

ありがとうございました –

関連する問題