×

微信跳一跳 高分技巧分享

96
MAX_大左
2017.12.30 22:54* 字数 870

微信 小游戏 堪称火爆,作为开发者,我感受到无比的自由。期待 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          # 测试一下

二、配置代理:

$ whistle start         # 启动代理服务器

2017-12-30 21-55-25屏幕截图.png

然后在浏览器访问上面的地址,就可以看到操作界面。( 我电脑的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))

这个脚本只有两个地方需要修改,非常简单。

八、运行脚本:

python3 jump_game.py

success.png

运行后得到这个结果,就可以刷新手机了,分数裆的一下起来了。
再啰嗦一句,脚本只有一次运行有效,待重启小程序,重新抓取 session_id后就可以再次运行。

日记本
Web note ad 1