C# dll代碼混淆加密的實現(xiàn)
一、需求
C# 項目生成 dll,在反編譯工具下,好比皇帝的新裝,dll 內(nèi)部的代碼看的一清二楚,在這里推薦一個工具ConfuserEx,可以給C#代碼混淆,甚至 exe 文件都可以加密,軟件是免費開源的,但是,目前已經(jīng)停止維護,并且不支持最新的 .Net6。
下載地址:
GitHub - yck1509/ConfuserEx: An open-source, free protector for .NET applications
特征:
1.支持.NET Framework 2.0/3.0/3.5/4.0/4.5
2.符號重命名(支持 WPF/BAML)
3.防止調(diào)試器/分析器
4.防止內(nèi)存轉(zhuǎn)儲
5.防止篡改(方法加密)
6.控制流混淆
7.常量/資源加密
8.引用隱藏代理
9.禁用反編譯器
10.嵌入依賴
11.壓縮輸出
12.可擴展的插件 API
二、用法
1.新建C#項目
新建一個基于 .NET Framework 的類庫項目,就用默認添加的 class1 好了,代碼如下
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace 加密程序集1
{
public class Class1
{
public static string User { get; set; } = "張三";
public static string Password { get; set; } = "erwtyyhghdgh";
public static void Test()
{
Console.WriteLine("f**k you");
}
}
}添加完代碼后,點擊生成,我們用工具 dnSpy 打開這個 dll 看看

代碼一覽無余 ,下面我們就開始加密這個 dll
2.開始加密
打開 ConfuserEx,將 dll 拖入界面,并設置導出路徑,路徑我這里選擇的是桌面,和需要加密的dll放在一起。

3.常見的錯誤
我試過導出路徑用 D 盤,但結(jié)果發(fā)現(xiàn)報錯。

導出的時候,路徑就容易報這種錯誤,不知道是什么原因。

另外,如果使用 .NET6 類庫,在導出的時候也會報下面的錯誤:

4.添加加密規(guī)則
在完成第二節(jié)的操作后(拖入DLL,選擇導出路徑),接下來點擊 Settings 選項卡,按下面步驟操作:

開始添加加密規(guī)則

我這里連點五下,然后按 1-5 的順序選擇加密規(guī)則,選擇完成后,點擊 Done。

這里并不推薦使用過多的加密規(guī)則,越高混淆越強,但性能越低,兼容性也越差。
5.導出加密dll
選擇 Protect 選項,點擊 Protect 按鈕

如果出現(xiàn)了圖中的綠字,說明加密成功了,找到對應的位置

用 dnSpy 打開這個加密的 DLL,可以看到,代碼已經(jīng)混淆了

6.調(diào)用加密dll
新建一個 .NET Framework 的控制臺項目,將加密的 dll,放入項目的 Debug 目錄下。

代碼:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
namespace 調(diào)用加密dll
{
internal class Program
{
static void Main(string[] args)
{
Assembly dll = Assembly.LoadFrom("加密程序集1.dll");
Type[] types = dll.GetTypes();
//獲取類名
Type type = types.Where(arg => arg.Name.Equals("Class1")).FirstOrDefault();
//獲取方法名
MethodInfo methodInfo = type.GetMethod("Test");
//方法無參數(shù)的話
methodInfo.Invoke(null, null);
//如果方法有參數(shù)的話,下面的 value 是返回值,沒用返回值則返回null
//object value = methodInfo.Invoke(null, new object[]{param1,param2});
//獲取指定的屬性
object value1 = type.GetProperty("User").GetValue(type);
Console.WriteLine(value1);
object value2 = type.GetProperty("Password").GetValue(type);
Console.WriteLine(value2);
Console.ReadKey();
}
}
}運行:

到此這篇關(guān)于C# dll代碼混淆加密的實現(xiàn)的文章就介紹到這了,更多相關(guān)C# dll代碼混淆加密內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
datagridview實現(xiàn)手動添加行數(shù)據(jù)
C#將配置文件appsetting中的值轉(zhuǎn)換為動態(tài)對象調(diào)用
C#實現(xiàn)listview Group收縮擴展的方法

