public void CheckPacket(byte[] data, GameClient client) { this.pkt = new Packet(); pkt.SetData(data); this.client = client; switch ((PacketOpcodes)pkt.Opcode) { case PacketOpcodes.SYS_ALIVE: /* TO SKIP LOGGING THIS PACKET */ break; case PacketOpcodes.SYS_HANDSHAKE_RES: client.SendHandShakeRes(); break; default: SysCons.WriteLine("Recv Unknow Packet Len({0}) Enc({1}) Opcode({2})", pkt.Lenght, pkt.Encrypt, pkt.Opcode); SysCons.SavePacket(pkt.Data, pkt.Opcode); break; } }
private int Encrypt(ref Packet pkt, int Length, uint CipherKey) { if (pkt == null) return 0; int pOff = 2, pLen = Length - pOff; byte[] outdata = pkt.Data; byte[] Plain = new byte[pLen]; Buffer.BlockCopy(outdata, pOff, Plain, 0, pLen); int Off = 0; int Round = pLen / sizeof(uint); for (int i = 0; i < Round; i++) { uint RoundPlain = BitConverter.ToUInt32(Plain, Off); RoundPlain ^= CipherKey; Buffer.BlockCopy(BitConverter.GetBytes(RoundPlain), 0, Plain, Off, sizeof(uint)); Off += sizeof(uint); } int Rest = pLen % sizeof(uint); for (int i = 0; i < Rest; i++) { byte RestPlain = Plain[Off]; RestPlain ^= (byte)CipherKey; Plain[Off] = RestPlain; Off++; } Buffer.BlockCopy(Plain, 0, outdata, pOff, pLen); pkt.SetData(outdata); return Length; }
public void CheckPacket(byte[] data, CharClient client) { this.pkt = new Packet(); pkt.SetData(data); this.client = client; switch ((PacketOpcodes)pkt.Opcode) { case PacketOpcodes.SYS_ALIVE: /* TO SKIP LOGGING THIS PACKET */ break; case PacketOpcodes.SYS_HANDSHAKE_RES: client.SendHandShakeRes(); break; case PacketOpcodes.UC_LOGIN_REQ: client.SendLoginResponse(data); break; case PacketOpcodes.UC_CHARACTER_SERVERLIST_REQ: client.SendServerList(false); break; case PacketOpcodes.UC_CHARACTER_SERVERLIST_ONE_REQ: client.SendServerList(true); break; case PacketOpcodes.UC_CHARACTER_LOAD_REQ: client.SendCharacterLoad(data); break; default: SysCons.WriteLine("Recv Unknow Packet Len({0}) Enc({1}) Opcode({2})", pkt.Lenght, pkt.Encrypt, pkt.Opcode); SysCons.SavePacket(pkt.Data, pkt.Opcode); break; } }