.Net代码混淆技巧

混淆器的功能其实差不太多,个人觉得Eazfuscator.NET这种最方便,编译release时自动插入混淆步骤,和普通的编译release操作一样就行了,更新也比较快,也相对便宜,功能也足够了。其他的混淆器还得单独开个软件选几个dll配置下再生成再替换,烦都烦死了。
 
然后就是要会配置,很多人说混淆被de4dot一下子就给还原了,其实我配置下来后,de4dot几乎无法改变什么。
变量混淆:随便开一级就行,即便你用不可见得字符混淆了,de4dot一下以后,还是和只开一级一样。多使用internal让混淆器知道这个类可以全部混淆,还可以配合dll合并,但很多项目不适合使用dll合并。
字符串混淆和资源加密这种自己按需要开,这种东西强度不高,只能带来一点麻烦
流程混淆配合async await,强度开到能把async await编译成状态机,这玩意de4dot没法还原
关键位置使用虚拟化混淆,这玩意可是神器啊,高手都得破解半天,de4dot更没法还原
以上几个只是降低可读性,不让人能够直接保存出源代码,不能防破解,要防破解得用以下功能。
 
虚拟化混淆适合配合内敛编译,比如检查key的代码,虚拟化混淆后就很难反编译了,但是人家找到调用地方直接改掉就完了,我告诉你,多写几个调用,然后内敛编译的时候,这些检查代码就跑到那些调用的地方有好几个副本,调用的地方也都虚拟化混淆,这人家就难破解了呀。有虚拟化帮忙的情况下,其他看似没啥用的混淆可以稍微开高一点,因为要破虚拟化后才能还原,没法一起做。
 
混淆过的软件还是可以被反编译软件打开一部分的,还有一些是加壳软件,可以起到压缩加密无法反编译的作用,但是你要知道,能加壳就必定能脱壳,脱掉以后还是你混淆后的样子,你没混淆的话脱壳后就是原样,而且强壳对程序本身的运行还会带来影响,所以他和混淆是互补的,混淆还是不可或缺的。
 
还有一个很多人说的思路,就是把关键代码放到native的dll里,我要提醒大家,你的native不做好混淆,不做好调用检查的话,还是一样会被破解,没区别,还有其他的小聪明,道理一样,这种思路做的不好,还不如虚拟化保护来的给力。还有人动不动就说上加密狗,其实道理还是一样的,你调用加密狗的代码不好好保护,还是一样秒破。而加密狗其实也被一些破解者研究的透透的。
 
绝对的防破解本来就是不可能的,我们的目标是用我们菜鸟般的技术,给破解者带来大麻烦,就可以了。
还有个东西,corert,等他成熟了用corert编译后,那玩意应该是最难破解的。
 
补充:
Eazfuscator网上最后可用的破解版是2019.1,被研究和练手的相对较多,后面版本破解难度陡增,并增加改变了混淆特性,如果真的需要保护程序推荐购买最新版
还有可以用的就是吾爱破解推崇的dng,Agile.NET,还有可能比较强的vmp,最新版支持.net了, 混淆道理也都是一样的,怎么开特性看上面正文,已破解的版本会比较容易被针对。
我希望说的这么清楚后,某些人不要一看到我说的这些软件混淆后,会被de4dot恢复一部分而开始杠了。
posted @ 2020-04-28 18:14  咖喱gg  阅读(2508)  评论(1编辑  收藏  举报