Спасибо всем за советы и подсказки:
Цитата:
А помоему некорректно определяются large пакеты...
|
Да так и есть, щас переделаю:
http://github.com/arrai/tiawps/blob/...pter/decrypt.c
Если я правильно понял с примера, то нужно дополнительно декриптовать еще 1 байт, или же сразу нужный размер.
Код:
private static void ProcessWorldPacket(byte[] data, Direction direction)
{
int i = 0, size = 0, opcode = 0;
bool isLarge = (data[i] & 0x80) != 0;
int HEADER_LENGTH = isLarge ? 4 : 5;
if (direction == Direction.SERVER)
{
Crypt.DecryptServer(data, 0, HEADER_LENGTH);
}
else
{
HEADER_LENGTH += 2;
Crypt.DecryptClient(data, 0, HEADER_LENGTH);
}
if (isLarge)
size = data[i++] & 0x7F;
size = (size << 8) | data[i++];
size = (size << 8) | data[i++];
for (int j = 0; j < HEADER_LENGTH - 2; j++)
opcode |= ((0xFF & data[i++]) << (8 * j));
size += (2 + (isLarge ? 1 : 0));
if (size > data.Length)
{
Console.WriteLine("ERROR: {0} Size = {1} > packet.Length = {2}", direction, size, data.Length);
return;
}
using (BinaryReader reader = new BinaryReader(new MemoryStream(data)))
{
reader.BaseStream.Position += HEADER_LENGTH;
byte[] newData = reader.ReadBytes(size - HEADER_LENGTH);
HandleWorldPacket((WorldOpcodes)opcode, newData);
Console.WriteLine("{0}:\tHeader = {1}\tPacket = {2}\t{3}\tOpcode: {4}",
direction, size, data.Length, data.Length == size ? "OK" : "REUSE", (WorldOpcodes)opcode);
if (size < data.Length)
{
ProcessWorldPacket(reader.ReadBytes(data.Length - size), direction);
}
}
}
Но надо проверить, а это уже вечером.
Цитата:
это означает, что когда вы в снифере видите "пакет", то это совсем не означает что он пришел полностью. это даже не означает что это пакет вообще. это просто какие то данные в потоке tcp. и даже на следующий "recv_from_server" тоже не обязательно пакет придет полностью. под "пакетом" будем подразумевать "игровой пакет" от близзов, дамп опкода.
|
Это я тоже пытался учитывать, но как показал лог сниффера ни разу это не был фрагмент пакета, к тому же все равно приходили бы и целые пакеты.
Цитата:
ну и если вам вдруг будет все равно в каком формате записывать,
|
не все равно, формат ваш (pkt)
Цитата:
с другой стороны, а зачем вам раскриптованный трафик сразу?
|
Ну хотя бы для того чтоб потом этим не заниматься, а:
Цитата:
это ведь все задержки и возможные ошибки
|
тут не должно быть ошибки.
Цитата:
лишнее подтвердждение того, что прокси удобнее будет
|
А это как нож в горло, как видите пока не в силах сделать сниффер, а до прокси еще как до неба...
Да и с моим ничтожным опытом в программировании (чуть больше года на любительском уровне и когда есть время) наверное не постичь тайну аутеффикации, так как надо делать хук (подменить ИП сервера в памяти), надо еще чего-то и еще...
Ладно хватит писать, пойду работать...