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

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

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

这两天逛 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  
lhx2008
    1
lhx2008  
   2017-12-31 21:39:46 +08:00
只能刷到 999
bravecoder
    2
bravecoder  
OP
   2017-12-31 21:40:40 +08:00
@lhx2008 还没找到为啥被限制了 ……
Kahnn
    3
Kahnn  
   2017-12-31 21:42:05 +08:00
怎么抓包拿到 sesseion_id
mochanight
    4
mochanight  
   2017-12-31 21:42:15 +08:00 via iPhone
我抓了看到是加密的阿。。。。
dd0754
    5
dd0754  
   2017-12-31 21:46:20 +08:00
666
bravecoder
    6
bravecoder  
OP
   2017-12-31 21:56:19 +08:00
bravecoder
    7
bravecoder  
OP
   2017-12-31 21:58:10 +08:00
@mochanight 只是简单加密了,二期前端代码里有加密的逻辑,关键是后端没有校验 🤪
goodbest
    8
goodbest  
   2017-12-31 22:02:55 +08:00   ❤️ 1
ZE3kr
    9
ZE3kr  
   2017-12-31 22:08:51 +08:00 via iPhone
随便拿一个支持 HTTPS 的抓包工具就行了,我用 Surge 抓的
ZE3kr
    10
ZE3kr  
   2017-12-31 22:10:33 +08:00 via iPhone
我估计微信有设置游戏时长小于一定时间不能到 1000 以上吧
mayowwwww
    11
mayowwwww  
   2017-12-31 22:58:09 +08:00
难怪我之前改 1 万分以上都没成功过,待会试试。
Tink
    12
Tink  
   2017-12-31 23:30:10 +08:00 via iPhone
为啥我抓不到 servicewechat.com 的请求
chainchan
    13
chainchan  
   2017-12-31 23:36:26 +08:00
试了下不行, {u'base_resp': {u'errcode': 108}}
怀疑是 action_data 不完整
crab
    14
crab  
   2018-01-01 00:02:15 +08:00
跪了。pycrypto python3.5 vs2017
ZE3kr
    15
ZE3kr  
   2018-01-01 00:07:28 +08:00 via iPhone
现在好像不行了
star1cjl
    16
star1cjl  
   2018-01-01 00:12:38 +08:00
我是失败了
bravecoder
    17
bravecoder  
OP
   2018-01-01 00:14:04 +08:00   ❤️ 1
@crab 我是拿 python2 跑的……,python3 加解密要处理下转换 bytes ⇌ string
ZE3kr
    18
ZE3kr  
   2018-01-01 00:16:00 +08:00 via iPhone
@bravecoder 之前可以,现在一直不行了,你 2018 之后成功过么
bravecoder
    19
bravecoder  
OP
   2018-01-01 00:21:42 +08:00   ❤️ 1
@ZE3kr 好像是微信服务器有问题? 503 了……
ZE3kr
    20
ZE3kr  
   2018-01-01 00:23:56 +08:00 via iPhone
chainchan
    21
chainchan  
   2018-01-01 00:27:40 +08:00
实测目前最高只能刷到 500 分了。
pacino
    22
pacino  
   2018-01-01 00:35:45 +08:00
并没有 servicewechat.com 请求
ahu
    23
ahu  
   2018-01-01 00:41:28 +08:00
@bravecoder
解析脚本报错:

Traceback (most recent call last):
File "/Users/xxxx/Desktop/unwxapkg.py", line 75, in <module>
w = open(root + d.name, 'w')
IOError: [Errno 20] Not a directory: '/Users/xxxx/Desktop/wxa/3.wxapkg/app-config.json'
bravecoder
    24
bravecoder  
OP
   2018-01-01 00:43:05 +08:00
@ZE3kr 今天居然升级了到 version 4 了,🤔。我这改完 referer 好使,不过 好像限制加强了,500 最高 ……
bravecoder
    25
bravecoder  
OP
   2018-01-01 00:46:04 +08:00
aino
    26
aino  
   2018-01-01 01:00:50 +08:00
我 打不开
twm
    27
twm  
   2018-01-01 01:04:46 +08:00
{u'base_resp': {u'errcode': 108}}
slwl
    28
slwl  
   2018-01-01 08:03:01 +08:00
是不是已经失效了? {u'base_resp': {u'errcode': -2}}
zhijiansha
    29
zhijiansha  
   2018-01-01 09:12:19 +08:00 via iPhone
可以的
xqin
    30
xqin  
   2018-01-01 09:25:39 +08:00   ❤️ 4
1. 是有加密的, 算法是 AES, 加密的 KEY 是 session_id
2. 最高分是 100000 分(10 万分),并不是 999
3. 如果改的分数比较离谱会被官方直接给你清 0,而且如果多次改,可能会进黑名单,然后就是永久 0 分了(别问我是怎么知道的 /捂脸)
bravecoder
    31
bravecoder  
OP
   2018-01-01 09:29:22 +08:00
@twm @slwl 起来发现跳一跳又发新版本了, py 操作 aes 好像有点问题,速撸了个 js 版……
bravecoder
    32
bravecoder  
OP
   2018-01-01 09:35:41 +08:00
@xqin 😂 厉害了,还没试过刷非常高的分。微信维护升级特别快,刷分的漏洞估计很快就会被堵住了…
hobbyliu
    33
hobbyliu  
   2018-01-01 09:48:02 +08:00 via Android
@bravecoder 新版链接求
chocolatesir
    34
chocolatesir  
   2018-01-01 09:51:21 +08:00 via Android
@xqin 清零只是因为周一的原因吧。
qiayue
    35
qiayue  
   2018-01-01 10:03:21 +08:00
@bravecoder 123.125.9.32 这个服务器是你的还是微信的?
uglyer
    36
uglyer  
   2018-01-01 10:04:17 +08:00
想知道如何获取 appid.(滑稽
qiayue
    37
qiayue  
   2018-01-01 10:08:05 +08:00
@uglyer appid 有时候作者自己就会公布,因为公众号绑定小程序必须知道 appid
uglyer
    38
uglyer  
   2018-01-01 10:11:49 +08:00
@qiayue 看了一下下载的包实际上是分发的小程序,这个 ip 猜测是一个运营商的缓存服务器.
qiayue
    39
qiayue  
   2018-01-01 10:12:13 +08:00
感谢 @bravecoder,我根据你的帖子搞了一个大新闻
http://mp.weixin.qq.com/s/9ZQUL6UcYcBJK-ZTUjm7jQ
qiayue
    40
qiayue  
   2018-01-01 10:13:34 +08:00
我用我自己的小程序 appid 和 版本号的确可以下载
xqin
    41
xqin  
   2018-01-01 10:14:27 +08:00
@chocolatesir 不是因为周一,因为我是在游戏出来的当天下午就把分数改成最高了(其实当时是输入了好多个 6,但结果是分数只有 100000),然后到晚上的时候分数变成 0 了.又来改了几次,然后就进黑名单了.

@bravecoder 可能现在服务器端加验证了,提交分数的时候,服务器会返回 108. 可能对里面的数据进行了验证.
提交的数据里新增加了 touchList 节点.
bravecoder
    42
bravecoder  
OP
   2018-01-01 10:17:36 +08:00
@uglyer appid 是公开的,小程序码 识别处理出来的信息里应该就包含
xqin
    43
xqin  
   2018-01-01 10:22:32 +08:00
@qiayue 你这么搞恐怕是在害楼主吧.
uglyer
    44
uglyer  
   2018-01-01 10:23:13 +08:00
@xqin touchList,如果所有点击都是同一个像素点, 就会被识别为作弊,AI 加了随机坐标就好了。
xiaomayi0323
    45
xiaomayi0323  
   2018-01-01 10:23:16 +08:00
已经失效了吗,抓包没看到 https://servicewechat.com/ 域名,也没看到分数相关的参数
cfans1993
    46
cfans1993  
   2018-01-01 10:24:48 +08:00 via Android
凌晨刷到 1400, 现在起床一看发现变成零分了
bravecoder
    47
bravecoder  
OP
   2018-01-01 10:26:54 +08:00
@cfans1993 每周成绩在周一会自动清零
ZE3kr
    48
ZE3kr  
   2018-01-01 10:28:23 +08:00 via iPhone
bravecoder
    49
bravecoder  
OP
   2018-01-01 10:28:40 +08:00
@xqin 😅 纯娱乐,悠着点玩就好
codeeer
    50
codeeer  
   2018-01-01 10:29:12 +08:00 via iPhone
@ZE3kr 什么 app
mringg
    51
mringg  
   2018-01-01 10:31:46 +08:00
@qiayue。。。。。。
ZE3kr
    52
ZE3kr  
   2018-01-01 10:40:33 +08:00 via iPhone
@codeeer surge
uglyer
    53
uglyer  
   2018-01-01 10:41:03 +08:00
有没有人了解 里面图片的资源文件的图片是个什么编码的 ,想拿来做图像识别 哈哈哈哈哈哈。
sobigfish
    54
sobigfish  
   2018-01-01 10:48:30 +08:00
看到这个就知道 AppID 和版本号了
Referer: https://servicewechat.com/wx(16 进制包括前面的"wx"字符)/(版本号)/page-frame.html
lwbjing
    55
lwbjing  
   2018-01-01 11:09:16 +08:00
感谢楼主分享。。
alian
    56
alian  
   2018-01-01 11:17:27 +08:00
屌炸天🌚,tx 没修复之前赶紧装逼一波
![]( )
xycool
    57
xycool  
   2018-01-01 11:17:59 +08:00
@ZE3kr 请问现在还能抓包到吗?我这边用 surge 好像抓不到这个请求啊。
SingeeKing
    58
SingeeKing  
   2018-01-01 11:25:07 +08:00
@xycool 我这里 surge 正常
ghostxdy
    59
ghostxdy  
   2018-01-01 11:32:04 +08:00 via Android
这游戏完全被你们玩坏了
mekhili
    61
mekhili  
   2018-01-01 11:41:24 +08:00
可以可以,score = 2018
whwq2012
    62
whwq2012  
   2018-01-01 11:58:07 +08:00
@mekhili 是抓 https://mp.weixin.qq.com/wxagame/wxagame_init 的包吗,抓了以后怎么改呢?
qq2511296
    63
qq2511296  
   2018-01-01 12:13:15 +08:00
用 微信开发者工具新建小游戏 最新的微信开发者工具 mac 版 没有小游戏
cljnnn
    64
cljnnn  
   2018-01-01 12:15:00 +08:00 via Android
已经成功将分数变为 2018 了,cool
pangtong
    65
pangtong  
   2018-01-01 12:37:47 +08:00
我试了,的确可以下下载任何小程序的源代码。

cjyang1128
    66
cjyang1128  
   2018-01-01 12:39:20 +08:00
楼主你完了,你要收律师函了,这种东西底下沟通就行了
fe619742721
    67
fe619742721  
   2018-01-01 12:45:54 +08:00
wxagame_settlement { base_resp: { errcode: 0, ts: '1514781867875' } }
我这好像不行。。
Deeer
    68
Deeer  
   2018-01-01 12:48:18 +08:00
感觉加了时间校验,直接改 post,没有效果哦
dd0754
    69
dd0754  
   2018-01-01 13:00:03 +08:00
楼主 666
shaonian
    70
shaonian  
   2018-01-01 13:04:21 +08:00
抓请求之前看看 version,刚刚试过版本已经更新到 9 了
Wolther47
    71
Wolther47  
   2018-01-01 13:11:44 +08:00
@fe619742721 这个是 Respond,测试下来依旧可行

更加关心能够拿到小程序源代码,这个估计有新的姿势
ErnieSauce
    72
ErnieSauce  
   2018-01-01 13:14:52 +08:00
@idisreg 请问 http://123.125.9.32/resstatic.servicewechat.com/ 这两个地方需要改动吗?如果需要怎么获取,对应的是什么?谢谢
564425833
    73
564425833  
   2018-01-01 13:18:25 +08:00 via iPad
已撸,谢谢楼主
fe619742721
    74
fe619742721  
   2018-01-01 13:21:56 +08:00 via iPhone
@Wolther47 额,我这边排行榜数据没有更新。。。
pangtong
    75
pangtong  
   2018-01-01 13:33:49 +08:00   ❤️ 1
@ErnieSauce 这两个地方不需要改动, 你看楼主写的,他写的很清楚,通过抓包得到小程序的 APPid 和 版本号 通过上面的网址这个网址构造即可。
下面贴一下楼主写的。
### 如何下载小程序源代码
```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
qiayue
    76
qiayue  
   2018-01-01 13:34:43 +08:00
经过测试,现在已经无法直接下载了
Deeer
    77
Deeer  
   2018-01-01 13:39:07 +08:00
可以啊,刚下好
Deeer
    78
Deeer  
   2018-01-01 13:40:37 +08:00
为什么解压出来,项目报错说没有 app.json
VShawn
    79
VShawn  
   2018-01-01 13:45:52 +08:00
为什么要想尽办法去作弊?
Wolther47
    80
Wolther47  
   2018-01-01 13:46:48 +08:00
@fe619742721 是的,似乎数据更新有延迟,不知道是不是证书的问题
ttxxyy112233
    81
ttxxyy112233  
   2018-01-01 13:50:02 +08:00
安卓能改不?
SourceMan
    82
SourceMan  
   2018-01-01 13:52:37 +08:00
@VShawn #79 你看到的是作弊,我们看到的是技术探讨和研究。
如果一键脚本,刷到 9999 又如何

楼主给出了脚本实现,并没有指出运行方法,需要你自己去 HTTPS 解密,拿到 session_id,这是学习的第一步
其二,运行脚本,我想很多人发现缺依赖 run 不起来就会放弃吧。
最后,玩完了,是不是可以回去看看整个脚本的思路,发现并不复杂,只是你可以稍微了解下小程序的运行机制
pacino
    83
pacino  
   2018-01-01 14:17:18 +08:00
加 SSL 钢钉了吧,截不到数据了。
Brucepac
    84
Brucepac  
   2018-01-01 14:28:20 +08:00
哈哈,变成 2018 了,😆
ErnieSauce
    85
ErnieSauce  
   2018-01-01 14:38:51 +08:00
@idisreg 我用这个下载部分可以 但是还有一些出现 404 我在想是不是前方的 url 不同
fe619742721
    86
fe619742721  
   2018-01-01 14:40:46 +08:00
@Wolther47 嗯嗯 我这已经更新了
kkm
    87
kkm  
   2018-01-01 14:44:41 +08:00
@Brucepac 怎么拿到 session_id 啊
kkm
    88
kkm  
   2018-01-01 14:47:15 +08:00
SessionID: DC 6E E7 76 CD BF 39 是这个 Sessionid 吗?有点没搞懂
289450031
    89
289450031  
   2018-01-01 14:48:38 +08:00
@SourceMan 拿到 session_id 后续怎么操作,小白不太看得懂
kkm
    90
kkm  
   2018-01-01 14:53:32 +08:00
@289450031 你怎么拿到的? o(╥﹏╥)o
yagnqionggo
    91
yagnqionggo  
   2018-01-01 14:56:29 +08:00   ❤️ 1
发下重要的有几个点
1. 能抓包下载到 wxapkg
2. 能解开 wxapkg
3. 能阅读代码找到加密方式
wzw
    92
wzw  
   2018-01-01 14:57:45 +08:00
居然是 nodejs 版本, 什么时候来个 python
rswl
    93
rswl  
   2018-01-01 15:01:49 +08:00
启动不了
Andsoon
    94
Andsoon  
   2018-01-01 15:02:47 +08:00
十分赞同
Andsoon
    95
Andsoon  
   2018-01-01 15:03:36 +08:00
@rswl node 运行脚本
Rubbly
    96
Rubbly  
   2018-01-01 15:07:03 +08:00
加密的 key 是 session_id,有点意思 /doge
bravecoder
    97
bravecoder  
OP
   2018-01-01 15:09:31 +08:00
@wzw 最早一版是 py 的,可以在 gist 的修改历史里看到。后面 py 版加解密有点问题,拿 node 重写了,有兴趣你可以改改。
rswl
    98
rswl  
   2018-01-01 15:10:28 +08:00
@Andsoon 不是用微信开发者工具启动吗
bravecoder
    99
bravecoder  
OP
   2018-01-01 15:10:30 +08:00   ❤️ 1
wzw
    100
wzw  
   2018-01-01 15:15:55 +08:00
@bravecoder 居然可以看到源码. 不改了, node 挺好.

居然可以下载小程序,我的抓紧时间抓几个下来学习.

如何看下面 2 个参数?
{appid} 为小程序码, {version_num} 为 版本号
1  2  3  4  5  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3661 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 50ms · UTC 10:35 · PVG 18:35 · LAX 02:35 · JFK 05:35
Developed with CodeLauncher
♥ Do have faith in what you're doing.