对于混淆工具,勇哥看到网上最多的是介绍 ConfuserEx的,可能因为是开源免费的原因吧。
但是这个工具对于有些dll会报一个编译错误,而且网上找不到错误原因。
然后是DotNETReactor,对于某些dll也会报一些错误,居然是软件内部崩溃的错误信息。
所以免费的工具真得是也只能做到这个份上了,咱也不好说些什么了。
SmartAssembly是商业工具,而且有天朝版本,所以,重点看看这个吧!
================================================
SmartAssembly加壳工具,我还真的是不太喜欢给自己的程序加壳,觉得开源才是王道,但是没办法工作需要,需要有个加壳后与加壳前的对比,好吧谁叫咱只是程序员呢。
开始埋头苦干,找了半天也没找到合适的,后来有群里大佬告诉我是“流程混淆”并且告诉了我SmartAssembly这个工具。
let‘s 干活
安装好之后才发现 需要sql server 尼玛 这么大玩意 可不好整 最后仔细看了看 说用sqllocal 也可以,但是咱不了解sqllocal 啊 又开始百度问 终于问出个好消息来 只要是vs2015或者以上版本默认都安装好了 太好了 让我拿过来直接用,下面是配置步骤
第一步设置数据库:
勇哥在这一步的实践如下,其中map file指定为本地磁盘上的目录即可。
第二步,新建工程
设置输出目录
设置加壳的选项
添加依赖库文件
pruning 精简代码,这一步将从程序集中删除一些没有用的代码和元数据。smartassembly将检查程序集中的代码,自动判定哪些代码是有用的,哪些代码是从不会执行到的。同时,也将移除没有用的元数据。并可以分别选择对主程序集和依靠的程序集进行精简代码操作。可以根据自己的具体需要选择
obfuscation 混淆代码
混淆代码是保护你的程序集最重要的方法。它将类和方法的名称更改为不可读的字符,但不会改变代码的功能,达到保护代码的目的。同时,也可以减少元数据,减小程序集的大小
build 输出混淆后的程序集
点击build 按钮,就输出混淆后的程序集了,并且所有依靠的程序集都合并在一起了,这样在发布的时候,只需要发布合并后的一个程序集和第三方的程序集了
最后我们用ILSpy反编译工具测试一下效果
加壳前:
几个异常问题的解决:
(1)dll的依赖项目丢失
如下图所示,缺少依赖项目 log4Net。
解决办法是把log4net.dll拷贝到要混淆的dll所在的目录即可。
(2)smartAssembly遇到无效符号
错误信息提示:
最可能的原因是,smartAssembly使用的依赖项版本与netMarketing.dll使用的verison不同。
经过摸索,勇哥发现在依赖项中不要勾选项目
在混淆页面只选择最初想混淆的dll,则可以避免出现上面的无效符号的问题。

