爱意满满的作品展示区。
bravecoder

微信跳一跳 可以直接更改分数, POST 请求没有校验… 🤪

  bravecoder · Dec 31, 2017 · 95768 views
This topic created in 3088 days ago, the information mentioned may be changed or developed.

这两天逛 v 站出现了一众微信跳一跳 'AI',已经被刷屏了……

大致思路都是通过计算两点距离,模拟点击起跳来方式来实现的,

可是作为不越狱的苹果党,手里又没安卓机,看着被刷屏刷榜,非常不爽啊

想着抓个包看看能不能模拟下网络请求刷分,结果 ……

发现可以直接伪造 POST 请求刷分

https://gist.github.com/feix/6dd1f62a54c5efa10f1e1c24f8efc417

Supplement 1  ·  Dec 31, 2017
目前比较麻烦的是

- [ ] 需要先抓包拿到 sesseion_id
- [ ] 分数最高只能设置为 999,还未找到为啥 🐶

### 如何抓包:

1. 下载最新 [charlesproxy]( https://www.charlesproxy.com/download/)
2. 启动 charlesproxy
3. 配置代理: 设置 > 无线局域网 > 配置代理 > 手动 > IP:电脑 ip,端口:8888
4. 导入 https 证书: 浏览器访问 http://chls.pro/ssl 下载安装证书
5. 启动跳一跳小程序
6. 去 charlesproxy 里查看抓到的请求, https://servicewechat.com/ 域名的请求,请求体里就包含 session_id

### 突破 999 的分数限制

Just for fun !


另外附上两个个有意思的点:

### 如何下载小程序源代码
```bash
wget http://123.125.9.32/resstatic.servicewechat.com/weapp/release/{appid}/{version_num}.wxapkg
```

{appid} 为小程序码, {version_num} 为 版本号,示例:
http://123.125.9.32/resstatic.servicewechat.com/weapp/release/wx7c8d593b2c3a7703/3.wxapkg

### 如何解析 wxapkg 文件:
Supplement 2  ·  Jan 1, 2018

更正写错的地方

感兴趣的可以把 小程序 的代码下下来,解包在本地运行玩玩

  1. 用 微信开发者工具新建小游戏,选择空的项目目录,game4fun
  2. wget http://123.125.9.32/resstatic.servicewechat.com/weapp/release/wx7c8d593b2c3a7703/4.wxapkg
  3. python2 unwxapkg.py 4.wxapkg
  4. cp 4.wxapkg_dir/* game4fun/
  5. 重启微信开发者工具后就可以在电脑上运行 跳一跳

game.js 文件可以用 chrome 调整后再看,逻辑其实蛮清晰的

Supplement 3  ·  Jan 1, 2018

好消息,拿 JS 重撸了一遍逻辑,发现 999 这个限制没了,也就是可以任意刷分了……

https://gist.github.com/feix/6dd1f62a54c5efa10f1e1c24f8efc417#file-wx_t1t_hack-js

大家悠着点玩 😜

Supplement 4  ·  Jan 1, 2018

鉴于留言区有贴 session_id 求组的,增加一个附言: session_id 为 base64 字符串, 示例如下

zmprIsSEt/dxWNTH4iyU4V2uM7p8DTQWg1Op+dR0hwbvBW2bl00IHXuIGssPGoMeydL0thdRoxXa9MWqX1xEbDvk+o+1rLiihz0VDhUgbprjLVC4qBqiUQF54c061IhJ1JjBy79dI2xWYs0G9oyI9A==

session_id 和微信账号相关联, session_id 公示或提供给他人 都是有账号安全风险的

Supplement 5  ·  Jan 2, 2018

虽然 CDN 方式下载失效了, 原链还是可以下载的,各位 ……

https://servicewechat.com/weapp/release/${appid}/${version_num}.wxapkg

416 replies    2018-01-22 10:49:10 +08:00
1  2  3  4  5  
wzw
    101
wzw  
   Jan 1, 2018
@xqin @qiayue 我也觉得你这样发新闻不好
bravecoder
    102
bravecoder  
OP
   Jan 1, 2018
@wzw appid 是公开的,格式类似 wx7c8d593b2c3a7703 ;访问小程序时,http 请求 referer 里会包含。
version_num 类似,就是数字 1,2,3 …… 可以遍历
wzw
    103
wzw  
   Jan 1, 2018
@bravecoder 可惜有些小程序用这个链接下载是 404 Not Found

http://123.125.9.32/resstatic.servicewechat.com/weapp/release/***/*.wxapkg

是不是有些 IP 要改变? 不是一个地方存储
mysteri0uss
    104
mysteri0uss  
   Jan 1, 2018
https://gist.github.com/mysteriouss/01d7f18cdef47acc0781e8f484f2d2d0

根据楼主提供的代码修改的油猴脚本,在 tampermonkey 下运行正常
目前没有对 Referer 的验证
mason961125
    105
mason961125  
   Jan 1, 2018
所以现在还没修复?微信团队没人上 v2ex?
Telegram
    106
Telegram  
   Jan 1, 2018 via iPhone
本来只想改个 400 左右,弄个第一差不多了,结果改来改去,排行榜没变化。以为编码什么的问题,又从 github 复制一份测试,也没改分数直接运行,然后突然想到是不是刷新问题?

其他手机一看,哈哈哈哈,2018,尴尬了。。。
289450031
    107
289450031  
   Jan 1, 2018
@mysteri0uss 具体怎么使用呢?
esonchen
    108
esonchen  
   Jan 1, 2018
大佬放的 github 连接点不开耶...
mysteri0uss
    109
mysteri0uss  
   Jan 1, 2018   ❤️ 1
@289450031 #107 安装好以后,访问 https://mp.weixin.qq.com 即可
slwl
    110
slwl  
   Jan 1, 2018
如何抓包 拿到 session_id
下载最新 charlesproxy
启动 charlesproxy
配置代理: 设置 > 无线局域网 > 配置代理 > 手动 > IP:电脑 ip,端口:8888
导入 https 证书: 浏览器访问 http://chls.pro/ssl 下载安装证书
启动跳一跳小程序
去 charlesproxy 里查看抓到的请求, https://mp.weixin.qq.com/wxagame/wxagame_init 路径的请求,请求体里就包含 session_id


汗颜,启动跳一跳,没抓到 https://mp.weixin.qq.com/wxagame/wxagame_init 这个路径的数据哈。只有 https://mp.weixin.qq.com/
caijunyi
    111
caijunyi  
   Jan 1, 2018
都被你们玩坏了
Luzifer
    112
Luzifer  
   Jan 1, 2018
C:\Users\Dell\Desktop>node wx_t1t_hack.js
2018! Happy new year!

之后分数为什么没变呢? 应该是 2018 啊
289450031
    113
289450031  
   Jan 1, 2018
@mysteri0uss 方便留个联系方式交流一下吗
0754
    114
0754  
   Jan 1, 2018
老哥们,你们之前抓包的时候有没有这个 bottlereport,这个是之前就有还是现在才有的?如果是现在才有的那要小心了...
ljsh0102
    115
ljsh0102  
   Jan 1, 2018   ❤️ 1
@Luzifer 重启微信就可以了
mekhili
    116
mekhili  
   Jan 1, 2018
@dd0754 之前就有
Deeer
    117
Deeer  
   Jan 1, 2018
没有 app.json 怎么运行啊,求告知
artandlol
    118
artandlol  
   Jan 1, 2018   ❤️ 1
@mysteri0uss 安卓安装 packet capture 免 root 抓包 再配合你的脚本 成功了
x18960
    119
x18960  
   Jan 1, 2018
收藏了 大佬 ! 这不是徒手扒小程序吗
kiistar
    120
kiistar  
   Jan 1, 2018
好像被封了 所有的下载 都是 404 Not Found
kiistar
    121
kiistar  
   Jan 1, 2018
或者是不是各种类型的小程序 是分服务器放 前面的 http://123.125.9.32/ 这台服务器没有其他类型的小程序
Telegram
    122
Telegram  
   Jan 1, 2018 via iPhone   ❤️ 1
@Luzifer #112 别人看你已经变了,自己这里需要刷新的
lerp
    123
lerp  
PRO
   Jan 1, 2018 via Android
18:28 成功
touzi
    124
touzi  
PRO
   Jan 1, 2018
mysteri0uss 不行, Chrome 下工作台没有输出任何内容
touzi
    125
touzi  
PRO
   Jan 1, 2018
@mysteri0uss 不行
kiistar
    126
kiistar  
   Jan 1, 2018
@bravecoder 想问下楼主 123.125.9.32 是如何获得的
scusjs
    127
scusjs  
   Jan 1, 2018
@slwl #110 把 ssl 证书导入钥匙串,就能看到路径了
scusjs
    128
scusjs  
   Jan 1, 2018

然后去钥匙串中设置信任
bravecoder
    129
bravecoder  
OP
   Jan 1, 2018
@mysteri0uss 没太明白用油猴的好处,是不用装 node 吗?😅
bravecoder
    130
bravecoder  
OP
   Jan 1, 2018   ❤️ 1
@kiistar 前面有人提到了,应该是 cdn
bravecoder
    131
bravecoder  
OP
   Jan 1, 2018
@mason961125 哈哈哈,话说昨晚他们还升级了两个版本呢,今天一点动静都没有……
Wysten
    132
Wysten  
   Jan 1, 2018
此贴火了,头条,公众号都看到有人报道这贴子了。。
hihihihihi
    133
hihihihihi  
   Jan 1, 2018
6666, 我修改成 666 了。。。
fe619742721
    134
fe619742721  
   Jan 1, 2018 via iPhone
好欢乐,那么问题来了,如果你是腾讯跳一跳的开发者,你能用什么办法避免这种直接通过接口刷分的情况呢
qiayue
    135
qiayue  
PRO
   Jan 1, 2018
@fe619742721 前端记录用户操作 log,一起提交到后端去验证计算分数
Telegram
    136
Telegram  
   Jan 1, 2018 via iPhone
@bravecoder #129 不用装 nodejs 环境,不用 npm 下模块。

我今天临时弄这个环境,下模块报了半天错,win 系统权限问题搞烦死
kiistar
    137
kiistar  
   Jan 1, 2018
@bravecoder 您是如何获取到这个 cdn 的 ip 呢 通过 charles 没有找到能用的其他 ip 呢
fe619742721
    138
fe619742721  
   Jan 1, 2018 via iPhone
@qiayue 但是这种 log 也是能够被分析出规律从而伪造的吧,而且每一个做实时验证,服务端压力会不会不小?
额,我只是好奇,纯粹技术讨论哈。。感觉挺好玩的
qiayue
    139
qiayue  
PRO
   Jan 1, 2018
@fe619742721 没有完美的办法,只能尽可能的提高伪造数据的难度
yagnqionggo
    140
yagnqionggo  
   Jan 1, 2018
有个地方不明白,安装包的下载路径是怎么发现的,之前就有这个问题嘛,还是这次发现的
http://123.125.9.32/resstatic.servicewechat.com/weapp/release/wx7c8d593b2c3a7703/4.wxapkg
slwl
    141
slwl  
   Jan 1, 2018
@mysteri0uss 同样搞了半天没搞好 node 环境,request-promise 一直没搞好。
bravecoder
    142
bravecoder  
OP
   Jan 1, 2018
@fe619742721 看防御成本,在成本允许的范围的,前端尽可能做混淆提高复杂度。没有其他好的办法,毕竟前端是代码和数据都在攻击方手里。
yagnqionggo
    143
yagnqionggo  
   Jan 1, 2018
@bravecoder

http://123.125.9.32/resstatic.servicewechat.com/weapp/release/{appid}/{version_num}.wxapkg

发现关键的第一步抓包找不到,请问下这个下载地址是怎么发现的?
yagnqionggo
    144
yagnqionggo  
   Jan 1, 2018
@yagnqionggo 如果没有这个下载地址,后面就没法解密 wxapkg,也没法分析代码知道加密方式
bravecoder
    145
bravecoder  
OP
   Jan 1, 2018   ❤️ 1
@yagnqionggo 非常有意思的点。我把原始请求头发上来你就应该明白啦,注意看 UA
-H 'Accept: */*' -H 'Accept-Encoding: gzip' -H 'Cache-Control: no-cache' -H 'Connection: Keep-Alive' -H 'Content-Type: application/octet-stream' -H 'Host: 123.125.9.32' -H 'User-Agent: MicroMessenger Client'
lrdcq
    146
lrdcq  
   Jan 1, 2018
@yagnqionggo 抓包应该能抓到的。另外微信也会在手机本地 /data/data/com.tencent.mm/MicroMsg/{User}/appbrand/pkg 下储存 wxapkg 包。至于解密,拿到 wxapkg 随便看一下就会写了,根本没加密的成分在里面
sologgfun
    147
sologgfun  
   Jan 1, 2018
我手机上设置了 http 代理,也安装了证书,但是抓包的 mp.weixin.qq.com 下面全是 unknown 无法访问。请问是怎么回事呀?
slwl
    148
slwl  
   Jan 1, 2018
@sologgfun 一样的。全是 unknown
bravecoder
    149
bravecoder  
OP
   Jan 1, 2018
@lrdcq 其实就是解压缩,这个早就有人研究过 https://share.whuboy.com/weapp.html
h4rdy
    150
h4rdy  
   Jan 1, 2018
同问怎么找到这个地址的
http://123.125.9.32/resstatic.servicewechat.com
lrdcq
    151
lrdcq  
   Jan 1, 2018
@bravecoder 是啊,就是解压。我能说 lz 提到的 python 的解压脚本就是我去年初写的嘛( http://lrdcq.com/me/read.php/66.htm ),还把我署名去掉了(尴尬)
ch4in
    152
ch4in  
   Jan 1, 2018
@sologgfun
@slwl
看下手机当中 设置 - 通用 - 关于本机 - 证书信任设置 里边开关绿了
sologgfun
    153
sologgfun  
   Jan 1, 2018
@ch4in 谢谢大佬!
bravecoder
    154
bravecoder  
OP
   Jan 1, 2018
@lrdcq 非常尴尬了,看来我 gist 里原始代码的链接需要纠正下了,原谅我没有去考据一下。既然贴了博客,我就去看看🤓
voocel
    155
voocel  
   Jan 1, 2018
火钳刘明
lrdcq
    156
lrdcq  
   Jan 1, 2018
@bravecoder 倒是无所谓吐槽一下,应该是从 https://share.whuboy.com/weapp.html 中的代码 fork 出来的吧,他好歹做了一下改进,另外他这网站首页下面那个啥“从微信小程序看前端代码安全”也有我博客的内容。看起来他对看到的东西进行了重新整理和归纳的,我个人写博客和脚本比较随性,并不友好🤓
kalagxw
    157
kalagxw  
   Jan 1, 2018
经过测试 2018 分只能自己排行榜看到,好友排行榜已经没你这个人了。
twm
    158
twm  
   Jan 1, 2018 via iPhone
IllBeBack
    159
IllBeBack  
   Jan 1, 2018
@bravecoder

楼主这个地址失效了,请问有替代的吗?
123.125.9.32
Telegram
    160
Telegram  
   Jan 1, 2018
@sologgfun #147
@slwl #148
ios 系统的话需要进去设置,通用,关于本机,最后面证书信任设置,把证书信任
Telegram
    161
Telegram  
   Jan 1, 2018
@kalagxw #157 刚好相反,自己刷的,自己收集一下子看不到,因为排行榜没刷新。别人手机一下就能看到。

你这个我怀疑是被列入黑名单了
gyh
    162
gyh  
   Jan 1, 2018
@Telegram #161 关了微信重开过就能显示了
gyh
    163
gyh  
   Jan 1, 2018
@Telegram #161 不好意思 没看到原消息 理解错了
ThemisMin
    164
ThemisMin  
   Jan 1, 2018
@bravecoder 请问你贴出来的原始请求头是怎么抓到的?
Deeer
    165
Deeer  
   Jan 1, 2018 via iPhone
那么问题来了,如何修改游戏排名中的昵称呢
233
    166
233  
   Jan 1, 2018
你们现在还有人下载 wxapkg 成功吗
ThemisMin
    167
ThemisMin  
   Jan 1, 2018
@Deeer 这是要卖广告位的节奏吗
zz233333zz
    168
zz233333zz  
   Jan 1, 2018
@ZE3kr 为啥我用 surge 抓不到这个包呀,连一个 https 的包都没有呢
ob
    169
ob  
   Jan 1, 2018 via Android
默默的收藏
cigarzh
    170
cigarzh  
   Jan 1, 2018
改个小游戏分数不是个严重问题,拿到源码这件事就严重得多了
kiistar
    171
kiistar  
   Jan 1, 2018
解析出来的包文件都是 html 的 感觉内容无法正常使用
tf2017
    172
tf2017  
   Jan 1, 2018
@cigarzh #170 拿到源码也没有什么严重的,就跟 H5 小游戏一样。
Deeer
    173
Deeer  
   Jan 2, 2018
@ThemisMin 嘿嘿,发现改了微信名,游戏中的名字咩有对应改变
Liyuu
    174
Liyuu  
   Jan 2, 2018
感谢这么详细的教程,新年快乐!
billytom
    175
billytom  
   Jan 2, 2018
有小伙伴知道 surge 怎么抓包看小程序的 appid 和 version 吗?我怎么找来找去看不到?反而是跳一跳的很快就看到在哪里了
aino
    176
aino  
   Jan 2, 2018
如何提交修改好的 JS 文件啊?
er567
    177
er567  
   Jan 2, 2018
er567
    178
er567  
   Jan 2, 2018
#177 好吧 fq 就可以了
KgM4gLtF0shViDH3
    179
KgM4gLtF0shViDH3  
   Jan 2, 2018
@fe619742721 #134 只要是能够暴露前端源码的都不能避免,就像现在的新浪腾讯网易都可以被模拟登录。
Bantes
    180
Bantes  
   Jan 2, 2018
来玩的求几个 wxapkg 学习下
artandlol
    181
artandlol  
   Jan 2, 2018
再来个 iphone 方案
安装 红手指云手机 + 微信 + 黑松鼠(安卓虚拟机的 apk)
Telegram
    182
Telegram  
   Jan 2, 2018 via iPhone
@aino #176 安装 nodejs 环境,npm 装模块,然后运行。

或者你搜索油猴
Olajuwon
    183
Olajuwon  
   Jan 2, 2018
09:34 已成功
cxl008
    184
cxl008  
   Jan 2, 2018
已经玩坏了
qq2511296
    185
qq2511296  
   Jan 2, 2018
楼主是怎么抓包到 wxapkg 的下载地址的?
KgM4gLtF0shViDH3
    186
KgM4gLtF0shViDH3  
   Jan 2, 2018
@mysteri0uss #104 登录微信公众平台自动执行?
raofeng
    187
raofeng  
   Jan 2, 2018
整了个 9527,自己看是 0,别人能看到。
哎呀,玩坏了玩坏了,估计腾讯要开始加密了。
skadi
    188
skadi  
   Jan 2, 2018
我为 webGL 加热度. ( 微笑
goodluck
    189
goodluck  
   Jan 2, 2018
老铁,你破坏游戏规则了
zz233333zz
    190
zz233333zz  
   Jan 2, 2018
10.25 提交成功
a441023263
    191
a441023263  
   Jan 2, 2018
thor 直接抓
SkyKoo
    192
SkyKoo  
   Jan 2, 2018
已提交成功^^
kamal
    193
kamal  
   Jan 2, 2018
@bravecoder @yagnqionggo 非常有意思的点。我把原始请求头发上来你就应该明白啦,注意看 UA
-H 'Accept: */*' -H 'Accept-Encoding: gzip' -H 'Cache-Control: no-cache' -H 'Connection: Keep-Alive' -H 'Content-Type: application/octet-stream' -H 'Host: 123.125.9.32' -H 'User-Agent: MicroMessenger Client'

请问楼主这个请求是什么时候发起的呢,抓包没看到这个请求。
TanninS
    194
TanninS  
   Jan 2, 2018
老司机们,我已经安装好这两个包了
+ [email protected]
+ [email protected]

但是我在 macOS 终端输入 node wx_t1t_hack.js 以后出现这种情况是怎么回事呢

###
### The "request" library is not installed automatically anymore.
### But required by "request-promise".
###
### npm install request --save
###

/Users/tannins/node_modules/request-promise/lib/rp.js:23
throw err;
^
krfalcon
    195
krfalcon  
   Jan 2, 2018
@zz233333zz surge 如何抓包 https
finab
    196
finab  
   Jan 2, 2018
@TanninS
export NODE_PATH=/usr/local/lib/node_modules/
finab
    197
finab  
   Jan 2, 2018
something crash 了呀
调试后发现是这个没有 var times = response.my_user_info.times + 1
谁知道咋回事么?
ycmchong
    198
ycmchong  
   Jan 2, 2018
github 地址打不开了,删了?
finab
    199
finab  
   Jan 2, 2018
@finab 已解决 105 行 改成 var times = response.ts + 1
satanandroid
    200
satanandroid  
   Jan 2, 2018
2018 分。提交成功. 2018 年 1 月 2 日 11:28:01
1  2  3  4  5  
About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   3953 Online   Highest 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 174ms · UTC 10:18 · PVG 18:18 · LAX 03:18 · JFK 06:18
♥ Do have faith in what you're doing.