C# dll代码混淆加密

news2024/11/21 2:31:55

目录

一、需求

二、用法

1.新建C#项目

2.开始加密

3.常见的错误

4.添加加密规则

5.导出加密dll

6.调用加密dll

结束


一、需求

C# 项目生成 dll,在反编译工具下,好比皇帝的新装,dll 内部的代码看的一清二楚,在这里推荐一个工具ConfuserEx,可以给C#代码混淆,甚至 exe 文件都可以加密,软件是免费开源的,但是,目前已经停止维护,并且不支持最新的 .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.防止调试器/分析器
4.防止内存转储
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 盘,但结果发现报错。

导出的时候,路径就容易报这种错误,不知道是什么原因。

另外,如果使用 .NET6 类库,在导出的时候也会报下面的错误:

4.添加加密规则

在完成第二节的操作后(拖入DLL,选择导出路径),接下来点击 Settings 选项卡,按下面步骤操作:

开始添加加密规则

我这里连点五下,然后按 1-5 的顺序选择加密规则,选择完成后,点击 Done。

这里并不推荐使用过多的加密规则,越高混淆越强,但性能越低,兼容性也越差。

5.导出加密dll

选择 Protect 选项,点击 Protect 按钮

如果出现了图中的绿字,说明加密成功了,找到对应的位置

用 dnSpy 打开这个加密的 DLL,可以看到,代码已经混淆了

6.调用加密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 调用加密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");
            //方法无参数的话
            methodInfo.Invoke(null, null);

            //如果方法有参数的话,下面的 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();
        }
    }
}

运行:

结束

如果这个帖子对你有所帮助,欢迎 关注 、点赞 、留言

end

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/28963.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

关于Cy5.5 alkyne,Cyanine7 alkyne和1628790-37-3,1998119-13-3两者的区别

外观以及性质: Cy5.5 alkyne和Cy7alkyne 都含有荧光基团,其中氰基7的炔烃衍生物,近红外荧光团,Cy7的类似物,Cyanine5.5 alkyne用于点击化学标记的远红外/近红外染料炔烃,炔烃可以通过铜催化的点击化学与多种…

Ubuntu 22.04 一次及其繁琐的 允许 Traceroute 探测漏洞修复之旅

前言:允许 Traceroute 探测是绿盟漏洞扫描器报出来的一个漏洞,如下图: 我的系统是ubuntu 22.04,但由于是用户提供的虚拟机,会有些定制的部分,具体定制了哪部分就不知道了,直接描述问题。 解决问…

【服务器数据恢复】LINUX误删除、误格式化的数据恢复

Linux误删除及误格式化的数据恢复方案针对的文件系统: 1 、基于EXT2/EXT3/EXT4文件系统 ; 2 、基于Reiserfs文件系统; 3 、基于Xfs文件系统。 Linux误删除及误格式化的数据恢复解决方案: 一、故障检测: 1、检测是否存在…

java学习day56(Spring Boot)Spring Boot

主要内容: 1.Spring Boot基本应用 2.Spring Boot原理深入及源码剖析 3.Spring Boot数据访问 4.Spring Boot视图技术 5.Spring Boot实战演练 6.Spring Boot项目部署 1. SpringBoot基本应用 1.1 约定优于配置Build Anything with Spring Boot:Spring Boot …

【数据结构】堆的实现及排序

目录一、树的相关概念及其特殊二叉树1、数的相关概念2、特殊二叉树二、堆1、堆的实现1.1、堆向下调整算法和向上调整算法的时间复杂度1.2、堆的构建1.3、堆的插入1.4、堆的删除1.5、取堆顶的数据、堆的个数及堆的判空2、堆的排序一、树的相关概念及其特殊二叉树 讲堆之前&#…

透视虎牙斗鱼三季报:游戏直播在各自“求变”中见分晓

游戏直播行业,依然硝烟弥漫。 经历千播大战、熊猫出局的洗礼后,虎牙和斗鱼双方缠斗升级,另有B站和抖音、快手等视频平台来势汹汹,抢夺仅有的市场蛋糕。 而在游戏行业遇冷、政策趋严等因素多重考验下,这场争夺战无疑将…

fsync

由于目前操作系统都具有延迟写(delayed write)功能, fwrite/write并不会直接把数据写到磁盘上, 而是在buffer满时才开始写入到磁盘。 要想把数据写到磁盘上,需要调用fsync函数 open(fd) write(fd) fsync(fd) close(fd) 或者 fopen(fp…

金仓数据库KingbaseES查询计划剖析

目录 1、KingbaseES数据库中的查询生命周期 2、数据设置 3、KingbaseES解释一个查询 4、什么是数据库中的缓冲区和缓存? 5、VERBOSE 命令参数 6、KingbaseES中的 FORMAT 解释 7、总结EXPLAIN使用方式 8、执行计划查看 了解KingbaseES查询计划对于开发人员和…

HarmonyOS应用API手势方法-绑定手势方法

述:为组件绑定不同类型的手势事件,并设置事件的响应方法。 Api:从API Version 7开始支持 一、绑定手势识别: 通过如下属性给组件绑定手势识别,手势识别成功后可以通过事件回调通知组件。 名称参数类型默认值描述ge…

银河麒麟V10+达梦数据库8保姆级安装教程

银河麒麟V10达梦数据库8保姆级安装教程 一、系统和数据库的下载 银河麒麟V10版本: 首页 → 桌面操作系统 → 银河麒麟桌面操作系统V10 → 试用(填写信息) → 点击地址进行下载(X86centos7) #如果不想进行上面的操作,…

Casbin——Java版本(笔记)

文章目录一、Casbin 是什么?二、快速开始2.1 载入配置2.2 如何判断权限2.3 model.conf2.3.1 基本格式2.3.2 SpringBoot下的使用2.3.3 匹配的函数内置函数自定义函数2.3.4 基于角色的访问控制角色的层次区分用户和角色隐式角色权限域内RBAC角色与函数2.3.5 优先级模型…

react事件系统(老版本)

带着问题阅读探索 React 为什么有自己的事件系统?什么是事件合成 ?如何实现的批量更新?事件系统如何模拟冒泡和捕获阶段?如何通过 dom 元素找到与之匹配的fiber?为什么不能用 return false 来阻止事件的默认行为&…

python【PyQt5】的环境搭建和使用(全网最全)其一

什么是pyQT pyqt是一个用于创建GUI应用程序的跨平台工具包,它将python与qt库融为一体。也就是说,pyqt允许使用python语言调用qt库中的API。这样做的最大好处就是在保存了qt高运行效率的同时,大大提高开发效率。因为,使用python语言…

城市路边停车收费系统/停车收费管理系统

摘 要 近年来,随着社会的进步和发展,车辆也在迅速增加,城市交通的瓶颈不仅体现在道路交通的拥挤上,也体现在传统停车场管理效率和安全性大大滞后于社会的需要,给人们的生活带来了极大的不便。尤其,随着汽车…

二、MongoDB简介及基本操作

mongodb是一个基于文档的强大、灵活、易于扩展的通用型数据库。是基于分布式文件存储的数据库。其由 C 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。 mongodb也是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富&…

运动健身买什么耳机好用、最优秀的健身耳机推荐分享

冬天绝对是个减肥的好季节,因为这个季节天气比较冷,我们在运动过程中消耗的热量也就会更多,因此选择一款不错的运动耳机来用坚持就显得尤为重要了。这款运动耳机要能稳定在耳朵上,还要具备防水功能,同时音质上也要有保…

闲人闲谈PS之三十四——项目成本费用控制阈值

**惯例闲话:**最近有小伙伴问闲人有没有PS顾问资源,闲人问了一圈,结果发现都没有档期,不免让闲人有些失落,好心答应帮忙,结果帮不上…但是隐隐约约觉得在几年前说的话被应验了,PS模块一定是个热…

Ubuntu G++ 编译C++源文件

工程项目代码简短的时候使用 G 进行功能模块测试 过程分为: 预处理:展开头文件,去掉主食,条件编译和文件包含编译:检查语法,生成汇编代码汇编:汇编代码转换成机器码链接:Link 主要是…

王学岗音视频开发(一)—————配置NDK开发环境

Android studio准备 Android studio需要下载Android6.0版本(Android SDK Platform 23),最小支持Android6.0 NDK 下载 cmake下载安装 Android studio 代理配置 dl.google.com可能会被屏蔽,首先查下其IP地址。查到IP地址后修改etc/hosts文件。 Andr…

pytorch深度学习实战lesson25

第二十五课 network in network(NIN) NIN 叫做network in network或者叫做网络中的网络。这个网络现在用的不多,几乎很少被用到。但是它里面提出了比较重要的概念,在之后很多网络都会被持续的用到。所以今天认识一下这一个网络。 目录 理论部分 实践部…