如何对Unity⼯程进⾏加密
如何对unity⼯程进⾏加密
最近在发布Unity⼯程时要考虑给Unity加密的问题,但有关此类的⽂章很少,多数⼈推荐使⽤C#中的System.Management 类实现,虽然Unity3d⽀持3.5架构,但是并不是所有功能都能⽀持,System.Management类就是其中⼀个,该类能在VS 中很好运⾏,但在Unity框架中并不⽀持,因此,我在加密过程中绕过System.Management管理类,先通过C++编程获取ProcessorID,然后再通过C#中System.Security.Cryptography加密算法类进⾏加密解密。经过⼀番周折,终于测试成功,这⾥分享给⼤家。
第⼀步:⽣成License⽂件
1. 制作简单的⽣成License⽂件的Winform界⾯
Liscense⽣成界⾯
2. 编写License⽂件⽣成器代码
//-----------------------------------------
//
// CuteEditorLic V1.0
//
//-----------------------------------------
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Windows.Forms;
using System.IO;
using System.Security.Cryptography;
using System.Diagnostics;
using System.Management;
using System.Globalization;
namespace CuteEditorLic
{
public partial class 许可证⽂件⽣成器 : Form
{
private string key = "alskdfsakjsdikfhkjgfhjmvnnxfksajkwke135466dvfdsgjkfdhgskjsagbbkhfdgn"; private string iv = "qjhsqjhwencgfuyuyggkxgzzmgfmhgjhkjhkmjfjhfnsks4464fsdgffdhghgsdf";
public 许可证⽂件⽣成器()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
}
/// <summary>
/// 输出Lic授权⽂件
/// </summary>
/// <param name="FilePath">输出⽂件路径</param>
js代码加密软件private string encrption(string input, string key, string iv)
{
MemoryStream msEncrypt = null;//读写内存
RijndaelManaged aesAlg = null;//加密算法类
string sresult = string.Empty;
try
{
byte[] keys = System.Text.Encoding.UTF8.GetBytes(key);
byte[] ivs = System.Text.Encoding.UTF8.GetBytes(iv);
//byte[] keys = new byte[] { 70, 0x35, 50, 0x42, 0x31, 0x38, 0x36, 70 };
//byte[] ivs = new byte[] { 70, 0x35, 50, 0x42, 0x31, 0x38, 0x36, 70 };
aesAlg = new RijndaelManaged();//加密算法类实例化
aesAlg.Key = keys;
aesAlg.IV = ivs;
ICryptoTransform ict = aesAlg.CreateEncryptor(aesAlg.Key, aesAlg.IV);//加密转换接⼝类 msEncrypt = new MemoryStream();//读写内存类实例化
using (CryptoStream cts = new CryptoStream(msEncrypt, ict, CryptoStreamMode.Write)) {
using (StreamWriter sw = new StreamWriter(cts))
{
sw.Write(input);
}
}
}
finally
{
if (aesAlg != null)
{
//aesAlg.Dispose();
aesAlg.Clear();
}
}
if (msEncrypt != null)
{
byte[] content = msEncrypt.ToArray();
sresult = Convert.ToBase64String(content);
}
return sresult;
}
private string decrption(string input, string key, string iv)
{
string sresult = string.Empty;
byte[] keys = System.Text.Encoding.UTF8.GetBytes(key);
byte[] ivs = System.Text.Encoding.UTF8.GetBytes(iv);
//byte[] keys = new byte[] { 70, 0x35, 50, 0x42, 0x31, 0x38, 0x36, 70 };
//byte[] ivs = new byte[] { 70, 0x35, 50, 0x42, 0x31, 0x38, 0x36, 70 };
byte[] inputbytes = Convert.FromBase64String(input);
RijndaelManaged rm = null;
try
{
rm = new RijndaelManaged();
rm.Key = keys;
rm.IV = ivs;
ICryptoTransform ict = rm.CreateDecryptor(rm.Key, rm.IV);
using (MemoryStream ms = new MemoryStream(inputbytes))
{
using (CryptoStream cs = new CryptoStream(ms, ict, CryptoStreamMode.Read))
{
using (StreamReader sr = new StreamReader(cs))
{
sresult = sr.ReadToEnd();
}
}
}
}
finally
{
if (rm != null)
{
//rm.Dispose();
rm.Clear();
}
}
return sresult;
}
private void button1_Click(object sender, EventArgs e)
{
System.Management.ManagementClass mc = new ManagementClass("win32_processor"); ManagementObjectCollection moc = mc.GetInstances();
String processorid = "";
foreach (ManagementObject mo in moc)
{
processorid = mo["processorid"].ToString();
//MessageBox.Show(mo["processorid"].ToString());
//MessageBox.Show(mo["processorid"].ToString());
}
string text = Box1.Text, key.Substring(0, 32), iv.Substring(0, 16));
using (FileStream fs = new FileStream("cuteeditor.lic", FileMode.Create, FileAccess.Write, FileShare.None))
{
using (StreamWriter sw = new StreamWriter(fs))
{
// sw.Write("None;zh-cn;None;8H489467LS631834L;CuteEditor.Editor for asp is licensed.;1.6;5;51aspx;125.76.229.233;09/09/2099"); sw.Write(text);
}
Console.ReadLine();
}
}
private void button2_Click(object sender, EventArgs e)
{
System.Management.ManagementClass mc = new ManagementClass("win32_processor");
ManagementObjectCollection moc = mc.GetInstances();
string processorid = "";
string testext = "";
foreach (ManagementObject mo in moc)
{
processorid = mo["processorid"].ToString();
//MessageBox.Show(mo["processorid"].ToString());
using (FileStream fs = new FileStream("cuteeditor.lic", FileMode.Open, FileAccess.Read, FileShare.None))
{
using (StreamReader sr = new StreamReader(fs))
{
// sw.Write("None;zh-cn;None;8H489467LS631834L;CuteEditor.Editor for asp is licensed.;1.6;5;51aspx;125.76.229.233;09/09/2099"); testext = sr.ReadToEnd();
}
Console.ReadLine();
}
string text = decrption(testext, key.Substring(0, 32), iv.Substring(0, 16));
if (text == processorid)
{
MessageBox.Show("许可证⽂件正确");
}
}
}
private void Form1_Load_1(object sender, EventArgs e)
{
}
private void button7_Click(object sender, EventArgs e)
{
string text = Box4.Text, key.Substring(0, 32), iv.Substring(0, 16));
DateTime date01 = dateTimePicker1.Value;
DateTime date02 = dateTimePicker2.Value;
string date1 = date01.ToString("d");
string date2 = date02.ToString("d");
string date2 = date02.ToString("d");
string date1changed = encrption(date1, key.Substring(0, 32), iv.Substring(0, 16));
string date2changed = encrption(date2, key.Substring(0, 32), iv.Substring(0, 16));
System.DateTime currentTime=new System.DateTime();
currentTime = System.DateTime.Now;
if (IsInTimeInterval(currentTime, date01, date02)==true)
{
MessageBox.Show("在授权期限内");
}
else
MessageBox.Show("不在授权期限内");
//MessageBox.Show(date1);
using (FileStream fs = new FileStream("License.lic", FileMode.Create, FileAccess.Write, FileShare.None))
{
using (StreamWriter sw = new StreamWriter(fs))
{
// sw.Write("None;zh-cn;None;8H489467LS631834L;CuteEditor.Editor for asp is licensed.;1.6;5;51aspx;125.76.229.233;09/09/2099");
sw.WriteLine("Copyright (c) [本软件授权使⽤期限:"+date1+ "--" + date2 + "] [本软件由XXXX有限公司开发]");
sw.WriteLine("XXXX 软件许可协议(OEM/IHV/ISV 分销和单个⽤户)");
sw.WriteLine("重要通知-在复制、安装或使⽤之前,请先仔细阅读。");
sw.WriteLine("只有在仔细阅读下⾯的条款之后,⽅可使⽤或装载本软件及相关材料(总称为“软件”)。装载或使⽤本“软件”,即表明您同意本“协议”的条款 sw.WriteLine("此外,还请注意:");
sw.WriteLine("* 如果您是原始设备制造商 (OEM)、独⽴硬件销售商 (IHV),或独⽴软件供应商 (ISV),本“许可协议”的所有内容对您适⽤。");
sw.WriteLine("* 如果您是最终⽤户,则只有附件⼀,即“XXXX 软件许可协议”对您适⽤。");
sw.WriteLine("对于 OEM、IHV 和 ISV:");
sw.WriteLine("许可:这⼀“软件”仅许可⽤来与 XXXX 组件产品结合使⽤。本“协议”不授予将此“软件”和其它⾮ XXXX 组件产品结合使⽤的许可。受本“协议 sw.WriteLine("1. 为您本⾝的开发和维护⽬的⽽内部使⽤、改动和复制“软件”;并且");
sw.WriteLine("2. 更改、复制并向您的最终⽤户分销“软件”,包括本“软件”的衍⽣产品,条件是,这种分发必须按照⼀项许可协议进⾏,其条款⾄少要象下 sw.WriteLine("3. 更改、复制和分销随“软件”所附的最终⽤户说明⽂件,但只能和“软件”⼀起分发。");
sw.WriteLine("");
sw.WriteLine("如果您不是装有本“软件”的计算机系统或软件程序的最终制造商或销售商,那么,您可以转让本“软件”的⼀份副本,包括本“软件”的衍⽣产品 sw.WriteLine("除本“协议”中明确规定者以外,没有通过任何直接的、隐含的、推理的、禁⽌反悔的或其它⽅式授予贵⽅任何许可或权利。XXXX 公司将有 sw.WriteLine("保密:如果贵⽅希望由第三⽅咨询机构或转包⼈(“承包⼈”)代贵⽅从事⼀些需要接触和使⽤本“软件”的⼯作,贵⽅必须从承包⼈处获得书 sw.WriteLine("软件的所有权和版权:本“软件”所有副本的所有权归 XXXX 公司或其供应商所有。本“软件”具有版权,并受到美国和其它国家法律以及国际 sw.WriteLine("有限的媒体品质保证:如果本“软件”由 XXXX 公司以实物媒体递交,XXXX 公司保证⾃该媒体交递之⽇起九⼗ (90) 天内没有材料和实物上的 sw.WriteLine("不包括任何其它保证:除上述保证之外,本“软件”是按其“现状”⽽提供的,没有任何其它明确或隐含的保证,包括适销性、⾮侵权性或适⽤ sw.WriteLine("有限责任:对于因使⽤或⽆法使⽤本“软件”所造成的任何损失(包括但并不限于利润损失、业务中断或信息丢失等),⽆论在何种情况下, sw.WriteLine("本协议的终⽌:如果
您违反“协议”的条款,XXXX 公司则可随时终⽌本“协议”。协议终⽌时,您应该⽴即销毁本“软件”或将“软件”的所有副本 sw.WriteLine("适⽤的法律:因本“协议”⽽产⽣的索赔将接受加利福尼亚州法律的管辖,但不受其法律冲突原则的约束。本“协议”将不受《联合国国际货物 sw.WriteLine("政府机构有限的权利:本“软件”是以“有限的权利”⽽提供的。政府机构使⽤、复制或透露本“软件”应受到 FAR52.227-14 和 DFAR252.227- sw.WriteLine("");
sw.WriteLine("附件⼀");
sw.WriteLine("XXXX 软件许可协议(最终、单个⽤户)");
sw.WriteLine("重要通知-在复制、安装或使⽤之前,请先仔细阅读。");
sw.WriteLine("只有在仔细阅读下⾯的条款之后,⽅可使⽤或装载本软件及相关材料(总称为“软件”)。装载或使⽤本“软件”,即表明您同意本“协议”的条款 sw.WriteLine("许可:您可将本“软件”复制到⼀台计算机上供⾮商业性的个⼈使⽤,并可复制⼀份本“软件”的备份。上述使⽤和备份受以下条款的约束:"); sw.WriteLine("1. 这⼀“软件”仅许可⽤来与 XXXX 组件产品结合使⽤。本“协议”不授予将此“软件”和其它⾮ XXXX 组件产品结合使⽤的许可。");
sw.WriteLine("2. 除本“协议”中规定者之外,您不得复制、改变、出租、出售、分发或转让本“软件”的
任何部分,您并且同意防⽌他⼈未经授权⽽复制本“软 sw.WriteLine("3. 您不得分解编码、拆散本“软件”或对其进⾏逆向⼯程设计。");
sw.WriteLine("4. 您不得分让或允许同时有⼀个以上的⽤户使⽤本“软件”。");
sw.WriteLine("5. 本“软件”可能含有第三⽅供应商的软件或其它财产,其中有些可能已经在随附的“”或其它⽂本或⽂件中注明并根据这些⽂件⽽获 sw.WriteLine("软件的所有权和版权:本“软件”所有副本的所有权归 XXXX 公司或其供应商所有。本“软件”具有版权,并受到美国和其它国家法律以及国际 sw.WriteLine("有限的媒体品质保证:如果本“软件”由 XXXX 公司以实物媒体交递,XXXX 公司保证⾃该媒体交递之⽇起九⼗ (90) 天内没有材料和实物上的 sw.WriteLine("不包括任何其它保证:除上述保证之外,本“软件”是按其“现状”⽽提供的,没有任何其它明确或隐含的保证,包括适销性、⾮侵权性或适⽤ sw.WriteLine("有限责任:对于因使⽤或⽆法使⽤本“软件”所造成的任何损失(包括但并不限于利润损失、业务中断或信息丢失等),⽆论在何种情况下, sw.WriteLine("本协议的终⽌:如果您违反本“协议”的条款,XXXX 公司则可随时终⽌本“协议”。“协议”终⽌时,您应该⽴即销毁本“软件”或将“软件”的所有 sw.WriteLine("适⽤的法律:因本“协议”⽽产⽣的索赔将中华⼈民共和国法律的管辖,但不受其法律冲突原则的约束。本“协议”将不受《联合国国际货物销 sw.WriteLine("政府机构有限的权利:本“软件”是以“有限的权利”⽽提供的。政府机构使⽤、复制或透露本“软件”受到 FAR52.227-14 和 DFA
R252.227-70 sw.WriteLine("INCREMENT jackDataManagerbase ugslmd 7.0 15caugc2013 100 SUPERSEDE");
sw.WriteLine("DUPDataManagerGROUP=UHD ISSUED=10caprc2013 ck=197 SIGN=13E6 6CA8 B322");
sw.WriteLine("vwViht2lF5ylrm86DcwjI2bO/T7msUGMdslcgEH+EqY=cMKidern7PkegIelOLyYycxcA");
sw.WriteLine("");
sw.WriteLine(date1changed);
sw.WriteLine("");
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论