Exemplo n.º 1
0
            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));
            }
Exemplo n.º 2
0
            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);
            }
Exemplo n.º 3
0
 public static void Empty(Client state, PacketReader2 pv)
 {
 }
Exemplo n.º 4
0
        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)
            {
            }
        }
Exemplo n.º 5
0
            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));
            }
Exemplo n.º 6
0
 public static void Empty(Client state, PacketReader2 pv)
 {
 }
Exemplo n.º 7
0
        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)
            {
            }
        }