平民程序 - linghuye's blog

天下风云出我辈,一入江湖岁月催。皇图霸业谈笑中,不胜人生一场醉。提剑跨骑挥鬼雨,白骨如山鸟惊飞。尘事如潮人如水,只笑江湖几人回。

随笔 - 221, 文章 - 0, 评论 - 680, 引用 - 0
数据加载中……

SetFilePointer

这次真的是以小人之心度君子之腹了,因为一开始就认定玻璃渣修改了资料片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.

posted on 2006-09-02 00:51 linghuye 阅读(2820) 评论(1)  编辑 收藏 引用 所属分类: 3D图形学研究

评论

# re: SetFilePointer  回复  更多评论   

懂得自嘲和学习的程序员是可爱的^_^
2006-09-02 10:25 | kawa11
只有注册用户登录后才能发表评论。