|

前情提要
最近论坛上出现了很多很多网络验证,今天群里也有人在讨论如何软件安全、防止软件被破J相关的话题,我在这里谈谈我对软件安全的理解。知己知彼百战不殆,要先知道破J的切入点,才能知道怎么样防止被破J。
易语言逆向交流群:500002537
验证发展
1.本地_单密码验证:
也就是设置功能使用密码,输入对应的密码,解锁对应的功能,一个软件可能存在有多个密码。缺点是:密码泄露了就GG了,或者“追码”、“密码字典”相信这些词语大家都不陌生,也有密码本身就作为一种算法key的存在,这种仅仅能防止追码。
2.本地_绑机验证:
这种方式也是本地验证不联网。大家熟悉的提供机器码,计算注册码,或者KEY文件,就是属于此种方式的。早期的这类型验证是,计算出来正确的注册码,然后和输入的注册码进行字符串比较。对于破J方式有很多种,大家熟知的“追码”,适用于这种验证。或者是固定机器码,然后输入对应的注册码,或者直接修改跳转。
这种验证一直在更新迭代,现在也有很多。常见的SE、VMP、TMD等等加密壳都提供了这种验证方式。但是奈何只能通过本地的一些信息来校验,始终无法达到高强度,例如到期时间验证,运行次数验证等等,修改本地时间或者清除一下注册表就清空了。
本地_绑机验证的几种形态:重启验证、注册表验证、文件验证。
名字听着高大上,实际上也就是注册码保存的位置不同。注册码保存到文件里,软件下次启动的时候,校验一下注册码,如果校验通过,则不需要再次输入注册码,就是文件验证。同理,注册码保存到注册表里,在软件启动的时候进行验证,则叫注册表验证。
3.绑定U盘、加密狗验证:
这种验证,我接触到的不多,但是进行一下合理的猜想,他也是本地不联网的,绑定U盘的一些硬件信息,然后计算出来解密KEY,或者放一点数据到U盘里,用U盘的特征进行解密。仅仅是我的猜想,毕竟分析的样本不多,就不说出来误导大家了。
4.网络_博客验证:
这可以说是网络验证的最早形态了。可以用个人博客、QQ空间日志、FTP空间、或者论坛的一篇帖子作为自己的服务器,现在偶尔能遇到样本用有道云日记的。
大家如果没有概念,请想象一下,你将自己软件的版本号、更新链接、公告地址发到个人博客里面,然后软件再用网页_访问(),读取整个文本,然后再来做文本解析,获取到最新的版本号和下载地址等等。在最早的时候,软件获取当前电脑的机器码,去个人博客里面寻找文本,如果找到了,那就是正版用户,没找到,就提示未授权。更有甚者,把软件运行的一些数据,也这样公开化的放到日志里面,例如游戏jz等等。
这是最早期的网络验证:缺点也很明显,破J方式也有很多,例如修改软件访问的博客地址,改成自己的博客地址等等。
5.网络_PHP验证:
到PHP验证红火这几年,才算是真正的踏入了网络验证的时代。代表验证有:飘零、可可等验证,但都还是最雏形的形态,用户购买验证服务之后,需要自己租用一个FTP空间,然后把PHP、数据库等等文件上传并搭建好,然后登录网站后台设置好相关信息,软件初始化的时候,输入网址和对应的KEY进行连接。
PHP网络验证一经面市,可谓是一石惊起千层浪,相对比之前的本地验证、或者网络博客验证,PHP网络验证具备功能完善的用户管理系统、注册系统、充值系统、软件版本更新系统、还有在当时还算不错的防破J的校验。对比之前的本地验证,就像是原始人见到了现代人一样的感觉。
这个时候,也是各种破J出现得最多的时候。例如大家听到的“山寨”、“爆破”、“补码”、“本地”、“中转”,等等都是这几年兴起的名词。
在这里给大家普及一下这些名词,目的是让大家有防破J需求的时候,有查漏补缺的方向。
山寨:早期的PHP网络验证,包括现在的一些网页版验证,在同款验证下,所有人连接的服务器是同一个,但是不同软件的编号ID不同。这也就产生了一个问题,服务器怎么区分这个软件是谁的,只能通过客户Duan提交来的软件ID来区分,那如果软件提交过来的ID是被修改过的呢?这也就完成了山寨。
爆破:指的是修改跳转(修改条件逻辑判断),然后强行走到成功的分支。
补码:用正版用户联网取得一些静态数据,再通过内存HOOK的方式,赋值给寄存器或者变量,来达到非正版用户也能共享这些数据。
本地:指的是修改连接的服务器为本地机器,要实现本地,需要自己写一个服务端程序,需要分析出来通讯算法,并且实现数据处理。
中转:指的是多个用户共用一个正版账号,用正版账号取得数据再分发给各个用户,有点类似VIP账号共享。
加密壳也是这个时候被大量使用,有点种群爆发的感觉,去搜一下当年各位大佬发的加密壳脱壳教程,可以看到有几十种加密壳,但是到现在还能被人所熟知的,也就寥寥几款加密壳。
6.网络_PHP验证 中期:
在初期的时候,PHP网络验证还只能获取一些静态的数据,发展到中期,可以运行一些服务端的自定义函数,例如可可的ks_api。用过E盾的都知道远程JS函数,他的前身就是飘零、可可的远程API。从这个时候开始,破J开始变得有难度了,因为有远程API的存在,用户可以客户Duan提交一些参数到服务器里计算,然后客户Duan再对结果进行对比。
但是服务端的自定义函数代码毕竟不是易语言!对于大部分仅会使用易语言的用户来说,编写起来还是有不小的难度的,这也导致没有完全发挥出他的威力,大部分用户还是停留在官方提供的一些加减法函数,这对于防破J毫无作用。
7.网络_TCP验证:
如果说从本地验证到PHP网络验证是跨越了一个时代的话,那么从PHP网络验证到TCP网络验证也是跨越了一个时代,变为大家现在所熟知并使用的网络验证。
代表验证有:E盾、天盾等等。其中E盾是开山鼻祖,他养成了大家使用TCP网络验证命令的习惯,常用命令:验证_初始化()、验证_卡登录()、验证_读验证返回数据()、验证_云计算()等等。比起PHP网络验证,E盾的TCP验证使用起来更加方便、功能更加全面、并且把防破J的强度也提高了一个台阶。
首先是搭建服务端,不再像FTP空间那样繁琐的搭建步骤,只需要将服务端程序上传到服务器里,并运行起来,就算搭建完成,用时一分钟不到。其次,验证对接也更为方便,只需要填写服务器IP、服务端端口,即可完成对接。并且,每个用户都是用的自己的服务器,并且每个用户的通讯算法KEY不一样,像PHP那样改个软件编号就能完成山寨,彻底成为过去式。
然后,考虑到飘零、可可等PHP验证用户的使用习惯,E盾提供了远程JS函数调用,并且自己开发了云计算函数,用易语言编写DLL,然后客户Duan可以调用服务器里的DLL函数执行代码,让用户真正的发挥出了云计算函数的全部威力。
未完待续....
易语言逆向交流群:500002537
|
|