明輝手游網(wǎng)中心:是一個(gè)免費(fèi)提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺(tái)!

Vb也瘋狂 -- 破解《南俠展昭痞子龍》圖像

[摘要]晚上在家,心情不好,懶得寫(xiě)東西,就胡亂翻出抽屜里一張光盤(pán)《南俠展昭痞子龍》,游戲龍公司出品,絕對(duì)垃圾。一時(shí)為我枉花了五元錢(qián)于其上而懊悔不止,總得有些利用價(jià)值吧!剛好我最近需要些圖像資源,我們就去破解它吧! 先總結(jié)一下以前破解成功和失敗的經(jīng)驗(yàn)。一般程序人員為了方便,圖像數(shù)據(jù)是不加密的。加密的數(shù)據(jù)我從...
晚上在家,心情不好,懶得寫(xiě)東西,就胡亂翻出抽屜里一張光盤(pán)《南俠展昭痞子龍》,游戲龍公司出品,絕對(duì)垃圾。一時(shí)為我枉花了五元錢(qián)于其上而懊悔不止,總得有些利用價(jià)值吧!剛好我最近需要些圖像資源,我們就去破解它吧!



先總結(jié)一下以前破解成功和失敗的經(jīng)驗(yàn)。

一般程序人員為了方便,圖像數(shù)據(jù)是不加密的。加密的數(shù)據(jù)我從沒(méi)破解出來(lái)。

一般處于效果和資源節(jié)省考慮,游戲所采用的顏色數(shù)和圖像數(shù)據(jù)的顏色數(shù)總是相同的。

一般圖像資源的文件名和內(nèi)容是有聯(lián)系的。即使打包,他們也會(huì)利用文件名表或有明顯標(biāo)示的指針表以便于調(diào)試。

一般程序人員是不會(huì)想到我們會(huì)采用刪除、修改、替換等極限方式來(lái)尋找他們的數(shù)據(jù)規(guī)律的。



然后就是這些經(jīng)驗(yàn)得出的結(jié)論。

不必?fù)?dān)心過(guò)于復(fù)雜的算法,目前最復(fù)雜地不過(guò)是rle。

只要檢查一下游戲所采用的顏色數(shù),我們可以少走很多彎路。

用直覺(jué)和文件的字義去猜文件作用絕對(duì)是明智的做法。

你可以隨意刪除、修改、替換游戲中的文件來(lái)尋找數(shù)據(jù)規(guī)律。



呵呵,都是廢話。

接下來(lái)是vb破解全過(guò)程,成功破解所有ava文件。

第一步,找出圖像文件。這一步完全是廢話,因?yàn)檫@個(gè)游戲不像盟軍敢死隊(duì)和鐵血聯(lián)盟那樣將圖像打包,無(wú)需拆包(順便提一下,這兩個(gè)游戲我都將其完全拆包,但只將鐵血聯(lián)盟的loading界面破了幾十個(gè)出來(lái),傲視三國(guó)的聲音好像是打包的,也完全拆開(kāi)了)。而且其文件名起的可謂非常友好,還全部集中在image目錄中。我就直接找出了一個(gè)軟柿子,連驗(yàn)證都沒(méi)有驗(yàn)證一下(此處建議初學(xué)者不要像我這樣,應(yīng)使用刪除、修改、替換大法來(lái)檢查判斷的正確性)。我選擇了 image\other\cursor.ava 一看就是光標(biāo)啦,就是游戲中用來(lái)定位的小手。

第二步,截下欲破解圖像,就是抓圖,把有小手的圖像抓一幅下來(lái),光圈選一個(gè)小手。

得到如下信息:游戲使用的顏色數(shù)16bit 小手尺寸 30*31,那就假定圖像文件使用16bit,那樣我們就是以一個(gè)雙字節(jié)為單位處理,方便了許多。截圖軟件使用方法此處不再贅述。

第三步,分析文件,用16bit編輯器打開(kāi)圖像文件cursor.ava.,得到以下信息。文件長(zhǎng)度:8470 ??????? 奇怪 30*31*2=1860 ,存小手只要1860個(gè)字節(jié),怎么會(huì)這么多呢,恩,一定是多個(gè)光標(biāo)放在一起了(猜測(cè))

(在下面的處理之前,我用了一個(gè)非常變態(tài)的方法,將整個(gè)文件的數(shù)據(jù)以寬度為30,每?jī)蓚(gè)字節(jié)為一個(gè)16BIT顏色繪圖,發(fā)現(xiàn)最上邊的顏色和部分細(xì)節(jié)很像小手,下面還有其他光標(biāo),但是錯(cuò)落的,就斷定,多個(gè)光標(biāo)存放在一起,小手是第一個(gè),而且使用了壓縮,這個(gè)代碼很簡(jiǎn)單,就是以INT為單位逐個(gè)讀出文件數(shù)據(jù),繪點(diǎn),如果你懂后面的程序,這個(gè)就完全沒(méi)必要了)

這就是文件的前兩行.

06 00 00 00 1C 00 00 00 3A 06 00 00 56 0C 00 00

6A 11 00 00 B6 16 00 00 F8 1A 00 00 1D 00 1E 00

發(fā)現(xiàn)如下規(guī)律 位置1C 1E處的值 剛好是 1D = 30 1E=31,和小手的尺寸一樣.在 位置 1D 之前有7個(gè)LONG型整數(shù),第一個(gè)是6,后面6個(gè)遞增.其中有一個(gè)似乎指示著位置1C,而且最大的 1AF8 =6904 也沒(méi)超過(guò)文件長(zhǎng)度.

我們有理由相信,文件的第一個(gè)LONG值表示存放了幾幅圖片,后邊跟著的LONG值表示每幅圖片信息在文件中的位置.這個(gè)就叫做文件頭了,如果你是第一次干這種事的話,建議你利用這個(gè)文件頭把它拆成六個(gè)文件,我是不這樣做的,因?yàn)槲医?jīng)常干這種事.

第四步,分析圖像數(shù)據(jù)

我們的圖像數(shù)據(jù)就在從1C----639(16位)這個(gè)范圍內(nèi)(3A 06 文件中是高位在后,就是63A,它的前一個(gè)字節(jié)就是小手圖像的結(jié)束639)共61D個(gè)字節(jié),當(dāng)然你要是把它拆開(kāi)了,就是從零開(kāi)始.

看我們的截圖,小手的第一行是兩個(gè)透明點(diǎn),然后是三個(gè)一樣的顏色A4F,第二行是一個(gè)透明點(diǎn),然后五個(gè)顏色 A4F FDEC FC81 FC81 A4F有時(shí)不太容易提取這個(gè)值,那就自己寫(xiě)程序吧,如果用畫(huà)筆,可以查RGB然后換算. 16位顏色=(R\8) * 64*32 +(G\4)*32 +(B\8) (VB表達(dá)式,適用于16BIT 565模式) .

第二行 6A 11 00 00 B6 16 00 00 F8 1A 00 00 1D 00 1E 00

第三行 00 00 00 00 09 03 00 00 01 00 02 00 02 00 03 00

第四行 4F 0A 4F 0A 4F 0A 01 00 18 00 03 00 01 00 01 00

第五行 02 00 05 00 4F 0A EC FD 81 FC 81 FC 4F 0A 01 00

發(fā)現(xiàn)第四行第1\2\3個(gè)雙字節(jié)和小手第一行內(nèi)容相符.

第五行第 3\4\5\6\7個(gè)雙子節(jié)和小手第二行內(nèi)容相符.

其他字符明顯不是小手中的顏色,屬于控制字符.規(guī)則如下

01 00 +雙字 表示連續(xù)的透明點(diǎn)的數(shù)量.

02 00 +雙字 表示尾隨幾個(gè)顏色

03 00 表示換行.

(看上去好簡(jiǎn)單,其實(shí)我也著實(shí)費(fèi)了些功夫)

后面又進(jìn)行了研究發(fā)現(xiàn)第三行第1\2個(gè)雙子和那個(gè)09 03 的作用:

第一二個(gè)雙子是表示小手的指針位置(小手的左上角是指針),在其他圖像中的作用不明.

09 03 是從第三行第五個(gè)雙字開(kāi)始的雙字?jǐn)?shù)量,可以做CRC驗(yàn)證和計(jì)算壓縮率.

壓縮率=309/(1D*1E)=89.3%

第五部,寫(xiě)程序?qū)С,?jiàn)例子

我的主要目的是給大家介紹一下破解游戲圖像的一般方法,例子程序純屬例子,毛糙之處請(qǐng)勿見(jiàn)怪.