傳奇原始碼分析-客戶端(WindHorn簡述和傳奇檔案格式分析)
阿新 • • 發佈:2019-01-26
DirectX類庫分析(WindHorn):1.RegHandler.cpp 登錄檔訪問(讀寫)。2.CWHApp派生CWHWindow,CWHWindow完成視窗的註冊和建立。CWHWindow派生出CWHDXGraphicWindow,CWHDXGraphicWindow呼叫CWHWindow完成建立視窗功能,然後再呼叫CreateDXG()來初始化DirectX。3.WHDefProcess.cpp在建構函式中獲得CWHDXGraphicWindow控制代碼。Clear函式中呼叫在後臺快取上進行繪圖操作,換頁至螢幕。ShowStatus函式,顯示狀態資訊。DefMainWndProc函式,呼叫CWHDXGraphicWindow->MainWndProcDXG訊息處理。 4.WHImage.cpp圖象處理。載入點陣圖,點陣圖轉換。優化處理。5.WHSurface.cpp 主頁面處理。6.WHWilTexture.cpp 材質渲染。WILTextureContainer: WIL容器類。m_pNext指向下一個WILTextureContainer,單鏈表。7.WHWilImage.cpp 從Data目錄中載入Wix檔案(記憶體對映)。8.WHDXGraphic.cpp 處理DirectX效果。檔案型別格式探討:Wix檔案:索引檔案,根據索引查詢到相應資料地址(資料檔案)。// WIX 檔案頭格式 typedef struct tagWIXFILEIMAGEINFO{ CHAR szTmp[40]; // 庫檔案標題 'WEMADE Entertainment inc.' WIL檔案頭 INT nIndexCount; // 圖片數量 INT* pnPosition; // 位置}WIXIMAGEINFO, *LPWIXIMAGEINFO;我們下載一個Hedit編輯器開啟一個Wil檔案,分析一下。我們發現Wix檔案中,0x23地址(含該地址)以前的內容是都相同的,即為:#INDX v1.0-WEMADE Entertainment inc.Ofs44 0x2C的地方:存放著0B 00 00 00,高低位轉換後為:0xB轉換十進位制數為11(圖片數量)Ofs48 0x30的地方:存放著38 04 00 00,高低位轉換後為:0x438 = 1080, 這個就是圖象資料的開始位置。 我們用Wil編輯開啟對應的Wil檔案,發現,果然有11張圖片。另外我們發現,在Ofs = 44 -47之間的資料總是38 04 00 00,終於明白,所有的圖片起始位置是相同的。Wil檔案: 資料檔案。前面我們說了圖象資料的開始位置為0x438 = 1080, 1080中有檔案開頭的44位元組都是相同的。所以,就是說有另外的1036位元組是另有用途。1036中有1024是一個256色的調色盤。我們看到圖片位置資料為: 20 03 58 02, 轉化為十六進位制: 0x320, 0x258 剛好就是800*600大小的圖片。07 00 D4 FF。圖片起始位置為:Ofs 1088: 0x440 圖片大小為480000起始位置:0x440 1088 終止位置:0x7573F 481087 為了驗證資料是否正確,我們通過Wil工具,把第一幅圖片匯出來,然後用Hedit編輯器開啟,經過對比,我們發現,資料一致。大小一致。第二張BMP圖片(圖片起始位置:0x436 10078) : F0 01 69 01 , 07 00 D4 FF剛好大小。第二張Wil起始位置:Ofs:481096 0x75748知道了圖片格式,我們可以寫一個抓圖片格式的程式了。 很遺憾,網速太慢, 圖片很難貼上去. 如果有圖片,大家看得就更清楚了.