DLL加密


.net reactor的使用
原創數據的流 最后發布於2018-06-13 16:13:29 閱讀數 10145 收藏
展開
.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加密的程序進行脫殼破解(當然需要懂一些逆向的知識),大家使用時候自己有所衡量就可以了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM