Тема: Сниффер
Показать сообщение отдельно
Старый 31.05.2010, 21:26   #26
Konctantin
RuDB Dev
 
Аватар для Konctantin
 
Регистрация: 01.02.2010
Адрес: localhost
Сообщений: 592
Сказал(а) спасибо: 323
Поблагодарили 283 раз(а) в 122 сообщениях
Записей в дневнике: 2
Konctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всем
По умолчанию

Мы тут с LordJZ начали делать сниффер, но наткнулись на неприятность:
При логине и пока стоим на окне выбора персонажей пакеты декриптуются нормально
Вот лог сниффера:
Код:
World server address: 62.67.45.123:3724
Connected to 62.67.45.123:3724
SERVER: Header = 44     Packet = 44     OK      Opcode: SMSG_AUTH_CHALLENGE
Session Key: 6250DC798DDEA48A01102CE9B7EA33060D425E42DC2145E0477FBEC637F1287C00EAC7B10B54B3BB
CLIENT: Header = 278    Packet = 278    OK      Opcode: CMSG_AUTH_SESSION
SERVER: Header = 15     Packet = 15     OK      Opcode: SMSG_AUTH_RESPONSE
SERVER: Header = 192    Packet = 270    REUSE   Opcode: SMSG_ADDON_INFO
SERVER: Header = 8      Packet = 78     REUSE   Opcode: SMSG_CLIENTCACHE_VERSION
SERVER: Header = 36     Packet = 70     REUSE   Opcode: SMSG_TUTORIAL_FLAGS
Redirect to 62.67.45.165:1119
SERVER: Header = 34     Packet = 34     OK      Opcode: SMSG_REDIRECT_CLIENT
Connected to 62.67.45.165:1119
SERVER: Header = 44     Packet = 44     OK      Opcode: SMSG_AUTH_CHALLENGE
Session Key: 6250DC798DDEA48A01102CE9B7EA33060D425E42DC2145E0477FBEC637F1287C00EAC7B10B54B3BB
CLIENT: Header = 46     Packet = 46     OK      Opcode: CMSG_REDIRECTION_AUTH_PROOF
SERVER: Header = 4      Packet = 4      OK      Opcode: SMSG_FORCE_SEND_QUEUED_PACKETS
CLIENT: Header = 6      Packet = 6      OK      Opcode: CMSG_READY_FOR_ACCOUNT_DATA_TIMES
CLIENT: Header = 6      Packet = 6      OK      Opcode: CMSG_CHAR_ENUM
CLIENT: Header = 10     Packet = 10     OK      Opcode: CMSG_REALM_SPLIT
SERVER: Header = 25     Packet = 25     OK      Opcode: SMSG_ACCOUNT_DATA_TIMES
SERVER: Header = 291    Packet = 312    REUSE   Opcode: SMSG_CHAR_ENUM
SERVER: Header = 21     Packet = 21     OK      Opcode: SMSG_REALM_SPLIT
SERVER: Header = 41     Packet = 41     OK      Opcode: SMSG_WARDEN_DATA
Но при заходе персонажем в мир начинается каша, серверные пакеты неправильно декриптуются или разбираются:
Код:
CLIENT: Header = 14     Packet = 14     OK      Opcode: CMSG_PLAYER_LOGIN
SERVER: Header = 25     Packet = 25     OK      Opcode: SMSG_ACCOUNT_DATA_TIMES
SERVER: Header = 36     Packet = 1460   REUSE   Opcode: SMSG_TUTORIAL_FLAGS
SERVER: Header = 16     Packet = 1424   REUSE   Opcode: MSG_SET_DUNGEON_DIFFICULTY
SERVER: Header = 24     Packet = 1408   REUSE   Opcode: SMSG_LOGIN_VERIFY_WORLD
SERVER: Header = 29     Packet = 1384   REUSE   Opcode: SMSG_ACCOUNT_DATA_TIMES
SERVER: Header = 6      Packet = 1355   REUSE   Opcode: SMSG_FEATURE_SYSTEM_STATUS
SERVER: Header = 293    Packet = 1349   REUSE   Opcode: SMSG_MOTD
SERVER: Header = 12     Packet = 1056   REUSE   Opcode: SMSG_LEARNED_DANCE_MOVES
SERVER: Header = 12     Packet = 1044   REUSE   Opcode: SMSG_CONTACT_LIST
SERVER: Header = 24     Packet = 1032   REUSE   Opcode: SMSG_BINDPOINTUPDATE
SERVER: Header = 9      Packet = 1008   REUSE   Opcode: SMSG_SET_PROFICIENCY
SERVER: Header = 9      Packet = 999    REUSE   Opcode: SMSG_SET_PROFICIENCY
SERVER: Header = 9      Packet = 990    REUSE   Opcode: SMSG_SET_PROFICIENCY
SERVER: Header = 9      Packet = 981    REUSE   Opcode: SMSG_SET_PROFICIENCY
SERVER: Header = 9      Packet = 972    REUSE   Opcode: SMSG_SET_PROFICIENCY
SERVER: Header = 9      Packet = 963    REUSE   Opcode: SMSG_SET_PROFICIENCY
SERVER: Header = 9      Packet = 954    REUSE   Opcode: SMSG_SET_PROFICIENCY
SERVER: Header = 9      Packet = 945    REUSE   Opcode: SMSG_SET_PROFICIENCY
SERVER: Header = 9      Packet = 936    REUSE   Opcode: SMSG_SET_PROFICIENCY
SERVER: Header = 9      Packet = 927    REUSE   Opcode: SMSG_SET_PROFICIENCY
SERVER: Header = 25     Packet = 918    REUSE   Opcode: SMSG_TALENTS_INFO
SERVER: Header = 12     Packet = 893    REUSE   Opcode: SMSG_INSTANCE_DIFFICULTY
SERVER: Header = 9      Packet = 881    REUSE   Opcode: SMSG_SET_PROFICIENCY
SERVER: Header = 9      Packet = 872    REUSE   Opcode: SMSG_SET_PROFICIENCY
SERVER: Header = 285    Packet = 863    REUSE   Opcode: SMSG_INITIAL_SPELLS
SERVER: Header = 8      Packet = 578    REUSE   Opcode: SMSG_SEND_UNLEARN_SPELLS
ERROR: SERVER Size = 581        >        packet.Length = 570
ERROR: SERVER Size = 27961      >        packet.Length = 1460
ERROR: SERVER Size = 46186      >        packet.Length = 1460
ERROR: SERVER Size = 27772      >        packet.Length = 1355
CLIENT: Header = 7      Packet = 7      OK      Opcode: CMSG_PLAYED_TIME
CLIENT: Header = 14     Packet = 14     OK      Opcode: CMSG_NAME_QUERY
CLIENT: Header = 14     Packet = 14     OK      Opcode: CMSG_SET_ACTIVE_MOVER
CLIENT: Header = 7      Packet = 7      OK      Opcode: CMSG_SET_ACTIONBAR_TOGGLES
CLIENT: Header = 6      Packet = 6      OK      Opcode: CMSG_REQUEST_RAID_INFO
CLIENT: Header = 6      Packet = 6      OK      Opcode: CMSG_GMTICKET_GETTICKET
ERROR: SERVER Size = 34578      >        packet.Length = 118
CLIENT: Header = 6      Packet = 6      OK      Opcode: CMSG_QUERY_TIME
CLIENT: Header = 14     Packet = 14     OK      Opcode: CMSG_QUEST_POI_QUERY
CLIENT: Header = 6      Packet = 6      OK      Opcode: CMSG_MEETINGSTONE_INFO
CLIENT: Header = 6      Packet = 6      OK      Opcode: CMSG_LFD_PLAYER_LOCK_INFO_REQUEST
CLIENT: Header = 6      Packet = 6      OK      Opcode: MSG_GUILD_BANK_MONEY_WITHDRAWN
CLIENT: Header = 6      Packet = 6      OK      Opcode: CMSG_CALENDAR_GET_NUM_PENDING
CLIENT: Header = 8      Packet = 8      OK      Opcode: 
CLIENT: Header = 14     Packet = 14     OK      Opcode: CMSG_QUESTGIVER_STATUS_QUERY
CLIENT: Header = 14     Packet = 14     OK      Opcode: CMSG_NAME_QUERY
CLIENT: Header = 14     Packet = 14     OK      Opcode: CMSG_TIME_SYNC_RESP
CLIENT: Header = 42     Packet = 42     OK      Opcode: MSG_MOVE_FALL_LAND
CLIENT: Header = 10     Packet = 10     OK      Opcode: CMSG_ZONEUPDATE
CLIENT: Header = 43     Packet = 43     OK      Opcode: CMSG_JOIN_CHANNEL
CLIENT: Header = 49     Packet = 49     OK      Opcode: CMSG_JOIN_CHANNEL
CLIENT: Header = 47     Packet = 47     OK      Opcode: CMSG_JOIN_CHANNEL
CLIENT: Header = 43     Packet = 43     OK      Opcode: CMSG_JOIN_CHANNEL
CLIENT: Header = 47     Packet = 47     OK      Opcode: CMSG_JOIN_CHANNEL
CLIENT: Header = 6      Packet = 6      OK      Opcode: CMSG_WORLD_STATE_UI_TIMER_UPDATE
ERROR: SERVER Size = 44279      >        packet.Length = 29
ERROR: SERVER Size = 7350       >        packet.Length = 1460
ERROR: SERVER Size = 61367      >        packet.Length = 649
ERROR: SERVER Size = 31772      >        packet.Length = 62
ERROR: SERVER Size = 21770      >        packet.Length = 388
ERROR: SERVER Size = 12076      >        packet.Length = 54
ERROR: SERVER Size = 10025      >        packet.Length = 108
ERROR: SERVER Size = 50091      >        packet.Length = 62
ERROR: SERVER Size = 41905      >        packet.Length = 61
ERROR: SERVER Size = 20541      >        packet.Length = 66
ERROR: SERVER Size = 26947      >        packet.Length = 54
ERROR: SERVER Size = 15250      >        packet.Length = 66
ERROR: SERVER Size = 13283      >        packet.Length = 147
ERROR: SERVER Size = 5655       >        packet.Length = 170
ERROR: SERVER Size = 16965      >        packet.Length = 54
ERROR: SERVER Size = 25301      >        packet.Length = 62
ERROR: SERVER Size = 39797      >        packet.Length = 62
ERROR: SERVER Size = 12419      >        packet.Length = 54
CLIENT: Header = 32     Packet = 32     OK      Opcode: CMSG_WARDEN_DATA
ERROR: SERVER Size = 18762      >        packet.Length = 439
ERROR: SERVER Size = 9091       >        packet.Length = 159
ERROR: SERVER Size = 32369      >        packet.Length = 120
CLIENT: Header = 42     Packet = 42     OK      Opcode: MSG_MOVE_SET_FACING
CLIENT: Header = 42     Packet = 42     OK      Opcode: MSG_MOVE_START_FORWARD
ERROR: SERVER Size = 37437      >        packet.Length = 5
CLIENT: Header = 42     Packet = 42     OK      Opcode: MSG_MOVE_STOP
ERROR: SERVER Size = 11046      >        packet.Length = 54
ERROR: SERVER Size = 59547      >        packet.Length = 54
ERROR: SERVER Size = 32659      >        packet.Length = 120
CLIENT: Header = 14     Packet = 14     OK      Opcode: CMSG_SET_SELECTION
CLIENT: Header = 14     Packet = 14     OK      Opcode: CMSG_QUESTGIVER_HELLO
ERROR: SERVER Size = 23216      >        packet.Length = 54
ERROR: SERVER Size = 12149      >        packet.Length = 295
ERROR: SERVER Size = 25893      >        packet.Length = 42
Сама функция которая обрабатывает пакеты:
Код:
private static void ProcessWorldPacket(byte[] data, Direction direction)
{
	int i = 0, size = 0, opcode = 0;
	int HEADER_LENGTH = 4;

	bool isLarge = data.Length > 0x7FFF;
	HEADER_LENGTH += (isLarge ? 1 : 0);

	if (direction == Direction.SERVER)
	{
		Crypt.DecryptServer(data, HEADER_LENGTH);
	}
	else
	{
		HEADER_LENGTH += 2;
		Crypt.DecryptClient(data, 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;

	if (size > data.Length)
	{
		Console.WriteLine("ERROR: {0} Size = {1} \t>\t 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);
		}  
	} 
}
Подскажите, в чем загвоздка, или есть какой-то нюанс?
__________________
Konctantin вне форума   Ответить с цитированием
Пользователь сказал cпасибо:
YuruY (01.06.2010)