1. Introdução
Hoje, compartilho várias idéias simples para criptografia e ativação do projeto, mas elas não são o código-fonte do projeto, mas apenas algumas idéias de criptografia que são úteis para pessoas que não sabem como quebrar.Claro, tudo pode ser descriptografado pela criptografia, é apenas uma questão de tempo.
Segundo, o texto
Ideia 1: salvar a senha da conta no projeto
Isso pode ser usado para salvar a senha da conta, o registro ou os dados persistentes locais.A idéia é definir a senha da conta primeiro e, em seguida, outros precisam da senha da conta para ativar ao usar este software, para criptografia
Processo:
1 Primeiro criamos um
código de interface do usuário 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 Parâmetros de ligação A
ideia geral é muito simples, defina uma constante local e, em seguida, insira o software que precisa ser ativado primeiro, a ativação é bem-sucedida
Vantagens:
desvantagens simples e grosseiras : fáceis de serem quebradas
Ideia 2: Grave arquivos salvos com dados criptografados localmente
Na verdade, é muito simples. Primeiro, escreva um programa de verificação no cliente para verificar o identificador exclusivo do dispositivo de computador atual mais um campo personalizado. Depois
, se os dados do arquivo criptografado forem comparados, se são iguais, digite o programa se for o mesmo e feche-o se for diferente. Programe
e escreva um programa de ativação no computador
Processo:
1. Primeiro faça uma interface ativa,
é feia, a coisa mais importante é a função! ! !
2. Código
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, amigos podem tentar. . Sim, existe um programa de ativação. .
Código:
/// <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;
}
}
Resumo: você pode escrever seu próprio programa de criptografia ou adicionar outros parâmetros para aumentar a dificuldade de quebrar
Vantagens: difícil de decifrar, maior segurança
Desvantagens: ainda não é seguro o suficiente, se você decifrar o código-fonte, você sabe como criptografar, pode descriptografar ao contrário
Idéia 3: Criptografar no lado do servidor e retornar a sequência criptografada
Essa idéia é colocar o programa de criptografia no servidor, mesmo que outras pessoas tenham decifrado o código e não conheçam a idéia de criptografia, elas não podem descriptografar na direção inversa
Processo:
1. O design da interface
é feio, a coisa mais importante é a função! ! !
2. Código
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;
}
}
}
OK, venha aqui hoje