Agile.NET反篡改保护如何开启,以及Agile.NET反篡改触发后软件会出现哪些状况,这些内容都需要和一般的代码混淆区分开;像名字混淆、把字符串加密、改变控制流这些做法,主要作用是让别人反编译时看不太懂,但反篡改保护更注重在运行的时候进行检查,它的主要目的是一旦发现软件被别人修改了、被塞了多余的东西、被换掉或者弄坏了,系统就不会让软件再照常跑下去了;Agile.NET这个.NET保护工具在设计上的主要用途就是为了搞代码混淆、代码保护、防止别人破解和防止被修改,它能够对类名和方法名、资源、字符串、方法的具体实现、系统调用还有库调用这些内容进行防护。
一、Agile.NET反篡改保护怎么开启
在刚开始做混淆测试的时候,大家不要直接把反篡改保护给勾选上;比较稳妥的步骤应该是:作者要先去确认普通的混淆包能够正常跑起来,接着再去把字符串加密和控制流保护给打开,最后这一步才是去加反篡改;因为这个反篡改只要一动起来,软件的表现就会变得很古怪,在查问题的时候,研发人员很容易把它当成是软件启动不了、缺少了某些文件或者是授权出了毛病。
1、先准备稳定的Release包
开发人员要先用Release模式把项目重新编译一遍,必须得确认没加保护的版本可以正常打开、能登录、能把配置读出来、能连上数据库、主要的窗口也能点开;这个原始的Release包必须要单独复制出来一份存着,千万不能直接被覆盖掉;要是后面开启了反篡改出了什么状况,大家才能有一个干净的版本拿来做对比。
2、只选择需要保护的自研程序集
把主程序exe和自己写的dll文件给放进Agile.NET项目里就可以了,至于那些第三方的控件、数据库的驱动、硬件的SDK、做报表的组件、还有授权加密狗的接口库,大家通常别随便去给它们加反篡改保护;因为第三方的那些文件自己可能就带着签名检查或者授权限制,要是强行用工具去处理它们,反而很容易把文件搞得没办法正常加载。
3、开启【Anti-Tamper】或完整性校验类保护项
在进入到保护的配置界面之后,要把【Anti-Tamper】、【Tamper Protection】、或者是【Integrity Check】这些选项给找出来,由于软件版本不一样,界面上的名字可能会有一点差别;在把它勾选上之后,工具就会在被保护的文件里面塞进去一些运行时的检查代码,用来随时盯着文件内容有没有被动过;反篡改的主要核心思路就是不让别人恶意去改代码、去换掉逻辑或者是把授权流程给破坏掉,这个事情和普通的名称混淆完全不是一个概念。
二、Agile.NET反篡改触发后程序会有什么表现
在反篡改被触发了之后,软件的表现其实不一定全都是弹出来一个“文件被篡改”的提示框;有些软件会直接死掉,有些会没办法启动,还有些是只有在调到那个加了保护的模块时才会报错;这些具体的表现和保护是怎么配的、异常是怎么处理的、以及软件自己的日志是怎么写的都有关系。
1、程序启动后直接退出
这算是一个比较多见的现象了;用户在双击了软件之后,界面可能只是闪了一下就没了,或者是什么动静都没有,在任务管理器里面看的话,进程很快就死掉了;这大概是因为主程序的exe或者是在启动时需要加载的dll把完整性校验给触发了,里面的保护逻辑不让软件再继续往下跑了。
2、出现运行时异常
有些项目在出事的时候不会静默退出,而是会直接报错;经常能看到的现象包括:文件加载失败了、入口的方法没办法运行了、初始化出了故障、或者是授权模块报错了;在日志里面可能会抓到像FileLoadException、BadImageFormatException、InvalidProgramException、TypeLoadException、TargetInvocationException这些英文报错信息;对于这些具体的报错名字,大家不能只看表面,得结合报错的具体位置去猜。
3、授权或登录模块异常
很多软件都喜欢把授权的检查、License的判断、还有用户的登录功能放在刚启动的时候;要是这些模块被反篡改保护给罩住了,文件只要有一点点变动,可能就会表现出来“授权失效了”、“登录不上去”、或者“许可证检查失败”这些情况;在这个时候,大家先别急着去判断是客户的授权出了问题,得先去确认一下软件压缩包是不是被重新压过、补丁有没有打错、杀毒软件有没有动过它、或者是文件被人手动换过了。
三、反篡改保护发布前要重点检查什么
反篡改保护这种手段,其实更适合拿来保护授权的逻辑、核心的算法、还有关键的业务模块,它不适合不管三七二十一地把所有文件都给套上;它的用处是在文件被改了之后不让它继续运行,但是它也会让发布的整个流程变得非常死板和严格。
1、检查保护后文件是否被再次修改
在Agile.NET保护弄完之后,大家千万不要再用别的工具去随便乱改文件里面的内容了,比如去搞二次合并、换掉里面的资源、重写IL、强行改版本号、或者用自动补丁工具去改dll;只要文件里的内容发生了一丁点儿变化,就很容易被反篡改的逻辑给抓出来并当作异常处理。
2、检查安装包和自动更新流程
要是软件里面写了自动更新的功能,那就必须得保证更新包里面的文件全都是经过完整保护过后的最终版本;千万别搞成主程序是新的,但业务dll还是旧的,或者是exe和dll之间的版本对不上;反篡改有时候被触发,并不是因为真的有人在攻击软件,而只是因为发布的目录里面把不同版本的文件给混到一块儿去了。
3、检查日志策略
反篡改在触发了之后如果是直接闷声退出的话,那用户反馈回来的情况就会让人摸不着头脑;大家可以在不泄露保护机密的前提下,在代码里留一些简单的错误日志,比如写成“程序文件校验异常”、“运行文件不完整”、或者“请重新安装正版程序”这样的话;这样既不会把具体的检查点告诉破解的人,也方便售后人员去判断到底出了什么事。
总结
Agile.NET反篡改保护具体怎么开启,关键的地方就是先要把稳定的Release包给弄好,然后再把自研的程序集给选上,并在保护选项里面把【Anti-Tamper】或者完整性校验功能给勾上,最后还要把编译、保护、签名、打包的顺序给固定死;而Agile.NET反篡改触发了之后软件会有什么表现,最常见的也就是启动就退出、运行时报错、授权出故障、某个模块转不起来,或者是被杀毒软件给拦下来;反篡改保护并不是加得越多就越好,这里建议把它用在授权、核心算法还有核心业务dll上,并且要配合着一整套完整的发布测试流程来弄,这样才能够在安全和稳定之间找到一个比较稳的平衡点。