|
楼主 |
发表于 2007-1-9 22:48:48
|
显示全部楼层
我要悄悄存资料 1.0 VIP版本
这帖子让它沉了吧,纯水太多料
这次又有mpq的特性利用,所有不懂的了解一下就行了。
上次提到破坏hashTable和blockTable的方式让mpq处理工具枚举出错误的文件,而且导致mpq不能继续添加文件和删除错误文件。
这次利用mpq定位文件的特性:
步骤1->步骤2->步骤3->步骤4->步骤5
hash0(文件名)->hashTable+hash1+hash2->hashItem+blockTable->blockItem->dataBlock
由于存在多个文件名的hash0对应一个hashItem的原因,为了保证速度,所以第一个符合的hash1,hash2的有效hashItem就是用于定位blockItem的hashItem(第三步中的hashItem)。
所以今天我就发现了其中的一点小特性,如果在mpq中保存了两个文件名相同但数据不同的文件(尽管现在还不能这样做),那么在hashTable中较后的那一个将被直接忽略掉。因为war3定义的mpq只支持给定文件名从mpq中读出一个文件。
而mpq处理程序它们不这样认为(它们似乎要体现自己功能的强大),它们枚举出有效的Item,从而能在不知道文件名的情况下解出文件(解出的数据可能是没经过解密的),我们在只要在hashTable中一个有效的hashItem的后面给它重载一下(一个同样hash1,hash2),这样使用某些mpq处理工具配合listfile居然能枚举出两个同样名字的文件。这样一来改图者就不知道哪个是真的文件了。
上面仅仅属于推断,可能有的mpq处理工具也是使用war3的方式判断的,所以看不到第二个文件。
但是这样更好,因为改图者如果删除原文件(或该名)再添加同名文件这样的方法是行不通的了。因为这样添加文件,被添加的文件跑到假文件的后面去了,war3只能定位到那个假的文件上面,所以会出错。
如果是第一种情况(即mpq工具能列出该假文件),那么改图者必须修改假文件的文件名才能使用上面的方法。这种情况目前还找不到解决的办法。 |
|