[Unity3D Daily] Unity3Dプロジェクトの暗号化とアクティベーションのアイデアの共有

1.はじめに

今日、私はプロジェクトの暗号化とアクティブ化に関するいくつかの簡単なアイデアを共有していますが、それらはプロジェクトのソースコードではなく、解読の方法を知らない人に役立つ暗号化のアイデアのほんの一部です。もちろん、すべてが暗号化によって解読できるので、時間の問題です

第二に、テキスト

アイデア1:プロジェクトにアカウントのパスワードを保存する

これは、アカウントのパスワード、レジストリ、またはローカルの永続データを保存するために使用できます。最初にアカウントのパスワードを設定し、次にこのソフトウェアを使用するときに、他のユーザーが暗号化のためにアカウントのパスワードをアクティブにする必要があります

プロセス:
1最初にUI
ここに画像の説明を挿入
2コードを作成します

using UnityEngine;
using UnityEngine.UI;

public class Encript2 : MonoBehaviour
{
    //设置一个初始的账号和密码 
    public string UserName = "";
    public string PassWord = "";
    //UI
    public Text m_UserNameText;
    public Text m_PassWordText;
    public Text m_HelpText;
    public Button m_BtnAticvation;
    public Button m_BtnExit;
    
    void Start()
    {
        m_BtnAticvation.onClick.AddListener(BtnEvent_Aticvation);
        m_BtnExit.onClick.AddListener(BtnEvent_Exit);
        //判断是否已经激活
        Decide_Acticvation();
    }

    public void Decide_Acticvation()
    {
        if (UserName == "admin" && PassWord == "123456")
        {
            gameObject.SetActive(false);
        }
    }

    public void BtnEvent_Aticvation()
    {
        UserName = m_UserNameText.text;
        PassWord = m_PassWordText.text;
        if (m_UserNameText.text == "admin" && m_PassWordText.text == "123456")
        {
            //激活成功
            gameObject.SetActive(false);
        }
        else
        {
            //未激活成功
            m_HelpText.text = "账号密码不正确";
        }
    }

    public void BtnEvent_Exit()
    {
        Application.Quit();
    }
}

3バインドパラメータ
ここに画像の説明を挿入
全体的なアイデアは非常に単純で、ローカル定数を設定してから、ソフトウェアを入力します。最初にアクティブ化する必要があり、アクティブ化は成功します

利点:単純で大まかな
欠点:簡単にクラック

アイデア2:保存されたファイルを暗号化されたデータでローカルに書き込む

これは実際には非常に単純です。まず、クライアントで検証プログラムを作成して、現在のコンピューターデバイスとカスタムフィールドの一意の識別子を検証します。その後
暗号化されたファイルデータを比較すると、それらが同じかどうかがわかります。プログラム
し、コンピュータ側をアクティブにするプログラムを書きます

プロセス:
1.最初にアクティブなインターフェースを作成します
ここに画像の説明を挿入
ここに画像の説明を挿入
。醜いです最も重要なのは機能です!
2.コード

using Microsoft.Win32;
using System.Security.Cryptography;
using System.Text;
using UnityEngine;

public class Encript3 : MonoBehaviour
{
    public GameObject m_PanelEncrypted;

    void Start()
    {
        string s1 = SystemInfo.deviceUniqueIdentifier;
        string s2 = GetMD5String(s1);
        //验证本地的加密字符串是否正确
        Verification_MD5(s2);
    }

    //验证本地的md5正确与否
    public void Verification_MD5(string ValidateMD5)
    {
        RegistryKey RootKey, RegKey;
        RootKey = Registry.CurrentUser.OpenSubKey("UserSetting", true);
        //打开子项:HKEY_CURRENT_USER\UserSetting\Encrypted
        if ((RegKey = RootKey.OpenSubKey("Encrypted", true)) == null)//如果文件不存在,就显示要激活的界面
        {
            m_PanelEncrypted.SetActive(true);
        }
        //异常捕捉,如果出现程序异常,比如闪退
        try
        {
            object encrypted = RegKey.GetValue("EncryptedString");        //读取键值
            if (encrypted.ToString() == ValidateMD5)
            {
                m_PanelEncrypted.SetActive(false);
            }
            else
            {
                m_PanelEncrypted.SetActive(true);
            }
        }
        catch
        {
            print("异常状况");
        }
    }

    /// <summary>
    /// 通过字符串获取MD5值,返回32位字符串。
    /// </summary>
    /// <param name="str"></param>
    /// <returns></returns>
    public static string GetMD5String(string text)
    {
        MD5CryptoServiceProvider md5Hasher = new MD5CryptoServiceProvider();
        byte[] data = md5Hasher.ComputeHash(Encoding.Default.GetBytes(text));
        StringBuilder sBuilder = new StringBuilder();
        for (int i = 0; i < data.Length; i++)
        {
            sBuilder.Append(data[i].ToString("x2"));
        }
        return sBuilder.ToString().ToLower();
    }
}

OK、友達はそれを試すことができます。はい、アクティベーションプログラムがあります。
コード:

/// <summary>
    /// 通过字符串获取MD5值,返回32位字符串。
    /// </summary>
    /// <param name="str"></param>
    /// <returns></returns>
    public static string GetMD5String(string text)
    {
        MD5CryptoServiceProvider md5Hasher = new MD5CryptoServiceProvider();
        byte[] data = md5Hasher.ComputeHash(Encoding.Default.GetBytes(text));
        StringBuilder sBuilder = new StringBuilder();
        for (int i = 0; i < data.Length; i++)
        {
            sBuilder.Append(data[i].ToString("x2"));
        }
        return sBuilder.ToString().ToLower();
    }

    //激活程序
    public void Activation()
    {
        string md5 = GetMD5String(SystemInfo.deviceUniqueIdentifier);
        // 创建键值对
        RegistryKey RootKey, RegKeyRoot,RegKey;
        //项名为:HKEY_CURRENT_USER
        RootKey = Registry.CurrentUser;
        if ((RegKeyRoot = RootKey.OpenSubKey("UserSetting",true))== null)
        {
            RootKey.CreateSubKey("UserSetting");
            RegKeyRoot = RootKey.OpenSubKey("UserSetting", true);
        }
        //打开子项:HKEY_CURRENT_USER\Software\TestToControlUseTime
        if ((RegKey = RegKeyRoot.OpenSubKey("Encrypted", true)) == null)
        {
            RegKeyRoot.CreateSubKey("Encrypted");               //不存在,则创建子项
            RegKey = RootKey.OpenSubKey("Encrypted", true);  //打开键值
            RegKey.SetValue("EncryptedString", (object)md5);         //创建键值
            return;
        }
        else
        {
            RegKey.SetValue("EncryptedString", (object)md5);
            return;
        }
    }

概要:独自の暗号化プログラムを作成するか、他のパラメーターを追加して、クラッキングの難易度を上げることができます

利点:解読が難しい、セキュリティが高い
欠点:それでも十分に安全ではない、ソースコードを解読すれば、暗号化の方法を知っている、逆に復号化できる

アイデア3:サーバー側で暗号化し、暗号化された文字列を返す

このアイデアは、暗号化プログラムをサーバーに置くことです。たとえ他​​の人がコードをクラックして暗号化のアイデアを知らなくても、逆方向に復号化することはできません。

プロセス:
1.インターフェースのデザイン
ここに画像の説明を挿入
ここに画像の説明を挿入
は醜く、最も重要なのは機能です!

2.コード

using Microsoft.Win32;
using System.Collections;
using UnityEngine;

public class Encript4 : MonoBehaviour
{
    public GameObject m_PanelEncrypted;
    string md5 = "";

    void Start()
    {
        StartCoroutine(GetData());
        //验证本地的加密字符串是否正确
        Verification_MD5(md5);
    }

    //验证本地的md5正确与否
    public void Verification_MD5(string ValidateMD5)
    {
        RegistryKey RootKey, RegKey;
        RootKey = Registry.CurrentUser.OpenSubKey("UserSetting", true);
        //打开子项:HKEY_CURRENT_USER\UserSetting\Encrypted
        if ((RegKey = RootKey.OpenSubKey("Encrypted", true)) == null)//如果文件不存在,就显示要激活的界面
        {
            m_PanelEncrypted.SetActive(true);
        }
        //异常捕捉,如果出现程序异常,比如闪退
        try
        {
            object encrypted = RegKey.GetValue("EncryptedString");        //读取键值
            if (encrypted.ToString() == ValidateMD5)
            {
                m_PanelEncrypted.SetActive(false);
            }
            else
            {
                m_PanelEncrypted.SetActive(true);
            }
        }
        catch
        {
            print("异常状况");
        }
    }

    public IEnumerator GetData()
    {
        WWW www = new WWW("http://127.0.0.1/Test.php?md5="+SystemInfo.deviceUniqueIdentifier);
        yield return www;
        if (www.error != null)
        {
            yield return null;
        }
        else
        {
            md5 = www.text;
        }
    }
}

はい、今日ここに来て

オリジナルの記事を226件公開 賞賛された509件 530,000回

おすすめ

転載: blog.csdn.net/q764424567/article/details/101061353