longwu online (*.mpk)
-
mappy2012
- advanced
- Posts: 62
- Joined: Sun Jul 03, 2011 4:40 am
- Has thanked: 51 times
- Been thanked: 1 time
longwu online (*.mpk)
Name: longwu online
HP: http://lw.q1.com/
DL page: http://lw.q1.com/download/index.html
Direct link: http://dl.szgla.com/lw/LWSetup_BC_FD_1009.exe
Header: 4D504B1A32303030F6F63B042800000006EA3B04F00C0000DAD93B042C1000006BC73B0400000000314B160000000000000000002BB04DAF4A4A4A4AB2854A4A
Samples: http://www4.zippyshare.com/v/73842851/file.html
Any idea how to unpack .mpk files?Any help is highly appreciated!
HP: http://lw.q1.com/
DL page: http://lw.q1.com/download/index.html
Direct link: http://dl.szgla.com/lw/LWSetup_BC_FD_1009.exe
Header: 4D504B1A32303030F6F63B042800000006EA3B04F00C0000DAD93B042C1000006BC73B0400000000314B160000000000000000002BB04DAF4A4A4A4AB2854A4A
Samples: http://www4.zippyshare.com/v/73842851/file.html
Any idea how to unpack .mpk files?Any help is highly appreciated!
You do not have the required permissions to view the files attached to this post.
-
Ekey
- M-M-M-Monster veteran

- Posts: 1739
- Joined: Wed Mar 31, 2010 6:54 am
- Has thanked: 85 times
- Been thanked: 961 times
Re: longwu online (*.mpk)
Modified StormLib (MPQ). Here general info
Here simple code for decrypt block and hash table's + modified hash generator (added alphabet table)
For decrypt file data, block and hash tables.
Modified cryptographic initialization and hash function
Load and decrypt tables (example)
File names hashes generated like this:
Decrypt files
Compression used by LZMA with next settings:
Code: Select all
struct MPKHeader
{
DWORD pID; //MPK\x1A
DWORD pVersion; //String 2000
DWORD pArchiveSize;
DWORD pUnknown;
DWORD pHashTableOffset;
DWORD pHashTableSize;
DWORD pBlockTableOffset;
DWORD pBlockTableSize;
};Code: Select all
struct MPKHashTable
{
DWORD pHashA;
DWORD pHashB;
DWORD pHashC;
DWORD pIndex; // Index for block table - pBlockIndex = MPKHashTable.pIndex * 20 & 0xFF
};Code: Select all
struct MPKBlockTable
{
SHORT pCFlag; // 0x1121 - Compressed , 0x1120 - Not compressed
SHORT pFlag; // 0x0001
DWORD pOffset; // File offset
DWORD pSize; // Uncompressed size
DWORD pZSize; // Compressed size
DWORD pUnknown; // 0x86364E6D
};Code: Select all
static unsigned char pKey[512] = {
0x60, 0x20, 0x29, 0xE1, 0x01, 0xCE, 0xAA, 0xFE, 0xA3, 0xAB, 0x8E, 0x30, 0xAF, 0x02, 0xD1, 0x7D,
0x41, 0x24, 0x06, 0xBD, 0xAE, 0xBE, 0x43, 0xC3, 0xBA, 0xB7, 0x08, 0x13, 0x51, 0xCF, 0xF8, 0xF7,
0x25, 0x42, 0xA5, 0x4A, 0xDA, 0x0F, 0x52, 0x1C, 0x90, 0x3B, 0x63, 0x49, 0x36, 0xF6, 0xDD, 0x1B,
0xEA, 0x58, 0xD4, 0x40, 0x70, 0x61, 0x55, 0x09, 0xCD, 0x0B, 0xA2, 0x4B, 0x68, 0x2C, 0x8A, 0xF1,
0x3C, 0x3A, 0x65, 0xBB, 0xA1, 0xA8, 0x23, 0x97, 0xFD, 0x15, 0x00, 0x94, 0x88, 0x33, 0x59, 0xE9,
0xFB, 0x69, 0x21, 0xEF, 0x85, 0x5B, 0x57, 0x6C, 0xFA, 0xB5, 0xEE, 0xB8, 0x71, 0xDC, 0xB1, 0x38,
0x0C, 0x0A, 0x5C, 0x56, 0xC9, 0xB4, 0x84, 0x17, 0x1E, 0xE5, 0xD3, 0x5A, 0xCC, 0xFC, 0x11, 0x86,
0x7F, 0x45, 0x4F, 0x54, 0xC8, 0x8D, 0x73, 0x89, 0x79, 0x5D, 0xB3, 0xBF, 0xB9, 0xE3, 0x93, 0xE4,
0x6F, 0x35, 0x2D, 0x46, 0xF2, 0x76, 0xC5, 0x7E, 0xE2, 0xA4, 0xE6, 0xD9, 0x6E, 0x48, 0x34, 0x2B,
0xC6, 0x5F, 0xBC, 0xA0, 0x6D, 0x0D, 0x47, 0x6B, 0x95, 0x96, 0x92, 0x91, 0xB2, 0x27, 0xEB, 0x9E,
0xEC, 0x8F, 0xDF, 0x9C, 0x74, 0x99, 0x64, 0xF5, 0xFF, 0x28, 0xB6, 0x37, 0xF3, 0x7C, 0x81, 0x03,
0x44, 0x62, 0x1F, 0xDB, 0x04, 0x7B, 0xB0, 0x9B, 0x31, 0xA7, 0xDE, 0x78, 0x9F, 0xAD, 0x0E, 0x3F,
0x3E, 0x4D, 0xC7, 0xD7, 0x39, 0x19, 0x5E, 0xC2, 0xD0, 0xAC, 0xE8, 0x1A, 0x87, 0x8B, 0x07, 0x05,
0x22, 0xED, 0x72, 0x2E, 0x1D, 0xC1, 0xA9, 0xD6, 0xE0, 0x83, 0xD5, 0xD8, 0xCB, 0x80, 0xF0, 0x66,
0x7A, 0x9D, 0x50, 0xF9, 0x10, 0x4E, 0x16, 0x14, 0x77, 0x75, 0x6A, 0x67, 0xD2, 0xC0, 0xA6, 0xC4,
0x53, 0x8C, 0x32, 0xCA, 0x82, 0x2A, 0x18, 0x9A, 0xF4, 0x4C, 0x3D, 0x26, 0x12, 0xE7, 0x98, 0x2F,
0x4A, 0x04, 0x0D, 0xAF, 0xB4, 0xCF, 0x12, 0xCE, 0x1A, 0x37, 0x61, 0x39, 0x60, 0x95, 0xBE, 0x25,
0xE4, 0x6E, 0xFC, 0x1B, 0xE7, 0x49, 0xE6, 0x67, 0xF6, 0xC5, 0xCB, 0x2F, 0x27, 0xD4, 0x68, 0xB2,
0x01, 0x52, 0xD0, 0x46, 0x11, 0x20, 0xFB, 0x9D, 0xA9, 0x02, 0xF5, 0x8F, 0x3D, 0x82, 0xD3, 0xFF,
0x0B, 0xB8, 0xF2, 0x4D, 0x8E, 0x81, 0x2C, 0xAB, 0x5F, 0xC4, 0x41, 0x29, 0x40, 0xFA, 0xC0, 0xBF,
0x33, 0x10, 0x21, 0x16, 0xB0, 0x71, 0x83, 0x96, 0x8D, 0x2B, 0x23, 0x3B, 0xF9, 0xC1, 0xE5, 0x72,
0xE2, 0x1C, 0x26, 0xF0, 0x73, 0x36, 0x63, 0x56, 0x31, 0x4E, 0x6B, 0x55, 0x62, 0x79, 0xC6, 0x91,
0x00, 0x35, 0xB1, 0x2A, 0xA6, 0x42, 0xDF, 0xEB, 0x3C, 0x51, 0xEA, 0x97, 0x57, 0x94, 0x8C, 0x80,
0x34, 0x5C, 0xD2, 0x76, 0xA4, 0xE9, 0x85, 0xE8, 0xBB, 0x78, 0xE0, 0xB5, 0xAD, 0x0F, 0x87, 0x70,
0xDD, 0xAE, 0xF4, 0xD9, 0x66, 0x54, 0x6F, 0xCC, 0x4C, 0x77, 0x3E, 0xCD, 0xF1, 0x75, 0x0A, 0xA1,
0x28, 0x9B, 0x9A, 0x7E, 0x4B, 0x98, 0x99, 0x47, 0xFE, 0xA5, 0xF7, 0xB7, 0xA3, 0xE1, 0x9F, 0xBC,
0x93, 0x44, 0x3A, 0x08, 0x89, 0x22, 0xEE, 0xB9, 0x45, 0xD6, 0x06, 0x09, 0xC9, 0xBD, 0x14, 0x0C,
0xB6, 0x5E, 0x9C, 0x7A, 0x65, 0x59, 0xAA, 0x19, 0x5B, 0x7C, 0x18, 0x43, 0x92, 0x13, 0x15, 0x7B,
0xED, 0xD5, 0xC7, 0x17, 0xEF, 0x86, 0x90, 0xC2, 0x74, 0x64, 0xF3, 0xDC, 0x6C, 0x38, 0x05, 0x1D,
0xC8, 0x0E, 0xEC, 0x6A, 0x32, 0xDA, 0xD7, 0xC3, 0xDB, 0x8B, 0x24, 0xB3, 0x5D, 0x2E, 0xBA, 0xA2,
0xD8, 0x03, 0x88, 0x7D, 0x7F, 0x69, 0x8A, 0xFD, 0xCA, 0x4F, 0x30, 0x9E, 0xA0, 0xD1, 0x5A, 0x53,
0xDE, 0x3F, 0x84, 0xAC, 0xF8, 0xA7, 0x2D, 0x1F, 0x1E, 0xE3, 0x58, 0x50, 0x6D, 0x48, 0x07, 0xA8};
static unsigned long pAlphabetsTable[256] = {
0x00000000, 0x00000001, 0x00000002, 0x00000003, 0x00000004, 0x00000005, 0x00000006, 0x00000007,
0x00000008, 0x00000009, 0x0000000A, 0x0000000B, 0x0000000C, 0x0000000D, 0x0000000E, 0x0000000F,
0x00000010, 0x00000011, 0x00000012, 0x00000013, 0x00000014, 0x00000015, 0x00000016, 0x00000017,
0x00000018, 0x00000019, 0x0000001A, 0x0000001B, 0x0000001C, 0x0000001D, 0x0000001E, 0x0000001F,
0x00000020, 0x00000021, 0x00000022, 0x00000023, 0x00000024, 0x00000025, 0x00000026, 0x00000027,
0x00000028, 0x00000029, 0x0000002A, 0x0000002B, 0x0000002C, 0x0000002D, 0x0000002E, 0x0000002F,
0x00000030, 0x00000031, 0x00000032, 0x00000033, 0x00000034, 0x00000035, 0x00000036, 0x00000037,
0x00000038, 0x00000039, 0x0000003A, 0x0000003B, 0x0000003C, 0x0000003D, 0x0000003E, 0x0000003F,
0x00000040, 0x00000061, 0x00000062, 0x00000063, 0x00000064, 0x00000065, 0x00000066, 0x00000067,
0x00000068, 0x00000069, 0x0000006A, 0x0000006B, 0x0000006C, 0x0000006D, 0x0000006E, 0x0000006F,
0x00000070, 0x00000071, 0x00000072, 0x00000073, 0x00000074, 0x00000075, 0x00000076, 0x00000077,
0x00000078, 0x00000079, 0x0000007A, 0x0000005B, 0x0000005C, 0x0000005D, 0x0000005E, 0x0000005F,
0x00000060, 0x00000061, 0x00000062, 0x00000063, 0x00000064, 0x00000065, 0x00000066, 0x00000067,
0x00000068, 0x00000069, 0x0000006A, 0x0000006B, 0x0000006C, 0x0000006D, 0x0000006E, 0x0000006F,
0x00000070, 0x00000071, 0x00000072, 0x00000073, 0x00000074, 0x00000075, 0x00000076, 0x00000077,
0x00000078, 0x00000079, 0x0000007A, 0x0000007B, 0x0000007C, 0x0000007D, 0x0000007E, 0x0000007F,
0x00000080, 0x00000081, 0x00000082, 0x00000083, 0x00000084, 0x00000085, 0x00000086, 0x00000087,
0x00000088, 0x00000089, 0x0000008A, 0x0000008B, 0x0000008C, 0x0000008D, 0x0000008E, 0x0000008F,
0x00000090, 0x00000091, 0x00000092, 0x00000093, 0x00000094, 0x00000095, 0x00000096, 0x00000097,
0x00000098, 0x00000099, 0x0000009A, 0x0000009B, 0x0000009C, 0x0000009D, 0x0000009E, 0x0000009F,
0x000000A0, 0x000000A1, 0x000000A2, 0x000000A3, 0x000000A4, 0x000000A5, 0x000000A6, 0x000000A7,
0x000000A8, 0x000000A9, 0x000000AA, 0x000000AB, 0x000000AC, 0x000000AD, 0x000000AE, 0x000000AF,
0x000000B0, 0x000000B1, 0x000000B2, 0x000000B3, 0x000000B4, 0x000000B5, 0x000000B6, 0x000000B7,
0x000000B8, 0x000000B9, 0x000000BA, 0x000000BB, 0x000000BC, 0x000000BD, 0x000000BE, 0x000000BF,
0x000000C0, 0x000000C1, 0x000000C2, 0x000000C3, 0x000000C4, 0x000000C5, 0x000000C6, 0x000000C7,
0x000000C8, 0x000000C9, 0x000000CA, 0x000000CB, 0x000000CC, 0x000000CD, 0x000000CE, 0x000000CF,
0x000000D0, 0x000000D1, 0x000000D2, 0x000000D3, 0x000000D4, 0x000000D5, 0x000000D6, 0x000000D7,
0x000000D8, 0x000000D9, 0x000000DA, 0x000000DB, 0x000000DC, 0x000000DD, 0x000000DE, 0x000000DF,
0x000000E0, 0x000000E1, 0x000000E2, 0x000000E3, 0x000000E4, 0x000000E5, 0x000000E6, 0x000000E7,
0x000000E8, 0x000000E9, 0x000000EA, 0x000000EB, 0x000000EC, 0x000000ED, 0x000000EE, 0x000000EF,
0x000000F0, 0x000000F1, 0x000000F2, 0x000000F3, 0x000000F4, 0x000000F5, 0x000000F6, 0x000000F7,
0x000000F8, 0x000000F9, 0x000000FA, 0x000000FB, 0x000000FC, 0x000000FD, 0x000000FE, 0x000000FF};
Code: Select all
int MPKDecrypt(unsigned char* pBuffer, unsigned int pSize)
{
int result;
unsigned int i;
for ( i = 0; i < pSize; ++i )
{
pBuffer[i] = pKey[pBuffer[i]];
result = i + 1;
}
return result;
}Code: Select all
static unsigned long StormBuffer[0x1400];
void StormInit()
{
unsigned long seed = 0x00100001;
unsigned long index1 = 0;
unsigned long index2 = 0;
int i;
for (index1 = 0; index1 < 0x100; index1++)
{
for (index2 = index1, i = 0; i < 5; i++, index2 += 0x100)
{
unsigned long temp1, temp2;
seed = (seed * 125 + 3) % 0x2AAAAB;
temp1 = (seed & 0xFFFF) << 0x10;
seed = (seed * 125 + 3) % 0x2AAAAB;
temp2 = (seed & 0xFFFF);
StormBuffer[index2] = (temp1 | temp2);
}
}
}
unsigned long hashString(char *lpszFileName, unsigned long dwHashType)
{
unsigned char *key = (unsigned char *)lpszFileName;
unsigned long seed1 = 0x7FED7FED, seed2 = 0xEEEEEEEE;
int ch;
while( *(BYTE *)key )
{
ch = pAlphabetsTable[*key++];
seed1 = StormBuffer[ch + (dwHashType << 8)] ^ (seed2 + seed1);
seed2 += seed1 + ch + 0x20 * seed2 + 3;
}
return seed1;
}
Code: Select all
DWORD pHashTableHash;
DWORD pBlockTableHash;
MPKHeader pHeader;
StormInit();
fread(&pHeader, sizeof(pHeader), 1, fi);
char *pHashBuffer = new char[pHeader.pHashTableSize];
memset(pHashBuffer, 0, pHeader.pHashTableSize);
fseek(fi, pHeader.pHashTableOffset, SEEK_SET);
fread((char *) pHashBuffer, pHeader.pHashTableSize, 1, fi);
MPKDecrypt(pHashBuffer, pHeader.pHashTableSize);
char *pBlockBuffer = new char[pHeader.pBlockTableSize];
memset(pBlockBuffer, 0, pHeader.pBlockTableSize);
fseek(fi, pHeader.pBlockTableOffset, SEEK_SET);
fread((char *) pBlockBuffer, pHeader.pBlockTableSize, 1, fi);
MPKDecrypt(pBlockBuffer, pHeader.pBlockTableSize);
Code: Select all
StormInit();
DWORD dwHashA = hashString("Shader\Gray.fx", 0);
DWORD dwHashB = hashString("Shader\Gray.fx", 1);
DWORD dwHashC = hashString("Shader\Gray.fx", 2);
Code: Select all
MPKBlockTable pBlockTable;
char *pBuffer = new char[pBlockTable.pZSize];
memset(pBuffer , 0, pBlockTable.pZSize);
fseek(fi, pBlockTable.pOffset, SEEK_SET);
fread((char *) pBuffer , pBlockTable.pZSize, 1, fi);
MPKDecrypt(pBuffer , pBlockTable.pZSize);Code: Select all
#define LZMA_HEADER_SIZE (LZMA_PROPS_SIZE)
Last edited by Ekey on Wed Oct 16, 2013 10:17 pm, edited 6 times in total.
-
Ekey
- M-M-M-Monster veteran

- Posts: 1739
- Joined: Wed Mar 31, 2010 6:54 am
- Has thanked: 85 times
- Been thanked: 961 times
Re: longwu online (*.mpk)
Done. Archives dont contain file names (only hashes). If you found file name just add in Projects\FileNames.list
WinXP/7 tested. Enjoy.

WinXP/7 tested. Enjoy.

You do not have the required permissions to view the files attached to this post.
-
Ekey
- M-M-M-Monster veteran

- Posts: 1739
- Joined: Wed Mar 31, 2010 6:54 am
- Has thanked: 85 times
- Been thanked: 961 times
Re: longwu online (*.mpk)
Np. Here my last updated base list. Added ~7000 file names. Copy in Projects folder.mappy2012 wrote:Thank you so much for getting this ekey!
You do not have the required permissions to view the files attached to this post.
- CriticalError
- double-veteran

- Posts: 677
- Joined: Sun Jul 05, 2009 2:03 am
- Has thanked: 99 times
- Been thanked: 37 times
- CriticalError
- double-veteran

- Posts: 677
- Joined: Sun Jul 05, 2009 2:03 am
- Has thanked: 99 times
- Been thanked: 37 times
Re: longwu online (*.mpk)
ohh well thats bad newsEkey wrote:Nope. IP Block.
- lumekano
- advanced
- Posts: 59
- Joined: Sat Feb 25, 2012 2:20 pm
- Has thanked: 40 times
- Been thanked: 9 times
