首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
bravecoder
V2EX  ›  分享创造

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

  bravecoder · 2017-12-31 21:29:48 +08:00 · 79368 次点击
这是一个创建于 748 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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

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

第 1 条附言  ·  2017-12-31 22:02:32 +08:00
目前比较麻烦的是

- [ ] 需要先抓包拿到 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 文件:
第 2 条附言  ·  2018-01-01 01:03:12 +08:00

更正写错的地方

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

  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 调整后再看,逻辑其实蛮清晰的

第 3 条附言  ·  2018-01-01 10:24:34 +08:00

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

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

大家悠着点玩 😜

第 4 条附言  ·  2018-01-01 15:05:53 +08:00

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

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

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

第 5 条附言  ·  2018-01-02 18:47:40 +08:00

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

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

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

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

是不是有些 IP 要改变? 不是一个地方存储
mysteri0uss
    104
mysteri0uss   2018-01-01 15:55:41 +08:00


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

其他手机一看,哈哈哈哈,2018,尴尬了。。。
289450031
    107
289450031   2018-01-01 16:06:17 +08:00
@mysteri0uss 具体怎么使用呢?
esonchen
    108
esonchen   2018-01-01 16:08:43 +08:00
大佬放的 github 连接点不开耶...
mysteri0uss
    109
mysteri0uss   2018-01-01 16:10:13 +08:00   ♥ 1
@289450031 #107 安装好以后,访问 https://mp.weixin.qq.com 即可
slwl
    110
slwl   2018-01-01 16:29:56 +08:00
如何抓包 拿到 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   2018-01-01 16:32:34 +08:00
都被你们玩坏了
Luzifer
    112
Luzifer   2018-01-01 16:33:33 +08:00
C:\Users\Dell\Desktop>node wx_t1t_hack.js
2018! Happy new year!

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

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

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

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

发现关键的第一步抓包找不到,请问下这个下载地址是怎么发现的?
yagnqionggo
    144
yagnqionggo   2018-01-01 19:48:46 +08:00
@yagnqionggo 如果没有这个下载地址,后面就没法解密 wxapkg,也没法分析代码知道加密方式
bravecoder
    145
bravecoder   2018-01-01 20:06:56 +08:00   ♥ 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   2018-01-01 20:16:52 +08:00
@yagnqionggo 抓包应该能抓到的。另外微信也会在手机本地 /data/data/com.tencent.mm/MicroMsg/{User}/appbrand/pkg 下储存 wxapkg 包。至于解密,拿到 wxapkg 随便看一下就会写了,根本没加密的成分在里面
sologgfun
    147
sologgfun   2018-01-01 20:22:00 +08:00
我手机上设置了 http 代理,也安装了证书,但是抓包的 mp.weixin.qq.com 下面全是 unknown 无法访问。请问是怎么回事呀?
slwl
    148
slwl   2018-01-01 20:24:37 +08:00
@sologgfun 一样的。全是 unknown
bravecoder
    149
bravecoder   2018-01-01 20:24:38 +08:00
@lrdcq 其实就是解压缩,这个早就有人研究过 https://share.whuboy.com/weapp.html
h4rdy
    150
h4rdy   2018-01-01 20:24:45 +08:00
同问怎么找到这个地址的
http://123.125.9.32/resstatic.servicewechat.com
lrdcq
    151
lrdcq   2018-01-01 20:29:43 +08:00
@bravecoder 是啊,就是解压。我能说 lz 提到的 python 的解压脚本就是我去年初写的嘛( http://lrdcq.com/me/read.php/66.htm ),还把我署名去掉了(尴尬)
ch4in
    152
ch4in   2018-01-01 20:30:44 +08:00
@sologgfun
@slwl
看下手机当中 设置 - 通用 - 关于本机 - 证书信任设置 里边开关绿了
sologgfun
    153
sologgfun   2018-01-01 20:35:54 +08:00
@ch4in 谢谢大佬!
bravecoder
    154
bravecoder   2018-01-01 20:46:07 +08:00
@lrdcq 非常尴尬了,看来我 gist 里原始代码的链接需要纠正下了,原谅我没有去考据一下。既然贴了博客,我就去看看🤓
voocel
    155
voocel   2018-01-01 20:52:47 +08:00
火钳刘明
lrdcq
    156
lrdcq   2018-01-01 20:56:29 +08:00
@bravecoder 倒是无所谓吐槽一下,应该是从 https://share.whuboy.com/weapp.html 中的代码 fork 出来的吧,他好歹做了一下改进,另外他这网站首页下面那个啥“从微信小程序看前端代码安全”也有我博客的内容。看起来他对看到的东西进行了重新整理和归纳的,我个人写博客和脚本比较随性,并不友好🤓
kalagxw
    157
kalagxw   2018-01-01 21:02:53 +08:00
经过测试 2018 分只能自己排行榜看到,好友排行榜已经没你这个人了。
twm
    158
twm   2018-01-01 21:02:59 +08:00 via iPhone
IllBeBack
    159
IllBeBack   2018-01-01 21:24:33 +08:00
@bravecoder

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

你这个我怀疑是被列入黑名单了
gyh
    162
gyh   2018-01-01 21:44:47 +08:00
@Telegram #161 关了微信重开过就能显示了
gyh
    163
gyh   2018-01-01 21:48:56 +08:00
@Telegram #161 不好意思 没看到原消息 理解错了
ThemisMin
    164
ThemisMin   2018-01-01 21:54:32 +08:00
@bravecoder 请问你贴出来的原始请求头是怎么抓到的?
Deeer
    165
Deeer   2018-01-01 21:57:22 +08:00 via iPhone
那么问题来了,如何修改游戏排名中的昵称呢
233
    166
233   2018-01-01 22:02:07 +08:00
你们现在还有人下载 wxapkg 成功吗
ThemisMin
    167
ThemisMin   2018-01-01 22:06:12 +08:00
@Deeer 这是要卖广告位的节奏吗
zz233333zz
    168
zz233333zz   2018-01-01 22:22:04 +08:00
@ZE3kr 为啥我用 surge 抓不到这个包呀,连一个 https 的包都没有呢
ob
    169
ob   2018-01-01 22:30:18 +08:00 via Android
默默的收藏
cigarzh
    170
cigarzh   2018-01-01 22:43:44 +08:00
改个小游戏分数不是个严重问题,拿到源码这件事就严重得多了
kiistar
    171
kiistar   2018-01-01 23:04:29 +08:00
解析出来的包文件都是 html 的 感觉内容无法正常使用
tf2017
    172
tf2017   2018-01-01 23:19:50 +08:00
@cigarzh #170 拿到源码也没有什么严重的,就跟 H5 小游戏一样。
Deeer
    173
Deeer   2018-01-02 00:20:41 +08:00
@ThemisMin 嘿嘿,发现改了微信名,游戏中的名字咩有对应改变
Liyuu
    174
Liyuu   2018-01-02 03:05:16 +08:00
感谢这么详细的教程,新年快乐!
billytom
    175
billytom   2018-01-02 05:12:46 +08:00
有小伙伴知道 surge 怎么抓包看小程序的 appid 和 version 吗?我怎么找来找去看不到?反而是跳一跳的很快就看到在哪里了
aino
    176
aino   2018-01-02 08:49:10 +08:00
如何提交修改好的 JS 文件啊?
er567
    177
er567   2018-01-02 09:05:03 +08:00

这个链接是打不开了么
er567
    178
er567   2018-01-02 09:09:42 +08:00
#177 好吧 fq 就可以了
bestkayle
    179
bestkayle   2018-01-02 09:15:36 +08:00
@fe619742721 #134 只要是能够暴露前端源码的都不能避免,就像现在的新浪腾讯网易都可以被模拟登录。
Bantes
    180
Bantes   2018-01-02 09:18:24 +08:00
来玩的求几个 wxapkg 学习下
artandlol
    181
artandlol   2018-01-02 09:25:06 +08:00
再来个 iphone 方案
安装 红手指云手机 + 微信 + 黑松鼠(安卓虚拟机的 apk)
Telegram
    182
Telegram   2018-01-02 09:33:44 +08:00 via iPhone
@aino #176 安装 nodejs 环境,npm 装模块,然后运行。

或者你搜索油猴
Olajuwon
    183
Olajuwon   2018-01-02 09:34:49 +08:00
09:34 已成功
cxl008
    184
cxl008   2018-01-02 09:48:22 +08:00
已经玩坏了
qq2511296
    185
qq2511296   2018-01-02 09:57:02 +08:00
楼主是怎么抓包到 wxapkg 的下载地址的?
bestkayle
    186
bestkayle   2018-01-02 10:05:21 +08:00
@mysteri0uss #104 登录微信公众平台自动执行?
raofeng
    187
raofeng   2018-01-02 10:16:15 +08:00
整了个 9527,自己看是 0,别人能看到。
哎呀,玩坏了玩坏了,估计腾讯要开始加密了。
skadi
    188
skadi   2018-01-02 10:20:35 +08:00
我为 webGL 加热度. ( 微笑
goodluck
    189
goodluck   2018-01-02 10:22:13 +08:00
老铁,你破坏游戏规则了
zz233333zz
    190
zz233333zz   2018-01-02 10:31:56 +08:00
10.25 提交成功
a441023263
    191
a441023263   2018-01-02 10:33:18 +08:00
thor 直接抓
SkyKoo
    192
SkyKoo   2018-01-02 10:43:23 +08:00
已提交成功^^
kamal
    193
kamal   2018-01-02 10:57:08 +08:00
@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   2018-01-02 11:14:40 +08:00
老司机们,我已经安装好这两个包了
+ [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   2018-01-02 11:15:09 +08:00
@zz233333zz surge 如何抓包 https
finab
    196
finab   2018-01-02 11:18:35 +08:00
@TanninS
export NODE_PATH=/usr/local/lib/node_modules/
finab
    197
finab   2018-01-02 11:19:19 +08:00
something crash 了呀
调试后发现是这个没有 var times = response.my_user_info.times + 1
谁知道咋回事么?
ycmchong
    198
ycmchong   2018-01-02 11:22:04 +08:00
github 地址打不开了,删了?
finab
    199
finab   2018-01-02 11:23:00 +08:00
@finab 已解决 105 行 改成 var times = response.ts + 1
satanandroid
    200
satanandroid   2018-01-02 11:28:09 +08:00
2018 分。提交成功. 2018 年 1 月 2 日 11:28:01
1  2  3  4  5  
关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2487 人在线   最高记录 5168   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.3 · 37ms · UTC 14:07 · PVG 22:07 · LAX 06:07 · JFK 09:07
♥ Do have faith in what you're doing.