最近一直学习DotNet相关资料,sscli真是好东西啊:P。
一边学习一边把知识综合了一下,做了这个小工具。
保护原理和国人的remotesoft,maxtocode差不多。加密后的程序发布时也需要附带一个运行库,
不过和那两个不同,附带的运行库不是纯native的dll,而是C++/CLI的混合程序集。
工具已经有了雏形,整体内核框架完成了。用来加密了一个sample,运行正常。
有些方面甚至超过了maxtocode。
1.不依赖微软的ildasm和ilasm程序。
IL反汇编和IL汇编都程序实现。
可以加密包含本地代码的程序集。
2.Anti反编译工具,maxtocode加密的程序集无法用reflector直接查看,但是程序运行后用pedumper,dump后就可以用reflecotr查看结构了,当然还是看不到代码的。
dnguard加密的程序集比我预期的效果还要好,加密后的程序集无法用reflector查看,dump后的也无法用reflector插件。
感觉reflector还是有些弱,同类软件Disa#, Xenocode fox 就可以直接打开查看maxtocode和dnguard加密的程序集。
为此我尝试在dnguard加密的程序集里面增加了结构混淆,有一点效果,就是在Disa#和 fox里面查看结构是会出现一些张冠李戴的混乱,即类A的函数可能会显示到类B中。效果还不是很好,会出现问题的函数每个类只有很少的几个。
3.Anti .Net 2.0的新特性,不是很强,强度和maxtocode 3.13(内部版)差不多,听说maxtocode出了3.14了,不知道强度是否有增强(看Jason的blog里的回复似乎和3.13是一样的)。max的3.12patch几个字节,反射就可以用了,3.13也差不太多,需要patch的字节数比3.12还要少。
关于这个方面现在有一个比较好的方案,能够在不影响效率的前提下使强度提高很多。但也不能完全防dump。
还有一个比较完美的防dump的方案,需要配合另一项保护技术一起才能实现。
这个方面不打算再深入探讨了,等DNGuard加密壳完成后,会着手另一项保护技术,最后将两项保护合在一起。
4. Anti dump后用ildasm,ilasm恢复程序集。DNGuard除了anti .net 2.0的新特性防dump外,还增加了anti,我早期做的dumper。另外还利用C++/CLI混合程序集的特性实现了,防dump后ildasm。不过这个强度不大,对小程序集能被很容易修复后实现il汇编。
现在需要做的工作还有很多,加密算法还没有弄,运行库自身的保护也还没有做。发现纯native的dll可以找到现成的保护工具,就thmida很不错,maxtocode的运行库就有用这个壳,C++/CLI的dll就一直找不到好的方法。看来只能手动加一层保护了,已经开始着手试验了。现在准备加一个简单的加密壳,等这个做完后就把DNGuard放一个demo上来。
DNGuard加密程序集后用reflector查看:
DNGuard加密程序集dump后用reflector查看:
Maxtocode加密后的程序集用Reflector查看:
Maxtocode加密程序集Dump后用Reflector查看: