はなちるのマイノート

Unityをメインとした技術ブログ。自分らしくまったりやっていきたいと思いますー!

【Unity】お手軽にできる改造版対策

はじめに

今回はお手軽な海賊版対策として使えるメソッドについて紹介したいと思います!

Twitterをみていたところこのようなツイートを見かけました。

本当に数行でできそうだったので、実際に試してみたいと思います。

メソッドについて

紹介するメソッドはこちら。

public static bool genuine;

アプリケーションが構成された後、なんらかの変更があった場合に false を返します。
Unity - Scripting API: Application.genuine

つまりfalseの時は海賊版の可能性があるということです。


次に紹介するメソッドはこちら。

public static bool genuineCheckAvailable;

アプリケーションの整合性が確認できる場合は true を返します。
Unity - Scripting API: Application.genuineCheckAvailable

ただ整合性という言葉は正直ピンとこないんですよね。


またこちらの公式の記事をみるとこのように書かれていました。

Application.genuineCheckAvailable は、Application.genuine と一緒に使用して、アプリに一貫性があるかを検証することができます。
Application.genuine へのアクセスは、リソースに負担がかかる操作であるためフレームの更新中やスピードが重視されるコードのときに使用しないでください。

Unity - Manual: Advanced iOS scripting上級者向け Unity モバイルスクリプティング - Unity マニュアル

前半のApplication.genuineCheckAvailableApplication.genuineは一緒に使用的なことが書かれています。

ただ一緒に使ってねというのが次のうちどっちを指すのかはよくわかりませんでした。

if (Application.genuineCheckAvailable)
{
    if (!Application.genuine)
    {
        Debug.Log("これは改造版です");
    }
}

or

if (!Application.genuineCheckAvailable || !Application.genuine)
{
    Debug.Log("これは改造版です");
}


私的には下のほうなのかなと解釈したのですが、他の日本語のサイトだと上が紹介されていたので上が正しいのかもしれません。
kazupon.org


またこの記事ではAndroidのみに入れていますが、こちらの公式のドキュメントにはiOS,Androidともに使って良さそうな文言が書いてあったので、少なくともUnity2018.4移行なら大丈夫だと思います。

上級者向け Unity モバイルスクリプティング - Unity マニュアル
Unity - Manual: Advanced iOS scripting

やり方

Application.genuineCheckAvailableの使い方がいまいちですが、次のコードなら間違いはないと思います。
※実際にまだリリースしていないので、確実とはいえません

private void Awake(){
    if (!Application.genuine) Debug.Log("これは改造版です");
}


また少し前に紹介したRuntimeInitializeOnLoadMethodを用いても良いかもしれません。
【Unity】FPSの設定とRuntimeInitializeOnLoadMethodがバッテリーを救う - はなちるのマイノート

これを用いればシーンにオブジェクトを配置しなくともゲームを開始したときに(エディタでも実機でも)自動で実行してくれます

using UnityEngine;

public class Initializer 
{
	[RuntimeInitializeOnLoadMethod()]
	static void Init()
	{
		if (!Application.genuine) Debug.Log("これは改造版です");
	}
}


さらにひと工夫するとしたら、ロード画面など負荷が気にならない箇所でするのもアリかもしれませんね。

さいごに

ただしこの検知をする箇所さえも書き換えられてしまえば意味がありません。

少なくともおまじない的に考えていたほうがよいでしょう。

まずはIL2CPPにすることが一番の対策になると思うので、まだやっていない方はしてみてください。

ではまた。