2023年7月21日
This commit is contained in:
parent
d1ac485617
commit
1cbe932d88
Binary file not shown.
Before Width: | Height: | Size: 331 KiB After Width: | Height: | Size: 576 KiB |
Binary file not shown.
After Width: | Height: | Size: 204 KiB |
Binary file not shown.
Before Width: | Height: | Size: 331 KiB After Width: | Height: | Size: 576 KiB |
|
@ -13,14 +13,11 @@ The current acquisition API is
|
|||
* 但是有加密的参数,我不知道如何生成,所以我只能从游戏的下载过程截获。
|
||||
But there are encrypted parameters that I don't know how to generate. So I intercepted from the game's download process.
|
||||
|
||||
* 使用 [Fidder](https://www.telerik.com/download/fiddler),执行 *HTTPS 中间人攻击*从游戏内抓包获得怪物信息。
|
||||
Use [Fidder](https://www.telerik.com/download/fiddler), do *HTTPS man-in-the-middle attack* to capture monster information from in-game capture.
|
||||
* 使用 [Fiddler](https://telerik-fiddler.s3.amazonaws.com/fiddler/FiddlerSetup.exe),执行 *HTTPS 中间人攻击*从游戏内抓包获得怪物信息。
|
||||
Use [Fiddler](https://telerik-fiddler.s3.amazonaws.com/fiddler/FiddlerSetup.exe), do *HTTPS man-in-the-middle attack* to capture monster information from in-game capture.
|
||||
|
||||
* 安卓5可以直接在安卓系统里安装 *CER* 证书,但安卓7开始,系统不再信任用户证书。
|
||||
Android 5 can install *CER* certificates directly in Android. Starting with Android 7, the system no longer trusts user certificates.
|
||||
|
||||
* 由于需要安卓 7 才能玩智龙迷城,所以要先创建安卓 7 的模拟器,再安装智龙迷城。
|
||||
Since Android 7 is required to play PAD, you must create an emulator for Android 7 before installing PAD.
|
||||
* 安卓5可以直接在安卓系统里安装 *CER* 证书,但安卓7开始,系统不再信任用户证书。由于需要安卓 7 才能玩智龙迷城,所以要先创建安卓 7 的模拟器,再安装智龙迷城。
|
||||
Android 5 can install *CER* certificates directly in Android. Starting with Android 7, the system no longer trusts user certificates. Since Android 7 is required to play PAD, you must create an emulator for Android 7 before installing PAD.
|
||||
|
||||
* 将 Fidder 根证书导出到桌面
|
||||
Export the Fidder Root Certificate to desktop
|
||||
|
@ -36,8 +33,8 @@ Execute the code to get the hash of the certificate
|
|||
Execute the code to convert the certificate from *CER* to *PEM* format
|
||||
`openssl x509 -inform DER -in FiddlerRoot.cer -outform PEM -out [hash].0`
|
||||
|
||||
* 将证书文件放入安卓系统证书文件夹
|
||||
Place the certificate file in the Android system certificate folder
|
||||
* 将证书文件放入安卓系统证书文件夹`/system/etc/security/cacerts/`
|
||||
Place the certificate file in the Android system certificate folder`/system/etc/security/cacerts/`
|
||||
参考/Reference: https://www.jianshu.com/p/035f7d7a0f7e
|
||||
|
||||
<details>
|
||||
|
@ -93,49 +90,30 @@ Now that you're running the game inside the simulator, Fidder will be able to in
|
|||
|
||||
```js
|
||||
//自动储存智龙迷城数据
|
||||
var PADDataPath = "D:\\PADDashFormation\\monsters-info\\official-API\\";
|
||||
if (oSession.HostnameIs("api-adr.padsv.gungho.jp") //日服域名
|
||||
|| oSession.HostnameIs("api-ht-adr.padsv.gungho.jp") //港台服域名
|
||||
|| oSession.HostnameIs("api-na-adrv2.padsv.gungho.jp") //美服域名
|
||||
|| oSession.HostnameIs("api-kr-adrv2.padsv.gungho.jp") //韩服域名
|
||||
) {
|
||||
var serverName;
|
||||
switch (oSession.hostname)
|
||||
{
|
||||
case "api-adr.padsv.gungho.jp": //日服域名
|
||||
case "api-ht-adr.padsv.gungho.jp": //港台服域名
|
||||
serverName = "ja"
|
||||
break;
|
||||
case "api-na-adrv2.padsv.gungho.jp": //美服域名
|
||||
serverName = "en"
|
||||
break;
|
||||
case "api-kr-adrv2.padsv.gungho.jp": //韩服域名
|
||||
serverName = "ko"
|
||||
break;
|
||||
switch (oSession.hostname) {
|
||||
case "api-adr.padsv.gungho.jp": //日服域名
|
||||
case "api-ht-adr.padsv.gungho.jp":{ //港台服域名
|
||||
savePADData("ja");
|
||||
break;
|
||||
}
|
||||
case "api-na-adrv2.padsv.gungho.jp":{ //美服域名
|
||||
savePADData("en");
|
||||
break;
|
||||
}
|
||||
case "api-kr-adrv2.padsv.gungho.jp":{ //韩服域名
|
||||
savePADData("ko");
|
||||
break;
|
||||
}
|
||||
}
|
||||
function savePADData(serverName: String) {
|
||||
//智龙迷城数据文件位置
|
||||
var PADDataPath: String = "D:\\www\\PADDashFormation\\monsters-info\\official-API\\";
|
||||
if (oSession.uriContains("download_card_data")) { //自动保存怪物数据
|
||||
oSession.SaveResponseBody(PADDataPath + serverName + "-card.json")
|
||||
oSession.SaveResponseBody(Path.Combine(PADDataPath, serverName + "-card.json"));
|
||||
}
|
||||
if (oSession.uriContains("download_skill_data")) { //自动保存技能数据
|
||||
oSession.SaveResponseBody(PADDataPath + serverName + "-skill.json")
|
||||
oSession.SaveResponseBody(Path.Combine(PADDataPath, serverName + "-skill.json"));
|
||||
}
|
||||
/*
|
||||
if (oSession.uriContains("download_dungeon_data")) { //自动保存地下城数据
|
||||
oSession.SaveResponseBody(PADDataPath + serverName + "-dungeon.json")
|
||||
}
|
||||
if (oSession.uriContains("download_limited_bonus_data")) { //自动保存limited_bonus数据
|
||||
oSession.SaveResponseBody(PADDataPath + serverName + "-limited_bonus.json")
|
||||
}
|
||||
if (oSession.uriContains("download_enemy_skill_data")) { //自动保存敌人技能数据
|
||||
oSession.SaveResponseBody(PADDataPath + serverName + "-enemy_skill.json")
|
||||
}
|
||||
if (oSession.uriContains("shop_item")) { //自动保存商店数据
|
||||
oSession.SaveResponseBody(PADDataPath + serverName + "-shop_item.json")
|
||||
}
|
||||
if (oSession.uriContains("mdatadl")) { //自动保存交换所数据
|
||||
oSession.SaveResponseBody(PADDataPath + serverName + "-mdatadl.json")
|
||||
}
|
||||
*/
|
||||
}
|
||||
```
|
||||
|
||||
|
|
|
@ -2,25 +2,25 @@
|
|||
{
|
||||
"code": "ja",
|
||||
"ckey": {
|
||||
"card": "57b927958ade8acfd322d693a80f7800",
|
||||
"skill": "c1cfec443bef0fe50945711552343037"
|
||||
"card": "a414cd042bd7a0675b363f9449fa4391",
|
||||
"skill": "1e5d70a93e8900256f9ef965c53c6151"
|
||||
},
|
||||
"updateTime": 1689250973297
|
||||
"updateTime": 1689937361316
|
||||
},
|
||||
{
|
||||
"code": "en",
|
||||
"ckey": {
|
||||
"card": "f0a5243acdf719d63e5f7f1bc1ca2d18",
|
||||
"skill": "049e9629db7f1a588ef8580e84c5bd7d"
|
||||
"card": "5ad259527272f4994e97c9f41d9e2319",
|
||||
"skill": "e41bdbf8815110b3d65c5cf84c495477"
|
||||
},
|
||||
"updateTime": 1689250973297
|
||||
"updateTime": 1689937361316
|
||||
},
|
||||
{
|
||||
"code": "ko",
|
||||
"ckey": {
|
||||
"card": "38758bfefc8629090d12b1cfcb5edda6",
|
||||
"skill": "6c9febdc2145976799fad16cf4de3431"
|
||||
"card": "2c51a52260b862ca9c282e326894b474",
|
||||
"skill": "cafd7868c12f0f89eae875e76d045382"
|
||||
},
|
||||
"updateTime": 1689250973297
|
||||
"updateTime": 1689937361316
|
||||
}
|
||||
]
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
@ -179,13 +179,13 @@ fs.readdir(sourceFolder,function(err,files){
|
|||
return a.id - b.id;
|
||||
});
|
||||
|
||||
fs.writeFile(outJSON_cht, JSON.stringify(monArr_cht) ,function(err){
|
||||
fs.writeFile(outJSON_cht, JSON.stringify(monArr_cht, null, '\t') ,function(err){
|
||||
if(err){
|
||||
console.error(err);
|
||||
}
|
||||
console.log("---繁体中文导出成功,共 %d 个名称---", monArr_cht.length);
|
||||
});
|
||||
fs.writeFile(outJSON_chs, JSON.stringify(monArr_chs) ,function(err){
|
||||
fs.writeFile(outJSON_chs, JSON.stringify(monArr_chs, null, '\t') ,function(err){
|
||||
if(err){
|
||||
console.error(err);
|
||||
}
|
||||
|
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
@ -413,6 +413,10 @@ const cachesMap = new Map([
|
|||
"images/cards_ja/CARDS_103.PNG",
|
||||
"4bb317bd69e592c10d68db12ff36b255"
|
||||
],
|
||||
[
|
||||
"images/cards_ja/CARDS_104.PNG",
|
||||
"c25d97e3e33bcbd4cb03ee93c6a8562a"
|
||||
],
|
||||
[
|
||||
"sound/voice/ja/padv001.wav",
|
||||
"5d5cfc2aea6aa9e69299e2fd8f5657d2"
|
||||
|
@ -6339,7 +6343,7 @@ const cachesMap = new Map([
|
|||
],
|
||||
[
|
||||
"images/cards_en/CARDS_102.PNG",
|
||||
"103c50c6cf32189a774b5bc2bf633a01"
|
||||
"981c531bf2f741831496c72721382a29"
|
||||
],
|
||||
[
|
||||
"sound/voice/en/padv001.wav",
|
||||
|
@ -10147,7 +10151,7 @@ const cachesMap = new Map([
|
|||
],
|
||||
[
|
||||
"images/cards_ko/CARDS_102.PNG",
|
||||
"103c50c6cf32189a774b5bc2bf633a01"
|
||||
"981c531bf2f741831496c72721382a29"
|
||||
],
|
||||
[
|
||||
"sound/voice/ko/padv001.wav",
|
||||
|
@ -14607,7 +14611,7 @@ const cachesMap = new Map([
|
|||
],
|
||||
[
|
||||
"script.js",
|
||||
"35b22c7617b09b63e40da346edde8931"
|
||||
"ede2f1c6cd08f700baf51f0344ef586e"
|
||||
],
|
||||
[
|
||||
"solo.html",
|
||||
|
@ -14619,7 +14623,7 @@ const cachesMap = new Map([
|
|||
],
|
||||
[
|
||||
"style.css",
|
||||
"70a470410b5c4b4600d8cb407437e077"
|
||||
"d7acd75c657cc03abd6a59293d7b629e"
|
||||
],
|
||||
[
|
||||
"temp.js",
|
||||
|
@ -14859,31 +14863,31 @@ const cachesMap = new Map([
|
|||
],
|
||||
[
|
||||
"monsters-info/ckey.json",
|
||||
"70b61d020e1377efab5fe3d1f2d04434"
|
||||
"8eaf47c77bd377972ad6ab05a19b7c85"
|
||||
],
|
||||
[
|
||||
"monsters-info/mon_en.json",
|
||||
"f0a5243acdf719d63e5f7f1bc1ca2d18"
|
||||
"5ad259527272f4994e97c9f41d9e2319"
|
||||
],
|
||||
[
|
||||
"monsters-info/mon_ja.json",
|
||||
"57b927958ade8acfd322d693a80f7800"
|
||||
"a414cd042bd7a0675b363f9449fa4391"
|
||||
],
|
||||
[
|
||||
"monsters-info/mon_ko.json",
|
||||
"38758bfefc8629090d12b1cfcb5edda6"
|
||||
"2c51a52260b862ca9c282e326894b474"
|
||||
],
|
||||
[
|
||||
"monsters-info/skill_en.json",
|
||||
"049e9629db7f1a588ef8580e84c5bd7d"
|
||||
"e41bdbf8815110b3d65c5cf84c495477"
|
||||
],
|
||||
[
|
||||
"monsters-info/skill_ja.json",
|
||||
"c1cfec443bef0fe50945711552343037"
|
||||
"1e5d70a93e8900256f9ef965c53c6151"
|
||||
],
|
||||
[
|
||||
"monsters-info/skill_ko.json",
|
||||
"6c9febdc2145976799fad16cf4de3431"
|
||||
"cafd7868c12f0f89eae875e76d045382"
|
||||
],
|
||||
[
|
||||
"doc/export-player-data.html",
|
||||
|
|
Loading…
Reference in New Issue