私のゲームがどのようにしてコンパイル/リコンパイルされたのか修正されたのかを判断するUnity関数を探しています。ゲームがコンパイル/変更されているかどうかを確認します
答えて
はい、これにはUnity機能がありますが、引き続き回避することができます。
これは、Application.genuine
で実行できます。これは、アプリケーションの作成後にアプリケーションが変更された場合にfalseを返します。
if (Application.genuineCheckAvailable)
{
if (Application.genuine)
{
Debug.Log("Not tempered");
}
}
問題は、人が、デコンパイルし、変更し、ゲームをコンパイルするために十分にスマートである場合は、上記のチェックは無用になるように、彼/彼女はまた、上記のチェックを外すことができるということです。どのような種類のプログラムの純粋さや真偽のチェックは、プレーヤーのマシン上で実行されている限り、削除することができます。
EDIT
あなたはそれが困難に以下を実行することによって回避されるようにすることができます:
.GOファイルに - >ビルド設定.. 。あなたのプラットフォームを選択してください。
Player設定に.Click - 次いで>その他の設定とIL2CPP(C++)にモノからスクリプトバックエンドを変更します。
これで回避することは難しくなりますが、それでも回避することは可能です。
TL; DR:それは率直には不可能です。
プログラムがデコンパイルされているかどうかは決して判断できません。プログラムがデコンパイルされているかどうかは決して判断できません。また、すべての実行ファイルは、データをスクランブルしてスクランブルしても、少なくともアセンブラに逆アセンブルすることができます。難読化されたソフトウェアを使っても、ソースコードを理解するのは難しくなります。究極のobfuscatorはM/o/Vuscatorで、すべてのアセンブラコマンドをmov命令に変更するので、何かを理解するのに尻を痛めます。しかし、それはまた、おそらくあなたが望むものではありません(これは、mov命令は、x86命令セットでは完走しているためです)。hereについての素晴らしい話があります。このトレンドに従うと、further down the rabbit holeにも同じアセンブラコード(約10-20ish命令)を使用してすべてのプログラムを作成することができます。これにより、単純にコードを逆アセンブルしてソースコードに到達することは不可能になります。
いいえ、あなたのコードを逆アセンブルまたは逆コンパイルできないようにすることはできません。しかし、理解するのが難しい(不可能ではない)ことができます。
実行可能ファイルの変更を検出することも可能ですが、あなたにとってはおそらく実現可能ではないでしょう。
変更を検出するためにアプリケーションに組み込んだコードは、パッチを当てることができないという主な問題があります。だからそれを防ぐ必要があります。しかし、それを防ぐ実際的な方法はありません...
元の署名を使用してアプリの変更を検出し、それを実際の署名と比較しようとすると、再コンパイルされたバージョンでそのチェックを除外できます。サーバーとの署名を検証しようとすることはできますが、サーバーチェックを取り除くことで回避できます。マルチプレイヤーゲームのサーバーチェックを強制することはできますが、偽の署名だけを使用します。改ざんを防ぐためにサーバー上の署名を計算する場合は、元のファイルを与えて、再コンパイルしたファイルを実行します。
逆コンパイルからコードの部分を実際に完全に保護するための方法があります(前述のように実現できません)。この機構は "BlurryBox"と呼ばれ、ドイツのKITで開発されました。適切な文書を参考にすることができないように見えますが、これを達成するためには何が行われますか。
このメカニズムでは、暗号化されたストレージとマイクロコントローラを備えたスティックを使用して暗号化を行います。保護したいコードの部分(定期的に呼び出されるものは必要ですが、時間的に重要ではないもの)を暗号化された記憶域に入れます。鍵を取得することは不可能であるため、コードにアクセスすることはできません。次に、マイクロコントローラは、指定されたパラメータを使用してストレージ内の暗号化された関数の1つを呼び出し、その結果を返すように、プログラムからコマンドを受け取ります。コードを読み取ることは不可能であるため、その動作を分析する必要があります。ここでは、ボックスの "ぼやけた"部分が来る。格納する各関数には、小さく、明確に定義された許容パラメータのセットが必要です。他のすべてのパラメータは、あなたのデバイスを殺すトラップにつながります。攻撃者は有効なパラメータが何であるかに関する仕様を持っていないので、この方法では、コードを改ざんすること(セキュリティ状態を示す)に対して安全なセキュリティが提供されます。私がこれを私の記憶から執筆している間に、これがどうやって正しく機能するかについて、いくつかの間違いがあるかもしれません。
あなたは@Liam
ありがとうございました –
- 1. アクティブレコードテーブルが変更されているかどうかを確認
- 2. Javascript:URLが変更されているかどうかを確認しますか?
- 3. c linuxファイルが更新/変更/変更されているかどうかを確認しますか?
- 4. ファイルが変更されたかどうかを確認する
- 5. ファイルが更新されているかどうかを確認しますか?
- 6. リポジトリが変更されているかどうかを確認するGitコマンド
- 7. コレクションが変更されているかどうかを確認する方法?
- 8. サーバーのページが変更されているかどうかを確認する
- 9. sedコマンドが変更されたかどうか確認してください。
- 10. ブール値が変更されているかどうか確認する
- 11. データベースが更新されているかどうかの確認
- 12. NHibernateでエンティティフィールドが変更されたかどうかを確認します
- 13. OAuth更新トークンが変更されたかどうかを常に確認していますか?
- 14. フォームデータが変更されたかどうかの確認
- 15. DSCリソースが変更されているかどうか確認してください。リブートする場合
- 16. Bashスクリプト - ファイルが変更されているかどうかを確認しますか?
- 17. 変数の値が変更されるかどうか確認する
- 18. 選択/テキストが書式で変更されているかどうかを確認してください。
- 19. JavaScript:window.location.hrefが変更されているかどうかを確認してください。
- 20. gradleキャッシュが変更されているかどうかを確認する方法はありますか?
- 21. prePersist()で値が変更されたかどうか確認できますか?
- 22. 行が更新されているかどうかを確認する方法
- 23. ページが更新されたかどうかを確認する
- 24. Ruby on Rails - オブジェクトが変更されているかどうかを確認します。
- 25. Jquery - ラジオボタンの値が変更されていないかどうかを確認します
- 26. PYTHONSTARTUP変数が定義されているかどうかをどのように確認しますか?
- 27. コードが64ビットマシンでコンパイルされているかどうかを確認するGCCプリプロセッサディレクティブはありますか?
- 28. cudaコードがリロケータブルデバイスコードでコンパイルされているかどうかを確認する方法はありますか?
- 29. jarファイルがapkにコンパイルされているかどうかを確認する方法はありますか?
- 30. UIViewがタッチされているかどうかを確認しますか?
(サーバーとIP上のコードは、コードを理解しようとしているため禁止)あなたがコントロールサーバとその動作を模倣してみてください:多分、OPは、それが変更されていた場合、自分のゲームをチェックしたいです。誰かが再コンパイルを行うことができれば、チェックを一括して取り除くこともできます(または、それを比較しているチェックサムを変更する)。 – Flater
@LiamこれはWindows 7用ではありません。私はOPが簡単に変更できるAndroid、特にAndroidデバイスにもっと興味があると思います。ハッシュチェックは削除することもできます。かもね。 if文はコードから削除できます。 – Programmer
@ Liam確かに、ハッシュは確かに異なっていますが、ハッシュをチェックして間違ったプログラムを実行しないので、ハッシュが間違っているという事実は無関係です* *は関係ありません。 – Servy