public static void Pack1(Client state, PacketReader2 pv) { LogConsole.Show(LogType.DEBUG, "OpCode->Pack1()"); byte[] unk1 = pv.ReadBytes(0x10); byte[] buffer2 = pv.ReadBytes(0x10); byte[] xd2 = Crypto.DecryptStaticBuffer(unk1); string aSCIIZ = Utils.GetASCIIZ(xd2); LogConsole.Show(LogType.DEBUG, "Login: {0}", aSCIIZ); //state.Send(new LoginResponse(LoginResponseCode.Prohibited, -1, "HAHAHAHAHAHAHAHA!!")); state.Send(new LoginResponse(LoginResponseCode.LoginSuccessful)); }
public bool PacketDecrypt(byte[] input, ref byte[] output, ushort packetid) { if (input.Length == 0) { LogConsole.Show(LogType.DEBUG, "Empty buffer passed for decryption"); return(false); } if ((input.Length % 0x10) != 0) { LogConsole.Show(LogType.DEBUG, "Decrypt failed. Input byte count is not a multiple of 16."); return(false); } int num = input.Length / 0x10; int num2 = num * 12; byte[] buffer = new byte[input.Length]; byte[] buffer2 = new byte[num2]; buffer = this.DecryptDynamic(input); PacketReader2 reader = new PacketReader2(buffer, buffer.Length); uint num3 = 0xa8c2e5c1; for (int i = 0; i < num; i++) { reader.Seek(0x10 * i, SeekOrigin.Begin); uint num5 = reader.ReadUInt32(); //if ((num5 - packetid) != num3) if ((2831345089) != num3) { LogConsole.Show(LogType.DEBUG, "-----------------------------------"); LogConsole.Show(LogType.DEBUG, "Num5 = " + num5); LogConsole.Show(LogType.DEBUG, "packetid = " + packetid); LogConsole.Show(LogType.DEBUG, "num5 - packetid = " + (num5 - packetid)); LogConsole.Show(LogType.DEBUG, "num3 = " + num3); LogConsole.Show(LogType.DEBUG, "ReadUInt32 = " + reader.ReadUInt32()); LogConsole.Show(LogType.DEBUG, "Bad Packet Signature. G: {0,8:X8} E: {1,8:X8}", new object[] { num5, num3 + packetid }); return(false); } for (int j = 4; j < 0x10; j++) { buffer2[(i * 12) + (j - 4)] = buffer[(i * 0x10) + j]; } } output = buffer2; return(true); }
public static void Empty(Client state, PacketReader2 pv) { }
public static void OpCode(Decode state, Client ed) { try { LogConsole.Show(LogType.DEBUG, "OpCode()"); Systems sys = (Systems)state.Packet; sys.PacketInformation = state; ByteQueue queue = ed.queue; int length = queue.Length; LogConsole.Show(LogType.DEBUG, "OpCode() {0}", length); while ((length > 0)) { byte[] buffer; int packetID = queue.GetPacketID(); int packetLength = queue.GetPacketLength(); int packetControlCode = queue.GetPacketControlCode(); LogConsole.Show(LogType.DEBUG, "PacketControl: {0} PacketID: 0x{1:X2} Length: {2}", packetControlCode, packetID, packetLength); LogConsole.HexDump(state.buffer, "", 16); PacketHandler handler = PacketHandlers.GetHandler(packetID); if (handler == null) { byte[] buffer2 = new byte[length]; length = queue.Dequeue(buffer2, 0, length); LogConsole.Show(LogType.DEBUG, "Client: {0}: Unhandled packet 0x{1:X2}", new object[] { state, packetID }); break; } int size = handler.Length; if (length >= 4) { size = packetLength; if (packetLength >= 4) { if (length < size) { break; } if (0x400 >= size) { buffer = m_Buffers.AquireBuffer(); } else { buffer = new byte[size]; } size = queue.Dequeue(buffer, 0, size); ushort packetid = ByteQueue.GetPacketID(buffer); bool flag = IsCrypted(packetid); if (flag) { LogConsole.Show(LogType.DEBUG, "Crypted Packet 0x{0:X4}", new object[] { packetid }); } try { PacketReader2 pr = new PacketReader2(buffer, size); handler.OnReceive(ed, pr); } catch { break; } length = queue.Length; if ((0x400 >= size) && !flag) { m_Buffers.ReleaseBuffer(buffer); break; } } } length = 0; } } catch (Exception) { } }
public static void Pack1(Client state, PacketReader2 pv) { LogConsole.Show(LogType.DEBUG, "OpCode->Pack1()"); byte[] desuser = pv.ReadBytes(0x10); byte[] bffuser = Crypto.DecryptStaticBuffer(desuser); string username = Utils.GetASCIIZ(bffuser); LogConsole.Show(LogType.DEBUG, "Username: {0}", username); byte[] buffer2 = pv.ReadBytes(0x10); state.UserInfo = new UserInfo(username, state); if (state.UserInfo.Exist() >= 1) { byte[] buff2 = Crypto.DecryptStaticBuffer(buffer2); LogConsole.HexDump(buff2, "", 16); PacketReader2 reader = new PacketReader2(buff2, 0x10); reader.Seek(0, SeekOrigin.Begin); state.AuthDWORD = reader.ReadUInt32(); LogConsole.Show(LogType.DEBUG, "AuthDWORD: {0}", state.AuthDWORD ); //state.Crypto = new Crypto(username, state.UserInfo.Password, state.AuthDWORD); state.Crypto = new Crypto(username, "123456", state.AuthDWORD); byte[] input = pv.ReadBytes(0x20); byte[] output = new byte[0x18]; LogConsole.HexDump(input, "", 16); if (!state.Crypto.PacketDecrypt(input, ref output, 0x1012)) { LogConsole.Show(LogType.DEBUG, (string.Concat(new object[] { "Failed login: '", state.UserInfo.Username }))); state.Send(new LoginResponse(LoginResponseCode.BadPass)); } else { reader = new PacketReader2(output, output.Length); reader.Seek(0, SeekOrigin.Begin); byte[] buffpas = reader.ReadBytes(20); string password = Utils.GetASCIIZ(buffpas); uint num = reader.ReadUInt32(); LogConsole.Show(LogType.DEBUG, "password: {0}", password); if (state.UserInfo.Password == password) { if (num >= Program.VER) { if (state.UserInfo.Ban) { state.Send(new LoginResponse(LoginResponseCode.Prohibited, -1, state.UserInfo.BanReason)); } else { state.Send(new LoginResponse(LoginResponseCode.LoginSuccessful)); } } else { state.Send(new LoginResponse(LoginResponseCode.IncorrectVersion)); } } else { state.Send(new LoginResponse(LoginResponseCode.BadPass)); } } } else { state.Send(new LoginResponse(LoginResponseCode.UnregisteredID)); } //state.Send(new LoginResponse(LoginResponseCode.Prohibited, -1, "HAHAHAHAHAHAHAHA!!")); //state.Send(new LoginResponse(LoginResponseCode.LoginSuccessful)); }
public static void Empty(Client state, PacketReader2 pv) { }
public static void OpCode(Decode state, Client ed) { try { LogConsole.Show(LogType.DEBUG, "OpCode()"); Systems sys = (Systems)state.Packet; sys.PacketInformation = state; ByteQueue queue = ed.queue; int length = queue.Length; LogConsole.Show(LogType.DEBUG, "OpCode() {0}", length); while ((length > 0)) { byte[] buffer; int packetID = queue.GetPacketID(); int packetLength = queue.GetPacketLength(); int packetControlCode = queue.GetPacketControlCode(); LogConsole.Show(LogType.DEBUG, "PacketControl: {0} PacketID: 0x{1:X2} Length: {2}", packetControlCode, packetID, packetLength ); LogConsole.HexDump(state.buffer, "", 16); PacketHandler handler = PacketHandlers.GetHandler(packetID); if (handler == null) { byte[] buffer2 = new byte[length]; length = queue.Dequeue(buffer2, 0, length); LogConsole.Show(LogType.DEBUG, "Client: {0}: Unhandled packet 0x{1:X2}", new object[] { state, packetID }); break; } int size = handler.Length; if (length >= 4) { size = packetLength; if (packetLength >= 4) { if (length < size) { break; } if (0x400 >= size) { buffer = m_Buffers.AquireBuffer(); } else { buffer = new byte[size]; } size = queue.Dequeue(buffer, 0, size); ushort packetid = ByteQueue.GetPacketID(buffer); bool flag = IsCrypted(packetid); if (flag) { LogConsole.Show(LogType.DEBUG, "Crypted Packet 0x{0:X4}", new object[] { packetid }); } try { PacketReader2 pr = new PacketReader2(buffer, size); handler.OnReceive(ed, pr); } catch { break; } length = queue.Length; if ((0x400 >= size) && !flag) { m_Buffers.ReleaseBuffer(buffer); break; } } } length = 0; } } catch (Exception) { } }