目前,我正在尝试找出旧 MMO 的数据包结构(用于加密)以创建模拟器。它的官方服务器在 3 年前关闭,这个版本已经超过 11 年了。
在使用 IDA 加载原始服务器后(它需要大约 3gb 的 RAM 来加载并消耗大量 CPU,这就是我想模拟它的原因),我发现多项式是 0x8005 (32773) 并且它是“Crc16”。为了进一步证明这一点,我在加载时在内存中发现了一系列字节:
00 00 [05 80] 0F 80 0A 00 1B 80 1E 00 14 00 11 80 33 80 36 00 3C 00 39 80 28 00
并且,来自 IDA(由于某种原因,pInitial 始终为 0):
FnlApi::CCrc16::SetPolynomial(&this->__mCrc, 32773);
//////////////////////////////
v5 = FnlApi::CCrc16::CalcCrc(&this->__mCrc, pPack + 2, pLng - 2, 0);
//////////////////////////////
int result; // eax@1
const char *v5; // edx@1
__int16 v6; // bx@2
unsigned __int16 v7; // bx@2
bool v8; // zf@2
LOWORD(result) = pInitial;
v5 = pMsg;
do
{
LOBYTE(v6) = 0;
HIBYTE(v6) = result;
v7 = this->__mTbl[(unsigned __int8)(*v5++ ^ BYTE1(result))] ^ v6;
v8 = pLng-- == 1;
result = v7;
}
while ( !v8 );
return result;
这是来自服务器的未加密数据包。
[1B 00] [00] [00 F2 2C 00 00 00] [31 32 37 2E 30 2E 30 2E 31 00 00 00 20 01 00 00 16 27]
据我了解,这是数据包“结构”:
[Packet ID] [Key (00?)] [CRC, padding?] [Actual packet]
这是来自服务器的加密数据包。
[2F 00] [74] [38 ED 2C 00 00 01] [93 85 AE 9A 9A 9A 9A 9A 9A 9A 9A 9A 9A 9A 9A 9A 9A 9A 9A F3 3C EF EF F9 AE 9A 9A 9A 9A 9A 9A 9A 9A 9A 9A 9A 9A 9A 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00]
解密后,这是(我认为):
[2F 00] [74] [38 ED 2C 00 00 01] [75 69 64 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 70 61 73 73 77 64 00 00 00 00 00 00 00 00 00 00 00 00 00 CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC]
我认为这两个数据包的结构是:
[Packet ID] [Key] [CRC, padding?] [Actual packet]
另一个使用相同结构加密的数据包:
[18 00] [42] [56 D6 07 00 00 01] [2E 75 3D D2 75 03 CC 03 CD CC 03 8E 2D CC B1 6B 9F DB 6B D1 DB 6B 4F 4F D3 73 78 C6 AA 4B DF 63 1E 4A 18 C6 23 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00]
解密:
[18 00] [42] [56 D6 07 00 00 01] [63 74 65 73 74 00 01 00 08 01 00 04 02 01 03 C7 0F AC C7 C4 AC C7 A3 A3 E7 5C 7F 05 CA 6D A0 77 46 64 F8 05 9E 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F]
我很抱歉这是一团糟,但我已经这样做了好几天没有实际进展。
编辑:
我目前的课程(解密工作)在这里:http : //pastebin.com/7e05AJLa