微信 小游戏 堪称火爆,作为开发者,我感受到无比的自由。期待 2018 微信公开课带来更多的惊喜。
74e09b3fbc324881bc74e2c39d81c4e0.jpeg
这么火的游戏,在朋友圈没点分数怎么行
20171230142116_206011c7878453426d5c5e4b059cc472_1.jpeg先说一个简单的上分技巧:
1、当跳到井盖、便利店、魔方、音乐盒上时,等一下,会加分。
2、还有就是跳到 方块 中心的位置,会加分,还会叠加。
下面整理了知乎上一个大神的攻略:
原理什么的很简单,就是设置代理对手机进行抓包,然后通过python在本地发送请求。
另外,有一个教程是通过adb shell 截图测量方块距离,然后控制蓄力时间。我试了一下还是比较复杂,在此就不作分享了。
一、环境配置:
1、安卓手机
2、ubuntu 16.04 + python3 + node.js
3、安装python3依赖:
$ sudo pip3 install pycrypto
4、安装抓包工具(也可以使用 fiddler ):
$ npm install -g whistle # 安装到全局,待会用起来方便
$ whistle -V # 测试一下
二、配置代理:
2017-12-30 21-55-25屏幕截图.png$ whistle start # 启动代理服务器
然后在浏览器访问上面的地址,就可以看到操作界面。( 我电脑的ip地址是 192.168.2.130 )
2017-12-30 21-59-06屏幕截图.png三、设置手机代理连接:
手机和电脑需要处在同一局域网下,即连在一台路由器下。
webwxgetmsgimg.jpeg
四、设置https拦截:
因为微信要求所有的小程序使用 https 加密传输数据,如果手机不安装https证书的话,代理端是无法抓取https包的:
这时回到刚才电脑浏览器打开的抓包页面,从菜单上点击 https :
2017-12-30 22-13-46屏幕截图.png会弹出二维码,手机扫码安装Ca证书,注意 截图 下方需要打钩的位置。
但是,我尝试过扫码无法安装证书,需要点击 截图 左上角的下载链接,下载证书,通过usb数据线传输到手机,在手机上安装。
五、测试抓包是否正常:
还是回到电脑浏览器抓包页面,点击菜单上的Network,然后打开手机随便点点,当发现电脑屏幕有数据,这时基本就配置完成了环境:
2017-12-30 22-30-34屏幕截图.png
六、分析抓取的数据,提取session_id:
做过网站的朋友应该对session不会陌生,小程序是一样的道理,每次打开游戏都是产生一个新的session_id,后面的py脚本只需要这一个字段:
在微信上打开“ 跳一跳 ” 并开始游戏,然后注意抓取的数据,其中有这么一条:
2017-12-30 22-38-23屏幕截图.png点击它,再看右侧面板,依次打开选项:
2017-12-30 22-39-57屏幕截图.png复制session_id 字段对应的value值。
七、编写python脚本,代码如下:
# jump_game.py 文件
import requests
import json
import time
from Crypto.Cipher import AES
import base64
action_data = {
"score": 10086, # 1、表示想要的分数
"times": 666,
"game_data": "{}"
}
session_id = "H0u8RkVnm6m/Fezg==" # 2、上一步复制的session_id
aes_key = session_id[0:16]
aes_iv = aes_key
cryptor = AES.new(aes_key, AES.MODE_CBC, aes_iv)
str_action_data = json.dumps(action_data).encode("utf-8")
print("json_str_action_data ", str_action_data)
#Pkcs7
length = 16 - (len(str_action_data) % 16)
str_action_data += bytes([length])*length
cipher_action_data =
base64.b64encode(cryptor.encrypt(str_action_data)).decode("utf-8")
print("action_data ", cipher_action_data)
post_data = {
"base_req": {
"session_id": session_id,
"fast": 1,
},
"action_data": cipher_action_data
}
headers = {
"charset": "utf-8",
"Accept-Encoding": "gzip",
"referer": "https://servicewechat.com/wx7c8d593b2c3a7703/3/page-frame.html",
"content-type": "application/json",
"User-Agent": "MicroMessenger/6.6.1.1200(0x26060130) NetType/WIFI Language/zh_CN",
"Content-Length": "0",
"Host": "mp.weixin.qq.com",
"Connection": "Keep-Alive"
}
url = "https://mp.weixin.qq.com/wxagame/wxagame_settlement"
response = requests.post(url, json=post_data, headers=headers)
print(json.loads(response.text))
这个脚本只有两个地方需要修改,非常简单。
八、运行脚本:
success.pngpython3 jump_game.py
运行后得到这个结果,就可以刷新手机了,分数裆的一下起来了。
再啰嗦一句,脚本只有一次运行有效,待重启小程序,重新抓取 session_id后就可以再次运行。
网友评论