unity3d 防外挂 王者农药 使用方案 android

防外挂 方案是 获取android设备上正在运行的应用进程,如果有被列为黑名称的app在运行 就跳出提示有外挂程序运行,匹配app 的方法的按照app 的名字和app 的包名 进行匹配,不废话上代码
C#

public class PlugAppInfo  //app 数据类
{
    public string name; 
    public string package;
    public PlugAppInfo() { }
    public PlugAppInfo(string _name, string _package)
    {
        name = _name;
        package = _package;
    }
}

 void OnApplicationFocus(bool isFocus) //这里在应用每次激活的时候做一次检查为了防止玩家在启动游戏之后,在开启外挂,又重新进入游戏
 {
        bool isflag = false;
        string appname = "";
        string data = DeviceUtil.GetUserTask();
        if (data != "" && data != null)
        {
            List<PlugAppInfo> appinfos = new List<PlugAppInfo>(); //这里是用来存储正在运行次app 名称和包名
            string[] list = data.Split(';');
            for (int i = 0; i < list.Length; i++)
            {
                if (list[i] != null && list[i] != "")
                {
                    string[] flag = list[i].Split(',');
                    if (flag.Length >= 2)
                    {
                        PlugAppInfo appinfo = new PlugAppInfo();
                        appinfo.name = flag[0];
                        appinfo.package = flag[1];
                        if (appinfo.name != "" && appinfo.package != "")
                        {
                            appinfos.Add(appinfo);
                        }
                    }
                }
            }
            List<PlugAppInfo> PlugAppInfos = new List<PlugAppInfo>();  //这里是用来保存已经被列为黑名单的app名称个包名
            PlugAppInfos.Add(new PlugAppInfo("支付宝", "com.eg.android.AlipayGphone"));
            for (int j = 0; j < PlugAppInfos.Count; j++)
            {
                for (int i = 0; i < appinfos.Count; i++)
                {
                    if (appinfos[i].name.Trim().ToLower() == SystemData.PlugAppInfos[j].name.Trim().ToLower() || appinfos[i].package.Trim().ToLower() == SystemData.PlugAppInfos[j].package.Trim().ToLower())
                    {
                        appname = appinfos[i].name + "," + appinfos[i].package;
                        isflag = true;
                        break;
                    }
                }
                if (isflag)
                {
                    break;
                }
            }
        }

        if (isflag)
        {
            IsPlugInTesting = true;
            // 警告 有外挂  这里可以跳出提示框 获取是OnExitGame  你懂的
        }
}


    public static string GetUserTask()  //获取正在运行app方法
    {
        string task = "";
#if UNITY_ANDROID
        try
        {
            AndroidJavaClass up = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
            AndroidJavaObject currentActivity = up.GetStatic<AndroidJavaObject>("currentActivity");
            AndroidJavaClass unityPluginLoader = new AndroidJavaClass("java类全名");
            task = unityPluginLoader.CallStatic<string>("GetAllTask", currentActivity,true);
        }
        catch (System.Exception e)
        {

        }
#endif
        return task;
    }

Java

    public static List<TaskBean> getTask4(Activity currentActivity) {
        List<TaskBean> taskList = new ArrayList<TaskBean>();
        ActivityManager mActivityManager = (ActivityManager) currentActivity.getSystemService(Context.ACTIVITY_SERVICE);
        List<ActivityManager.RunningAppProcessInfo> runList = mActivityManager.getRunningAppProcesses();

        for (ActivityManager.RunningAppProcessInfo r : runList) {
            TaskBean taskBean = new TaskBean();
            String processName = r.processName;
            if (!processName.equals("自己app的包名") && !processName.equals("白名单app的包名"))//获取应用的时候排除自己 {
                taskBean.PackageName = processName;
                PackageInfo packageInfo = null;
                try {
                    packageInfo = currentActivity.getPackageManager().getPackageInfo(processName, 0);
                } catch (Throwable e) {
                    Utile.LogError(e.getLocalizedMessage());
                }
                if (packageInfo != null) {
                    taskBean.Name = currentActivity.getPackageManager().getApplicationLabel(packageInfo.applicationInfo)
                            .toString();
                    if (!filterApp(packageInfo.applicationInfo)) {
                        taskBean.IsUser = false;
                    } else {
                        taskBean.IsUser = true;
                        if (taskList != null) {
                            taskList.add(taskBean);
                        }
                    }

                }
            }
        }

        return taskList;
    }

    public static List<TaskBean> getTask5(Activity currentActivity) {
        List<AndroidAppProcess> processInfos = ProcessManager.getRunningAppProcesses();

        List<TaskBean> taskinfos = new ArrayList<TaskBean>();
        // 遍历运行的程序,并且获取其中的信息
        for (AndroidAppProcess processInfo : processInfos) {
            TaskBean taskBean = new TaskBean();
            // 应用程序的包名
            String packname = processInfo.name;
            if (!packname.equals("自己app的包名") && !packname.equals("白名单app的包名")) //获取应用的时候排除自己{
                taskBean.PackageName = processInfo.getPackageName();

                // 获取应用程序信息
                ApplicationInfo applicationInfo = null;
                try {
                    applicationInfo = currentActivity.getPackageManager().getApplicationInfo(packname, 0);
                } catch (PackageManager.NameNotFoundException e) {
                    // TODO Auto-generated catch block
                    if (Utile.isDebug())
                        Utile.LogError(e.getLocalizedMessage());
                    // 系统内核进程 没有名称
                }
                if (applicationInfo != null) {
                    taskBean.Name = currentActivity.getPackageManager().getApplicationLabel(applicationInfo).toString();
                    if (filterApp(applicationInfo)) {
                        // 用户进程
                        taskBean.IsUser = true;
                        if (taskinfos != null) {
                            taskinfos.add(taskBean);
                        }
                    } else {
                        // 系统进程
                        taskBean.IsUser = false;
                    }

                }

            }
        }
        return taskinfos;
    }

    public static String GetAllTask(Activity currentActivity, boolean isUser) {

        List<TaskBean> taskinfos = null;
        if (Build.VERSION.SDK_INT < 21) {  //为了兼容不同的android系统
            taskinfos = getTask4(currentActivity); 
        } else {
            taskinfos = getTask5(currentActivity);
        }
        try {
            Intent intent = new Intent();
            intent.addCategory(Intent.CATEGORY_LAUNCHER);
            intent.setAction(Intent.ACTION_MAIN);
            List<ResolveInfo> resolveInfos = currentActivity.getPackageManager().queryIntentActivities(intent, 0);
            if (resolveInfos.size() > 0) {
                List<TaskBean> newtaskinfos = new ArrayList<TaskBean>();
                for (int i = 0; i < resolveInfos.size(); i++) {
                    ResolveInfo resolveInfo = resolveInfos.get(i);

                    if (filterApp(resolveInfo.activityInfo.applicationInfo)) {
                        for (TaskBean taskBean : taskinfos) {
                            if (taskBean.PackageName.equals(resolveInfo.activityInfo.applicationInfo.packageName)) {
                                TaskBean newtaskBean = new TaskBean();
                                newtaskBean.Name = resolveInfo.loadLabel(currentActivity.getPackageManager())
                                        .toString();
                                newtaskBean.PackageName = resolveInfo.activityInfo.applicationInfo.packageName;
                                newtaskBean.IsUser = true;
                                newtaskinfos.add(newtaskBean);
                            }
                        }

                    }
                }
                taskinfos = newtaskinfos;
            }
        } catch (Exception e) {
            if (Utile.isDebug())
                Utile.LogError(e.toString());
        }
        String ret = "";
        if (taskinfos != null) {
            int index = 0;
            for (TaskBean taskBean : taskinfos) {
                if (index != 0) {
                    ret += ";";
                }
                ret += taskBean.Name + "," + taskBean.PackageName;
                index++;
            }

        }
        return ret;
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值