2015-3-14 12:01 /
前面的废话就懒得扯了 直接主题

游戏引擎见过各种各样的 但是就是没见过这么奇葩的。
(你这tm几个意思 WIN32和你有仇么)

这个游戏应该是主机移植的,也不至于这样啊==

打开游戏封包以后。发现文件封包没有Header 或者看不出Header
嗯,追一追,发现读取是这样的。

GrpFile就是Grp_01 到 Grp_09的Header(下面称为Map文件)

加密也是弱爆了,都是简单的NOT

于是得出Header的结构:

struct FileMap
{
        DWORD FileNameLength;
        char FileName[MAX_PATH];//big enough
        DWORD FilePart; //eg : Grp_01
        DWORD Unknown; //0
        DWORD Offset;
        //DWORD SeekCur; //注意这个DWORD 在某些封包中(如脚本是没有这个记录的
        DWORD Length;
}

其中文件名的长度是变化的,由FileNameLength来指定
FilePart就是封包序号。(比如 Grp_01 Grp_02

全部的DWORD都需要反转:

DWORD flip(DWORD x)
{
        return (x >> 24) | ((x << 8) & 0x00FF0000) | ((x >> 8) & 0x0000FF00) | (x << 24);
}


Map文件和封包文件都需要解密,而且是整个文件:

void Decode(unsigned char* pBuffer, DWORD len)
{
        for (int i = 0; i < len; i++)
        {
                pBuffer[i] = ~pBuffer[i];
        }
}


结构到此位置   提取什么的  自己去动手,很简单的