Unity教程之-Unity3d中针对AndroidApk的签名验证(C#实现)
当Unity开发的游戏以Android Apk的形式发布之后,经常会遇到的⼀种情况就是别⼈对我们的游戏进⾏⼆次打包,也就是⽤他们的签名替换掉我们的签名,从⽽堂⽽皇之的将胜利果实占为⼰有。⾯对这样的情况,我们可以采取的⼀种⽅式就是对Apk包的签名进⾏验证,如果与我们的签名不⼀致,则可以采取⿊屏或者直接退出等⽅式来阻⽌该盗版程序的运⾏。
⽰例代码如下:
1using UnityEngine;
2using System.Collections;///<summary>
3/// Signature verify tool class
4///</summary>
5public class SignatureVerify
6 {
7/**
8* Verify the signature is correct
9**/
10public static bool IsCorrect ()
11 {
12#if UNITY_EDITOR
13return true;
android获取真正的签名14#endif
15
16// 获取Android的PackageManager
17 AndroidJavaClass Player = new AndroidJavaClass ("com.unity3d.player.UnityPlayer");
18 AndroidJavaObject Activity = Player.GetStatic<AndroidJavaObject> ("currentActivity");
19 AndroidJavaObject PackageManager = Activity.Call<AndroidJavaObject> ("getPackageManager");
20
21// 获取当前Android应⽤的包名
22string packageName = Activity.Call<string> ("getPackageName");
23
24// 调⽤PackageManager的getPackageInfo⽅法来获取签名信息数组
25int GET_SIGNATURES = PackageManager.GetStatic<int> ("GET_SIGNATURES");
26 AndroidJavaObject PackageInfo = PackageManager.Call<AndroidJavaObject> ("getPackageInfo", packageName, GET_SIGNATURES);
27 AndroidJavaObject[] Signatures = PackageInfo.Get<AndroidJavaObject[]> ("signatures");
28
29// 获取当前的签名的哈希值,判断其与我们签名的哈希值是否⼀致
30if (Signatures != null && Signatures.Length > 0)
31 {
32int hashCode = Signatures [0].Call<int> ("hashCode");
33return hashCode == 8888888888;//我们签名的哈希值
34
35 }
36return false;
37 }
38 }
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论