日期:2008-08-07  浏览次数:20517 次

晚上在家,心情不好,懒得写东西,就胡乱翻出抽屉里一张光盘《南侠展昭痞子龙》,游戏龙公司出品,绝对垃圾。一时为我枉花了五元钱于其上而懊悔不止,总得有些利用价值吧!刚好我最近需要些图像资源,我们就去破解它吧!




先总结一下以前破解成功和失败的经验。

一般程序人员为了方便,图像数据是不加密的。加密的数据我从没破解出来。

一般处于效果和资源节省考虑,游戏所采用的颜色数和图像数据的颜色数总是相同的。

一般图像资源的文件名和内容是有联系的。即使打包,他们也会利用文件名表或有明显标示的指针表以便于调试。

一般程序人员是不会想到我们会采用删除、修改、替换等极限方式来寻找他们的数据规律的。



然后就是这些经验得出的结论。

不必担心过于复杂的算法,目前最复杂地不过是rle。

只要检查一下游戏所采用的颜色数,我们可以少走很多弯路。

用直觉和文件的字义去猜文件作用绝对是明智的做法。

你可以随意删除、修改、替换游戏中的文件来寻找数据规律。



呵呵,都是废话。

接下来是vb破解全过程,成功破解所有ava文件。

第一步,找出图像文件。这一步完全是废话,因为这个游戏不像盟军敢死队和铁血联盟那样将图像打包,无需拆包(顺便提一下,这两个游戏我都将其完全拆包,但只将铁血联盟的loading界面破了几十个出来,傲视三国的声音好像是打包的,也完全拆开了)。而且其文件名起的可谓非常友好,还全部集中在image目录中。我就直接找出了一个软柿子,连验证都没有验证一下(此处建议初学者不要像我这样,应使用删除、修改、替换大法来检查判断的正确性)。我选择了 image\other\cursor.ava 一看就是光标啦,就是游戏中用来定位的小手。

第二步,截下欲破解图像,就是抓图,把有小手的图像抓一幅下来,光圈选一个小手。

得到如下信息:游戏使用的颜色数16bit 小手尺寸 30*31,那就假定图像文件使用16bit,那样我们就是以一个双字节为单位处理,方便了许多。截图软件使用方法此处不再赘述。

第三步,分析文件,用16bit编辑器打开图像文件cursor.ava.,得到以下信息。文件长度:8470 ??????? 奇怪 30*31*2=1860 ,存小手只要1860个字节,怎么会这么多呢,恩,一定是多个光标放在一起了(猜测)

(在下面的处理之前,我用了一个非常变态的方法,将整个文件的数据以宽度为30,每两个字节为一个16BIT颜色绘图,发现最上边的颜色和部分细节很像小手,下面还有其他光标,但是错落的,就断定,多个光标存放在一起,小手是第一个,而且使用了压缩,这个代码很简单,就是以INT为单位逐个读出文件数据,绘点,如果你懂后面的程序,这个就完全没必要了)

这就是文件的前两行.

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

发现如下规律 位置1C 1E处的值 刚好是 1D = 30 1E=31,和小手的尺寸一样.在 位置 1D 之前有7个LONG型整数,第一个是6,后面6个递增.其中有一个似乎指示着位置1C,而且最大的 1AF8 =6904 也没超过文件长度.

我们有理由相信,文件的第一个LONG值表示存放了几幅图片,后边跟着的LONG值表示每幅图片信息在文件中的位置.这个就叫做文件头了,如果你是第一次干这种事的话,建议你利用这个文件头把它拆成六个文件,我是不这样做的,因为我经常干这种事.

第四步,分析图像数据

我们的图像数据就在从1C----639(16位)这个范围内(3A 06 文件中是高位在后,就是63A,它的前一个字节就是小手图像的结束639)共61D个字节,当然你要是把它拆开了,就是从零开始.

看我们的截图,小手的第一行是两个透明点,然后是三个一样的颜色A4F,第二行是一个透明点,然后五个颜色 A4F FDEC FC81 FC81 A4F有时不太容易提取这个值,那就自己写程序吧,如果用画笔,可以查RGB然后换算. 16位颜色=(R\8) * 64*32 +(G\4)*32 +(B\8) (VB表达式,适用于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

发现第四行第1\2\3个双字节和小手第一行内容相符.

第五行第 3\4\5\6\7个双子节和小手第二行内容相符.

其他字符明显不是小手中的颜色,属于控制字符.规则如下

01 00 +双字 表示连续的透明点的数量.

02 00 +双字 表示尾随几个颜色

03 00 表示换行.

(看上去好简单,其实我也着实费了些功夫)

后面又进行了研究发现第三行第1\2个双子和那个09 03 的作用:

第一二个双子是表示小手的指针位置(小手的左上角是指针),在其他图像中的作用不明.

09 03 是从第三行第五个双字开始的双字数量,可以做CRC验证和计算压缩率.

压缩率=309/(1D*1E)=89.3%

第五部,写程序导出,见例子

我的主要目的是给大家介绍一下破解游戏图像的一般方法,例子程序纯属例子,毛糙之处请勿见怪.