王者荣耀透视辅助破解解析,简记

6 月 1 日前夕,就收到了王者荣耀辅助的透视脚本,本没心思去看。节日当天闲来无事,就尝试配置了一下,经过测试发现很稳定,后续使用是需要付费的。

这款辅助是通过 GG 修改器读取内存数据,并将其传送给令一客户端将对手位置渲染出来(采用浮动层),并非在修改原游戏内存,实现全图透视。毕竟修改内存会引起各种风险问题。

使用效果截图

毕竟因为是付费的, 一天 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

我们迅速找到登录验证的位置。

简单解析下逻辑,大概有这么几步

  1. 进入登录验证逻辑
  2. 回调 HTTP 响应包
  3. 通过,打散响应字符串
  4. 打散形成的数组必须为 5 个以上的成员
  5. 构建加密校验 HASH(重要)
  6. 第一个参数必须大于 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 修改器实现透视。

此时修改到期时间破解也就结束了,只不过不方便的是,辅助不能关闭,关闭就要重新抓包验证。可奈何手机没找到按照规则自动抓包拦截的软件。

若有,就方便许多。简单记录,以供他人日后参考,关键部分已经打码。

(完)

Comments

  • avatar
    王从安

    都反编译成功了,何不直接修改代码,再编译回去?

    2021-04-11 05:56

  • avatar
    flashjim

    httpcanary这个软件

    2020-09-01 14:29

  • avatar
    romejiang

    看着你破解过程很过瘾,不知道这个透视辅助还能用吗?给个链接或者代理QQ可以吗?

    2020-06-08 17:17