排行榜 统计
  • 文章总数:210 篇
  • 评论总数:1 条
  • 分类总数:7 个
  • 最后更新:11月13日

.NET程序保护指引

本文阅读 7 分钟
首页 软件安全 正文

.NET 程序的安全性一直备受开发者重视,Virbox Protector 对 .NET 程序的保护,包含了整体的加密、运行时反调试、名称混淆、函数级别的保护(包括代码加密,代码混淆,以及高强度的代码虚拟化等技术)。

对程序做好保护,并不是一件简单的事,需要结合具体的场景和安全需求,尤其是高强度的保护选项,往往伴随着使用限制或者性能问题,没有哪种加密策略可以保证安全性高又不影响性能,本文档将对保护的场景、流程(包括集成构建)以及加密选项进行指引。

支持范围#

.NET 程序最早只在由微软实现的 .NET Framework 环境下环境,随着 Mono 运行时的出现(尤其是 Unity 引擎的推广),以及 .NET Core 的推出和 .NET 5 及以上的推出,运行环境变得更复杂。

由于不同运行时环境对 .NET 标准和底层库的支持不同,而代码保护技术往往依赖一些底层技术,在不同环境下会存在兼容性差异。

运行环境#

运行环境是否支持备注
.NET Framework 2.x ~ 4.x完整支持
.NET Core 2部分功能支持已废弃版本
.NET Core 3非Windows系统部分功能不支持
.NET 5 至 .NET 7非Windows系统部分功能不支持
Mono Runtime如果是Unity引擎,可以使用 Unity 加密方案

功能与兼容性#

保护选项兼容性备注
压缩仅支持 Windows 系统;不支持In Memory Module,比如使用Assembly.Load 加载的 dll
JIT加密仅支持 Windows
字符串加密完整支持
附加数据加密仅支持 Windows部分打包工具会生成附加数据
调试器检测完整支持
名称混淆完整支持
[E] 代码加密完整支持
[M] 代码混淆完整支持
[V] 代码虚拟化完整支持

保护指引#

普通的保护方式#

如果对安全性没有较高的要求,不需要函数级别的保护,只需要调整基础保护选项即可实现防反编译和防普通的内存 Dump。

保护选项保护建议备注
压缩不勾选
JIT加密Windows系统下勾选
字符串加密有敏感字符串则勾选
附加数据加密有附加数据则勾选部分打包工具会生成附加数据
调试器检测每个进程只需要保护一个模块(如主程序exe);如果模块做为SDK发布供第三方调用,则不勾选
名称混淆对主程序exe,选择“保留自定义名称”;对dll,选择“只混淆私有成员”
[E] 代码加密Windows 平台使用默认选项(仅加密入口函数);非Windows平台由于不支持JIT加密,建议对必要的函数勾选
[M] 代码混淆无需选择
[V] 代码虚拟化无需选择

高安全性保护#

如果对安全性有较高要求,可以在 名称混淆上加强,并对关键的函数进行代码虚拟化

自定义名称混淆可以对命名空间、类、方法等名称进行混淆,由于模块间一般存在互相调用,对public属性的名称混淆会导致调用出错找不到方法,需要由开发者自定义配置。

对于模块间调用问题,也可以通过程序集合并功能将多个模块合并为一个再进行保护。Virbox Protector 提供了免费工具 程序集合并功能,可以在菜单栏 工具-.NET程序集合并中找到。virboxprotector_con 支持命令行选项 -ilmerge 进行合并,实现自动化。

举例:

virboxprotector_con -ilmerge test.exe test.dll -o merged/test.exe

对关键的函数逻辑(如授权验证,关键的加密解密代码逻辑),推荐使用代码虚拟化进行保护,代码虚拟化对运行性能有一定影响,不适合大面积使用。如需诊断性能问题,可以在函数选项-添加函数-性能分析中运行程序查看函数的调用次数。

自动化集成#

命令行工具#

Virbox Protector 的命令行工具 virboxprotector_con 的默认路径位于:

Windows:C:\Program Files\senseshield\Virbox Protector 3\binLinux:/usr/share/virboxprotector/binmacOS:/Applications/Virbox Protector 3.app/Contents/MacOS/bin

使用配置文件保护#

使用工具界面进行保护,在被保护的程序旁边会生成 .ssp 文件,然后调用virboxprotector_con

virboxprotector_con<input_file>-o<output_file>

virboxprotector_con 会自动查找 <input_file>.ssp 作为配置文件开始保护。

无配置文件保护#

如果没有配置文件,virboxprotector_con会使用默认参数保护,可以传入具体参数覆盖默认选项(见命令行选项)。

也可以使用SDK 标签在代码中标注。

命令行选项#

保护选项

选项命令行默认选项
压缩--pack=0
JIT 加密--jit-enc=1
字符串加密--str-enc=1
附加数据加密--overlay-enc=1
调试器检测--detect-dbg=0
名称混淆--rename=exe 混淆所有名称;dll 只混淆私有名称1
名称混淆保留规则--keep-rules=""

函数选项

选项命令行
忽略不支持的函数--ignore-unsupported=<value>(默认关闭:0)
代码加密-e
代码混淆-m
代码虚拟化-v

支持指定函数名称或规则保护,使用 ;号隔开, 支持通配符 *,举例:

-m "function1;function2" -v "function3;function4" -e "test*" --ignore-unsupported=1

命令行保护场景举例#

对主程序保护(混淆所有名称,开启反调试):

virboxprotector_con test.exe --pack=0--jit-enc=1--str-enc=1--rename=2--keep-rules=""-detect-dbg=1-o protected/test.exe

对dll保护(混淆私有名称):

virboxprotector_con test.dll --pack=0--jit-enc=1--str-enc=1--rename=1

对dll保护(保留自定义的名称):

virboxprotector_con test.dll --pack=0--jit-enc=1--str-enc=1--rename=2--keep-rules="MyNamespace.MyClass1.*;MyNamespace.MyClass2.*"

对非Windows平台dll保护(不使用JIT加密,加密所有方法,开启反调试,忽略不支持的函数):

virboxprotector_con test.dll --pack=0--jit-enc=0--detect-dbg=1--str-enc=1--rename=1-e"*"--ignore-unsupported=1
本文来自投稿,不代表本站立场,如若转载,请注明出处:https://firsource.cn/soft/182.html
Stable Diffusion三种最常用的绘画模型类型
« 上一篇 01-19
Native 程序保护指引
下一篇 » 01-19