zoukankan      html  css  js  c++  java
  • .net reactor的使用

    .NET Reactor 是一款强大的 .NET 代码混淆加密保护工具,常用于防止对 .NET 程序的反编译破解等场景。

    本文以.net reactor加密dll为示例:

    1.新建一个类库项目,并创建一个类,本文以对称加密算法为示例

    
    using System;
    using System.Collections.Generic;
    using System.IO;
    using System.Linq;
    using System.Security.Cryptography;
    using System.Text;
    using System.Threading.Tasks;
     
    namespace PP.Encrypt
    {
        //密码生成:https://suijimimashengcheng.51240.com/
        public class SymmetricMethod
        {
            private SymmetricAlgorithm mobjCryptoService;
            private string Key;
            /// <summary>   
            /// 对称加密类的构造函数   
            /// </summary>   
            public SymmetricMethod()
            {
                mobjCryptoService = new RijndaelManaged();
                Key = "FefZ$@pAedzg#HjT!QcM7JQqwOcAkCm7x2pZjBUMSocM9v6#%AP9HZg7OZ^ogG!x";
            }
            /// <summary>   
            /// 获得密钥   
            /// </summary>   
            /// <returns>密钥</returns>   
            private byte[] GetLegalKey()
            {
                string sTemp = Key;
                mobjCryptoService.GenerateKey();
                byte[] bytTemp = mobjCryptoService.Key;
                int KeyLength = bytTemp.Length;
                if (sTemp.Length > KeyLength)
                    sTemp = sTemp.Substring(0, KeyLength);
                else if (sTemp.Length < KeyLength)
                    sTemp = sTemp.PadRight(KeyLength, ' ');
                return ASCIIEncoding.ASCII.GetBytes(sTemp);
            }
            /// <summary>   
            /// 获得初始向量IV   
            /// </summary>   
            /// <returns>初试向量IV</returns>   
            private byte[] GetLegalIV()
            {
                string sTemp = "XUYXqW8QF2fqyytf0ZwU6Vv1cbNI3qU!zVzohQ0ptAug#&uJ3b^rEKkrckH1LE3i";
                mobjCryptoService.GenerateIV();
                byte[] bytTemp = mobjCryptoService.IV;
                int IVLength = bytTemp.Length;
                if (sTemp.Length > IVLength)
                    sTemp = sTemp.Substring(0, IVLength);
                else if (sTemp.Length < IVLength)
                    sTemp = sTemp.PadRight(IVLength, ' ');
                return ASCIIEncoding.ASCII.GetBytes(sTemp);
            }
            /// <summary>   
            /// 加密方法   
            /// </summary>   
            /// <param name="Source">待加密的串</param>   
            /// <returns>经过加密的串</returns>   
            public string Encrypto(string Source)
            {
                byte[] bytIn = UTF8Encoding.UTF8.GetBytes(Source);
                MemoryStream ms = new MemoryStream();
                mobjCryptoService.Key = GetLegalKey();
                mobjCryptoService.IV = GetLegalIV();
                ICryptoTransform encrypto = mobjCryptoService.CreateEncryptor();
                CryptoStream cs = new CryptoStream(ms, encrypto, CryptoStreamMode.Write);
                cs.Write(bytIn, 0, bytIn.Length);
                cs.FlushFinalBlock();
                ms.Close();
                byte[] bytOut = ms.ToArray();
                return Convert.ToBase64String(bytOut);
            }
            /// <summary>   
            /// 解密方法   
            /// </summary>   
            /// <param name="Source">待解密的串</param>   
            /// <returns>经过解密的串</returns>   
            public string Decrypto(string Source)
            {
                byte[] bytIn = Convert.FromBase64String(Source);
                MemoryStream ms = new MemoryStream(bytIn, 0, bytIn.Length);
                mobjCryptoService.Key = GetLegalKey();
                mobjCryptoService.IV = GetLegalIV();
                ICryptoTransform encrypto = mobjCryptoService.CreateDecryptor();
                CryptoStream cs = new CryptoStream(ms, encrypto, CryptoStreamMode.Read);
                StreamReader sr = new StreamReader(cs);
                return sr.ReadToEnd();
            }
        }
    }

    2.安装.net reactor5.0

    如果要单独加密某个dll,单击“open”选择要加密的dll,然后在下边"Quick Settings"里边选择加密的选项即可,使用菜单里的“Protection Presets”可以快速设定"Quick Settings"里的选项,本例使用类库强加密,如图:

    然后切换到Protection选项卡,点击“Protect”按钮即可生成加密后的dll

    执行加密保护操作以后,默认会在原dll文件夹下创建一个后缀名_Secure的文件夹,里边就是加密以后的dll了。

    此时使用.net reflector反编译工具查看生成的dll,即可发现无法直接看到相关方法信息了,如图:

    3.在VS项目中配置自动加密

    这种手动加密的方法固然可以,不过实际使用中却不是很方便,毕竟需要手动加密的。.net reactor强大的地方在于可以在VS项目生成的时候自动加密。

    打开.Net Reactor 5.0,单击Help菜单,选择开发使用的VS版本,这个操作会在VS中安装.net reactor插件

    打开VS,点击“工具”菜单,可以看到.net reactor插件已安装

    点击上图中的.Net Reactor

    随后点击生成项目,会跳出加密的画面:

    这个加密画面只有修改了.net reactor插件中的配置后第一次生成时候可以明显看到,随后再执行生成都是一闪而过,几乎感觉不到,可以说是非常便捷的。

    .net reactor功能非常强大,还可以用于将站点、服务、类库文件打包成一个文件等等,本文只是介绍了简单的使用。

    此外,混淆加壳和逆向脱壳破解,本身就是矛和盾之争,安全的概念只是相对的。比如一款叫de4dot的逆向工具,就可以对大部分.net reactor加密的程序进行脱壳破解(当然需要懂一些逆向的知识),大家使用时候自己有所衡量就可以了。

  • 相关阅读:
    2009年信息技术十大趋势
    转:ASP.NET MVC 第五个预览版和表单提交场景
    终于在博客园开通了
    与虚拟机Oracle连接出现ora12154问题的解决
    Frame框架页面加载中进度条的实现
    WordPress安装部署
    Xmarks不会关闭了,太好了!
    抠出淘宝的菜单树
    asp.net实现类似MaskTextBox功能
    win2003 64位系统下ODBC连接使用
  • 原文地址:https://www.cnblogs.com/cuihongyu3503319/p/15330809.html
Copyright © 2011-2022 走看看