本帖最后由 jjjzw 于 2022-9-20 08:33 编辑
9.20解决不显示方法在文末
羊了个羊近日火爆,对于这种收割智商税的游戏,论坛大佬们给出了很多思路
游戏由2关组成,在开始游戏时会请求每关的基本信息(包括卡牌类型代码和卡牌组数),然后将3倍卡牌放入一个array 中随机打乱,再放入地图指定位置,以达到随机关卡不给活路的目的(误
地图id为80001 (第一关)和90016 (第二关,每天不同)
文件结构如下:
数据包结构:
目前已有的破解思路:
-
修改第二关的请求响应,将block内容改为和第一关一样(或改成同一种卡片)(来自本站羊了个羊修改关卡以及只留3卡片思路分析)
-
修改第二关的请求响应,将blockTypeData 改掉,最终生成了全白的图片(来自b站CheersUP主的思路,简化了替换内容)
-
获取t值,直接发送通关请求
-
无限获取道具
使用第二种方法进行测试:
使用Charles的rewrite功能,将响应中的内容替换掉
将blockTypeData 改为clockTypeData ,结果如图:
卡片全部变成了空白,轻松过关
使用第三种方法测试:
获取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
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,结果:
通关时间显示40秒,成功运行
由于不小心通了关,等明天再开游戏观察添加道具的接口了
9.18更新
今日游戏更新,上述方法二测试失败
通过抓包发现,开始游戏后的两次请求数据中,不再包含卡牌具体内容,因此修改失败
如图为第一关80001 的数据,明显046ef1bab26e5b9bfe2473ded237b572 是加密后的数据,但我们不关心具体内容
第二关90018 为84559a02920def9e5a3ddb921617de36
只要将这串字符改为第一关的就行,使用rewrite 或map local 功能实现
再次开始游戏,此时第二关变为和第一关一样,顺利通关
本次更新加大了直接修改地图内容的难度(需要重新找文件修改,或阅读源码获取解密算法)但对于直接改响应/直接发送过关请求没有影响
9.20更新
今日羊了个羊再次更新,之前的方法可能都不太好使了
进入游戏,抓包,发现只剩下一个包
请求为:https://cat-match.easygame2021.com/sheep/v1/game/map_info_ex?matchType=3
查看响应内容:
data 由两部分组成
map_seed 是用于生成地图的种子,不清楚具体算法
map_md5 很明显就是地图内容的md5加密,和昨天的加密一样,查看昨天的地图80001 的加密数据,为046ef1bab26e5b9bfe2473ded237b572 ,和今天的map_md5[0] 完全一致,那就将第二张图的数据也改为这个:
进入游戏后完美实现将第二张图替换为第一张(与9.18结果一致),顺利通关
貌似破解通关后名片上不显示,朋友圈不显示
查看名片:
发现未加入羊群,目前还不知道具体原因。查看名片后,找到数据包:
https://cat-match.easygame2021.com/sheep/v1/game/personal_info?
{
"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功能修改响应地址:
{
"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
}
}
再次查看名片,名片成功出现了加入羊群(暂时只能自己看到)
通关无效解决办法
推测是否成功通关可能与map_md5有关,因此不碰map_md5,而是修改掉map_seed(修改该值不影响游戏开始,但影响卡牌的分布,卡牌会变得更加密集)
将响应修改为:
{
"err_code": 0,
"err_msg": "",
"data": {
"map_md5": ["046ef1bab26e5b9bfe2473ded237b572", "c1132aaca34fe95d20154aa4d5bfa826"],
"map_seed": [0, 0, 0, 0]
}
}
这样将会得到大量重复的卡牌:
成功通关后名片和朋友圈均显示!
|