您的位置:首页 > 其它

汉化破解:{smartassembly}使用指南

2013-06-13 14:35 357 查看

{smartassembly} 操作指南

SmartAssembly 主页: http://www.smartassembly.com/

SmartAssembly 是一款不错的 .Net 混淆工具,支持字符串加密,字符串、字段名、流程混淆,程序集合并、移除无用代码、破坏元数据等。下面本文将逐一对 SmartAssembly 的各个功能进行一些简单的介绍。

本次用来测试的程序为 CanYouLib.Framework.dll

首先,启动 SmartAssembly 程序,点击左侧的“Home Page[/b]”选项卡,然后再右侧选择“New Project[/b]”新建工程。之后界面如下图所示:

0 && image.height>0){if(image.width>=700){this.width=700;this.height=image.height*700/image.width;}}" border=0 alt=查看更多精彩图片 src="http://photo19.hexun.com/p/2010/0926/413754/b_C849AAC929EC31169B6F7018255E7B2F.jpg">

1.请点击“Browse Assembly[/b]”选择CanYouLib.Framework.dll,之后界面如下图所示:

0 && image.height>0){if(image.width>=700){this.width=700;this.height=image.height*700/image.width;}}" border=0 alt=查看更多精彩图片 src="http://photo19.hexun.com/p/2010/0926/413754/b_735D2089C65B511A67315919FAD1F953.jpg">

你必须先点击“Set Destination[/b]”按钮设置加密后程序集的保存位置,之后下面的选项才会被激活,上图最下方的“Save[/b]”、“Save As[/b]”按钮用于保存工程,“Build[/b]”按钮用于编译加密后的程序。请点击“Set Destination[/b]”按钮设置加密后程序集的保存位置激活下方的各个加密选项,下面将对常用的几个选项进行简单的介绍:

0 && image.height>0){if(image.width>=700){this.width=700;this.height=image.height*700/image.width;}}" border=0 alt=查看更多精彩图片 src="http://photo19.hexun.com/p/2010/0926/413754/b_57017A6B8D8E6F205844C5155E084332.jpg">

2.Depedencies Merging[/b]
[/b]
0 && image.height>0){if(image.width>=700){this.width=700;this.height=image.height*700/image.width;}}" border=0 alt=查看更多精彩图片 src="http://photo19.hexun.com/p/2010/0926/413754/b_08E37FC130BAAC006A5D5C4D59E94FA9.jpg">

该选项用于让将要加密的程序集运行所依赖的程序集(不包括 .Net FrameWork)合并为一个单个的程序,对于 CanYouLib.Framework,上图已经列出了其需要依赖的程序集,如果你想要打包,只需要将其勾选即可,下面的“Rescan Dependencies[/b]”用于重新扫描选定程序集所依赖的程序集。
注意: 某些时候,打包后的程序集可能无法正常运行(例如: 某些有自校验的类库),遇到这种情况,请自己多测试测试。

3.Pruning[/b]

0 && image.height>0){if(image.width>=700){this.width=700;this.height=image.height*700/image.width;}}" border=0 alt=查看更多精彩图片 src="http://photo19.hexun.com/p/2010/0926/413754/b_80DE4FC15054097A0CD2A442EF1490F9.jpg">

该选项用于移除程序集中无用的代码与元数据,从而减小文件的大小,提高其性能! 如果你想要对你的程序集使用该功能,那么请选择位于上图左下方的复选框,SmartAssembly 会自动对你的程序集进行扫描并移除,如果你想要自定义地移除命名空间、类或者成员,那么请点击“Advanced Settings[/b]”转到高级设置视图,然后在左侧的树中选择要移除的项目,点击“Exlude[/b]”移除,完成后点击“Apply[/b]”应用设置。

4.Obfuscation[/b]
[/b]
0 && image.height>0){if(image.width>=700){this.width=700;this.height=image.height*700/image.width;}}" border=0 alt=查看更多精彩图片 src="http://photo19.hexun.com/p/2010/0926/413754/b_334F69D89823478133EF9C5E19154A58.jpg">

该选项用于将程序集中的类名与方法名称混淆为不可读的字符,如果你要使用该功能,那么请选择上图左侧居中的复选框(也可以点“Advanced Settings[/b]”进行高级设置)。下面是对“Name Mangling[/b]”与“Fields Name Mangling[/b]”选项的简单说明:
Name Mangling([/b]名称混淆)[/b]:
I want use only ASCII characters to obfuscate.[/b] --- 使用 ASCII 字符进行混淆。
I want use Unicode unprintable characters to obfuscate.[/b] --- 使用 Unicode 不可打印字符进行混淆。
I want use Unicode unprintable characters and advanced renaming algorithm.[/b] --- 使用 Unicode 不可打印字符与高级重命名算法进行混淆。
Fields Name Mangling([/b]字段名称混淆):[/b]
I want to use a one-to-one renaming scheme.[/b] --- 使用一对一的命名方案[/b]
I want to use standard renaming, where all the fields in a class have a different name.[/b] --- 使用标准重命名方案,一个类中的所有字段使用不同的名称
I want to use standard renaming, where fields of a different type can have same name. ---[/b]使用标准重命名方案,不同类中的字段可以使用相同的名称

下图为测试程序混淆前与混淆后在 Reflector 中的区别。(左侧为混淆前,右侧为混淆后)

0 && image.height>0){if(image.width>=700){this.width=700;this.height=image.height*700/image.width;}}" border=0 alt=查看更多精彩图片 src="http://photo19.hexun.com/p/2010/0926/413754/b_8CAFB7E1935329E0C3C5B3C5F7BACB75.jpg"> [/b]

File: E:\TeamProgram\碳足迹\源程序集\CanYouLib.Framework.dll
Size: 106496 bytes
File Version: 1.0.0.2
Modified: 星期六 2010年9月25日, 10:42:00
MD5: 1DCDF8A5DE032A74DDF82EFFB1E015DF
SHA1: CAF9CBE5ACC3B8273171BF4436DBDE31F7320F55
CRC32: EC88227A

File: E:\TeamProgram\碳足迹\加壳程序集\CanYouLib.Framework.dll
Size: 94720 bytes
File Version: 1.0.0.2
Modified: 星期日 2010年9月26日, 10:36:16
MD5: C487E8FB6F40B771068DD37D384B0FCB
SHA1: 5D415FCC3C55FFFECC7EF047FC043C46628452FB
CRC32: C3546E4E

5.Control FlowObfuscation[/b]

0 && image.height>0){if(image.width>=700){this.width=700;this.height=image.height*700/image.width;}}" border=0 alt=查看更多精彩图片 src="http://photo19.hexun.com/p/2010/0926/413754/b_5095FAB1B3871C07B649A5AB228D8D56.jpg">

该选项是对程序集进行流程混淆,他可以打乱你的程序原始运行流程,从而加大程序的破解难度,经过流程混淆的程序一般是无法被一些反编译工具(Reflector 等)反编译出现代的高级语言代码(C#、VB.Net),只能为 IL 代码。另外,由于加上了较多的跳转,所以也加大了破解难度。如果要使用该功能,请先选中要混淆的程序集,然后在右侧选择混淆强度。(混淆强度越大,程序运行速度将会越慢)

6.Strings Encodeing[/b]
[/b]
0 && image.height>0){if(image.width>=700){this.width=700;this.height=image.height*700/image.width;}}" border=0 alt=查看更多精彩图片 src="http://photo19.hexun.com/p/2010/0926/413754/b_4534B668F086741F1131D763C6510BA6.jpg">

该选项用于对程序集中的字符串进行编码加密,加密后的字符串是无法在程序集中以明文方式找到的,不管你是用 ILDASM(基于 IL)或者 Reflector(基于高级语言)。
下面简单的介绍一下字符串加密原理: SmartAssembly 将程序集中的字符串加密(PublicKeyToken + Hash + Base64)后存储为一个以 Guid 为命名的文件,然后将该文件加入到你的程序集 ManifestResource 表中的最后,该程序中原来字符串赋值处使用 string MethodName(int) 的函数进行解密。
如果想使用该功能,请选择“I want to hide important informaton by encoding all the strings in my software.[/b]”。
勾选“I want to use strings encoding with improved protection.[/b]”将使用 PublicKeyToken + Hash 进行加密、解密字符串,这样任何人修改字符串后,程序将无法运行。

7.Other Protections[/b]
该选项用于对你的程序集加入一些其他的保护方式(个人觉得作用不是很大)。该选项中有两个子选项,请根据自身情况选择。
I want to add incorrect metadata.[/b] --- 添加错误的元数据来使反编译工具出现错误
I want to prevent Microsoft IL Disassembler from opening my assembly.[/b] --- 阻止 ILDASM 打开你的程序集(这个功能仅可以用 .Net 2.0 的程序,因为在 .Net 1.1 中 SupperssIldasmAttribute 属性还未被公开)

8.Unhandled Exception[/b]
该选项用于帮助对你的程序中未处理的异常进行捕获并报告,以帮助你修复问题。
如果你想要使用该功能,那么请选择“I want to improve my software by reporting unhandled exceptions.[/b]”并选择或自定义模板然后填上用于自定义模板的信息。

9.Depedencies Emedding[/b]
将你的程序所依赖的程序集内嵌到你的程序中,在运行时,先将你的程序所依赖的程序集解压并释放到内存中。他的使用方法与“Depedencies Merging[/b]”一致,但是其性能要优于“Depedencies Merging[/b]”!

10.Other Optimizations[/b]
该选项用于对你的程序集的性能进行优化,主要有两个选项,请根据选项进行优化。
I want to improve the memory management.[/b] --- 通过自动释放不使用的内存来对程序内存进行优化
I want to automatically seal classes whenever possible.[/b] --- 对程序中所有未被继承的类加上 seal 属性以提高程序性能

11.Debugging[/b]
该选项用于生成调试信息(*.pdb 文件),如果你想要使用该功能,请勾选“I want to generate the debugging information.[/b]”选项。

12.Strong Name[/b]
该选项用于为你的程序生成强命名。如果你想要使用该功能,请勾选“I want to sign my assembly with a Strong Name.[/b]”选项。
如果你已有一个强命名文件,那么请选择“Browse for a key[/b]”浏览,如果没有请选择“Create a name key[/b]”生成一个强命名文件。

当你所有的设置完成后,请点击“Build[/b]”按钮生成加密后的程序,编译成功后将会出现如下图所示窗体:

0 && image.height>0){if(image.width>=700){this.width=700;this.height=image.height*700/image.width;}}" border=0 alt=查看更多精彩图片 src="http://photo19.hexun.com/p/2010/0926/413754/b_FB274C992722BFA6FC32D66F1C537EFE.jpg">

上面半部分显示了加密程序集的名称以及加密选项,你可以点击“Open Assembly Folder[/b]”打开程序集所在文件夹,或者点击“Run new Assembly[/b]”运行加密后的程序。
下面半部分用于帮助你对你的程序集进行诊断,已修复程序集中的错误!“Rebuild with self-diagnostic”用于重新编译你的应用程序并进行自我诊断,“Enable self-diagnostic[/b]”用于在下次编译时启用自诊断。

附: [/b]
SmartAssembly [/b]各版本比较[/b]
[/b]0 && image.height>0){if(image.width>=700){this.width=700;this.height=image.height*700/image.width;}}" border=0 alt=查看更多精彩图片 src="http://photo19.hexun.com/p/2010/0926/413754/b_B7560ACFA2B295C33F091AC14F9A006B.jpg">

[/b]
注意:上面众多选项,一般我们选择 3.Pruning,4.Obfuscation,6.Strings Encodeing 即可。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: