起
6月1日前夕,就收到了王者荣耀辅助的透视脚本,本没心思去看。节日当天闲来无事,就尝试配置了一下,经过测试发现很稳定,后续使用是需要付费的。
这款辅助是通过GG修改器读取内存数据,并将其传送给令一客户端将对手位置渲染出来(采用浮动层),并非在修改原游戏内存,实现全图透视。毕竟修改内存会引起各种风险问题。
使用效果截图" id="使用效果截图">使用效果截图
毕竟因为是付费的, 一天5元钱,也不便宜,想着尝试破解一番,研究了许久,最终还是搞定了。
在这里简单记录下过程。
正文
辅助软件主程序
主要的渲染绘图主程序,也就是绘制对方视野的那个应用时付费入口。需要通过购买卡密激活,那就从这里入手。
测试发现卡密是需要输入完整16位的,客户端会验证长度,提交16位长度的任意卡密,通过抓包软件可正常看到具体内容。
抓包查看
安卓抓包软件使用的是PacketCapture,利用VPN原理过滤数据,实现抓包,优点是不需要借助其他设备,缺点是并不能修改响应结果。折腾最终,还是放弃。
最终换上FD在windows上运行拦截抓包。
这里可以清楚的看到请求包和返回包,HTTP并没有加密。里面参数存在IMEI应该会绑定设备,这个不去研究。
一个daili(代理)ID,是上下级分销关系,可忽略。
sign接口是注册你的卡密,也就是激活并销毁,之后这个卡密也就废掉了。
login接口是通过注册接口返回的数据一系列操作得到的password,拿去验证。
通过FD软件抓包
此时,我们换上FD软件。
菜单栏选择以下位置,允许监听局域网其他设备。
Tools - fiddler options
手机端和PC链接同一局域网,且WIFI设置里代理选项设置为PC的ID,及FD的端口(8888)。
配置完毕后,尝试手机访问网页,正常的话FD软件会有包体流动。
此时开启返回包拦截,即以下菜单。
Rules - Automatic Breakpoints - After Responses (勾选)
此时打开手机的辅助软件,如果已经打开,先关闭后再重新打开。
抓包提示:
为避免包混淆,建议开启前将FD包列表清空,若已开启拦截响应包,则点击GO放行,再清空。保证手机没有其他软件发送数据包,可先关闭。
进入辅助软件后,默认会有一个验证包发送,是软件自身发送的,不是点击激活按钮发送的。
通过拦截到的数据包,修改响应结果来实现破解。
点击左侧的Login包,通过右侧Inspectors查看细则。
尝试修改到期时间,提交完成(Run to Completion),客户端提示验证失败。
看来并不能简单的通过修改到期时间实现,此时就像知道这里面到底是怎么一个验证逻辑。
反编译APK解包
一边挂着扫描器,看这个服务器有没有漏洞,若拿到服务器也便可全然知道。
一边把APK提取出来,通过反编译查看里面的逻辑。
使用apktool.bat实现,解包
apktool.bat d wzzy2.apk
解包之后,在资源里寻找我们刚才抓包的网址HOST,或者特殊关键字。
我通过NOTEPAD++搜索HOST找到了他的逻辑校验过程。
主要代码在main.lua里面
可以看出来这个apk主要封装的lua脚本,这个资源目录下还有各个角色的头像,以及未识别到的通过红色背景代替。
md5.lua是一个通用的lua校验包,就不多看了。
Github地址:https://github.com/kikito/md5.lua
LUA脚本反编译解包
打开main.lua,发现还是加密的。
又得折腾许久,尝试过各种解密工具没有成功。最后通过lua反编译工具 unluac 成功解密。
unluac
下载地址:https://sourceforge.net/projects/unluac/files/latest/download
一样,也需要JAVA环境。
把main.lua移动和下载到的unluac_2015_06_13..jar放到同一目录。
通过命令行执行,
java -jar unluac_2015_06_13.jar main.lua > 1.lua
分析登录逻辑
打开生成的文件 1.lua
我们迅速找到登录验证的位置。
简单解析下逻辑,大概有这么几步
- 进入登录验证逻辑
- 回调HTTP响应包
- 通过,打散响应字符串
- 打散形成的数组必须为5个以上的成员
- 构建加密校验HASH(重要)
- 第一个参数必须大于0,(回马一枪,我测试时,在这里绊了很久)
这里我们不再逐步测试,直接用第五步的逻辑过程进行剖析,进行验证。
md5.sumhexa(riqi[1] .. riqi[2] .. riqi[3] .. "cnds…… aoxi" .. os.date("%d%H"))
这里代码逻辑是,将数组成员1,2,3,拼接起来,再拼接固定字符 "cnds…… aoxi", 再拼接时间字符,如0615 (X月6号,15时)。
最终将拼接的字符串MD5校验下,获取32位的小写字符。
此时,我们再尝试刚才FD的抓包步骤,将数据包清空,重新打开软件,进行抓包。
我们复制一整串字符,到以下JS脚本中,进行运行验证。
生成校验hash
注意复制的响应包体的第一个成员,即图中的82305,所在的位置一定要是大于0的正数。且时间第三个成员时间大于当前时间,可修改为2099年。其他参数可不变。
function strpad(str,length){
return (str/Math.pow(10,length)).toFixed(length).substr(2);
}
var response ='82305,99xxxxxxxx6,2019/6/13 22:28:41,598exxxxxxxxxxxxxx0c,授权到期2019/6/13 22:28:41必须在权限设置里把王者荣耀读取应用列表的权限关掉.注意误操作引起GG图标出现加速功能必须马上关闭游戏.否则必封号!,86xxxxx3,30,32,0,0,';
var data = response.split(',');
data[0]+data[1]+data[2]+"cnxxxxxxxxxxxxxoxi"+strpad(new Date().getDate(),2)+strpad(new Date().getHours(),2)
我们把最终的字符串复制出来,进行MD5加密
得到最终的校验MD5为:94a82489a532419a0fbbdacbf1ec178e
再次尝试抓包修改
我们将其替换到响应文本中的第4个数组成员。然后将整段替换好的响应文本粘贴到FD中,提交响应。
顺便点击GO,放行抓包,且关闭修改响应包选项。
Rules - Automatic Breakpoints - Disabled(勾选)
破解成功
此时回到手机,查看辅助软件,已经是激活成功。点击开启辅助便可进入游戏配置GG修改器实现透视。
此时修改到期时间破解也就结束了,只不过不方便的是,辅助不能关闭,关闭就要重新抓包验证。可奈何手机没找到按照规则自动抓包拦截的软件。
若有,就方便许多。简单记录,以供他人日后参考,关键部分已经打码。
(完)