(编辑:jimmy 日期: 2024/12/26 浏览:2)
羊了个羊近日火爆,对于这种收割智商税的游戏,论坛大佬们给出了很多思路
游戏由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 Beautifulimport requestst = "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秒,成功运行
由于不小心通了关,等明天再开游戏观察添加道具的接口了
今日游戏更新,上述方法二测试失败
通过抓包发现,开始游戏后的两次请求数据中,不再包含卡牌具体内容,因此修改失败
如图为第一关80001
的数据,明显046ef1bab26e5b9bfe2473ded237b572
是加密后的数据,但我们不关心具体内容
第二关90018
为84559a02920def9e5a3ddb921617de36
只要将这串字符改为第一关的就行,使用rewrite
或map local
功能实现
再次开始游戏,此时第二关变为和第一关一样,顺利通关
本次更新加大了直接修改地图内容的难度(需要重新找文件修改,或阅读源码获取解密算法)但对于直接改响应/直接发送过关请求没有影响
今日羊了个羊再次更新,之前的方法可能都不太好使了
进入游戏,抓包,发现只剩下一个包
请求为: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] }}
这样将会得到大量重复的卡牌:
成功通关后名片和朋友圈均显示!