“傳奇”圖象數(shù)據(jù)存儲(chǔ)方式
對(duì)傳奇圖象數(shù)據(jù)的研究
最近一直在玩?zhèn)髌?,除了好玩之外,還有研究的意思(呵呵,借口)。
今天我稍微研究了一下傳奇的圖象數(shù)據(jù)存儲(chǔ),呵呵,終于明白了。
你也想知道傳奇的數(shù)據(jù)是怎么存放的么?或者,你也想學(xué)破解游戲圖片,那么就跟我來(lái)吧,不過(guò),在這之前,你必須準(zhǔn)備一些工具。
1---十六進(jìn)制編輯器 這個(gè)可是破解的主要工具啊。推薦使用HEDIT,華軍主頁(yè)上有。
2---圖象處理程序 這個(gè)是用來(lái)處理圖片的。主要是生成我們要的圖片框架。這個(gè),用WINDOWS自帶的畫筆就成。
3---計(jì)算器 這個(gè)是用來(lái)轉(zhuǎn)換16進(jìn)制和10進(jìn)制的,這個(gè)在很多時(shí)候都用的到的。WINDOWS自帶的就行了。
4---記事本 用來(lái)記錄破解過(guò)程的重要數(shù)據(jù)。
5---一種可以處理二進(jìn)制文件的編程工具 這個(gè)是用來(lái)寫破解程序的。因?yàn)槭止奈募截悎D象文件實(shí)在是太累了。特別是數(shù)據(jù)比較大的時(shí)候。
6---然后呢,一點(diǎn)預(yù)備知識(shí)在PC里面存儲(chǔ)的數(shù)據(jù)是高位在前低位在后。也就是說(shuō) 十六進(jìn)制 0xf8890 在十六進(jìn)制編輯器中是這樣的: 90 88 0f 00。這個(gè)相當(dāng)重要啊。
好了,下面我們開始了。
首先呢,我打開了一個(gè)WIL文件看了一下,感覺(jué)沒(méi)有頭緒。然后我打開了一個(gè)WIX文件,在兩個(gè)文件的文件頭,我發(fā)現(xiàn)了這樣的文字。#ILIB v1.0-WEMADE Entertainment inc(這個(gè)是WIL文件頭)#INDX v1.0-WEMADE Entertainment inc(這個(gè)是WIX文件頭)。從這個(gè)上面我們可以看出,WIL就是LIB的意思,也就是庫(kù)的意思。WIX就是INDEX的文件,也就是索引的意思。這樣,我們就初步知道了,數(shù)據(jù)是存放在WIL中的,數(shù)據(jù)索引是存放在WIX中的。
如果你還不知道索引呢(什么??你不知道索引。。暈4),我就給你講一下哈。索引就是類似地址簿的東西,你從索引中查找數(shù)據(jù)所在的地址(這個(gè)地址不是內(nèi)存地址,而是文件里面的地址)。那么通過(guò)這個(gè)地址,你就可以在庫(kù)中找到數(shù)據(jù)了。
好了,現(xiàn)在我們知道了數(shù)據(jù)索引存放的地方,那么,我們就開始找到這些索引吧。
我們用HEDIT打開兩個(gè)WIX文件進(jìn)行比較,我們發(fā)現(xiàn)在OFS=36之前的數(shù)據(jù)都是固定的,那么,我門就看后面的數(shù)據(jù)。我找了一個(gè)比較小的WIX文件。然后從OFS=36的地方選擇。這里用的是DNITEMS的WIX。我發(fā)現(xiàn),選擇的字節(jié)數(shù)是1656,而我們清楚,一個(gè)文件位置一般是用4個(gè)字節(jié)存放,也就是說(shuō),這里總共可能有的圖象數(shù)是1656/4 = 414個(gè),用計(jì)算器算出他的16進(jìn)制是0x19E,這時(shí),我們就在開頭找16進(jìn)制的 9E 01,我們發(fā)現(xiàn),在OFS= 44 的地方有一個(gè) 9B 01 的很接近 9E 01 那么我們就知道了,后面的信息不都是文件地址。因?yàn)檫€要記錄圖象的個(gè)數(shù)啊。所以,我門從數(shù)據(jù)的尾部開始選擇,看著右下角的數(shù)字到了 0x19b時(shí),我們停下,發(fā)現(xiàn)正好停在 0X44前面。哈,我們知道了,這些數(shù)據(jù)都是文件位置,這個(gè)9B 01就是圖象個(gè)數(shù)。那么,第一個(gè)文件位置是干什么用的呢,我打開了兩個(gè)WIX文件,發(fā)現(xiàn)在相同的位置,就是OFS = 44后面的文件位置信息開始的地方,數(shù)據(jù)總是38 04 00 00,哦,明白了,這個(gè)就是圖象數(shù)據(jù)的開始位置。也就是第一副圖象的開始位置。
那么我們把這個(gè)開始位置轉(zhuǎn)換一下, 0X438 = 1080,呵呵,也就是說(shuō),在WIL中的前面1080字節(jié)不是圖象數(shù)據(jù)。那么他們是什么呢?
根據(jù)經(jīng)驗(yàn),我們知道,BMP文件里面的調(diào)色板一個(gè)就是一個(gè)4字節(jié)的DWORD值,那么256個(gè)位置就是1024字節(jié),哈,很接近了啊。然后我比較了兩個(gè)WIL文件,發(fā)現(xiàn),前44字節(jié)是很相似的。所以我們減去44字節(jié)就是1036字節(jié)。那么剩下的12字節(jié)是什么呢?呵呵,我也不清楚,不用管他了。我們只要圖象。
在WIL的0X438的位置上,我們發(fā)現(xiàn)了14 00 0D 00的數(shù)字。我猜,圖象肯定超不過(guò)65535大小的,所以我猜想這是兩個(gè)USHORT的圖象大小的數(shù)據(jù)。
于是我把他們相乘,然后我又找了0X438后面的一個(gè)文件位置,然后相減,得到了數(shù)據(jù)的長(zhǎng)度。減去圖象大小的數(shù)據(jù),?。烤谷欢喑鰜?lái)4個(gè)字節(jié)。呵呵,我現(xiàn)在也搞不清楚他們的用處。恩,我就跳過(guò)去了,因?yàn)槲蚁胨麄円话愫蛨D象沒(méi)有什么關(guān)系。
然后我就把圖象數(shù)據(jù)復(fù)制了,我又打開了畫筆,把圖象屬性設(shè)定成0X14*0X0D,然后存成256色的位圖。接著用HEDIT打開位圖,在0X1078的位置把數(shù)據(jù)粘貼到這個(gè)位置。然后存盤,退出。然后用畫筆打開這個(gè)圖象文件。哈,看到圖象了??礃幼酉笠粋€(gè)符。不過(guò)顏色不對(duì)。恩,我進(jìn)入了傳奇。用PAUSE截了一張圖,然后用HEDIT打開,在54的位置選擇了1024字節(jié)的東西。然后復(fù)制,再打開那個(gè)圖象文件,在54的地方粘貼,然后存盤,退出,用畫筆打開。哈。是一本書。
啊,終于知道了。我從上面的動(dòng)作中得到了下面的結(jié)論。
1 圖象位置索引在*.wix中
2 圖象信息在*.wil中。
3 圖象索引從OFFSET 0X2C開始,有一個(gè)DWORD的圖象總數(shù)
4 然后是DWORD的OFFSET值,第一副圖象的OFFSET值固定為0X438,= (1080)10
5 那么,就是說(shuō)在WIL中,開頭有1080 字節(jié)的空余。
6 在WIL中,文件開頭的44字節(jié)都是相同的。所以,就是說(shuō)有另外的1036字節(jié)是另有用途。
7 (這個(gè)沒(méi)有解決)1036中有1024是一個(gè)256色的調(diào)色板,那么,剩下的12字節(jié)是干什么用的呢?
8 在傳奇下,有一個(gè)截圖功能保存的圖象里面的調(diào)色板就是是游戲圖象數(shù)據(jù)的調(diào)色板。
那么,剩下的工作就是寫代碼來(lái)?yè)笀D象了。
這方面的問(wèn)題我就不再闡述了,因?yàn)橹懒藞D象存儲(chǔ)的數(shù)據(jù)格式,程序就很好寫了。
恩,現(xiàn)在我也要寫程序了??纯从X(jué)得自己寫了好多啊。不過(guò)放心,這個(gè)東西沒(méi)有版權(quán),隨便用拉。
還有一點(diǎn)補(bǔ)充:
我沒(méi)有說(shuō)清楚,這些圖象是完全用8BIT位圖方式存放在文件里面的。沒(méi)有經(jīng)過(guò)任何壓縮或者是編碼
相關(guān)文章
QQ自動(dòng)發(fā)送文件病毒消息的手動(dòng)清除方法正文分析錯(cuò)誤
QQ自動(dòng)發(fā)送文件病毒消息的手動(dòng)清除方法正文分析錯(cuò)誤...2007-09-09路由網(wǎng)關(guān)網(wǎng)絡(luò)管理和監(jiān)控功能介紹
路由網(wǎng)關(guān)網(wǎng)絡(luò)管理和監(jiān)控功能介紹...2007-09-09實(shí)例解說(shuō)TCP連接建立及結(jié)束過(guò)程詳解
實(shí)例解說(shuō)TCP連接建立及結(jié)束過(guò)程詳解...2007-09-09如何在XP系統(tǒng)中執(zhí)行干凈啟動(dòng)
如何在XP系統(tǒng)中執(zhí)行干凈啟動(dòng)...2007-09-09