zoukankan      html  css  js  c++  java
  • .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恢复一部分而开始杠了。
  • 相关阅读:
    table标签中不能有div、span等标签
    奇葩的ASCII 160 号空格
    解决“只能通过Chrome网上应用商店安装该程序”的方法
    谈谈页面流程图(附案例) | 人人都是产品经理
    mysql-connector-java-5.1.34下载
    二、web.xml文件配置
    spring Beans初始化及配置
    Junit单元测试的使用
    什么是IOC?
    二、springMVC项目依赖配置pom.xml
  • 原文地址:https://www.cnblogs.com/gxrsprite/p/12796008.html
Copyright © 2011-2022 走看看