SmartAssembly 7 documentation: https://documentation.red-gate.com/sa
SmartAssembly7.2版本下载链接: https://www.red-gate.com/products/dotnet-development/smartassembly/
混淆设置
以下是主要的几个混淆设置:
混淆名称 Obfuscating code with name mangling
设置后会修改类名、方法名、字段名
注:不会混淆DLL中的公开访问成员,因为会使得DLL不可使用
混淆流程 Obfuscating your application's control flow
开启后,会更改方法内的代码逻辑,使反编译后阅读更加困难
动态代理方法调用 Creating a proxy for external calls
会将方法的调用转到动态代理,隐藏程序集外部调用。反编译之后,方法调用实现都不可见,理解代码更难了
压缩加密资源 Compressing and encrypting managed resources
压缩代码中使用的资源使代码更有效率,加密代码中使用的资源使代码更难理解。
注:当首先需要每个资源时,资源会在运行时自动解压和解密。
一般来说,有混淆名称、混淆流程就已经够了。动态代理方法调用、压缩加密资源有轻微的性能影响,
混淆后的反编译结果
反编译可以用Dnspy或者.Net Reflector
.NET Reflector 下载
.NET Reflector 官方文档
异常等问题
1. 如果使用了Costura.Fody,SmartAssembly是不支持exe混淆的。因为Costura.Fody将程序打包到一个exe,SmartAssembly对相关的依赖项无法找到~
比如下方的JiraUserQuestion.Bussiness.Dll
2.如程序中有对类名/属性名进行相应的逻辑处理,或者有相关的反射机制,混淆后程序运行会异常。
混淆 - dotfuscator
混淆VS2008之前也有自带一个dotfuscator工具,vs2019等版本是没有的,可以使用官方链接下载
https://www.preemptive.com/products/dotfuscator/overview/
安装及使用参考:
- Dotfuscator 使用图解教程
- VS自带代码混淆器DotFuscator的使用步骤
- 使用 Dotfuscator 对代码进行混淆
参考链接:
- .NET 中各种混淆(Obfuscation)的含义、原理、实际效果和不同级别的差异(使用 SmartAssembly)
- Smartassembly 使用指南
- SmartAssembly批处理用法