coder-Tom

一个喜欢代码, 音乐,读书, 跑步, 记录生活的程序员

0%

羊了个羊通关及关卡数据分析

羊了个羊破解

9月20号更新后

9.20以后,关卡的卡片数据地址变了, 依旧是利用 fiddler 的修改响应的功能,也就是FiddlerScript功能中的onBeforeResponse函数。此函数可以对响应数据进行修改,思路是将第二关的卡片的类型全部改为一样的或者改为无图案的空卡

我们直接上代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
if (oSession.uriContains("https://cat-match-static.easygame2021.com/maps/")){ //匹配关卡数据
if (oSession.responseCode == 200) {

var responseJsonString=oSession.GetResponseBodyAsString(); //获取response中的JSON数据,以字符串的形式接收
var responseJSON=Fiddler.WebFormats.JSON.JsonDecode(responseJsonString); //转化为JSON数据
var levelKey = responseJSON.JSONObject["levelKey"]; //获取“levelKey”中的数据

//80001是第一关,很简单,不需要修改。
//如果不是第一关,则进行卡片数据的修改
if(levelKey!="80001"){
//将卡片类型数据改为错误的属性名,这样会导致所有卡片为空白卡
var blankData = responseJsonString.replace("blockTypeData", "xxxblockTypeData");
oSession.utilSetResponseBody(blankData); //替换ResponseBody中的JSON数据
}

}

}

代码放到图中位置。点击 Save Script 生效,然后重新打开羊了个羊小程序进行闯关就行。
此时第二关所有卡片变为了空白卡,急速点击完卡片就闯关成功了,闯关成绩会正确提交至服务器

通关方法:

我只说利用 fiddler 的修改响应的功能,也就是FiddlerScript功能中的onBeforeResponse函数。
此函数可以对响应数据进行修改,思路很明确,目的就是要把羊了个羊关卡改为超低难度。

直接上代码:

if (oSession.uriContains(“https://cat-match.easygame2021.com/sheep/v1/game/map_info?map_id=")){ //匹配关卡地址

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
if (oSession.uriContains("https://cat-match.easygame2021.com/sheep/v1/game/map_info?map_id=")){ //匹配关卡地址

if (oSession.responseCode == 200) {
var responseJsonString=oSession.GetResponseBodyAsString(); //获取response中的JSON数据,以字符串的形式接收
var responseJSON=Fiddler.WebFormats.JSON.JsonDecode(responseJsonString); //转化为JSON数据
var data = responseJSON.JSONObject["data"]; //获取“data”中的数据

if(data.Contains("map_data")){ //如果data中的数据中,包含“map_data”字段

data["map_data"]="{\"widthNum\":8,\"heightNum\":10,\"levelKey\":80001,\"blockTypeData\":{\"1\":1},\"levelData\":{\"1\":[{\"id\":\"1-16-16\",\"type\":0,\"rolNum\":16,\"rowNum\":16,\"layerNum\":1,\"moldType\":1,\"blockNode\":null},{\"id\":\"1-28-16\",\"type\":0,\"rolNum\":28,\"rowNum\":16,\"layerNum\":1,\"moldType\":1,\"blockNode\":null},{\"id\":\"1-40-16\",\"type\":0,\"rolNum\":40,\"rowNum\":16,\"layerNum\":1,\"moldType\":1,\"blockNode\":null}]}}";

}

var myResponseJSON= Fiddler.WebFormats.JSON.JsonEncode(responseJSON.JSONObject); //转换回字符串

oSession.utilSetResponseBody(myResponseJSON); //替换ResponseBody中的JSON数据
}

}

代码放到图中位置。点击 Save Script 生效,然后重新打开羊了个羊小程序进行闯关就行。

所有关卡都只有三个草丛卡片。

关卡数据分析

关卡代码:

以下数据为仅三张草丛卡片,并不是原本数据,原本数据量较多较为啰嗦

1
2
3
4
5
6
7
8
9
10
11
12
{
"err_code": 0,
"err_msg": "",
"data": {
"id": "62ccde7d3dd1931da84a84e2",
"created_at": "2022-07-12T02:37:49.515Z",
"updated_at": "2022-09-14T15:53:23.508Z",
"map_option": 2,
"map_data": "{\"widthNum\":8,\"heightNum\":10,\"levelKey\":80001,\"blockTypeData\":{\"1\":1},\"levelData\":{\"1\":[{\"id\":\"1-16-16\",\"type\":0,\"rolNum\":16,\"rowNum\":16,\"layerNum\":1,\"moldType\":1,\"blockNode\":null},{\"id\":\"1-28-16\",\"type\":0,\"rolNum\":28,\"rowNum\":16,\"layerNum\":1,\"moldType\":1,\"blockNode\":null},{\"id\":\"1-40-16\",\"type\":0,\"rolNum\":40,\"rowNum\":16,\"layerNum\":1,\"moldType\":1,\"blockNode\":null}]}}",
"map_id": 80001
}
}

其中关于卡片的代码为 map_data 的内容,将其去除转义后:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
{
"widthNum": 8,
"heightNum": 10,
"levelKey": 80001,
"blockTypeData": {
"1": 1
},
"levelData": {
"1": [{
"id": "1-16-16",
"type": 0,
"rolNum": 16,
"rowNum": 16,
"layerNum": 1,
"moldType": 1,
"blockNode": null
}, {
"id": "1-28-16",
"type": 0,
"rolNum": 28,
"rowNum": 16,
"layerNum": 1,
"moldType": 1,
"blockNode": null
}, {
"id": "1-40-16",
"type": 0,
"rolNum": 40,
"rowNum": 16,
"layerNum": 1,
"moldType": 1,
"blockNode": null
}]
}
}

blockTypeData 卡片类型及组数量(一组三张)

{“1”: 1} ,其中”1”代表草丛卡片,1代表1组(三张卡)。

levelData 层卡片数据。每层元素的数据量总和,要与blockTypeData的卡片数量一致。
1.id 卡片坐标;
2. layerNum 第几层;
3.rolNum 列,与id中的保持一致
4.rowNum 行,与id中的保持一致

其他参数不再分析了,有疑问的回复。