羊了个羊 快速通关(已解决名片不显示问题 9.20)
本帖最后由 jjjzw 于 2022-9-20 08:33 编辑9.20解决不显示方法在文末
**羊了个羊**近日火爆,对于这种收割智商税的游戏,论坛大佬们给出了很多思路
游戏由2关组成,在开始游戏时会请求每关的基本信息(包括卡牌类型代码和卡牌组数),然后将3倍卡牌放入一个`array`中随机打乱,再放入地图指定位置,以达到随机关卡不给活路的目的(误
地图id为`80001`(第一关)和`90016`(第二关,每天不同)
文件结构如下:
![文件结构](https://s1.328888.xyz/2022/09/17/oldVS.png)
数据包结构:
![数据包结构](https://s1.328888.xyz/2022/09/17/olWTF.png)
目前已有的破解思路:
1. 修改第二关的请求响应,将block内容改为和第一关一样(或改成同一种卡片)(来自本站[羊了个羊修改关卡以及只留3卡片思路分析](https://www.52pojie.cn/forum.php?mod=viewthread&tid=1688385&extra=&highlight=%D1%F2%C1%CB%B8%F6%D1%F2&page=1))
2. 修改第二关的请求响应,将`blockTypeData`改掉,最终生成了全白的图片(来自b站(https://www.bilibili.com/read/cv18625879)的思路,简化了替换内容)
3. 获取t值,直接发送通关请求
4. 无限获取道具
使用第二种方法进行测试:
使用Charles的rewrite功能,将响应中的内容替换掉
!(https://s1.328888.xyz/2022/09/17/omDEd.png)
将`blockTypeData`改为`clockTypeData`,结果如图:
![结果1](https://s1.328888.xyz/2022/09/17/olvp5.jpg)
卡片全部变成了空白,轻松过关
使用第三种方法测试:
获取`t`值:随便找个请求拿到`t`值
```
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXyNDkxNzcxNSwiZGVidWciOiIiLCJsYW5nIjoiIn0.vZVf1YuLOViM-tShvCM6mOKoEGZXnZhYzLRu5I9NFhM
```
发送请求:
`https://cat-match.easygame2021.com/sheep/v1/game/game_over?rank_score=1&rank_state=1&rank_time=59&rank_role=1&skin=1`
```python
from bs4 import Beautiful
import requests
t = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2OTQyNDM4ODQsIm5iZiI6MTY2MzE0MTY4NCwiaWF0IjoxNjYzMTM5ODg0LCJqdGkiOiJDTTpjYXRfbWF0Y2g6bHQxMjM0NTYiLCJvcGVuX2lkIjoiIiwidciOiIiLC.vZVf1YuLOViM-tShvCM6mOKoEGZXnZhYzLRu5I9NFhM"
headers = {
"t": t
}
url = "https://cat-match.easygame2021.com/sheep/v1/game/game_over?rank_score=1&rank_state=1&rank_time=40&rank_role=1&skin=1"
requests.get(url, headers)
```
这里我发送内容是通关时间40s,结果:
![结果2](https://s1.328888.xyz/2022/09/17/omLON.jpg)
通关时间显示40秒,成功运行
由于不小心通了关,等明天再开游戏观察添加道具的接口了
9.18更新
今日游戏更新,上述方法二测试失败
通过抓包发现,开始游戏后的两次请求数据中,不再包含卡牌具体内容,因此修改失败
!(https://s1.328888.xyz/2022/09/18/ocPsR.png)
如图为第一关`80001`的数据,明显`046ef1bab26e5b9bfe2473ded237b572`是加密后的数据,但我们不关心具体内容
第二关`90018`为`84559a02920def9e5a3ddb921617de36`
只要将这串字符改为第一关的就行,使用`rewrite`或`map local`功能实现
!(https://s1.328888.xyz/2022/09/18/ocfqP.png)
再次开始游戏,此时第二关变为和第一关一样,顺利通关
!(https://s1.328888.xyz/2022/09/18/oc8j6.jpg)
本次更新加大了直接修改地图内容的难度(需要重新找文件修改,或阅读源码获取解密算法)但对于直接改响应/直接发送过关请求没有影响
9.20更新
今日羊了个羊再次更新,之前的方法可能都不太好使了
进入游戏,抓包,发现只剩下一个包
!(https://s1.328888.xyz/2022/09/20/24sKo.png)
请求为:`https://cat-match.easygame2021.com/sheep/v1/game/map_info_ex?matchType=3`
查看响应内容:
!(https://s1.328888.xyz/2022/09/20/26xkJ.png)
`data`由两部分组成
+ map_md5
+ map_seed
`map_seed`是用于生成地图的种子,不清楚具体算法
`map_md5`很明显就是地图内容的md5加密,和昨天的加密一样,查看昨天的地图`80001`的加密数据,为`046ef1bab26e5b9bfe2473ded237b572`,和今天的`map_md5`完全一致,那就将第二张图的数据也改为这个:
!(https://s1.328888.xyz/2022/09/20/26r20.png)
进入游戏后完美实现将第二张图替换为第一张(与9.18结果一致),顺利通关
!(https://s1.328888.xyz/2022/09/20/242q0.jpg)
貌似破解通关后名片上不显示,朋友圈不显示
查看名片:
!(https://s1.328888.xyz/2022/09/20/2BDvF.jpg)
发现未加入羊群,目前还不知道具体原因。查看名片后,找到数据包:
`https://cat-match.easygame2021.com/sheep/v1/game/personal_info?`
```json
{
"err_code": 0,
"err_msg": "",
"data": {
"register_time": 1663161958,
"avatar": "",
"nick_name": "",
"challenge": 23,
"uid": 4210**23,
"daily_count": 4,
"topic_count": 0,
"today_state": 2,
"today_ts": 1663604857,
"today_time": 37,
"today_fail_count": 1,
"skin": 16
}
}
```
明显`today_state`的值是有问题的,因为通关时的接口(旧版本和新版本)均为`rank_state=1`,猜测1才是正常值
保存该响应,修改state为1,通过map local功能修改响应地址:
```json
{
"err_code": 0,
"err_msg": "",
"data": {
"register_time": 1663161958,
"avatar": "",
"nick_name": "",
"challenge": 23,
"uid": 4210**23,
"daily_count": 4,
"topic_count": 0,
"today_state": 1,
"today_ts": 1663604857,
"today_time": 37,
"today_fail_count": 1,
"skin": 16
}
}
```
再次查看名片,名片成功出现了加入羊群(暂时只能自己看到)
!(https://s1.328888.xyz/2022/09/20/2BND0.jpg)
通关无效解决办法
推测是否成功通关可能与map_md5有关,因此不碰map_md5,而是修改掉map_seed(修改该值不影响游戏开始,但影响卡牌的分布,卡牌会变得更加密集)
将响应修改为:
```json
{
"err_code": 0,
"err_msg": "",
"data": {
"map_md5": ["046ef1bab26e5b9bfe2473ded237b572", "c1132aaca34fe95d20154aa4d5bfa826"],
"map_seed":
}
}
```
这样将会得到大量重复的卡牌:
!(https://s1.328888.xyz/2022/09/20/2wDP5.jpg)
**成功通关后名片和朋友圈均显示!** 大神,可以出一个简单的方便小白的一键工具不? QianJXin 发表于 2022-9-17 01:49
楼主,第二种方法用HTTP Debugger Pro可以么?Charles抓不到。
可以的,可以参考另一篇帖子https://www.52pojie.cn/forum.php?mod=viewthread&tid=1688385
相当于重写了响应 楼主666
感谢楼主分享 http catcher改seed:
{
"rules" : [
{
"action" : "body",
"matchField" : "map_id",
"field" : "map_id",
"value" : "\"map_seed\":\\",
"matchValue" : "\"map_seed\":\\[.*\\]",
"destiontion" : "response",
"isRegex" : true
}
],
"enabled" : true,
"name" : "羊",
"description" : "",
"locations" : [
{
"method" : "GET",
"scheme" : "https",
"enabled" : true,
"port" : 0,
"query" : "matchType=3",
"host" : "cat-match.easygame2021.com",
"path" : "\/sheep\/v1\/game\/map_info_ex"
}
]
} 不错啊666 楼主,第二种方法用HTTP Debugger Pro可以么?Charles抓不到。 大神真牛啊 第三种方法是在什么软件里运行的呢 感谢楼主分享,支持一下! xuegaoxiansen 发表于 2022-9-17 02:43
第三种方法是在什么软件里运行的呢
只需要python环境就可以