|

前情提要
在前面介绍了验证的发展历史,从最早期的本地绑机验证,到现在的功能完善的TCP网络验证,两次时代的跨越。
易语言逆向交流群:500002537
7.网络_TCP验证2:
E盾出现后,依靠安装简单,运行稳定,独立算法KEY,加验证方便等等特点,成为了用户量最多的验证,但也出现了一系列问题。
源码公开化:源码经历过一次泄露,导致出现了各种各样的同款类似验证,并且防破J的思路也“完全”公开了。
SDK模块:E盾SDK使用的是易语言模块,众所周知,易语言模块是可以直接反编译得到源码的。
服务端代码检查不严格:在早期存在文件路径漏洞,直至E盾最新的版本,还存在有SQL注入漏洞,甚至服务端执行任意代码的漏洞。
根据以上几点,已经出现的破J方法有下面几种:
1.接口化,HOOK掉所有E盾SDK接口,然后自行处理数据。
2.本地化,因为有所有的通讯算法,和数据处理代码,所以只需要知道算法key,就可以完全本地化。
3.山寨化,是本地化的衍生版本,放到服务器里面,并且加上验证。
8.网络_企业盾验证:
为什么说E盾是把验证提升了一个时代,因为哪怕是放到现在企业盾(改编版)任能让逆向分析的人头疼不已。
为什么在大部分验证卖600、800的时候,企业盾卖6000并且还承诺被破退款,足以见得作者对此验证的自信。
先概括亮点:计算参数无法固定,时间增量检测防止跟踪,代码膨胀无法分析,没有特征无法定位,全ShellCode并全处在代码虚拟机的保护下。
是不是感觉挺复杂?别急,知道原理后,人人都能写出企业盾验证。
计算参数无法固定:参数有rdtsc、cpuid、peb、teb中一些信息,固定参数和返回值这一条路走不通了。
时间检测防止跟踪:ShellCode里面插入了大量的rdtsc检测时间,只要在盾代码中暂停一下,就能产生许许多多意想不到的错误。
代码膨胀:也就是插入了非常多的垃圾指令,毕竟这盾shellcode是要“明文”发给用户的,如果没有耐心,应该都分析不完。
没有特征:就是一段shellcode,不调用函数,被全VM了,该如何去定位。
原理:取一些无法固定的参数,提交到服务器,经过种种复杂的运算,得到一些结果值,并保存到FS里面,然后用户使用SDK,在代码中插入shellcode,对参数值和结果值进行校验,校验失败,程序崩溃退出。
虽然企业盾确实很强,但也不是无解的,很快有大佬发现,如果能快速定位到最后对结果值判断的跳转,那么则能跳过前面的一系列检查,而刚好附近有一些VM不到的特权指令(cpuid,rdtsc),然后就是硬刚VM的画面了,不过VM嘛大佬们都有工具。当然也有一些更为简单的方法,这里不过多讨论。
9.一键式网络验证
这种验证包括后来各种模仿盾,跟E盾算是同时期的,因为并没有太多亮点能提高一个时代的,也许各家验证现在也都到了发展的瓶颈阶段。经常看到有讨论QP量子、麻婆、SP等等,各家有各家的长处吧,但是都没有像本地->PHP->企业盾,这样大维度提升,也许只是我没有了解到,各家的粉丝,友好交流勿喷勿喷。
10.防破J建议
本文上面介绍了多种相关名词,也介绍了多种常见的破J方法,如何在一定程度上防止被破J,我给大家提供几点建议:
1.合理使用壳SDK函数:调用SDK函数可以将你的函数代码保护在壳代码虚拟机里面,可以很大程度的保护软件代码,提高分析难度。注意是合理,并不是越多越好,因为保护之后代码执行效率会变低。
2.对于关键的函数代码,要清楚函数调用栈的问题。例如你调用了某某模块的函数或者调用了支持库的函数,你的代码是加密了,但是模块内和支持库内的代码是没有加密的。
3.减少明文字符串的使用,能用整型就用整型。
4.自实现一个生产随机数,并保护起来。
5.自实现一个加解密算法。
其实防破J跟验证关系不大,公开的验证,主流的验证注定分析的人多,所以针对性的工具也多。拿VMP举例,世界一流的强壳了,但也是分析资料最多的壳,各种各样的过VMP检测的工具烂大街。E盾企业盾再强,在大佬们的工具下面,也不堪一击。所以,验证只是提供一个平台,一个用户管理服务,一个可以让你用得舒服的验证平台,能够更好的发挥出你云计算的强度。最好的防破J永远是自己写的,因为自己写的源代码是保密的不会公开,再基于壳代码虚拟机保护下,分析的成本大大增加。不论是源码级对接,还是一键式的验证,往往最难破的部分,在于用户自己写的云计算。
易语言逆向交流群:500002537
|
|