本章介绍外壳保护功能、使用外壳保护的前提条件、保护参数的设置、如何外壳保护Windows 程序、如何外壳保护.NET 程序集以及如何外壳保护安卓平台应用程序。本章包含如下内容:
·外壳保护功能
·基本保护流程
·基本保护设置
·如何使用外壳加密工具
·关于保护.NET 程序集
·关于保护安卓平台应用程序
·如何加密数据文件
·播放加密保护的在线flash 文件
·使用代码植入功能保护应用程序
外壳保护功能
超级狗的外壳加密工具用于实施快速、简单的软件保护,无需像使用Licensing API 函数那样对源代码进行改动,就可以自动给可执行应用程序加一个保护层。
外壳保护后,被保护程序在开始运行和运行当中会自动地访问超级狗是否存在。如果超级狗不存在,应用程序将不能运行。一旦被保护的软件无法访问超级狗,被保护的软件将提示错误信息。
外壳加密工具可以保护Win32、Windows x64、以及.NET 可执行文件(EXE) 与动态库(DLL)。外壳加密工具可以防止逆向工程和其他调试措施。
注意:
本章将使用“ 程序” 一词来泛指可用外壳加密工具保护的各种文件类型,无论这些文件是可执行文件(executables)、二进制文件(binaries)、程序集(assemblies)、还是库(libraries)。
超级狗的外壳加密工具有图形用户界面和命令行两种形式。使用图形用户界面的外壳加密工具,您可以实现以下操作:
·保护Win32、Windows x64 及.NET 可执行文件与动态库
·通过设置方法级别的保护增强对.NET 程序集的保护
·自定义被保护软件向最终用户显示的错误信息
使用支持命令行的外壳加密工具,您可以实现以下操作:
·保护Win32、Windows x64 及.NET 可执行文件与动态库
·轻松应用在图形用户界面中定义的保护参数。这可以简化在开发过程中对程序重复应用外壳加密的过程。
基本保护流程
本节介绍使用外壳加密工具保护程序的流程,以下说明使用外壳加密工具保护程序的步骤。 如需更多的信息,请参阅外壳保护的帮助文档。
1. 启动图形用户界面的外壳加密工具。
2. 向项目添加要保护的可执行文件、动态库。
3. 为被保护程序设置保护参数。
4. 保护程序。
5. 将被保护软件连同超级狗一起分发给最终用户。
注意: 虽然外壳保护不影响被保护的文件, 但是我们强烈建议为被保护的程序指定单独的输出文件夹,以便区分未保护的源文件和已被保护的输出文件。
外壳保护不改变软件源文件或被保护程序实际的工作方式。实施外壳保护后唯一的改变是:最终用户访问被保护程序的权限取决于所需特定的超级狗是否存在。 如果该超级狗存在,那么被保护的软件就可以运行。
下图说明了外壳保护的逻辑关系。 请注意,原始文件可以是:Win32、Windows x64、.NET 可执行文件或动态库。
注意: 为了确保软件的最高安全级别,对Win32 程序的外壳保护将从正在保护的程序中删除调试数据。
基本保护设置
基本保护设置是使用外壳加密工具时必须指定的信息。
·输入文件:要保护的程序文件。输入文件路径的默认位置是您向项目添加程序的位置。
·输出文件:被保护的程序文件。输出文件路径的默认位置是:...\Documents and Settings\[user_name]\My Documents\SafeNet\SuperDog [version]\Tools\ProteCTEd
·特征ID :当保护Windows 程序或.NET 程序集时,给程序指定的特征ID。该特征ID 的默认值为0。每个超级狗都包含一个默认特征( 特征ID 为0)。如果您指定的特征ID 不为0,请使用许可设计工具进行许可设计,确保许可定义包含该特征,并使用超级狗编程工具对超级狗编程。
特征
“ 特征” 是指程序中可被识别的功能组件,可以是一个可执行文件、软件模块、.NET 方法或者打印、保存、绘制等特定功能。特征被分配一个唯一的标识号码,称作特征ID。本节描述特征ID 适用于所有被保护的可执行文件和动态库。有关特征的更多信息,请参阅第6章超级狗许可的实施和远程升级的确定功能组件( 特征)。
使用特征保护Windows 程序或.NET 程序集
当外壳保护Windows 程序(Win32、Windows x64 可执行程序和DLL) 或.NET 程序集(.NET 可执行文件和DLL) 时,您可以给整个程序指定一个特征ID。如果您要为各组件指定特征,那么必须使用超级狗Licensing API。有关信息,请参阅第3章 超级狗Licensing API 保护中的需求规划和工作流程。
如何使用外壳加密工具
本节介绍如何使用外壳加密工具。
必备条件
使用外壳加密工具之前,Windows 系统必须有以下组件:
·待保护程序:Win32、Windows x64 或.NET 可执行文件或动态库。
·如果要保护.NET 程序集,需要.NET Framework 2.0 或更高版本。
·超级狗试用件或开发狗已被连接至计算机。
运行图形界面外壳加密工具
在开始菜单中,选择程序 > 超级狗开发套件V( 版本) > 超级狗工具包,在超级狗工具包中选择:外壳加密工具。
启动外壳加密工具后,开发商向导会自动启动。 有关开发商向导的更多信息,请参阅第29 页的导入开发商代码。
保护参数
将要保护的程序添加至保护项目之后,您完全可以使用默认的保护参数执行外壳保护,您也可以使用自定义的保护参数,这些保护参数将影响被保护程序的行为。
“ 保护设置” 窗口中包括基本保护设置和保护选项卡。基本保护设置包括输入文件、输出文件、和特征ID。保护选项卡用于查看以及修改保护参数。“ 保护设置” 窗口有以下选项卡:
·“ 常规” 选项卡( 仅对于保护.NET 程序集)
·“ 保护设置” 选项卡
·“ 高级” 选项卡
·“ 数据文件保护” 选项卡
所有保护参数在外壳保护帮助文档中均有详细介绍。
运行命令行外壳加密工具
从Windows 命令行启动外壳加密工具,这在运行不需要图形界面的自动化进程时非常有用。
注意: 外壳加密保护的命令行版本主要用于自动化进程。运行命令行工具之前,使用envelope.exe 创建并保存保护项目及其配置文件。
要访问外壳保护的命令行版本,请转至...\Program Files\SafeNet\SuperDog\[version]\Tools\envelope.com
在命令行中键入envelope.com 即可启动命令行外壳加密工具。
命令行选项
以下参数用于外壳加密工具的命令行版本:
命令 | 说明 |
-h /--help | 显示命令行参数列表。 |
-p /--protect | 命令行工具使用所指定的项目作为封装进程的输入数 据,该项目包括的所有文件都将被保护。 |
命令行工具将启动外壳加密工具( 图形用户界面) 并 运行所指定的项目。 | |
-n /--no-warnings | 命令行不显示警告信息。 |
-s /--searchPath | 设置搜索.NET 程序集的路径。 |
关于保护.NET 程序集
在保护.NET 程序集时,您可以对该程序集指定一个特征。要对单个方法设置保护参数,请参阅本章第48 页的方法级别的保护。要对单个方法应用代码与符号混淆技术,请参阅本章第50 页的代码与符号混淆技术。
.NET 考虑事项
保护.NET 程序集时,请考虑以下问题:
·您必须在开发环境下保护.NET 程序集。外壳加密工具需要的库并不是.NET Framework 的组成部分,却是包含在开发环境中的。
·外壳加密工具要求访问所有程序集及其依赖项。
·外壳保护会破坏签名程序集的强名称签名,您可以选择重新对外壳保护的程序集进行强名称签名。
·在保护.NET Framework 1.x 程序集时,由于外壳保护的输出文件基于 .NET Framework 2.0,从而要求最终用户计算机上安装.NETFramework 2.0。
·被保护的.NET 程序集在运行时需要使用两个超级狗DLL 文件,请参阅第85 页的超级狗DLL。
·在使用方法级别加壳保护.NET 程序的时,如果选择一个许可类型为执行次数的特征ID,程序每次启动时将消耗一次执行次数。另外,多个被保护的方法第一次调用时,每个方法将分别消耗一次执行次数。在程序未关闭前,被加壳保护的方法再次被调用时,不再消耗执行次数。
·要想使用数据文件保护功能,请选择保护类型为:方法级别与Windows 加密方式或仅Windows 加密方式。
方法级别的保护
取决于被保护的.NET 程序集是可执行文件还是动态库,外壳加密工具自动设置最佳的保护类型。保护类型被自动设置后,程序中所有可保护的方法均被选中,相关保护参数均被设置。
注意:
建议您不要更改被外壳加密工具自动设置的保护类型。
选择.NET 方法
“ 保护设置” 窗口中的“ 可用于保护的方法” 列表中列出要保护的.NET 程序集,以树形目录结构显示类构造函数和方法,以代表方法类型的图标、类或方法的名称表示各个条目。当光标驻留于方法条目时,该方法签名将显示。
下表列出代表各方法类型的图标:
图标 | 方法类型 | 说明 |
类构造函数 | 类构造函数图标代表该类的所有.ctor 方法。 类中包括的实例、静态和入口点方法都嵌套在类构造函数下。 注: ·基础.ctor 方法未作为单独的方法显示在列表中。 ·如果某个类不包括.ctor 方法,则将显示类构造函数名称,但无法选择该项。 这不会影响嵌套方法,其仍受到单独的保护。 ·为类构造函数定义的保护或设置不影响嵌套方法 | |
实例方法 | 不包括static 修饰符的方法 | |
入口点 | .NET 可执行文件的入口点 | |
静态方法 | 包括static 修饰符的方法 |
注意:
·勾选或清除更高级别条目的复选框,不会影响嵌套条目。 例如, 如果清除类构造函数的复选框,那么其下嵌套的方法仍然保持选 中。
·当方法名称以灰色显示时,无法被选中用于保护。
·如果保护类型为“ 仅Windows加密方式”,则无法保护该.NET 程序 集中单个的方法。
·如果列表中所有条目的复选框都已清除,则无法保护该程序集。
代码与符号混淆技术
使用混淆技术可以将有意义的字符串转变为随机字符串或数字。使用外壳加密工具时,您可以将应用混淆技术作为一种阻止逆向工程的安全措施。
因为实施代码混淆可能降低程序的执行速度,所以外壳加密工具的默认设置为不使用混淆技术。
如果使用混淆技术,默认的情况是将打乱被保护.NET 程序集中的所有的符号名称,包括程序集、类、方法的名称。此外,您可以选择打乱指定方法的全部代码。当选中一个方法后,不管有没有勾选其左侧的复选框,您都可以对它使用混淆技术。
关于保护安卓平台应用程序
使用安卓外壳加密工具可以对安卓平台(ARM 架构) 开发的 Java 应用程序进行外壳加密保护。该工具对apk 文件进行保护并生成新的apk文件,新的apk 文件包含加密过的代码以及一些其他的外壳加入的文件。
测试版本
已测试过安卓系统版本:
·Android 4.1.1
·Android 4.2.2
·Android 4.3
·Android 4.4.2
使用需求
请在Windows XP/7 上使用此工具,使用本软件包之前需要安装:
·SuperDog 2.2
·Android SDK
·JDK 1.6 或JDK 1.7
16操作步骤
1. 打开超级狗外壳加密工具,在菜单栏中选择:工具> 设置> 安卓设置,指定安装好的JDK 所在目录和Android aapt 工具所在目录,点击确定。
2. 在程序列表窗格中,双击一个apk 程序文件,保护设置窗口随即显示。
3. 在保护设置窗口检查默认的保护设置或修改设置。
您可以在安卓设置中设置apk 文件的密钥文件、别名、口令等信息,用于对外壳加密保护后的apk 文件签名。您也可以自己对外壳加密保护后的apk 文件进行签名,具体请参考:
(http://developer.android.com/tools/publishing/appsigning.html)
在安卓保护设置的高级选项卡中,LOCKING_TYPE (锁定类型)可以指定为:SuperDog,SL,SuperDog or SL。
您还可以对应用程序使用到的数据文件进行加密保护。操作步骤与Windows 平台基本一致。您需要将加密保护后的数据文件拷贝到手机存储卡中进行使用。
4. 单击保护按钮,外壳加密工具将保护所选的程序。
如需更多的信息,请参阅外壳加密工具的帮助文档中的《保护Android 程序》, 《安卓数据文件保护选项卡》与《超级狗【版本】安卓开发商指南》。
注意:
·安卓外壳加密保护不支持周期性后台检查。
外壳加密工具的安卓平台应用程序保护设置中输出路径不支持中文。
安卓外壳加密保护不支持对安卓应用程序运行过程中产生的数据文件进行加密保护。
如何加密数据文件
外壳加密工具支持加密数据文件。以下是加密数据文件的基本步骤,如需更多的信息,请参阅外壳加密工具的帮助文档。
使用外壳加密工具
操作步骤
1. 启动图形用户界面的外壳加密工具。
2. 向项目添加要保护的可执行文件、动态库,为被保护程序设置保护参数。
3. 选择数据文件保护选项卡,勾选启用数据文件加密选项。必须勾选该选项才能使用数据文件保护功能。
4. 点击添加文件按钮或添加目录按钮,添加需要加密的数据文件或文件夹,并指定保护数据文件需要使用的特征ID。
5. 点击高级设置按钮,将显示设置文件过滤器窗格。
在设置文件过滤器窗格中,可设置文件过滤条件。设置的过滤条件只针对受保护的应用程序在运行过程中产生的数据文件有效,当前选中的数据文件无论设置与否都将全部加密。您可以使用文件扩展名或者自定义的通配符作为文件过滤条件,便于对批量的同类数据文件进行加密或忽略。
6. 点击加密选择的文件按钮或加密全部文件按钮,将使用指定特征ID 对主窗格中选定的数据文件进行加密。
7. 点击保护按钮,将对加载程序进行加密保护。
注意:
·超级狗外壳加密工具2.0 版本与更高版本保护的应用程序不支持打开超级狗外壳加密工具1.1 版本加密的数据文件。您可以使用超级狗外壳加密工具2.0 版本与更高版本重新加密您的数据文件,您还可以继续使用超级狗外壳加密工具1.1 版本加密您的应用程序。
·文件过滤器中设置的过滤条件只针对受保护的应用程序在运行过程中产生的数据文件有效,当前选中的数据文件无论设置与否都将全部加密。
·想要设置更多数据文件加密的相关参数,请使用超级狗 DRM 打包工具。例如:对视频类数据文件,预留从文件头开始10% 的数据不加密以便用户预览;将加密的数据文件绑定到特定的超级狗以提升保密级别等。
使用超级狗 DRM 打包工具
操作步骤
1. 启动图形用户界面的超级狗 DRM 打包工具。
2. 点击添加文件按钮或添加目录按钮,添加需要加密的数据文件或文件夹,并设置相关选项和加密参数。
如果勾选了对Media Player 插件支持的文件类型更改文件扩展名选项,在对支持类型的媒体文件进行加密保护后,被保护媒体文件的扩展名将添加"drm" 后缀(例如: *.mp3*.mp3drm)。此类媒体文件可以在安装超级狗 Media Player 插件后使用Windows MediaPlayer (支持版本:11,12)查看。
超级狗 Media Player 插件安装包位于光盘路径:Windows\Installed\DRM\Redistribute 中。
该插件支持下列文件类型:mpg,dat,avi,wav 和mp3。
其他参数:
参数 | 说明 |
指定保护数据文件的特征 | 特征ID 范围:0~65471。指定加密文件或加密目录中的文件时使用的特征ID。 |
起始数据不加密比例 | 指定从文件头开始多少比例的数据内容不加密。 |
绑定特定的超级狗 | 如果选择了绑定特定的超级狗,运行过程中将检测特定的超级狗是否存在。超级狗ID 为0 表示不绑定。 |
3. 点击加密选择的文件或加密全部文件按钮,对数据文件进行加密保护。
要想查看加密后的数据文件,需要使用超级狗外壳加密工具加密的对应的加载程序。例如:要想查看使用超级狗 DRM 打包工具加密的txt文档,需要使用超级狗外壳加密工具来加密一个文本阅读器(例如:记事本)。详细操作步骤请查看超级狗外壳加密工具帮助文档。
加密数据文件的加载程序时,需要注意:
1. 必须勾选启动数据文件加密选项(该选项位于外壳加密工具的数据文件保护选项卡中)。
2. 加密加载程序与加密数据文件的特征ID 必须保持一致。
播放加密保护的在线flash 文件
安装超级狗浏览器插件后,可以使用IE 浏览器播放在线或本地的外壳加密保护后的flv 和swf 文件。如需更多的信息,请查看安装目录下的DRM 目录中的《超级狗 Flash 文件保护方案说明》。
操作步骤
·播放在线的web 站点的加密flash 文件
1. 编辑您的网页用于播放flv 或swf 文件(播放flv 文件需要准备一个flv 网页播放器(通常是一个 swf 文件),可参考示例目录:samples/flv/on-line ;播放swf 文件,可参考示例目录:samples/swf/on-line)。
2. 将您的网页放到您的 Web 站点上。
4. 您的用户在安装超级狗浏览器插件并将超级狗连接到机器上后,他就可以用 IE 来浏览您的网站上的网页并播放外壳加密保护后的flash 文件了。
·播放本地的加密flash 文件
1. 播放flv 文件需要准备一个flv 网页播放器(通常是一个 swf 文件),可参考示例目录:samples/flv/local。
2. 将超级狗,超级狗浏览器插件安装包,加密的flash 文件以及相关的网页文件发给您的用户;
3. 您的用户在安装超级狗浏览器插件并将超级狗连接到机器上后,他可以用 IE 直接打开外壳加密保护的swf 文件,也可以用IE 打开播放flv 的网页,播放外壳加密保护的 flv 文件。
注意:
·在IE浏览器“保护模式”和“增强保护模式”均启用的情况下,不能播放被保护的Flash 文件。
使用代码植入功能保护应用程序
使用代码植入功能,外壳工具可以将您选中的应用程序的函数代码放在超级狗中执行。被保护应用程序在运行过程中需要调用某个被保护的函数方法时,该函数被加密的代码片段将上传到超级狗中。在超级狗中,函数代码片段将会被解密并加载到虚拟机中执行。执行结果将会回传到应用程序中。函数方法在整个运行过程中没有在PC 端执行,破解者将无法通过反汇编等手段来破解数据。从而显著地提升了使用超级狗保护的应用程序的安全性。
目前,代码植入功能有如下限制:
1. 仅支持Windows 的32 位的exe 与dll 文件
2. 不支持基于.NET 程序集的应用程序
在保护过程中,外壳工具将使用代码转换引擎去分析被保护应用程序的代码。外壳工具使用应用程序对应的map 文件分析应用程序中的函数,并检查哪些函数适合上传到超级狗中执行。这些合适的函数将在代码植入选项卡的程序列表窗格中列出。
除了可通过map 文件生成可保护函数列表,如果应用程序包含导出函数,也可以使用导出函数表标识可保护的函数。您可以在勾选启用代码植入选项时,点击搜索导出表按钮来生成可保护函数的列表。
您需要查看列出的函数信息,然后选择合适的函数使用代码植入的方式进行加密保护。
当外壳工具保护应用程序时,外壳工具将把您选择的函数的代码片段提取出来,并使用一个占位符代替代码片段在应用程序中的位置。提取的代码片段将被加密并使用特定的开发商代码密钥进行签名,并被保存到分隔的二进制区域。
代码植入模块的处理过程是自动运行的,不需要您对您的工程源代码进行任何改动以适应这个处理过程。
被保护应用程序在运行过程中需要调用某个被保护的函数方法时,该函数被加密的代码片段将上传到超级狗中。在超级狗中,函数代码片段将会被解密并加载到一个虚拟机中执行。执行结果将会传递到代码片段在应用程序中对应的占位符(在被保护过程中写入)位置处。
通过以上处理,被保护函数方法在任何时候都始终没有暴露在外部,杜绝了通过反汇编等手段来破解分析被保护的函数的可能性。
想要了解更多关于代码植入功能的信息,请参考超级狗外壳加密工具的帮助文档。
联系揽阁信息,您可以获取到更多满足全球合规性要求的信息安全产品资料,以及相关的整体解决方案的相关资料。如:
数据库访问控制:揽阁LGPAC系统
通用HSM:Luna HSM、ProtectServer HSM
支付HSM:payShield 10K
您还可以得到揽阁信息所提供的优质服务。
揽阁信息 · 值得您信赖的信息安全顾问!