C#混淆心得

C#混淆心得

近期遇到混淆C#代码的需求,在网上找了很多办法,在此记录一下。

混淆的本质就是让代码变丑,让别人看不懂。

为什么要混淆:

1.保护核心代码

可以在一定程度上避免别人偷代码,从而保护重要的部分(当然对大佬没用)。但这对于C#来说是很难做到的,毕竟C#的特性就很公开,比如C#可以通过反射获取数据类型,这是因为有元数据的存在。C#的程序集很容易被反编译,就算混淆了代码,编译成CIL之后都是一样能看清的,因此如果想保护C#代码,混淆是没有用的,只能通过native code的方式,将核心代码放到本地,这样才能真正做到保护,比如服务器就是如此。

但是为什么我还需要混淆C#代码呢?我以前用lua写过mod,当时就遇到需要混淆lua的需求,这是因为mod上传后人们都可以看到源代码,因为它是开源的。所以我这次混淆C#是为了避免某些能直接看到代码的人拿来做不好的事(防那种混蛋应该足够了),且对方水平很次,故对C#混淆。

混淆C#还可以通过给dll加壳的方式,但是其他程序就没法引用这个程序集了,可以给本地的服务器程序加,网上有很多第三方工具。

2.降低审核时的查重

游戏上架商店的时候需要审核,如果跟其他游戏代码相似度过高就不能通过,因此需要混淆降低重复。例如,出于商业的目的,很多公司会在同一平台上架多个同一游戏,这样人们就能看到更多关于这个游戏的推广。或者上架一个测试用的游戏,在里面进行各种实验,确定效果后再更新到主游戏上,这样就不会影响到主游戏了,这种就叫马甲包。因此为了实现这种功能,就需要用到混淆。特别是苹果ios上,需要混淆oc代码。

原因主要就是上面两种,还有就是可以压缩代码文本的体积,比如开发的时候为了确保变量意图清晰可见,会用比较长的名字命名,混淆成abc这种就可以变短。

混淆常用的手段:

1.生成垃圾代码,把他们混在有用的代码里,再把有用的代码改名,这样就很难看出来那些代码是干嘛的了。

2.删除注释或者混淆注释,直接删除还是太温柔了,我试过改编码,这样中文注释就都变成乱码,效果不错,但是不方便下面的混淆。替换或删行的时候容易把代码挤进注释里,这样就会出问题。

3.修改变量名、文件名、目录名。可以使用正则表达式来匹配修改,要留意一些不能修改的字段或类型。

4.将常量用一些很长很复杂的表达式替换,比如让gpt生成一个结果是true的表达式:

((5 > 3) && (10 == 10) && (true || false) && (100 >= 100) && ("hello" != "world") && (2 * 3 == 6) && (15 % 5 == 0) && (Math.Sqrt(16) == 4) && (DateTime.Now.DayOfWeek == DayOfWeek.Thursday) && (int.Parse("50") + 50 == 100)

然后就可以把所以true都可以替换成它。同理,其他常量也可以这样混淆。

5.删除所有换行符,或者将所有空格换成换行符,效果都挺不错,但后者容易把一些不能分开的也换了,要确保能正常编译。

6.字符串加密,可以用ase加密算法对字符串进行加密,但要想办法让别人看不懂解密的方法。或其他替换字符串的方法,比如转义字符。

7.基础类型展开,比如将int替换成System.Int32,那些很长的容器类替换后的效果就很不错。也可以把所有using删除,然后所有类型写全称。

以上只是我发现的初步混淆,还可以利用C#的各种特性,等着你去发掘。

效果:

在这里插入图片描述

在这里插入图片描述

注意要在本地保存一份正常的代码,发出去的才混淆。

就先讲这么多吧。

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

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

相关文章

postman---postman参数化

我们在做接口测试的过程中,都会遇到同一个接口不同的数据,每次去一个个填写数据就太麻烦了,今天我们一起学习下如何通过postman进行参数化 一、参数化 参数化就是1个接口请求不同的数据,我们可以通过把请求的数据放入到一个文件…

滑动窗口和螺旋矩阵

209. 长度最小的子数组 题目 给定一个含有 n 个正整数的数组和一个正整数 target 。 找出该数组中满足其总和大于等于 target 的长度最小的 连续 子数组 [numsl, numsl1, ..., numsr-1, numsr] ,并返回其长度**。**如果不存在符合条件的子数组,返回…

LInux 进程替换(理解系统调用)

目录 一、替换原理 二、替换函数 1、exec函数 2、命名理解 3、返回值 4、使用execl/lp、execv/vp 5、执行自定义命令 Makefile编译多个文件 命令行程序mycmd.c 传入自己的可执行文件 7、子进程都继承父进程环境变量 8、execle/ve修改子进程环境变量 9、exece函数为…

编写测试用例的方法,这个是真的很好用

大家测试过程中经常用的等价类划分、边界值分析、场景法等,并不能覆盖所有的需求,我们之前讲过很少用到的因果图法,下面就来讲另一种不经常用到但又非常重要的测试用例编写方法——测试大纲法。 测试大纲法适用于有多个窗口,每个…

SpringBoot 过滤器

SpringBoot 过滤器简介 SpringBoot 是一种广泛使用的 Java 框架,用于创建微服务和企业级应用程序。它提供了许多功能,包括用于处理 HTTP 请求和响应的过滤器。在 SpringBoot 中,过滤器是一种组件,它允许您在请求到达控制器之前和…

2024批量导出公众号所有文章生成目录,这下方便找文章了

公众号历史文章太多,手机上翻起来太费劲,怎么快速找到某一天的文章呢?比如深圳卫健委这个号从2014到2024发布近万篇文章。 公众号历史文章太多,手机上翻起来太费劲,怎么快速找到某一天的文章? 如果要找2020…

wsl-oraclelinux 安装 cuda

wsl-oraclelinux 安装 cuda 1. 安装 cuda2. 安装 cuDNN3. 配置环境变量 1. 安装 cuda wget https://developer.download.nvidia.com/compute/cuda/12.4.0/local_installers/cuda_12.4.0_550.54.14_linux.run sudo sh cuda_12.4.0_550.54.14_linux.run2. 安装 cuDNN sudo dnf …

第十四届蓝桥杯省赛真题 Java C 组【原卷】

文章目录 发现宝藏【考生须知】试题 A \mathrm{A} A : 求和试题 B: 分糖果试题 C: 三国游戏试题 D : \mathrm{D}: D: 平均试题 E \mathrm{E} E : 填充试题 F : \mathrm{F}: F: 棋盘试题 G: 子矩阵试题 H: 公因数匹配试题 I: 异或和之差试题 J : \mathrm{J}: J: 太阳 发现宝…

总结linux常用命令

Linux常用命令总结如下: 文件与目录操作: ls:列出目录内容cd:改变当前目录pwd:显示当前工作目录mkdir:创建新目录cp:复制文件或目录rm:删除文件或目录mv:移动或重命名文件…

命令模式在量化交易系统开发中的应用

文章目录 一、命令模式的特点及优点二、命令模式在量化交易系统的应用 一、命令模式的特点及优点 命令模式是一种行为设计模式,它将请求封装成一个对象,从而使得可以使用不同的请求、队列或者日志来参数化其他对象。命令模式的特点和优点如下&#xff1a…

如何重置iPhone的网络设置?这里提供详细步骤

前言 本文介绍如何重置iPhone上的网络设置。该信息适用于iPhone 12到iPhone 6以及iOS 14到iOS 8。 如何在iPhone上重置网络设置 采取以下步骤重置iPhone上的网络设置: 1、在iPhone上,打开设置应用程序。 2、单击通用。 3、滚动到屏幕底部&#xff…

eplan新建符号及符号向量(实现新建符号旋转)

建符号之前先建符号库,这里直接新建符号 选择变量A,写符号名(英文字母),点确定 这时会打开一个空白页面,新建的符号在这里编辑 从原有的符号中插入过来直接编辑(也可自己画,最关键是自动引出线要加中断点) 插入进来后进行编辑: 编辑后: 符号向量A编辑完成后(保持符号编辑页面…

构建灵活可配置的JavaScript插件系统

在现代软件开发中,插件系统为应用程序提供了巨大的灵活性和可扩展性。它们允许开发者在不修改核心代码的情况下扩展和定制应用程序的功能。本文将详细介绍如何构建一个灵活的JavaScript插件系统,包括插件的注册、配置、安装、执行和卸载。 一、插件系统…

基于springboot实现酒店客房管理系统项目【项目源码+论文说明】计算机毕业设计

基于springboot实现酒店客房管理平台系统演示 摘 要 随着人们的物质水平的提高,旅游业和酒店业发展的速度越来越快。近年来,市面上酒店的数量和规模都在不断增加,如何提高酒店的管理效率和服务质量成为了一个重要的问题。伴随着信息技术的发…

2核4G服务器够用吗?性能测评自己看

腾讯云轻量2核4G5M带宽服务器支持多少人在线访问?5M带宽下载速度峰值可达640KB/秒,阿腾云以搭建网站为例,假设优化后平均大小为60KB,则5M带宽可支撑10个用户同时在1秒内打开网站,并发数为10,经阿腾云测试&a…

100道面试必会算法-03-快速排序

100道面试必会算法-03-快速排序 快速排序 给你一个整数数组 nums,请你将该数组升序排列。 示例 1: 输入:nums [5,2,3,1] 输出:[1,2,3,5]示例 2: 输入:nums [5,1,1,2,0,0] 输出:[0,0,1,1,…

3级考题(3)(c++)

#204. 鸡兔同笼[2] 题目描述 一个笼子里面关了鸡和兔子(鸡有 2 只脚,兔子有 4 只脚,没有例外)。 已经知道了笼子里面脚的总数 a,问笼子里面至少有多少只动物,至多有多少只动物。 输入格式 一行&#x…

linux 命令之tar命令

简介 tar(tape archive): 用于打包和解压文件。 常用参数列表 参数功能-c(create)打包-x(extract)解压-f<文件名>指定归档文件名-v显示操作详细过程-z通过gzip压缩归档文件-j通过bzip2压缩归档文件-J通过xz压缩归档文件-C <目录>切换到指定目录后在执行操作–ex…

详细了解CSS

1.1 样式定义方式 行内样式表&#xff08;inline style sheet&#xff09; 直接定义在标签的style属性中。 作用范围&#xff1a;仅对当前标签产生影响。 例如&#xff1a; <img src"/images/mountain.jpg" alt"" style"width: 300px; height:…

Day1-力扣刷题学习打卡

1、两数之和 给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中找出 和为目标值 target 的那 两个 整数&#xff0c;并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是&#xff0c;数组中同一个元素在答案里不能重复出现。 你可以…