微信跳一跳 可以直接更改分数, POST 请求没有校验… - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
bravecoder
V2EX    分享创造

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

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

这两天逛 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  
PRO
   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}}
NLL
    29
NLL  
   2018-01-01 09:12:19 +08:00 via iPhone
可以的
table cellpadding="0" cellspacing="0" border="0" width="100%"> O3YwA1ENkb7i35XJ
    30
O3YwA1ENkb7i35XJ  
   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  
PRO
   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  
PRO
   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  
PRO
   2018-01-01 10:12:13 +08:00
感谢 @bravecoder,我根据你的帖子搞了一个大新闻
http://mp.weixin.qq.com/s/9ZQUL6UcYcBJK-ZTUjm7jQ
qiayue
    40
qiayue  
PRO
   2018-01-01 10:13:34 +08:00
我用我自己的小程序 appid 和 版本号的确可以下载
O3YwA1ENkb7i35XJ
    41
O3YwA1ENkb7i35XJ  
   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 是公开的,小程序码 识别处理出来的信息里应该就包含
O3YwA1ENkb7i35XJ
    43
O3YwA1ENkb7i35XJ  
   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
ming2050
    51
ming2050  
   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
有没有人了解 里面图片的资源文件的图片是个什么编码的 ,想拿来做图像识别 哈哈哈哈哈哈。
run2
    54
run2  
   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  
PRO
   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
syahd
    62
syahd  
   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  
PRO
   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 是的,似乎数据更新有延迟,不知道是不是证书的问题
    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     Solana     885 人在线   最高记录 6679      Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 41ms UTC 20:37 PVG 04:37 LAX 13:37 JFK 16:37
Do have faith in what you're doing.
ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86