Welcome to Yumao′s Blog.
繼上一個拆包記錄之後
我們談談index的目錄列表
我們隨意的取一段index的目錄就可以看出一點規律
(2048 = 0x800)
000800: 60 68 0e 00 0f 71 8e 08 30 76 0a 00 00 00 00 00 000810: 4d 75 27 01 0f 71 8e 08 80 5c 0a 00 00 00 00 00 000820: 26 20 e3 05 0f 71 8e 08 00 60 0a 00 00 00 00 00
由列舉的hex字符串可以得到一點結論
每條目錄文件的長度爲16字節
將16位字節以4字節一組劃分爲4組
第一組完全不一樣
個人猜想是文件的標示
例如文件名一樣
(不過羽毛在ffxiv反編譯中有找到文件名列表
所以這裏的前一組不認爲是文件名
可能是特殊的文件標識
第二組字節大量重複
但是又有不同的內容
猜想可能是文件類型或者同一個文件夾
待驗證
第三組個人猜測就是文件的地址了
但是在列表hex中沒有查詢到文件長度
所以應該是記錄在dat0文件內部
(經測試將第三組地址拿來查詢dat0文件
可以查詢到一段hex的起始句例
所以認定爲文件地址
第四組數據看到都爲空
暫時無任何認定
老樣子 放出文件地址獲取代碼
private static void getFIleSegment(byte[] hexBytes) throws Exception{ //輸入的壹定是16個字節的hex //第三組字節代表的是對應的dat0的地址位置 byte[] tmp = new byte[4]; int co=0; for(int i=11;i>7;i--){ tmp[co++]=hexBytes[i]; } //進行地址操作 以2^7對齊(原因可以查看dat0文檔) tmp = HexUtils.HexString2Bytes(Long.toHexString((Long.parseLong(HexUtils.Bytes2HexString(tmp).replace(" ", ""),16)*0x80))); System.out.print("文件塊地址爲: "+HexUtils.Bytes2HexString(tmp)); //進行文件提取 getFileContent(Long.parseLong(HexUtils.Bytes2HexString(tmp).replace(" ", ""),16),filePath); }
插入break語句測試 運行結果如下:
文件塊地址爲: 53 B1 80 文件塊地址爲: 18 文件塊地址爲: 64 00
然後尋找0a0000.win32.dat0文件
在53B180位置尋找到以下內容
所以確認第三點爲文件地址
53b160: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 53b170: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 53b180: 80 00 00 00 02 00 00 00 8c 1a 00 00 16 00 00 00 53b190: 13 00 00 00 01 00 00 00 00 00 00 00 80 09 8c 1a