当前位置: 首页 > news >正文

C#项目使用obfuscar混淆实践

obfuscar 可以混淆C#代码。

在项目中我们通过NuGet安装obfuscar包。

安装obfuscar

VS里点击解决方案,然后搜索,点击安装。

设置混淆xml

然后需要编译一个混淆设置文件obfuscar.xml,放在项目目录中。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

<?xmlversion='1.0'?>

<Obfuscator>

<!-- 输入的工作路径,采用如约定的 Windows 下的路径表示法,如以下表示当前工作路径 -->

<!-- 推荐使用当前工作路径,因为 DLL 的混淆过程,需要找到 DLL 的所有依赖。刚好当前工作路径下,基本都能满足条件 -->

<Varname="InPath"value=".\bin\Release"/>

<!-- 混淆之后的输出路径,如下面代码,设置为当前工作路径下的 Obfuscar 文件夹 -->

<!-- 混淆完成之后的新 DLL 将会存放在此文件夹里 -->

<Varname="OutPath"value=".\bin\Obfuscar"/>

<!-- 以下的都是细节的配置,配置如何进行混淆 -->

<!-- 使用 KeepPublicApi 配置是否保持公开的 API 不进行混淆签名,如公开的类型公开的方法等等,就不进行混淆签名了 -->

<!-- 语法的写法就是 name 表示某个开关,而 value 表示值 -->

<!-- 对于大部分的库来说,设置公开的 API 不进行混淆是符合预期的 -->

<Varname="KeepPublicApi"value="true"/>

<!-- 设置 HidePrivateApi 为 true 表示,对于私有的 API 进行隐藏,隐藏也就是混淆的意思 -->

<!-- 可以通过后续的配置,设置混淆的方式,例如使用 ABC 字符替换,或者使用不可见的 Unicode 代替 -->

<Varname="HidePrivateApi"value="true"/>

<!-- 设置 HideStrings 为 true 可以设置是否将使用的字符串进行二次编码 -->

<!-- 由于进行二次编码,将会稍微伤一点点性能,二次编码需要在运行的时候,调用 Encoding 进行转换为字符串 -->

<Varname="HideStrings"value="true"/>

<!-- 设置 UseUnicodeNames 为 true 表示使用不可见的 Unicode 字符代替原有的命名,通过此配置,可以让反编译看到的类和命名空间和成员等内容都是不可见的字符 -->

<!-- 设置 UseUnicodeNames 为 true 可能在捕获异常的时候出现问题,不建议开 -->

<Varname="UseUnicodeNames"value="false"/>

<!-- 设置 UseKoreanNames 为 true 使用韩文字 -->

<Varname="UseKoreanNames"value="true"/>

<!-- 是否复用命名,设置为 true 的时候,将会复用命名,如在不同的类型里面,对字段进行混淆,那么不同的类型的字段可以是重名的 -->

<!-- 设置为 false 的时候,全局将不会有重复的命名 -->

<Varname="ReuseNames"value="true"/>

<!-- 配置是否需要重命名字段,默认配置了 HidePrivateApi 为 true 将都会打开重命名字段,因此这个配置的存在只是用来配置为 false 表示不要重命名字段 -->

<Varname="RenameFields"value="true"/>

<!-- 是否需要重新生成调试信息,生成 PDB 符号文件 -->

<Varname="RegenerateDebugInfo"value="false"/>

<Varname="OptimizeMethods"value="true"/>

<Varname="SuppressIldasm"value="false"/>

<!-- 需要进行混淆的程序集,可以传入很多个,如传入一排排 -->

<!-- <Module file="$(InPath)\Lib1.dll" /> -->

<!-- <Module file="$(InPath)\Lib2.dll" /> -->

<Modulefile="$(InPath)\MyApp.exe">

<!--SkipType跳过指定的类 Program是Main所在的类名-->

<!--<SkipType name="Program" />-->

<!--SkipMethod 跳过指定的方法-->

<!--<SkipMethod type="Program" name="Main"/>-->

</Module>

<!-- 程序集的引用加载路径,对于 dotnet 6 应用,特别是 WPF 或 WinForms 项目,是需要特别指定引用加载路径的 -->

<!-- 这里有一个小的需要敲黑板的知识点,应该让 Microsoft.WindowsDesktop.App 放在 Microsoft.NETCore.App 之前 -->

<!-- 对于部分项目,如果没有找到如下顺序,将会在混淆过程中,将某些程序集解析为旧版本,从而失败 -->

<!--<AssemblySearchPath path="C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App\6.0.1\" />

<AssemblySearchPath path="C:\Program Files\dotnet\shared\Microsoft.NETCore.App\6.0.1\" />-->

</Obfuscator>

Module里配置要混淆的exe或者Dll。

编译自动混淆

然后我们写一个批处理,在编译完成时候调用。 这里注意版本号和路径

1

2

3

4

5

echo 批处理开始混淆和拷贝发布程序

cd E:\Github\MyAppConsole\MyApp\MyApp

..\packages\Obfuscar.2.2.49\tools\Obfuscar.Console.exe .\obfuscar.xml

echo 混淆结束

我们在项目生成事件里调用这个bat文件。

这样我们每次编译release就可以自动混淆了。

注意事项

因为混淆会修改函数名字,所以要注意一些反射或者按照字符串反射函数或者变量的地方,这些地方要排除掉,还有使用Json读取等反射,需要标记[Serializable]

1

2

3

4

5

6

[Serializable]

publicclassShopInfo

{

publicstringid;

publicstringver_url;

}

这样就混淆成功了,我们可以使用dnSpy软件来看我们混淆后的代码。

基本上这样就没什么可阅读性了。

http://www.jsqmd.com/news/876056/

相关文章:

  • RISC-V与x86平台并行FFT性能对比研究
  • 避开这些坑,你的孟德尔随机化分析结果才可靠:以口腔癌研究为例的实操避雷指南
  • 基于高斯过程与Vecchia近似的空间数据预处理:让机器学习模型学会处理空间依赖性
  • 英飞凌XC866评估板Flash批量编程解决方案
  • C#编程实现CMD定时关机的示例代码
  • 2026镍基合金625加工厂家新推荐,哪家技术强? - myqiye
  • 基于神经网络的DDoS攻击检测:从特征工程到实战部署
  • 别再只改源文件了!Linux内核编译时‘multiple definition’错误的隐藏Boss:备份文件覆盖机制
  • 统信UOS 1070系统克隆实战:用自带工具给电脑做个‘替身’,换机迁移不求人
  • BG3ModManager加载失败的三大底层校验机制解析
  • 2026年深圳爱马仕包包回收十强出炉,收的顶拿下榜首 - 奢侈品回收测评
  • 篮式过滤器厂哪家好?雍达石化告诉你 - myqiye
  • Poppler-Windows终极指南:5分钟部署专业PDF处理工具
  • 本地化RAG系统构建:从原理到实践,赋能大型系统开发与运维
  • 猫抓浏览器扩展:3步轻松捕获网页视频资源,让在线内容触手可及
  • 别再为DBSCAN调参发愁了!用Python的sklearn轻松上手OPTICS聚类(附实战代码)
  • AI - GEO搜索推广案例大揭秘,了解挑战与效果数据情况 - mypinpai
  • 终极网盘直链解析工具:如何快速获取蓝奏云、123云盘高速下载链接
  • JMeter梯度压测:精准定位系统可扩展性边界
  • CVE-2016-2183漏洞深度解析:Sweet32攻击与3DES禁用实战
  • PearSAN框架:基于皮尔逊相关的代理模型加速纳米光子逆向设计
  • 基于图神经网络的Java空安全注解自动推断技术解析
  • BooruDatasetTagManager:AI训练数据标注的终极指南,让标注效率提升10倍!
  • 2026年4月市面上质量好的链板制造商实力,网带输送机/不锈钢输送机/垂直提升机/喷淋清洗机/非标链条,链板生产商推荐 - 品牌推荐师
  • QMcDump终极指南:三步解锁QQ音乐加密文件,实现音乐自由
  • 深度解析济南天花机空调加氟,聊聊哪家服务商比较靠谱 - mypinpai
  • Keras图像分类混淆矩阵实战:从原理到调优的完整指南
  • Linux服务器边界防护实战:从iptables到eBPF的可信防火墙构建
  • 食品安全总监考试报名方式有哪些,考试难度如何,难度变化大吗 - myqiye
  • 盘点2026物流企业旺季临时用工、转移工伤风险及劳动密集型企业用工外包公司推荐 - mypinpai