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#的各种特性,等着你去发掘。

效果:

在这里插入图片描述

在这里插入图片描述

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

就先讲这么多吧。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

3.3 RK3399项目开发实录-板载Ubuntu系统的使用(wulianjishu666)

嵌入式物联网常用90款传感器开发例程。链接:https://pan.baidu.com/s/1oisHMZXDzKqa4EspY83V-A?pwdo5f4 1. 介绍 Ubuntu 使用手册是针对 Firefly 官方发布的 Ubuntu 系统固件特性所编写,适用于 Ubuntu Desktop 与 Minimal 系统,部分与 UI 显…

适用于智能语音小家电的语音ic类型有哪些?

适用于智能语音小家电的语音ic类型有哪些? 1. 语音播放芯片:这种芯片主要用于实现语音提示和报警功能。例如,当按下某个按钮时,它可以发出语音提醒,或者在出现故障时发出报警声音。这种芯片的应用非常广泛&#xff0…

Halcon 条码读取

一维码读取 create_bar_code_model 创建条码读取器的模板 set_bar_code_param 配置解码方式 find_bar_code 读取条码 clear_bar_code_model 清除条码匹配模板 * 1.创建条码读取器的模板 * 参数一:通用参数的名称,针对条形码模型进行调整。默认值为空 * 参…

Java实用经验总结

前言:以下为笔者在工作中总结的好用且简洁代码的经验 文章目录 1、多判断代替if2、通配符替换内容(常见于邮件、短信等模版)3、spring获取bean对象4、动态获取nacos配置5、优雅校验请求入参 1、多判断代替if 针对多个是和否的问题&#xff0…

如何安装和卸载SFP光模块

SFP光模块的安装和拆卸是简单直接的过程。然而,任何非标准操作都可能导致隐式损坏甚至永久故障。您需要参考及时更新的光模块的数据表或用户手册,以熟悉其特性和锁定机制。 准备工作 常见事项 拆卸和插入SFP光模块可能会缩短其使用寿命,因…

搜索二维矩阵

题目链接 搜索二维矩阵 题目描述 注意点 每行中的整数从左到右按非严格递增顺序排列每行的第一个整数大于前一行的最后一个整数1 < matrix.length, matrix[0].length < 100 解答思路 先二分查找找到target所处的行&#xff0c;找到行后再二分查找找到target所处的列…

Java毕业设计-基于springboot开发的数码论坛系统设计与实现-毕业论文+答辩PPT(附源代码+演示视频)

文章目录 前言一、毕设成果演示&#xff08;源代码在文末&#xff09;二、毕设摘要展示1、开发说明2、需求分析3、系统功能结构 三、系统实现展示1、系统功能模块2、管理员功能模块3、用户后台管理模块 四、毕设内容和源代码获取总结 **Java毕业设计-基于springboot开发的数码论…

计算平均分 javascript

养成好习惯&#xff1a;先写注释再写代码 基础版&#xff1a;直接写逻辑&#xff08;平均分总和/个数&#xff09; // 求平均分 var scores [60, 55, 80, 33, 75, 100]; // 求和,相除 var sum 0; var avg;for (var i 0; i < 6; i) {sum scores[i]; }avg sum / 6; con…

Android Studio 编译报错 ( Could not find com.android.tools.build:gradle:4.2.1.)

检查下根目录下的 build.gradle 配置 , 是否只配置了 jcenter 仓库 &#xff0c;加上 google()mavenCentral() 重新编译试一下

Mybatis 的知识学习

准备&#xff1a; maven&#xff1a;https://mvnrepository.com/ mybatis: MyBatis中文网 1.mybatis的定义 MyBatis 是一款优秀的持久层框架&#xff0c;它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBati…

CTF入门学习籽料(非常详细)零基础入门到精通,收藏这一篇就够了!(文末自取)

前言&#xff1a; 从2019年10月开始接触CTF&#xff0c;学习了sql注入、文件包含等web知识点&#xff0c;但都是只知道知识点却实用不上&#xff0c;后来在刷CTF题才发现知识点的使用方法&#xff0c;知道在哪里使用&#xff0c;哪里容易出漏洞&#xff0c;可是在挖src漏洞中还…

TRM推出1年后,都给客户带来了哪些改变?

就在一年前&#xff0c;用友大易推出了ATSTRM全新人才配置平台&#xff0c;成为国内首家将TRM&#xff08;人才关系管理&#xff09;理念融入ATS&#xff08;招聘管理系统&#xff09;的企业服务厂商。 谈及TRM这一理念的出炉&#xff0c;用友网络副总裁、用友大易联合创始人石…

【云呐】办公资产盘点报告总结怎么写

办公资产盘点报告总结应该清晰、简洁地总结盘点过程、结果和相关问题。以下是一种写作办公资产盘点报告总结的常见结构和要点&#xff1a;  盘点目的&#xff1a;简要说明盘点的目的和背景&#xff0c;例如为了确保资产的准确性、管理资产风险或制定更好的资产管理策略等。 …

面向对象的三大特性-----封装、继承、多态(Java篇)

&#x1f341; 个人主页&#xff1a;爱编程的Tom&#x1f4ab; 本篇博文收录专栏&#xff1a;Java专栏&#x1f449; 目前其它专栏&#xff1a;c系列小游戏 c语言系列--万物的开始_ &#x1f389; 欢迎 &#x1f44d;点赞✍评论⭐收藏&#x1f496;三连支持一…

TCP协议——三次握手和四次挥手

文章目录 1. 示意图2. 三次握手3. 四次挥手4. 三次和四次问题4.1 为什么三次握手4.2 为什么四次挥手 5. 状态变化实验5.1 三次握手实验5.2 四次挥手实验 1. 示意图 Tips&#xff1a; 不管是握手还是挥手&#xff0c;发送的都是完整的TCP报头&#xff0c;这不过这些标记位被设置…

各类主流电商API商品采集接口的权限控制和功能权限控制

主流电商平台的API接口类型 参数说明 通用参数说明 url说明 /平台/API类型/ 平台&#xff1a;淘宝&#xff0c;京东等&#xff0c; API类型:[item_search,item_get,item_search_shop等]version:API版本key:调用key,测试key:test_api_keysecret:调用secret,测试secret:(不用填写…

正信晟锦:多年不联系的好友借钱怎么办

多年不见的老友突然出现&#xff0c;带着迫切的求助信息——借钱。面对这样的请求&#xff0c;我们该如何应对? 当一个多年未联络的朋友突然出现请求借款时&#xff0c;这确实是一个棘手的问题。一方面&#xff0c;我们可能对旧日友情存有怀念与不舍;另一方面&#xff0c;时间…

[项目前置]如何用webbench进行压力测试

测试软件 采用webbench进行服务器性能测试。 Webbench是知名的网站压力测试工具&#xff0c;它是由Lionbridge公司开发。 webbench的标准测试可以向我们展示服务器的两项内容&#xff1a; 每秒钟相应请求数 和 每秒钟传输数据量 webbench测试原理是&#xff0c;创建指定数…

Apache DolphinScheduler 社区开启讲师招募,赶快加入吧!

随着Apache DolphinScheduler在全球范围内的快速发展&#xff0c;我们的用户群体和社区活动也在不断扩大。 为了进一步丰富我们的社区内容&#xff0c;分享更多有价值的知识和经验&#xff0c;我们诚挚地邀请您加入我们&#xff0c;成为Apache DolphinScheduler社区的分享嘉宾。…

美团2023年财报:全年营收2767亿元,即时配送订单219亿笔

3月22日&#xff0c;美团(股票代码:3690.HK)发布2023年第四季度及全年业绩。公司各项业务继续取得稳健增长&#xff0c;全年营收2767亿元(人民币&#xff0c;下同)&#xff0c;同比增长26%&#xff0c;经营利润134亿元。 本年度&#xff0c;美团继续围绕“零售科技”战略&…