早就有人叫我寫個封包分析教程
我今天有點時間寫個
http://blog.csdn.net/luozhuang/archive/2010/12/31/6110010.aspx
遊戲檔案黑盒分析吧。
黑盒來源於軟體測試詞語http://baike.baidu.com/view/51274.htm
也就是我們不分析任何程式彙編。
三大媽有個封包分析組,也是類似的。黑盒分析下資源檔
工具 大家可以找自己喜歡二進位編輯工具 比如winhex
這個封包是最簡單的,因為沒有任何壓縮。。。
分析檔案名稱:日文原版script.dat 檔案
沒有裝遊戲這裡可以下載:
http://hotfile.com/dl/100048813/d53730d/script.dat.html
0000h: 50 41 43 4B 44 41 54 2E 01 04 00 00 01 04 00 00 PACKDAT.........
0010h: 69 39 35 5F 30 31 2E 74 78 00 00 00 00 00 00 00 i95_01.tx.......
0020h: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0030h: 40 C0 00 00 00 00 00 20 62 00 00 00 62 00 00 00 @...... b...b...
0040h: 69 39 35 5F 30 32 2E 74 78 00 00 00 00 00 00 00 i95_02.tx.......
0050h: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0060h: A4 C0 00 00 00 00 00 20 94 00 00 00 94 00 00 00 ....... ........
應該知道的:
遊戲漢化中的一個重要的步驟是對資源的解包以及封包。
這個遊戲引擎名叫InnocentGrey
前8個byte(0x0-0x7)
PACKDAT->magic
magic 作為識別該引擎的表示,因為很多遊戲都採用.dat尾碼名。
01 04 00 00 我們沒有知道確切意思標記為Unkown 未知吧
後面又來個01 04 00 00 請大家看看winhex 資料解譯器
代表32bit資料類型的1025
可能就是說這個包裡面有1025個檔案?
其實可以比較下Crass輸出結果,這個檔案解包以後有1025個檔案,符合我們分析結果。
0010h: 69 39 35 5F 30 31 2E 74 78 00 00 00 00 00 00 00 i95_01.tx.......
0020h: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
很明顯是檔案名稱 不說了
0030h: 40 C0 00 00 這是什麼呢
winhex 資料解譯器 顯示為32bit的 49216
這又是什麼意思?
Alt+G 把這個資料扔進去看看
很明顯 跳轉到這裡:
C020h: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
C030h: 0C F6 1E 00 00 00 00 20 E6 00 00 00 E6 00 00 00 ....... ........
C040h: 81 40 94 92 8D 9C 89 BB 82 B5 82 BD 8A D4 8B 7B .@.............{
C050h: 94 FC 90 E1 82 C6 8E 76 82 ED 82 EA 82 E9 88 E2 .......v........
81 40這裡明顯肯定這個值是位移地址,而且是對應於檔案開頭位移。
C語言有個fseek函數
fseek( stream, 位移地址, SEEK_SET);
00 00 00 20 我們沒有知道確切意思標記為Unkown 未知吧
62 00 00 00這兩個我簡單說明下
這個引擎存在壓縮格式
遇到壓縮演算法就必須給出 壓縮前長度和解壓縮後長度。
類似這樣的調用:
uncompress(uncompressbuf,compresslen,uncompresslen);
這個檔案沒有壓縮,所以這兩個值完全一樣的。
這個封包經過分析以後 格式如下
檔案頭:
char [8]; //"PACKDAT." 50 41 43 4B 44 41 54 2E
32bit ?;
32bit 索引數目;
索引:
char [32];
32bit 位移地址;
32bit ?
32bit 壓縮/解壓縮後大小;
32bit 壓縮/解壓縮後大小;
壓縮/解壓縮後大小 我沒有繼續辨認,這個可以從其他檔案辨認,壓縮後大小必然小於解壓縮後大小。
將32bit 這些轉換成程式格式:
8bit char-〉BYTE
16bit-〉short
32bit-〉int
現在可以提取/寫回這個封包了。不管寫代碼還是手工都可以試試看吧。
加密部分:
劇本部分
加密比較簡單 Xor FF