0x00 事件起因

云安网络验证的管理员授权测试网络验证的强度,结果三下五除二就被跑开了,用到的关键思路就是截取验证软件的数据包,修改为正常用户登录是的数据包,即可绕过验证界面。

目前该验证的技术人员已经将部分关键数据的加密放在了云端,只要拿不到key基本上无法正常破解的。

顺便,我计划了一个项目,目前正在制作当中,完成后将更加有效方便地利于逆向爱好者对于某些数据的截取。

关于大多数网络验证的通用“解决”思路插图
网劫补丁

0x01 思路描述

大多数的网络验证都会有自己专用的验证API,例如:

http(s)://xxxx/login 并且附加keyusernamepassword等参数请求验证,使用UDP的验证类型比较少见。

这些验证会请求API,并且通过返回的状态码或者其他代码数据来判断这个用户是否登录成功,而这个过程就容易被利用破解。如果你拥有用户正常登陆时的数据包,那么你完全可以本地伪造登录数据,绕过验证,不排除验证有随机二次的可能,不过对于大多数而言,这点足以成为“致命伤”。

关于大多数网络验证的通用“解决”思路插图1
网络数据

而验证登录时所用到的函数InternetReadFile更是一个验证的突破口,只要是利用网页API作为登录验证的软件,皆可在该函数上Break Point(断点),动态分析调试至验证的主体,继而破解验证。

那么我们该如何减少这种程序漏洞带来的危害呢?不使用这种类型的函数,可以有效地减小破解的风险。毕竟办法总比困难多,如果你的技术到家,你可以使用内核编程,或者自写InternetReadFile这个函数,有效程度可以类比当年的大灰狼TR.downloader下载者。

0x02 验证实例

本次验证使用了来自ND的一个例子,不涉及其他问题。

首先我们在验证后台注册一个账号,并且充值账户金额,使得能够正常登入软件。本地拦截到的登录数据:

关于大多数网络验证的通用“解决”思路插图2
data数据段

获取到这个数据包后,就可以对该验证进行拦截修改,并且能够直接绕过验证。我们将远程URL响应为本地响应,并且为该数据文件,接着来看看验证对该数据的相应效果:

关于大多数网络验证的通用“解决”思路插图3
验证成功

不过这个验证的作者还在后续的进入阶段置入了随机种子,解密成功后我们才能进入软件界面。

0x03 总结

大部分的网络验证都可以通过补码的方式绕过,除了部分存在远程变量和函数无法实现。

而对于数据包的加密性和随机性,也是目前许多验证厂商需要改善的首要目标。

0x04 补充

就目前来看,大部分验证已经弃用了API验证方式并且使用了新的验证方式,例如TCP通信或者UDP通信,并且加密了通信数据,使得破解难度直线飙升。

——补充说明于2022年8月30日18:20:06