蚂蚁庄园运动会游戏刷分

蚂蚁庄园运动会游戏刷分

蚂蚁庄园小游戏实际上是H5页面,分数上传使用的H5RPC接口,H5RPC可以使用xposed等直接调用,但是有一个md5值,所以还得分析游戏页面的代码。

分数上传示例数据:

1
2
// com.alipay.antfarm.recordFarmGame
[{"gameType":"jumpGame","md5":"2d3cefdb06793ddc52b38e218b3dd41b","requestType":"NORMAL","sceneCode":"ANTFARM","score":40,"source":"H5","toolTypes":"STEALTOOL,ACCELERATETOOL,SHARETOOL","uuid":"a3b6e4947406434e"}]

获取游戏页面源码比较困难,无法成功抓包。。。
使用uiautomatorviewer分析得知页面的View为com.uc.webview.export.WebView
搜索支付宝反编译后的代码,找到此类的一个loadUrl方法,使用frida进行hook,输出调用此方法的参数,获取到游戏的URL为:

1
https://68687154.h5app.alipay.com/www/chicken_jump/index.htm

支付宝客户端使用了HTTPS-DNS技术,导致这个域名无法直接解析。通过抓包,获取到了对应的IP地址。但是服务器似乎使用了双向认证,还是无法获取到页面源码。

通过查看loadUrl输入的参数,在加载上边这个URL后,会再加载一个特殊的URL:

1
javascript:{window.__alipayConsole__ = window.console}

通过修改loadUrl的参数,可以在游戏页面上执行JS代码,于是我使用以下代码获得了游戏源码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
function onResult() {
if (xhr.readyState == 4) {
if (xhr.status == 200) {
document.write('');
x = document.createElement('textarea');
x.value = xhr.responseText;
document.append(x);
}
}
};
xhr = new XMLHttpRequest();
xhr.onreadystatechange = onResult;
xhr.open('GET', 'https://68687154.h5app.alipay.com/www/chicken_jump/index/entry.js', true);
xhr.send(null);

通过分析js代码,成功还原了md5函数的参数:

1
uid + score + token

uid和token能在游戏开始前的H5RPC响应数据包中获取到。

测试截图:
alert(location.href)

alert游戏页面H5源码:

登山赛刷分(显示30为本地分数,上传的分数为1655).

另一个星星球也可以刷: