这次真的是以小人之心度君子之腹了,因为一开始就认定玻璃渣修改了资料片patch.mpq的加密算法,所以打开最近刚学的OllyDbg就开始反编译跟踪,兴高采烈地解析出解密后的文件hash表,再兴高采烈地解析出Draenei的模型后就开始跟一个老外炫耀,老外很平静地说已经解出来了,还有C#源码(http://code.google.com/p/mpqtool/),我看了一下,解密算法没有变.再检查了一下才发现是自己程序里SetFilePointer函数使用在大于2G的mpq文件时的调用参数有Bug:
// Error if mpq file is bigger than 2G
fseek(...); // or
::SetFilePointer(hFile, dwHashTablePos, 0, FILE_BEGIN);
// Correct
_lseeki64(...); // or
LARGE_INTEGER li;
li.QuadPart = dwHashTablePos;
::SetFilePointer(hFile, li.LowPart, &li.HighPart, FILE_BEGIN);
// So change the every fseek/SetFilePointer in stormlib or libmpq in WowModelViewer source code and recompile, we can open the new patch.mpq in WoW BC which is 2.7G.