unity加密_unity3d 加密 - CSDN
精华内容
参与话题
  • Unity 程序简易版的加密

    千次阅读 2019-06-20 14:51:06
    有的时候我们发布出来一个程序,发送给他人之后,还不想他人一直使用,只是起到一个简单的体验的作用,这是我们就需要...但是此方法也有一个弊端,那就是对一些人群比如说搞开发的人可能就会轻而易举的无视这个加密了。

    有的时候我们发布出来一个程序,发送给他人之后,还不想他人一直使用,只是起到一个简单的体验的作用,这是我们就需要给程序添加一个时间限制,比如,到yyyy年mm月dd日之后就无法使用此软件。但是此方法也有一个弊端,那就是对一些人群比如说搞开发的人可能就会轻而易举的无视这个加密了。
    首先在Unity中创建两个场景,一个是我们的程序的主场景,一个是程序一开始的过渡场景(用来判断加密是否到期,如果到期会自动退出程序,如果没到期会跳转到我们的主场景中,开始运行我们的应用)
    在Unity的Project面板中创建一个StreamingAssets文件夹,新建一个Date.xml放入其中。xml文件中的内容如下:

    <Date>2019-8-4</Date>
    

    这个文件中的日期年月就是要加密到的时间。可以自定义。
    下面就是写一个验证脚本。讲这个脚本挂到过渡场景中即可。如果时间不对则会立刻退出程序。

    public class PassWard : MonoBehaviour
    {
        string Date = "";
    
    
    
        private void Awake()
        {
            Date = ReadDate();
            Debug.Log(Date);
            System.DateTime date1 = System.DateTime.Now;
            string year = date1.Year.ToString();
            int mouth = date1.Month;
            int day = date1.Day;
            Debug.Log(Date.Split('-')[0] + Date.Split('-')[1] + Date.Split('-')[2]);
            //通过对比现在的时间进行判断是否到加密的时间
            if (year == Date.Split('-')[0])
            {
                Debug.Log(year);
                if (mouth < Convert.ToInt32(Date.Split('-')[1]))
                {
                    Debug.Log(mouth);
                    SceneManager.LoadScene("Main");
    
                }
                else if (mouth == Convert.ToInt32(Date.Split('-')[1]))
                {
                    if (day <= Convert.ToInt32(Date.Split('-')[2]))
                    {
                        Debug.Log(day);
                        SceneManager.LoadScene("Main");
                    }
                }
                else
                {
    #if UNITY_EDITOR
                    UnityEditor.EditorApplication.isPlaying = false;
    #else
                 Application.Quit();
    #endif
    
                }
            }
            else
            {
    #if UNITY_EDITOR
                UnityEditor.EditorApplication.isPlaying = false;
    #else
                 Application.Quit();
    #endif
            }
        }
        // Use this for initialization
        void Start()
        {
    
        }
    
        // Update is called once per frame
        void Update()
        {
    
        }
    
    
        /// <summary>
        /// 读取xml文件,获取加密时间
        /// </summary>
        /// <returns></returns>
        public string ReadDate()
        {
            string _date = "";
            string filepath = Application.streamingAssetsPath + @"/date.xml";
            if (File.Exists(filepath))
            {
                XmlDocument xmlDoc = new XmlDocument();
                xmlDoc.Load(filepath);
                XmlNode root = xmlDoc.SelectSingleNode("Date");
                _date = root.InnerText.ToString().Trim();
    
                return _date;
            }
            else
            {
                return _date = "2000-01-01";
            }
    
        }
    }
    
    
    展开全文
  • 如何对Unity工程进行加密

    千次阅读 2017-09-30 12:26:35
     最近在发布Unity工程时要考虑给Unity加密的问题,但有关此类的文章很少,多数人推荐使用C#中的System.Management类实现,虽然Unity3d支持.net3.5架构,但是并不是所有功能都能支持,System.Management类就是其中一...
    如何对unity工程进行加密

        最近在发布Unity工程时要考虑给Unity加密的问题,但有关此类的文章很少,多数人推荐使用C#中的System.Management类实现,虽然Unity3d支持.net3.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.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>       
           
            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());
                }
                this.textBox1.Text = processorid;
                string text = encrption(this.textBox1.Text, key.Substring(0, 32), iv.Substring(0, 16));
                this.textBox2.Text = text;
                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.net is licensed.;1.6;5;51aspx.com;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.net is licensed.;1.6;5;51aspx.com;125.76.229.233;09/09/2099");
                        testext = sr.ReadToEnd();
    
                    }
    
                    Console.ReadLine();
    
                }
                string text = decrption(testext, key.Substring(0, 32), iv.Substring(0, 16));
                this.textBox3.Text = text;
                if (text == processorid)
                {
                    MessageBox.Show("许可证文件正确");
                }
                }
            }
    
            private void Form1_Load_1(object sender, EventArgs e)
            {
                
            }
    
            private void button7_Click(object sender, EventArgs e)
            {
                string text = encrption(this.textBox4.Text, key.Substring(0, 32), iv.Substring(0, 16));
                this.textBox5.Text = text;
                DateTime date01 = dateTimePicker1.Value;
                DateTime date02 = dateTimePicker2.Value;
                string date1 = date01.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.net is licensed.;1.6;5;51aspx.com;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 组件产品结合使用的许可。受本“协议”条款的约束,XXXX 公司据其版权授予您下述非专有、不可转让、全球性和完全付清的许可:");
                        sw.WriteLine("1. 为您本身的开发和维护目的而内部使用、改动和复制“软件”;并且");
                        sw.WriteLine("2. 更改、复制并向您的最终用户分销“软件”,包括本“软件”的衍生产品,条件是,这种分发必须按照一项许可协议进行,其条款至少要象下面所附的附件一,即 XXXX 公司最终、单个用户“许可协议”中所包含的条款一样严格,以及");
                        sw.WriteLine("3. 更改、复制和分销随“软件”所附的最终用户说明文件,但只能和“软件”一起分发。");
                        sw.WriteLine("");
                        sw.WriteLine("如果您不是装有本“软件”的计算机系统或软件程序的最终制造商或销售商,那么,您可以转让本“软件”的一份副本,包括本“软件”的衍生产品(和有关的最终用户说明文件)给您的接收者,按本“协议”的条款供其使用,条件是,该接收者必须同意完全接受本“协议”条款的约束。您将不得转让、分让或租让许可或以任何其它方式将本“软件”转移或透露给任何第三者。您将不得分解编码、拆散本“软件”或对其进行逆向工程设计。");
                        sw.WriteLine("除本“协议”中明确规定者以外,没有通过任何直接的、隐含的、推理的、禁止反悔的或其它方式授予贵方任何许可或权利。XXXX 公司将有权检查或经由独立审计人检查贵方的有关记录,以证实贵方是否遵守本“协议”的条款。");
                        sw.WriteLine("保密:如果贵方希望由第三方咨询机构或转包人(“承包人”)代贵方从事一些需要接触和使用本“软件”的工作,贵方必须从承包人处获得书面保密协议,其条款和接触使用本“软件”所涉及的责任至少应和本“协议”的条款一样严格,并规定承包人不得分发本“软件”或将之用于任何其它目的。除此之外,贵方不得透露签署过本“协议”或其中的条款,未经 XXXX 公司的书面同意,也不得在任何出版物、广告或其它公告中使用 XXXX 公司的名称。贵方没有任何权利使用 XXXX 公司的任何商标或标识。");
                        sw.WriteLine("软件的所有权和版权:本“软件”所有副本的所有权归 XXXX 公司或其供应商所有。本“软件”具有版权,并受到美国和其它国家法律以及国际条约条款的保护。您不得从本“软件”上删除任何版权通知。XXXX 公司可随时改变本“软件”或其中述及的项目,恕不另行通知,但是,XXXX 公司没有义务支持本“软件”或对其进行更新。除非另有明确规定,XXXX 公司未以任何明确的或隐含的方式授予贵方任何其拥有的专利、版权、商标或其它知识产权方面的权利。只有在接收者同意完全接受这些条款的约束且贵方不保留“软件”副本的前提下,您才能转让本“软件”。");
                        sw.WriteLine("有限的媒体品质保证:如果本“软件”由 XXXX 公司以实物媒体递交,XXXX 公司保证自该媒体交递之日起九十 (90) 天内没有材料和实物上的缺陷。如果出现这样的缺陷,请将有缺陷的媒体退还 XXXX 公司进行更换,XXXX 公司也可能选择以另外的途径递交该“软件”。");
                        sw.WriteLine("不包括任何其它保证:除上述保证之外,本“软件”是按其“现状”而提供的,没有任何其它明确或隐含的保证,包括适销性、非侵权性或适用于某一特定用途的保证。XXXX 公司对本“软件”中包括的任何信息、文字、图形、链接或其它项目的精确性或完整性不作担保,也不承担责任。");
                        sw.WriteLine("有限责任:对于因使用或无法使用本“软件”所造成的任何损失(包括但并不限于利润损失、业务中断或信息丢失等),无论在何种情况下,即使 XXXX 公司已被事先通知可能会出现这样的损失,XXXX 公司及其供应商均不承担任何责任。有些法律管区禁止排除或限制隐含保证或后果性、事故性损失的责任,因此,上述限制可能对您不适用。随法律管区的不同,您还可能拥有其它法定权利。");
                        sw.WriteLine("本协议的终止:如果您违反“协议”的条款,XXXX 公司则可随时终止本“协议”。协议终止时,您应该立即销毁本“软件”或将“软件”的所有副本退还 XXXX 公司。");
                        sw.WriteLine("适用的法律:因本“协议”而产生的索赔将接受加利福尼亚州法律的管辖,但不受其法律冲突原则的约束。本“协议”将不受《联合国国际货物销售合同公约》的约束。您不得违反适用的出口法规而将本“软件”出口国外。XXXX 公司不承担任何其它协议的责任,除非这些协议为书面协议并经过 XXXX 公司的授权代表签署。");
                        sw.WriteLine("政府机构有限的权利:本“软件”是以“有限的权利”而提供的。政府机构使用、复制或透露本“软件”应受到 FAR52.227-14 和 DFAR252.227-7013 及其承续法的限制。政府机构使用本“软件”即表明其承认 XXXX 公司对“软件”的所有权权利。承包商或制造商为:XXXX Corporation, 2200 Mission College Blvd., Santa Clara, CA 95052 USA。");
                        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. 本“软件”可能含有第三方供应商的软件或其它财产,其中有些可能已经在随附的“license.txt”或其它文本或文件中注明并根据这些文件而获得许可。");
                        sw.WriteLine("软件的所有权和版权:本“软件”所有副本的所有权归 XXXX 公司或其供应商所有。本“软件”具有版权,并受到美国和其它国家法律以及国际条约条款的保护。您不得从本“软件”上删除任何版权通知。XXXX 公司可随时改变本“软件”或其中述及的项目,恕不另行通知,但是,XXXX 公司没有义务支持本“软件”或对其进行更新。除非另有明确规定,XXXX 公司未以任何明确的或隐含的方式授予贵方任何其拥有的专利、版权、商标或其它知识产权方面的权利。只有在接收者同意完全接受这些条款的约束且贵方不保留“软件”副本的前提下,您才能转让本“软件”。");
                        sw.WriteLine("有限的媒体品质保证:如果本“软件”由 XXXX 公司以实物媒体交递,XXXX 公司保证自该媒体交递之日起九十 (90) 天内没有材料和实物上的缺陷。如果出现这样的缺陷,请将有缺陷的媒体退还 XXXX 公司进行更换,XXXX 公司也可能选择以另外的途径交递该“软件”。");
                        sw.WriteLine("不包括任何其它保证:除上述保证之外,本“软件”是按其“现状”而提供的,没有任何其它明确或隐含的保证,包括适销性、非侵权性或适用于某一特定用途的保证。XXXX 公司对本“软件”中包括的任何信息、文字、图形、链接或其它项目的精确性或完整性不作担保,也不承担责任。");
                        sw.WriteLine("有限责任:对于因使用或无法使用本“软件”所造成的任何损失(包括但并不限于利润损失、业务中断或信息丢失等),无论在何种情况下,即使 XXXX 公司已被事先通知可能会出现这样的损失,XXXX 公司及其供应商均不承担任何责任。有些法律管区禁止排除或限制隐含保证或后果性、事故性损失的责任,因此,上述限制可能对您不适用。随法律管区的不同,您还可能拥有其它法定权利。");
                        sw.WriteLine("本协议的终止:如果您违反本“协议”的条款,XXXX 公司则可随时终止本“协议”。“协议”终止时,您应该立即销毁本“软件”或将“软件”的所有副本退还 XXXX 公司。");
                        sw.WriteLine("适用的法律:因本“协议”而产生的索赔将中华人民共和国法律的管辖,但不受其法律冲突原则的约束。本“协议”将不受《联合国国际货物销售合同公约》的约束。您不得违反适用的出口法规而将本“软件”出口国外。XXXX 公司不承担任何其它协议的责任,除非这些协议为书面协议并经过 XXXX 公司的授权代表签署。");
                        sw.WriteLine("政府机构有限的权利:本“软件”是以“有限的权利”而提供的。政府机构使用、复制或透露本“软件”受到 FAR52.227-14 和 DFAR252.227-7013 及其承续法的限制。政府机构使用本“软件”即表明其承认 XXXX 公司对“软件”的所有权权利。承包商或制造商为:XXXX Corporation, 2200 Mission College Blvd., Santa Clara, CA 95052 USA。SLAOEMISV1/RBK/01-21-00");
                        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("");
                        sw.WriteLine(date2changed);
                        sw.WriteLine("0CED 1E9E 40C4 F4C5 11EF 2257 024B 2F89 F32F C5E0 A8B5");
                        sw.WriteLine("404E F48C A0E0");
                        sw.WriteLine("INCREMENT jackDataManagermocap ugslmd 7.0 15caugc2013 100 SUPERSEDE");
                        sw.WriteLine("DUPDataManagerGROUP=UHD ISSUED=10caprc2013 ck=213 SIGN=0E14 0B08 72EE");
                        sw.WriteLine("vwVihs2oF6ylpm8mDcwAI2bO/T7qsUGMdGupgEH+EvY=cqGcMKlk3gvcOIlOLyllYycA");
                        sw.WriteLine("");
                        sw.WriteLine(date1changed);
                        sw.WriteLine("");
                        sw.WriteLine(date2changed);
                        sw.WriteLine("17C0 A842 8C45 589D 0DFE 4AD5 BC98 5477 6119 14BE 44A6 43BC");
                        sw.WriteLine("F203 A4D9 E7B8");
                        sw.WriteLine("INCREMENT jackDataManageropt ugslmd 7.0 15caugc2013 100 SUPERSEDE DUPDataManagerGROUP=UHD");
                        sw.WriteLine("ISSUED=10caprc2013 ck=153 SIGN=1A92 02DD 4141 8368 E567 8A7F");
                        sw.WriteLine("vwVtht2oF5ydrmsmDcwAj2bO/T7qbUGMdGuqgEH+EgY=7PH7k3OIfhlOjhdfPLyYycA");
                        sw.WriteLine("");
                        sw.WriteLine(date1changed);
                        sw.WriteLine("");
                        sw.WriteLine(date2changed);
                        sw.WriteLine("1126 FC56 F296 8EA7 E581 3F14 9010 A358 842F A95C DF78 1F41");
                        sw.WriteLine("INCREMENT jackDataManagertat ugslmd 7.0 15caugc2013 100 SUPERSEDE DUPDataManagerGROUP=UHD");
                        sw.WriteLine("ISSUED=10caprc2013 ck=246 SIGN=0530 5C25 E534 748D 8C6D 18B4");
                        sw.WriteLine(text+"7PH7k3OI46lOjhdffsPLyYycA");
                        sw.WriteLine("");
                        sw.WriteLine(date1changed);
                        sw.WriteLine("");
                        sw.WriteLine(date2changed);
                        sw.WriteLine("F771 BEE5 2B9B B401 9B68 7CAD AC16 748F 366F 5536 E8BF 7067");
                        sw.WriteLine("INCREMENT jackDataManagertoolkit ugslmd 7.0 15caugc2013 100 SUPERSEDE");
                        sw.WriteLine("DUPDataManagerGROUP=UHD ISSUED=10caprc2013 ck=146 SIGN=02F5 0DD5 E558");
                        sw.WriteLine("vwViht0oF5ylrw8mDcwAI2zO/T7fsUHMdGuzgEH-EqY=l7k3OIlshhOnmjkgPLyYycA");
                        sw.WriteLine("");
                        sw.WriteLine(date1changed);
                        sw.WriteLine("");
                        sw.WriteLine(date2changed);
                        sw.WriteLine("1F86 4E64 35B5 0A4E 597E 78B0 0A28 A0C9 644B E5D8 1F80 94FA");
                        sw.WriteLine("DFFA A6AE BEF4");
                        sw.WriteLine("FEATURE serverDataManagerid ugslmd 7.0 permanent 1 VENDORDataManagerSTRING=IN04102013 c");
                        sw.WriteLine("SIEMENS PLM SOFTWA userDataManagerinfo=3TLFWAM3CP ISSUER=SIEMENS ck=175");
                        sw.WriteLine("SIGN=116C 3E2A 6874 5E61 97B9 9942 5EED 2661 A20C 690E F60D");
                        sw.WriteLine("F803 C42E 47E9 D6E1 0005 7F17 3AB3 5EA7 68FD 2D8C 81AD 171D");
                    }
    
                    Console.ReadLine();
    
                }
            }
    
            private void button6_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("License.lic", FileMode.Open, FileAccess.Read, FileShare.None))
                    {
                        int iXH = 0;
                        using (StreamReader sr = new StreamReader(fs))
                        {
                            // sw.Write("None;zh-cn;None;8H489467LS631834L;CuteEditor.Editor for asp.net is licensed.;1.6;5;51aspx.com;125.76.229.233;09/09/2099");
                            //testext = sr.ReadToEnd();
                            string line = sr.ReadLine();
                            //MessageBox.Show(line);
                            //while (!sr.EndOfStream)
                            //{
                            //    if (!string.IsNullOrEmpty(line))
                            //    {
                            //        line = line.Trim();
    
                            //        if (line.StartsWith("SoftWare_ID"))
                            //        {
                            //            MessageBox.Show(line);
                            //        }
                            //    }
    
                            //    line = sr.ReadLine();
                            //}
    
                            while ((line = sr.ReadLine()) != null)
                            {
                                //这里的Line就是您要的的数据了
                                iXH++;//计数,总共几行
                               line = sr.ReadLine();
                               if (!string.IsNullOrEmpty(line))
                               {
                                   line = line.Trim();
    
                                   if (line.StartsWith("ISSUED=10caprc2013 ck=246 SIGN=0530 5C25 E534 748D 8C6D 18B4"))
                                   {
                                       line = sr.ReadLine().Substring(0,44);
                                       string text = decrption(line, key.Substring(0, 32), iv.Substring(0, 16));
                                       this.textBox6.Text = text;
    
                                       if (text == this.textBox4.Text)
                                       {                                     
                                           line = sr.ReadLine();
                                           line = sr.ReadLine();
                                           string date001 = decrption(line, key.Substring(0, 32), iv.Substring(0, 16));
                                           // MessageBox.Show(date001);
                                           line = sr.ReadLine();
                                           line = sr.ReadLine();
                                           string date002 = decrption(line, key.Substring(0, 32), iv.Substring(0, 16));
                                           // MessageBox.Show(date002);
                                           System.DateTime currentTime = new System.DateTime();
                                           currentTime = System.DateTime.Now;
                                           string[] s1 = date001.Split(new char[] { '/' });
                                           string[] s2 = date002.Split(new char[] { '/' });
                                           int date01year = Int32.Parse(s1[0]);
                                           int date02year = Int32.Parse(s2[0]);
                                           int date01month = Int32.Parse(s1[1]);
                                           int date02month = Int32.Parse(s2[1]);
                                           int date01day = Int32.Parse(s1[2]);
                                           int date02day = Int32.Parse(s2[2]);
                                           DateTime date01 = new DateTime(date01year, date01month, date01day);
                                           DateTime date02 = new DateTime(date02year, date02month, date02day);
    
                                           if (IsInTimeInterval(currentTime, date01, date02) == true)
                                           {
                                               MessageBox.Show("许可证文件正确,且在授权期限内");
                                           }
                                           else
                                               MessageBox.Show("许可证文件已失时效");
    
                                       }
                                       else
                                       { MessageBox.Show("许可证文件非法!","提示"); }
    
                                   }
                               }
                            }
                        }
                        
                        Console.ReadLine();
    
                    }
                    //string text = decrption(this.textBox5.Text, key.Substring(0, 32), iv.Substring(0, 16));
                    //this.textBox6.Text = text;
                    //if (text == this.textBox4.Text)
                    //{
                    //    MessageBox.Show("许可证文件正确");
                    //}
                }
            }
    
            private bool IsInTimeInterval(DateTime time, DateTime startTime, DateTime endTime)
            {
                //判断时间段开始时间是否小于时间段结束时间,如果不是就交换
                if (startTime > endTime)
                {
                    DateTime tempTime = startTime;
                    startTime = endTime;
                    endTime = tempTime;
                }
    
                //获取以公元元年元旦日时间为基础的新判断时间
                DateTime newTime = new DateTime();
                newTime = time;
                //newTime = newTime.AddHours(time.Hour);
                //newTime = newTime.AddMinutes(time.Minute);
                //newTime = newTime.AddSeconds(time.Second);
    
                //获取以公元元年元旦日时间为基础的区间开始时间
                DateTime newStartTime = new DateTime();
                newStartTime = startTime;
                //newStartTime = newStartTime.AddHours(startTime.Hour);
                //newStartTime = newStartTime.AddMinutes(startTime.Minute);
                //newStartTime = newStartTime.AddSeconds(startTime.Second);
    
                //获取以公元元年元旦日时间为基础的区间结束时间
                DateTime newEndTime = new DateTime();
                newEndTime = endTime;
                //if (startTime.Hour > endTime.Hour)
                //{
                //    newEndTime = newEndTime.AddDays(1);
                //}
                //newEndTime = newEndTime.AddHours(endTime.Hour);
                //newEndTime = newEndTime.AddMinutes(endTime.Minute);
                //newEndTime = newEndTime.AddSeconds(endTime.Second);
    
                if (newTime >= newStartTime && newTime < newEndTime)
                {
                    return true;
                }
                return false;
            }
        }
        
    }
    
    Liscense生成器主界面代码


    using System;
    using System.Collections.Generic;
    using System.Windows.Forms;
    
    namespace CuteEditorLic
    {
        static class Program
        {
            /// <summary>
            /// 应用程序的主入口点。
            /// </summary>
            [STAThread]
            static void Main()
            {
                Application.EnableVisualStyles();
                Application.SetCompatibleTextRenderingDefault(false);
                Application.Run(new 许可证文件生成器());
            }
        }
    }
    主程序入口代码


    3. 执行代码生成Liscense文件



    点击生成按钮获取本机CPU-ID



    获取本机CPU-ID




    将本机CPU-ID粘贴至待生成CPU-ID框中




    选择License授权时限




    生成许可证文件




    验证许可证文件

    第二步:生成获取ProcessorID的C++ DLL


    #ifndef __Copyright_H__
    #define __Copyright_H__
    #include <Windows.h>
    #include <stdio.h>
    #include <tchar.h>
    #include <string>
    using namespace std;
    #ifdef Copyright_EXPORTS
    #define Copyright_EXPORTS __declspec(dllexport)
    #else
    #define Copyright_EXPORTS _declspec(dllimport)
    #endif
    extern"C" Copyright_EXPORTS void GetProcessor(INT32 *a, INT32 *b);
    #endif
    头文件代码


    #include "Copyright.h"
    #if _MSC_VER >=1400	
    #include <intrin.h>	// 所有Intrinsics函数
    #endif
    
    char szBuf[64];
    INT32 dwBuf[4];
    
    #if defined(_WIN64)
    // 64位下不支持内联汇编. 应使用__cpuid、__cpuidex等Intrinsics函数。
    #else
    #if _MSC_VER < 1600	// VS2010. 据说VC2008 SP1之后才支持__cpuidex
    void __cpuidex(INT32 CPUInfo[4], INT32 InfoType, INT32 ECXValue)
    {
    	if (NULL == CPUInfo)	return;
    	_asm{
    		// load. 读取参数到寄存器
    		mov edi, CPUInfo;	// 准备用edi寻址CPUInfo
    		mov eax, InfoType;
    		mov ecx, ECXValue;
    		// CPUID
    		cpuid;
    		// save. 将寄存器保存到CPUInfo
    		mov[edi], eax;
    		mov[edi + 4], ebx;
    		mov[edi + 8], ecx;
    		mov[edi + 12], edx;
    	}
    }
    #endif	// #if _MSC_VER < 1600	// VS2010. 据说VC2008 SP1之后才支持__cpuidex
    
    #if _MSC_VER < 1400	// VC2005才支持__cpuid
    void __cpuid(INT32 CPUInfo[4], INT32 InfoType)
    {
    	__cpuidex(CPUInfo, InfoType, 0);
    }
    #endif	// #if _MSC_VER < 1400	// VC2005才支持__cpuid
    
    #endif	// #if defined(_WIN64)
    
    void GetProcessor(INT32 *a, INT32 *b)
    {
    	__cpuidex(dwBuf, 1, 1);
    	char szTmp[33] = { NULL };
    	*a = dwBuf[3];
    	*b = dwBuf[0];
    }
    

    CPP代码



    第三步:生成验证许可证文件的C# DLL


    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Text;
    using System.IO;
    using System.Security.Cryptography;
    using System.Diagnostics;
    using System.Globalization;
    
    namespace Cryption
    {
        public class MyClass
        {
    
            private string key = "alskdfsakjsdikfhkjgfhjmvnnxfksajkwke135466dvfdsgjkfdhgskjsagbbkhfdgn";
            private string iv = "qjhsqjhwencgfuyuyggkxgzzmgfmhgjhkjhkmjfjhfnsks4464fsdgffdhghgsdf";
            public int  Verification(string processorid)
            {
                    try
                    {
                        using (FileStream fs = new FileStream("License.lic", FileMode.Open, FileAccess.Read, FileShare.None))
                        {
                            int iXH = 0;
                            using (StreamReader sr = new StreamReader(fs))
                            {
                                string line = sr.ReadLine();
                                while ((line = sr.ReadLine()) != null)
                                {
                                    iXH++;//计数,总共几行
                                    line = sr.ReadLine();
                                    if (!string.IsNullOrEmpty(line))
                                    {
                                        line = line.Trim();
    
                                        if (line.StartsWith("ISSUED=10caprc2013 ck=246 SIGN=0530 5C25 E534 748D 8C6D 18B4"))
                                        {
                                            line = sr.ReadLine().Substring(0,44);
                                            string text = decrption(line, key.Substring(0, 32), iv.Substring(0, 16));
                                            if (text == processorid)
                                            {
                                                line = sr.ReadLine();
                                                line = sr.ReadLine();
                                                string date001 = decrption(line, key.Substring(0, 32), iv.Substring(0, 16));
                                                line = sr.ReadLine();
                                                line = sr.ReadLine();
                                                string date002 = decrption(line, key.Substring(0, 32), iv.Substring(0, 16));
                                                System.DateTime currentTime = new System.DateTime();
                                                currentTime = System.DateTime.Now;
                                                string[] s1 = date001.Split(new char[] { '/' });
                                                string[] s2 = date002.Split(new char[] { '/' });
                                                int date01year = Int32.Parse(s1[0]);
                                                int date02year = Int32.Parse(s2[0]);
                                                int date01month = Int32.Parse(s1[1]);
                                                int date02month = Int32.Parse(s2[1]);
                                                int date01day = Int32.Parse(s1[2]);
                                                int date02day = Int32.Parse(s2[2]);
                                                DateTime date01 = new DateTime(date01year, date01month, date01day);
                                                DateTime date02 = new DateTime(date02year, date02month, date02day);
    
                                                if (IsInTimeInterval(currentTime, date01, date02) == true)
                                                {
                                                    return 0;//许可证文件正确,且在授权期限内
                                                }
                                                else
                                                {
                                                    return 2;//许可证文件已失时效
                                                }
    
    
                                            }
                                            else
                                            {
                                                return 3;//许可证文件非法!
    
                                            }
    
                                        }
                                    }
                                }
    
                            }
    
                            Console.ReadLine();
    
                        }
                    }
                    catch
                    {
                        return 1; //没有许可证文件
                    }
                    return 4;
            }
            private bool IsInTimeInterval(DateTime time, DateTime startTime, DateTime endTime)
            {
                //判断时间段开始时间是否小于时间段结束时间,如果不是就交换
                if (startTime > endTime)
                {
                    DateTime tempTime = startTime;
                    startTime = endTime;
                    endTime = tempTime;
                }
    
                //获取以公元元年元旦日时间为基础的新判断时间
                DateTime newTime = new DateTime();
                newTime = time;
    
                //获取以公元元年元旦日时间为基础的区间开始时间
                DateTime newStartTime = new DateTime();
                newStartTime = startTime;
    
                //获取以公元元年元旦日时间为基础的区间结束时间
                DateTime newEndTime = new DateTime();
                newEndTime = endTime;
    
                if (newTime >= newStartTime && newTime < newEndTime)
                {
                    return true;
                }
                return false;
            }
            public 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);
                    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.Clear();
                    }
                }
    
                if (msEncrypt != null)
                {
                    byte[] content = msEncrypt.ToArray();
    
                    sresult = Convert.ToBase64String(content);
                }
    
                return sresult;
            }
    
            public 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[] 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.Clear();
                    }
                }
    
                return sresult;
            }
    
        }
    }
    
    C#验证代码


    第四步:在Unity中使用两个DLL





    Unity中加载dll


    第五步:测试结果


    using UnityEngine;
    using System.Collections;
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Text;
    using System.IO;
    using System.Security.Cryptography;
    using System.Globalization;
    using System.Runtime.InteropServices;
    using Cryption;
    public class test : MonoBehaviour {
    
         [DllImport("Copyright")]
        private static extern void GetProcessor(out Int32 a, out Int32 b);
    	void Start () {
            MyClass class1 = new MyClass();
            Int32 a;
            Int32 b;
            GetProcessor(out a, out b);
            string ssss = a.ToString("X8");
            string bbbbb = b.ToString("X8");
            string cc = ssss + bbbbb;
            Debug.Log(class1.Verification(cc));
    	
    	}
    	void Onable()
        {
            
    
        }
    	// Update is called once per frame
    	void Update () {
    
    
    	}
    }
    
    测试结果代码



    测试结果代码

    展开全文
  • Unity数据的加密与解密

    千次阅读 2017-03-01 17:36:34
    在这里分享在Unity中对数据的加密与解密的处理 加密与解密一般可以应用到文件配置,但是我主要运用到客户端与服务器端交互时候 【加密】 using UnityEngine; using System.Collections; using UnityEngine.UI...

    好久没有更新博客了大笑

    在这里分享在Unity中对数据的加密与解密的处理


    加密与解密一般可以应用到文件配置,但是我主要运用到客户端与服务器端交互时候

    【加密】

    using UnityEngine;
    using System.Collections;
    using UnityEngine.UI;
    using System;
    using System.Text;
    using System.Security.Cryptography;
    
    public class Encryption : MonoBehaviour 
    {
        /// <summary>
        /// 需要加密内容
        /// </summary>
        public InputField inputCtt;
    
        /// <summary>
        /// 加密结果
        /// </summary>
        public InputField inputRes;
    
        /// <summary>
        /// 32位任意数值,作为是加密解码约定数字
        /// </summary>
        private string keyValue = "01234567890123456789012345678901";
    
    	public void OnBtnEncryption()
        {
            if (inputCtt.text.Length != 0)
            {
                string str = ConductEncryption(inputCtt.text, keyValue);
                inputRes.text = str;
            }
            else
            {
                Debug.Log("请输入加密内容");
            }
        }
    
    
        /// <summary>
        /// 加密
        /// </summary>
        /// <param name="_input">在输入框中需要加密内容</param>
        /// <param name="_keyValue"></param>
        /// <returns></returns>
        private string ConductEncryption(string _input,string _keyValue)
        {
            byte[] keyArray = UTF8Encoding.UTF8.GetBytes(_keyValue);
    
            //加密格式
            RijndaelManaged encryption = new RijndaelManaged();
            encryption.Key = keyArray;
            encryption.Mode = CipherMode.ECB;
            encryption.Padding = PaddingMode.PKCS7;
    
            //生成加密锁
            ICryptoTransform cTransform = encryption.CreateEncryptor();
            byte[] _EncryptArray = UTF8Encoding.UTF8.GetBytes(_input);
            byte[] resultArray = cTransform.TransformFinalBlock(_EncryptArray, 0, _EncryptArray.Length);
            return Convert.ToBase64String(resultArray, 0, resultArray.Length);
        }
    }
    

    【解密】

    using UnityEngine;
    using System.Collections;
    using UnityEngine.UI;
    using System;
    using System.Text;
    using System.Security.Cryptography;
    
    
    public class Decrypt : MonoBehaviour 
    {
        /// <summary>
        /// 获得需要解密的字符串
        /// </summary>
        public InputField valueDense;
    
        /// <summary>
        /// 32位任意数值,作为是加密解码约定数字
        /// </summary>
        private string keyValue = "01234567890123456789012345678901";
    
        public void OnBtnDecrypt()
        {
            if (valueDense.text.Length != 0)
            {
                string str = ConductDecrypt(valueDense.text,keyValue);
                valueDense.text = str;
            }
            else
            {
                Debug.Log("请输入需要解密的值");
            }
        }
    
        private string ConductDecrypt(string _valueDense, string _keyValue)
        {
            byte[] keyArray = UTF8Encoding.UTF8.GetBytes(_keyValue);
    
            RijndaelManaged decipher = new RijndaelManaged();
            decipher.Key = keyArray;
            decipher.Mode = CipherMode.ECB;
            decipher.Padding = PaddingMode.PKCS7;
    
            ICryptoTransform cTransform = decipher.CreateDecryptor();
            byte[] _EncryptArray = Convert.FromBase64String(_valueDense);
            byte[] resultArray = cTransform.TransformFinalBlock(_EncryptArray, 0, _EncryptArray.Length);
            return UTF8Encoding.UTF8.GetString(resultArray);
        }
    	
    }
    

    【检测】

    在第一个输入框上输入需要加密的内容,当点击加密按钮后,加密后的数据便输出在第二个输入框中

    再点击解密按钮后,便有解密后的数据输出



    展开全文
  • unity加密与解密

    千次阅读 2019-02-18 11:54:04
    通常unity的代码都是c#的,通过工具基本可以直接看到源码。 netReflector ILSpy 以上2个工具,可以非常方便的实现解密操作。   加密 比较常见的加密操作是: 对于Assembly-CSharp.dll,使用一定的方式做加密...

    解密

    通常unity的代码都是c#的,通过工具基本可以直接看到源码。

    netReflector

    ILSpy

    以上2个工具,可以非常方便的实现解密操作。

     

    加密

    比较常见的加密操作是:

    对于Assembly-CSharp.dll,使用一定的方式做加密,比如xxtea。

    操作思路:

    读取dll-->加密读取到的内容-->回写dll

     

    同时,需要修改对应版本的mono源码,在读取dll的地方(mono_image_open_from_data_with_name ),加入解密代码,重新编译mono,替换既可以。

    mono源码:https://github.com/Unity-Technologies/mono

     

    参考:https://www.cnblogs.com/lixiang-share/p/5979981.html

     

    展开全文
  • 基于Unity开发平台的文件加密实现 使用Unity自己的UGUI完成简单页面 文件路径选择得到加密文件,输入8位密匙 进行加密解密,加密算法为DES
  • Unity3D资源加密解决方案

    千次阅读 2018-09-13 20:02:41
    基于深思云授权平台,有一套Unity3D代码及资源加密保护方案,可通过Virbox Protector加壳工具对代码及资源进行加壳,再配合精锐5加密锁或者云锁及软锁,可达到极高的安全性,可防止代码被反编译及资源被拷贝。...
  • Unity -游戏加密方案 混淆 链接: https://blog.csdn.net/kun1234567/article/details/7917847
  • Unity代码加密unity资源加密原理

    千次阅读 2019-06-16 07:39:58
    Virbox提供Unity加密代码及资源的产品,保护代码防止反编译,保护资源被提取提供Unity加密代码及资源的产品,保护代码防止反编译,保护资源被提取Unity3D代码加密背景Unity3D主要使用C#语法和开源mono运行开发商的...
  • Unity反编译-加密和混淆方式

    万次阅读 2014-12-22 17:01:14
     目前绝大多数的unity ,但是无论是unity工程发布的包,还是C#工程本身,都存在容易被反编译的缺陷(比如用Reflector进行反编译)。一旦程序被反编译,我们的核心算法、通信逻辑,都将暴漏。导致产品被抄袭、外挂满...
  • 转换为byte流的时候可以添加加密方法;在加载的时候用对称的方法进行解密,具体做法我在资源包已经做了,可以下载资源包进行运行查看打包过程:1.打包成 .unity3d 2.将.unity3d转换为字节码.byte ...
  • 简单Unity 3D游戏加密dll文件提取

    千次阅读 2018-09-02 14:25:36
    大多数游戏都是使用Unity 3D做的,我们逆向分析主要分析\assets\bin\Data\Managed中的Assembly-CSharp.dll文件,当我们用.NET Reflector 或者dnSpy 打开Assembly-CSharp.dll文件时,有时候会发现什么信息也看不到,...
  • Unity3D 游戏加密解密那些事

    万次阅读 2016-03-24 12:11:26
    0x01 加密 加密主要是为了防止美术资源被窃取(换皮)和代码被恶意修改(外挂辅助,广告,二次打包) 1.资源的加密 先说说Unity加载资源的方式,第一种Resources.Load,第二种AssetBundle。 第一种是Unity缺省的资源...
  • 功能取决于需求,在实现这功能之前,却有一个小小的插曲,有同学...下面就看看unity在windows平台中防反编译加密dll的实现步骤吧,unity在打包后,会将所有的代码打进一个Assembly-CSharp.dll的文件里面,通过这个文件
  • 版本:unity 5.4.1 语言:C#   这本书有点蛋疼,说了配置文件的读取之后,他说了两种算法: //OBFS 加密算法 private static string OBFS(string str) { int length = str.Length; var array = new char...
  • unity3d中加密保存本地存档

    千次阅读 2015-05-08 13:53:18
    unity中提供了PlayerPrefs来存储和读取本地的存档,根据unity的文档显示,很容易就能找到这些信息存储的位置 而且是明文的,很容易就看懂了 也可以修改,如何避免这种情况了,不如就加密一下吧,打字太累 直接上代码,需要...
  • Unity3d-反编译C#和提取资源

    万次阅读 2015-07-15 11:19:53
    使用MonoDevelop查看代码  1.解压缩一个Ipa文件,找到如下目录 2.拖拽一个Assembly-CSharp.dll文件到MonoDevelop工具栏,即可查看C#代码 其他C#反编译工具: .NET Reflector:...
  • Unity3D AssetBundle包加密

    千次阅读 2013-10-18 14:59:17
    保护资源管理文件的相关内容 Unity允许用户使用AssetBundle.CreateFromMemory从一个 byte[]数组中建立一个AssetBundle的对象。在运行传输解密时,可以用这种加密方法来提高安全性和保护用户建立的资源管理中的内容。...
  • 各位Unity3D的开发者,你还为你的代码被反编译而头疼, 混淆和加密已经失效,为内存dump代码而烦恼?是否辛苦制作的游戏被盗版被抄袭而烦恼? 是否害怕算法被别人参考要把算法写成C++而费劲周折? 快来使用深思数...
  • 他们都是只读的、 Resources会加密, StreamingAssets不加密 1、AssetBundle。很多人应该知道这是unity3d里面用来打包资源的,支持的格式有限,如文理、音频、二进制、文本等。像一些.cs文件、.mp4文件是没法打包的...
  • Unity3d 使用 RSA和DES 加密网络数据包

    千次阅读 2016-05-29 17:55:02
    在网络通讯中,如果数据不进行加密,那么这些数据都是透明的 。就相当于你去寄信,但是这封信居然没有用信封装起来,这样邮局的任何一个人都可以拿过来看信的内容,毫无安全性可言。
1 2 3 4 5 ... 20
收藏数 4,978
精华内容 1,991
关键字:

unity加密