Visual Studio混淆测试时未混淆exe经Reko反编译呈混淆状态原因?
未手动混淆的exe反编译呈现混淆状态的常见原因
- 非托管C项目编译无调试符号
若你编译的是C等非托管项目,Release模式下默认不会嵌入调试符号,反编译器无法从PE文件中提取到方法、变量的原始命名,只能显示内存地址或自动生成的无意义命名,视觉效果和混淆完全一致。 - .NET项目启用了裁剪/原生AOT编译
若你使用的是.NET Core 3.0+/.NET 5+版本,发布时如果开启了*代码裁剪(Trimming)或原生AOT(Native AOT)*编译选项,构建过程会裁剪未使用的IL代码、抹去非公开的符号名称,甚至直接编译为原生机器码而非托管IL,反编译后无法还原原始命名。 - 触发了Visual Studio内置的默认混淆规则
Visual Studio自带Dotfuscator社区版混淆工具,部分项目模板默认会在Release构建阶段执行轻量混淆操作,重命名内部方法、变量为无意义字符,无需手动配置就会生效。 - 单文件发布产物包含已混淆的第三方依赖
若你发布时选择了单文件打包选项,所有依赖的第三方库都会被嵌入最终exe中,如果引用的第三方组件本身已经过混淆,反编译时也会看到大量无意义的命名。 - 编译时未生成PDB符号文件
若你关闭了PDB文件生成选项,反编译器没有符号文件作为参考,无法映射出原始的方法、变量名称,也会出现类似混淆的显示效果。

内容的提问来源于stack exchange,提问作者nmnir
相关产品推荐
相关产品推荐

