---
# System prepended metadata

title: Pad - Capture data

---

# Pad - Capture data

有問題可以查看
https://mapaler.github.io/PADDashFormation/doc/export-player-data.html
https://github.com/Mapaler/Puzzle-and-Dragons-Data-Files/tree/master

### 1. 如果開了 ROOT 權限 則不能開啟 PAD
### 2. 獲取 PAD 資料
1. 雷電模擬器 安裝 PAD 並且更新資料到最新
2. 找到模擬器資料位置 `E:\LDPlayer\LDPlayer9\vms\leidian0\data.vmdk` 多個模擬器就在 `E:\LDPlayer\LDPlayer9\vms\leidian[0 1 2 ... ]`
3. 安裝 [Arsenal Image Mounter](https://www.mediafire.com/file/yzmay1lfzjp5j3f/Arsenal-Image-Mounter-v3.12.331.zip/file) 並掛載 vmdk `E:\LDPlayer\LDPlayer9\vms\leidian0\data.vmdk` 直接掛載就好(不用選其他選項)![image](https://hackmd.io/_uploads/rJ1_PUAQWg.png)


5. [Ex2Fsd](https://www.mediafire.com/file/tt661rrn5jk3lwb/Ext2Fsd-0.71b-setup.rar/file) 用這個程式給 vmdk 一個盤符就可以開啟了
6. 資料放在 `<盤符>:\data\jp.gungho.padHT\files\mon2`

* BlueStack 的資料放在 `E:\ProgramData\BlueStacks_nxt\Engine\Pie64\Data.vhdx` 一樣第3步驟用 Arsenal Image Mounter 加上 第4步驟 Ex2Fsd就可以開啟
* Nox 的資料放在 `E:\Program Files\Nox\bin\BignoxVMS\nox\nox-disk2.vmdk` 一樣步驟3(改用[OSFMount](https://www.mediafire.com/file/9a2fovp7clid0hm/osfmount.exe/file))+4

### 2. 從 Fiddler 取得資料
1. 下載 [Fiddler](https://www.mediafire.com/file/7hmnt16ybwcmzw2/FiddlerSetup.exe/file)
2. ![image](https://hackmd.io/_uploads/Hyg7UMGEWl.png)
![image](https://hackmd.io/_uploads/B1tBLfzE-e.png)
![image](https://hackmd.io/_uploads/SJNKLMM4Wl.png)
![image](https://hackmd.io/_uploads/S1CoIGM4be.png)

將證書複製到桌面
若有 `openssl` 直接將 `FiddlerRoot.cer`轉換到安卓需要的格式
```bash
::Get Hash Value
openssl x509 -inform DER -in FiddlerRoot.cer -subject_hash_old -noout
::It may output "269953fb"

::Convert to PEM version and rename to Android system rule, <Hash Value>.0 
openssl x509 -inform DER -in FiddlerRoot.cer -outform PEM -out 269953fb.0
```

若沒有 `openssl` 打開 `PowerShell` 執行下面後會有 `xxxxxx.0` 檔案
```bash
# get the cer full path
$cert_path=Resolve-Path "FiddlerRoot.cer";
# create a cert object
$cert=New-Object System.Security.Cryptography.X509Certificates.X509Certificate2($cert_path);
# create a md5 object
$md5 = New-Object -TypeName System.Security.Cryptography.MD5CryptoServiceProvider;
# to openssl hash "-subject_hash_old"
# get the cert SubjectName md5 hash
$md5bin = $md5.ComputeHash($cert.SubjectName.RawData);
# convert to this format bytes
$hashnum = ([long]$md5bin[0] -bor ([long]$md5bin[1] -shl 8) -bor ([long]$md5bin[2] -shl 16) -bor ([long]$md5bin[3] -shl 24)) -band 0xffffffff;
# convert bytes to file name
$pem_name = [Convert]::ToString($hashnum, 16).padleft(8,"0")+".0";
# create PEM format content
$str=New-Object System.Text.StringBuilder("");
$str.AppendLine("-----BEGIN CERTIFICATE-----");
$str.AppendLine([Convert]::ToBase64String($cert.RawData, [Base64FormattingOptions]::InsertLineBreaks));
$str.AppendLine("-----END CERTIFICATE-----");
# save the file
$str.ToString() | Out-File -Encoding ascii -FilePath $pem_name
```

3. 放證書到`BlueStacks`
打開 `DiskManager` Attach `Root.vhd` 在使用 `Ext2 Volumn Manager` 給盤符就可以打開了
![image](https://hackmd.io/_uploads/HyoxOfzNWe.png)
![image](https://hackmd.io/_uploads/H13mYzM4Wx.png)
![image](https://hackmd.io/_uploads/H1W_FfGNbl.png)
![image](https://hackmd.io/_uploads/ByrTtMGNZe.png)

複製剛才的 `xxxxxxxx.0` 到 `<?>:\android\system\etc\security\cacerts` 然後在 `Ex2 Volumn Manager` 中 Flush to Disk 然後再 Detach VHD
![image](https://hackmd.io/_uploads/Sy479GfN-e.png)
![image](https://hackmd.io/_uploads/HkxdczM4Zl.png)

4. 打開 `BlueStacks` 的 Debug Bridge
![image](https://hackmd.io/_uploads/rJ665Mf4bl.png)

然後找到 `C:\Program Files\BlueStacks_nxt` 下的 `HD-Adb.exe`
![image](https://hackmd.io/_uploads/r1SGjff4-x.png)

打開 CMD
```bash
# 連接
HD-Adb connect 127.0.0.1:5555

# 查看是否已連接
HD-Adb devices

# 設置代理
HD-Adb -s 127.0.0.1:5555 shell settings put global http_proxy 10.0.2.2:8888

# 取消代理
HD-Adb -s 127.0.0.1:5555 shell settings put global http_proxy :0
```
就可以連接讓 `Fiddler` 抓到封包了
![image](https://hackmd.io/_uploads/Hk8E3GM4be.png)

### 3. 從雷電模擬器取得資料

打開磁碟 選擇可寫入 (放入後 CRT後不可改回唯讀 否則檔案會消失)
![image](https://hackmd.io/_uploads/SkmDJLG4be.png)

打開橋接模式
![image](https://hackmd.io/_uploads/BJ9918fNbl.png)

打開ROOT權限和 ADB偵錯
![image](https://hackmd.io/_uploads/H1-0J8M4Zx.png)

打開檔案夾 複製 xxxxxxxxx.0 檔案到 電腦資料夾
![image](https://hackmd.io/_uploads/S13Zl8fVZl.png)

打開 `android` 資料夾選擇檔案後移動到 `/system/etc/security/cacerts`
![image](https://hackmd.io/_uploads/HyyQbUMEZl.png)

點右上角三個點後 貼上選取項目
![image](https://hackmd.io/_uploads/Sy5iZIMNZe.png)

方法一 去本 wifi 右上角以點選後設定 proxy 設定為電腦端IP和8888
![image](https://hackmd.io/_uploads/SJ-4z8fV-e.png)

方法二
去 LDPlayer的資料夾下
```bash
cd E:\LDPlayer\LDPlayer9>

adb connect 127.0.0.1:5555

# 192.168.0.85 為電腦端IP
adb -s 127.0.0.1:5555 shell settings put global http_proxy 192.168.0.85:8888

# 然後 adb devices 確認狀態
adb devices
```
![image](https://hackmd.io/_uploads/rkbWXLzNWg.png)

這樣就可以打開 Fiddler 抓取封包


### 4. 設定自動抓取
![image](https://hackmd.io/_uploads/BJoZjIG4-g.png)
```bash
var padDataPath = "D:\\PAD_data";
if (oSession.uriContains("action=get_player_data")) {
    oSession.SaveResponseBody(padDataPath + "\\player-data-" + new Date().getTime() + ".json");
}
```

或是手動下載
![image](https://hackmd.io/_uploads/BkwBZ524We.png)


### 5. 登入不同的帳號
提取 `data.vhd` 或是 `data.vmdk` 下的 `data > jp.gungho.pad > files > data048.bin`

在 雷電模擬器 掛載 `vmdk` 要開啟 write original vmdk
![image](https://hackmd.io/_uploads/Hy4OVon4be.png)

### 分析 `dataXXX.bin` 不同作用

原本不刪除任何資料
![image](https://hackmd.io/_uploads/rkO3gH1HWl.png)


刪除 `data021.bin` 會抓到 `?action=download_card_data`
![image](https://hackmd.io/_uploads/SJLdbrJBZl.png)

刪除 `data024.bin` 會抓到 `?action=download_dungeon_data`
![image](https://hackmd.io/_uploads/ryFrMSyHZx.png)

刪除 `data028.bin` 不是下載資料 沒有自動創建
* `data028.bin` 沒有自動創建 當 41~43其中一個不見時會自動創建
* `data031.bin` 會自動創建
* `data032.bin` 會自動創建
* `data038.bin` 會自動創建
* `data039.bin` 會自動創建
* `data056.bin` 會自動創建
* `data075.bin` 會自動創建
* `data078.bin` 會自動創建
![image](https://hackmd.io/_uploads/r1B4mBkBZe.png)

刪除 `data029.bin` 會抓到 `?action=download_enemy_skill_data`
![image](https://hackmd.io/_uploads/r1_bSSkH-e.png)

刪除 `data033.bin` 會抓到 `?action=get_dung_sale`
![image](https://hackmd.io/_uploads/By6-wS1S-l.png)

刪除 `data034.bin` 會抓到 `?action=shop_item`
![image](https://hackmd.io/_uploads/B1eeur1Hbe.png)

刪除 `data035.bin` 會抓到 `?action=dl_al` `?action=al_infoall`
`?action=dl_al` 降臨關卡資料
![image](https://hackmd.io/_uploads/BJXCOH1rWe.png)

刪除 `data036.bin` 會抓到 `?action=download_skill_data`
![image](https://hackmd.io/_uploads/S1QS4Hkrbx.png)

刪除 `data037.bin` 會抓到 `?action=mdatadl` 多一個
![image](https://hackmd.io/_uploads/rJpAorkSWx.png)

刪除 `data040.bin` 會抓到 `?action=mdatadl` 多一個
![image](https://hackmd.io/_uploads/Hy2dpHyrWl.png)

刪除 `data041.bin` 會抓到 `?action=mdatadl` 多一個
![image](https://hackmd.io/_uploads/ByfXAHyrZl.png)

刪除 `data042.bin` 會抓到 `?action=mdatadl` 多一個
![image](https://hackmd.io/_uploads/HyWoAHJSWe.png)

刪除 `data043.bin` 會抓到 `?action=mdatadl` 多一個
![image](https://hackmd.io/_uploads/BkRG1I1rbl.png)

抽卡片會抓到
![image](https://hackmd.io/_uploads/Bk8jSshE-l.png)



:::danger
BlueStacks
version:
5.12.115
  - Pie64 -> Pad閃退
  - Android 11 -> Pad閃退

5.22.130.2003
  - P64 -> Can't modify Root.vhd
        -> 可以開 PAD
  - Android 11 -> Can't modify Root.vhd
               -> 可以開 PAD
               
5.22.125.1001 OK
  - P64 -> 可以更改 Root.vhd
        -> 可以開 Pad
        
5.20.0.1037
  - P64 -> can't open Pad
  - Android 11 -> Pad閃退
 
5.21.615.1015
  - P64 -> can't open Pad
  - Android 11 -> Pad閃退
 
5.2.130.1002
  - Can't create P64
 
5.12.102.1001
  - P64 -> Pad閃退
  - Android 11 -> Pad閃退

Nox
7.0.6.2
  - Android 7 不能創建 解鎖失敗

7.0.6.1
  - Android 12 不能開 Pad


:::