Creating emulator

Results 1 to 15 of 15
  1. #1
    Registered FleeMons is offline
    MemberRank
    Oct 2014 Join Date
    13Posts

    ! Creating emulator

    Creating emulator
    Hello, forum. I'm trying to write a server emulator for R2 Online. I do it in C#.
    Programm.cs
    https://pastebin.com/NCFNST3a
    And Client.cs
    https://pastebin.com/3Ze2vLXi
    I only partially parsed the package in the buffer Post array. Found in it ip and port of the server and the client.The client writes no error about missing server, but nothing happens.Please explain what to do next.


  2. #2
    Ultimate Member Ashime is offline
    MemberRank
    Oct 2013 Join Date
    184Posts

    Re: Creating emulator

    @FleeMons

    Why not use the pre-existing game client for R2? You need to study the packets from the client and create a class that handles the packets. There is a lot that needs to be done, but I know nothing about the game. Good luck.

    I would start here: http://forum.ragezone.com/f859/start...lator-1135003/
    Go to the thread and read the second post.
    Last edited by Ashime; 16-11-18 at 04:38 PM. Reason: Add link and more information.

  3. #3
    Programmer cyberinferno is offline
    True MemberRank
    Jun 2009 Join Date
    127.0.0.1Location
    690Posts

    Re: Creating emulator

    Quote Originally Posted by FleeMons View Post
    Hello, forum. I'm trying to write a server emulator for R2 Online. I do it in C#.
    Programm.cs
    https://pastebin.com/NCFNST3a
    And Client.cs
    https://pastebin.com/3Ze2vLXi
    I only partially parsed the package in the buffer Post array. Found in it ip and port of the server and the client.The client writes no error about missing server, but nothing happens.Please explain what to do next.
    Server emulator is a software that emulates an existing server for a specific client. The code you shared is just a simple TCP server as well as client. If you are writing your own client then it is not an emulator. You need to really understand the game structure in order to build an emulator. It will take lot of time and creativity to do it. You need start capturing game packets while playing, figure out encryption used (if any). Once you have enough data try writing a simple server which replays the exact same packet and see if client works. From there you need to start implementing each and every functionality yourself which might take years! Good luck to you sir
    ** Web developer **

  4. #4
    Registered FleeMons is offline
    MemberRank
    Oct 2014 Join Date
    13Posts

    ! Re: Creating emulator

    Quote Originally Posted by cyberinferno View Post
    Server emulator is a software that emulates an existing server for a specific client. The code you shared is just a simple TCP server as well as client. If you are writing your own client then it is not an emulator. You need to really understand the game structure in order to build an emulator. It will take lot of time and creativity to do it. You need start capturing game packets while playing, figure out encryption used (if any). Once you have enough data try writing a simple server which replays the exact same packet and see if client works. From there you need to start implementing each and every functionality yourself which might take years! Good luck to you sir
    I don't know how to deal with the structure of TCP packet... I find in packet - ip`s and ports.. And I know the encryption method - XOR.I don't know how to combine it. And what will be the difference between my server and another?

  5. #5
    Programmer cyberinferno is offline
    True MemberRank
    Jun 2009 Join Date
    127.0.0.1Location
    690Posts

    Re: Creating emulator

    Quote Originally Posted by FleeMons View Post
    I don't know how to deal with the structure of TCP packet... I find in packet - ip`s and ports.. And I know the encryption method - XOR.I don't know how to combine it. And what will be the difference between my server and another?
    Look at some example emulators like https://github.com/Fraysa/Destiny
    ** Web developer **

  6. #6
    Registered FleeMons is offline
    MemberRank
    Oct 2014 Join Date
    13Posts

    Re: Creating emulator

    Quote Originally Posted by cyberinferno View Post
    Look at some example emulators like https://github.com/Fraysa/Destiny
    What is it ? where were these opcodes found?
    https://github.com/Fraysa/Destiny/bl...erationCode.cs

  7. #7
    Programmer cyberinferno is offline
    True MemberRank
    Jun 2009 Join Date
    127.0.0.1Location
    690Posts

    Re: Creating emulator

    Quote Originally Posted by FleeMons View Post
    What is it ? where were these opcodes found?
    https://github.com/Fraysa/Destiny/bl...erationCode.cs
    That's found by capturing and understanding packets!
    ** Web developer **

  8. #8
    Registered FleeMons is offline
    MemberRank
    Oct 2014 Join Date
    13Posts

    Re: Creating emulator

    Quote Originally Posted by cyberinferno View Post
    That's found by capturing and understanding packets!
    This is the bytes in the captured packets?

  9. #9
    Ultimate Member GHOST107 is offline
    MemberRank
    Oct 2008 Join Date
    170Posts

    Re: Creating emulator

    You should avoid using a multi-threaded approach, because it will get slow with the number of connections:

    Main
    PHP Code:
    private static MainServer server = new MainServer();
    static 
    void Main(string[] args)
    {
       try
      {
         
    server.Startup();
         
    server.Run();
      }  
      catch (
    Exception ex)
      {
         
    // log the error
      
    }

       
    server.Shutdown();

    Main Server:
    PHP Code:
    public class MainServer
        
    {
            
    #region Constants 
            
    const int STATE_CLOSE 0;
            const 
    int STATE_LOGIN 1;
            const 
    int STATE_PLAYING 2;
            const 
    int REQUESTS_PER_MIN 60;
            
    #endregion Constasnts

            #region Fields
            
    protected int m_nPort 12345;
            protected 
    string m_strHost "0.0.0.0";

            protected 
    bool m_bRunning false;
            protected 
    Thread m_mainThread null;

            protected 
    object m_objLock = new object();

            protected 
    Socket m_serverSocket null;
            protected 
    Dictionary<SocketClientSocketm_dicConnections = new Dictionary<SocketClientSocket>();
            protected 
    ConcurrentQueue<NetworkMessagem_messageQueue = new ConcurrentQueue<NetworkMessage>();
            protected 
    AutoResetEvent m_evWaitForPendingMessages = new AutoResetEvent(false);
            
    #endregion Fields


            
    internal void Startup()
            {
                
    AutoResetEvent evWqaitForThreadToStart = new AutoResetEvent(false);
                
    m_mainThread = new Thread(new ParameterizedThreadStart(MessageHandlerThread));
                
    m_mainThread.Start(evWqaitForThreadToStart);
                
    evWqaitForThreadToStart.WaitOne();

                
    m_serverSocket = new Socket(AddressFamily.InterNetwork,
                             
    SocketType.StreamProtocolType.Tcp);

                
    IPAddress host IPAddress.Parse(m_strHost);
                
    IPEndPoint iep = new IPEndPoint(hostm_nPort);

                
    m_serverSocket.Bind(iep);
                
    m_serverSocket.Listen(2);
            }

            
    internal void Shutdown()
            {
                
    // stop running client thread
                
    m_bRunning false;
                
    m_evWaitForPendingMessages.Set();
                
    m_mainThread.Join();

                
    // close server connections and disconnect existing clients
                
    m_serverSocket.Close();
                foreach (var 
    key in m_dicConnections.Keys)
                {
                    
    m_dicConnections[key].Disconnect();
                }
                
    m_dicConnections.Clear();
            }

            private 
    void MessageHandlerThread(object obj)
            {
                
    m_bRunning true;
                
    AutoResetEvent evWqaitForThreadToStart obj as AutoResetEvent;
                
    evWqaitForThreadToStart .Set();

                while (
    m_bRunning)
                {
                    if (
    m_messageQueue.Count == 0)
                    {
                        
    m_evWaitForPendingMessages.WaitOne();
                    }

                    
    NetworkMessage netMsg null;
                    
    m_messageQueue.TryDequeue(out netMsg);
                    if (
    netMsg == null)
                    {
                        continue;
                    }

                    switch (
    netMsg.Index)
                    {
                        
    // process network messages
                        
    default:
                            break;
                    }
                }

                
    // Shutting down
                
    m_bRunning false;
            }


            public 
    void Run()
            {
                while (
    m_bRunning)
                {
                    
    ListenForConnctions();
                    
    ManageInputData();
                    
    ManageOutputData();

                    
    // sleep 100 ms, suggest use a proper management of CPU overhead
                    
    Thread.Sleep(100);
                }
            }

            private 
    void ManageInputData()
            {
                
    // Make a copy
                
    ArrayList copyList = new ArrayList();
                foreach (var 
    key in m_dicConnections.Keys)
                {
                    
    copyList.Add(m_dicConnections[key].Socket);
                }

                if(
    copyList.Count ==  0)
                {
                    return;
                }

                
    Socket.Select(copyListnullnull0);
                for (
    int nSocket 0nSocket copyList.CountnSocket++)
                {
                    
    Socket socket copyList[nSocket] as Socket;
                    
    ClientSocket client m_dicConnections[socket];
                    if (
    client == null)
                    {
                        continue;
                    }

                    if (
    client.State == STATE_LOGIN)
                    {
                        
    client.LoginRequest++;
                        if (
    client.LoginRequest REQUESTS_PER_MIN)
                        {
                            
    client.Disconnect();
                            
    m_dicConnections.Remove(socket);
                            continue;
                        }
                    }

                    if (
    client.Receive() <= 0)
                    {
                        
    client.Disconnect();
                        
    m_dicConnections.Remove(socket);
                        continue;
                    }
             
                    while (
    client.InputQueue.Count 0)
                    {
                        
    NetworkMessage netMsg client.InputQueue.Dequeue();
                        if (
    netMsg == null)
                        {
                            continue;
                        }

                        
    m_messageQueue.Enqueue(netMsg);
                        
    m_evWaitForPendingMessages.Set();
                    }
                }
            }

           private 
    void ManageOutputData()
            {
                List<
    SocketsocketsToDisconnect = new List<Socket>();
                for (
    int nIndex 0nIndex m_dicConnections.CountnIndex++)
                {
                    
    Socket socket m_dicConnections.ElementAt(nIndex).Key;
                    
    ClientSocket client m_dicConnections.ElementAt(nIndex).Value;
                    if (
    client.State == STATE_CLOSE || client.Send() <= 0)
                    {
                        
    client.Disconnect();
                        
    socketsToDisconnect.Add(socket);
                        continue;
                    }
                }

                for (
    int nIndex 0nIndex socketsToDisconnect.CountnIndex++)
                {
                    
    Socket socket socketsToDisconnect[nIndex];
                    
    m_dicConnections.Remove(socket);
                }
            }

            private 
    void ListenForConnctions()
            {
                try
                {
                    
    ArrayList copyList = new ArrayList();
                    
    copyList.Add(m_serverSocket);

                    
    Socket.Select(copyListnullnull0);
                    if (
    copyList.Count == 0)
                    {
                        return;
                    }

                    
    Socket socket m_serverSocket.Accept();
                    
    ClientSocket client = new ClientSocket(socket);
                    
    client.State STATE_LOGIN;

                    
    m_dicConnections[socket] = (client);
                }
                catch (
    Exception ex)
                {
                    
    // Socket error
                
    }
            }
        } 
    Client
    PHP Code:
    public class ClientSocket
        
    {
            
    #region Constants 
            
    protected const int READ_DATA_SIZE 1024;
            
    #endregion Constants

            #region Fields     
            
    protected int m_nState 0;
            protected 
    int m_nLoginRequest 0;
            protected 
    byte[] m_data = new byte[READ_DATA_SIZE];
            protected 
    Socket m_socket null;

            
    // input and output Message Queue
            
    protected Queue<NetworkMessagem_inputQueue = new Queue<NetworkMessage>();
            protected 
    Queue<NetworkMessagem_outputQueue = new Queue<NetworkMessage>();
            
    #endregion Fields

            #region Constructors
            
    public ClientSocket(Socket socket)
            {
                
    m_socket socket;
            }

            
    #endregion Constructors

            #region Properties 
            
    public Socket Socket get { return m_socket; } }
            public 
    Queue<NetworkMessageInputQueue get { return m_inputQueue; } }
            public 
    Queue<NetworkMessageOutputQueue get { return m_outputQueue; } }

            public 
    int State
            
    {
                
    get { return m_nState; }
                
    set m_nState value; }
            }

            public 
    int LoginRequest
            
    {
                
    get { return m_nLoginRequest; }
                
    set m_nLoginRequest value; }
            }
            
    #endregion Properties

            
    public void Disconnect()
            {
                
    m_socket.Close();
            }

            public 
    int Receive()
            {
                
    int nSize m_socket.Receive(m_data);
                if (
    nSize <= 0)
                {
                    
    m_nState 0// 0 - STATE_CLOSE
                    
    return nSize;
                }

                
    // Process network packets / packets(there could be multiple packets)
                // Also use a buffer on the client to read partial packets
                
    bool bStop false;
                while (!
    bStop)
                {
                    
    int nMsgIndex = -1;
                    
    //..
                    
    NetworkMessage netMsg = new NetworkMessage(nMsgIndex);
                    
    // Add network data
                    // ...
                    
    m_inputQueue.Enqueue(netMsg);
                }

                return 
    nSize;
            }

            public 
    int Send()
            {
                
    int nResult 0;
                
    int nQueueSize m_outputQueue.Count;
                for (
    int nIndex 0nIndex nQueueSize; ++nIndex)
                {
                    
    NetworkMessage netMsg m_outputQueue.Dequeue();
                    
    int nMsgSize m_socket.Send(netMsg.RawData);
                    if (
    nMsgSize <= 0)
                    {
                        return 
    nMsgSize;
                    }

                    
    nResult += nMsgSize;
                }

                return 
    nResult;
            }
        } 
    Last edited by GHOST107; 17-11-18 at 06:36 PM.

  10. #10
    Registered FleeMons is offline
    MemberRank
    Oct 2014 Join Date
    13Posts

    Re: Creating emulator

    can you give me NetworkMessage class please

    - - - Updated - - -

    Quote Originally Posted by GHOST107 View Post
    You should avoid using a multi-threaded approach, because it will get slow with the number of connections:

    Main
    PHP Code:
    private static MainServer server = new MainServer();
    static 
    void Main(string[] args)
    {
       try
      {
         
    server.Startup();
         
    server.Run();
      }  
      catch (
    Exception ex)
      {
         
    // log the error
      
    }

       
    server.Shutdown();

    Main Server:
    PHP Code:
    public class MainServer
        
    {
            
    #region Constants 
            
    const int STATE_CLOSE 0;
            const 
    int STATE_LOGIN 1;
            const 
    int STATE_PLAYING 2;
            const 
    int REQUESTS_PER_MIN 60;
            
    #endregion Constasnts

            #region Fields
            
    protected int m_nPort 12345;
            protected 
    string m_strHost "0.0.0.0";

            protected 
    bool m_bRunning false;
            protected 
    Thread m_mainThread null;

            protected 
    object m_objLock = new object();

            protected 
    Socket m_serverSocket null;
            protected 
    Dictionary<SocketClientSocketm_dicConnections = new Dictionary<SocketClientSocket>();
            protected 
    ConcurrentQueue<NetworkMessagem_messageQueue = new ConcurrentQueue<NetworkMessage>();
            protected 
    AutoResetEvent m_evWaitForPendingMessages = new AutoResetEvent(false);
            
    #endregion Fields


            
    internal void Startup()
            {
                
    AutoResetEvent evWqaitForThreadToStart = new AutoResetEvent(false);
                
    m_mainThread = new Thread(new ParameterizedThreadStart(MessageHandlerThread));
                
    m_mainThread.Start(evWqaitForThreadToStart);
                
    evWqaitForThreadToStart.WaitOne();

                
    m_serverSocket = new Socket(AddressFamily.InterNetwork,
                             
    SocketType.StreamProtocolType.Tcp);

                
    IPAddress host IPAddress.Parse(m_strHost);
                
    IPEndPoint iep = new IPEndPoint(hostm_nPort);

                
    m_serverSocket.Bind(iep);
                
    m_serverSocket.Listen(2);
            }

            
    internal void Shutdown()
            {
                
    // stop running client thread
                
    m_bRunning false;
                
    m_evWaitForPendingMessages.Set();
                
    m_mainThread.Join();

                
    // close server connections and disconnect existing clients
                
    m_serverSocket.Close();
                foreach (var 
    key in m_dicConnections.Keys)
                {
                    
    m_dicConnections[key].Disconnect();
                }
                
    m_dicConnections.Clear();
            }

            private 
    void MessageHandlerThread(object obj)
            {
                
    m_bRunning true;
                
    AutoResetEvent evWqaitForThreadToStart obj as AutoResetEvent;
                
    evWqaitForThreadToStart .Set();

                while (
    m_bRunning)
                {
                    if (
    m_messageQueue.Count == 0)
                    {
                        
    m_evWaitForPendingMessages.WaitOne();
                    }

                    
    NetworkMessage netMsg null;
                    
    m_messageQueue.TryDequeue(out netMsg);
                    if (
    netMsg == null)
                    {
                        continue;
                    }

                    switch (
    netMsg.Index)
                    {
                        
    // process network messages
                        
    default:
                            break;
                    }
                }

                
    // Shutting down
                
    m_bRunning false;
            }


            public 
    void Run()
            {
                while (
    m_bRunning)
                {
                    
    ListenForConnctions();
                    
    ManageInputData();
                    
    ManageOutputData();

                    
    // sleep 100 ms, suggest use a proper management of CPU overhead
                    
    Thread.Sleep(100);
                }
            }

            private 
    void ManageInputData()
            {
                
    // Make a copy
                
    ArrayList copyList = new ArrayList();
                foreach (var 
    key in m_dicConnections.Keys)
                {
                    
    copyList.Add(m_dicConnections[key].Socket);
                }

                if(
    copyList.Count ==  0)
                {
                    return;
                }

                
    Socket.Select(copyListnullnull0);
                for (
    int nSocket 0nSocket copyList.CountnSocket++)
                {
                    
    Socket socket copyList[nSocket] as Socket;
                    
    ClientSocket client m_dicConnections[socket];
                    if (
    client == null)
                    {
                        continue;
                    }

                    if (
    client.State == STATE_LOGIN)
                    {
                        
    client.LoginRequest++;
                        if (
    client.LoginRequest REQUESTS_PER_MIN)
                        {
                            
    client.Disconnect();
                            
    m_dicConnections.Remove(socket);
                            continue;
                        }
                    }

                    if (
    client.Receive() <= 0)
                    {
                        
    client.Disconnect();
                        
    m_dicConnections.Remove(socket);
                        continue;
                    }
             
                    while (
    client.InputQueue.Count 0)
                    {
                        
    NetworkMessage netMsg client.InputQueue.Dequeue();
                        if (
    netMsg == null)
                        {
                            continue;
                        }

                        
    m_messageQueue.Enqueue(netMsg);
                        
    m_evWaitForPendingMessages.Set();
                    }
                }
            }

           private 
    void ManageOutputData()
            {
                List<
    SocketsocketsToDisconnect = new List<Socket>();
                for (
    int nIndex 0nIndex m_dicConnections.CountnIndex++)
                {
                    
    Socket socket m_dicConnections.ElementAt(nIndex).Key;
                    
    ClientSocket client m_dicConnections.ElementAt(nIndex).Value;
                    if (
    client.State == STATE_CLOSE || client.Send() <= 0)
                    {
                        
    client.Disconnect();
                        
    socketsToDisconnect.Add(socket);
                        continue;
                    }
                }

                for (
    int nIndex 0nIndex socketsToDisconnect.CountnIndex++)
                {
                    
    Socket socket socketsToDisconnect[nIndex];
                    
    m_dicConnections.Remove(socket);
                }
            }

            private 
    void ListenForConnctions()
            {
                try
                {
                    
    ArrayList copyList = new ArrayList();
                    
    copyList.Add(m_serverSocket);

                    
    Socket.Select(copyListnullnull0);
                    if (
    copyList.Count == 0)
                    {
                        return;
                    }

                    
    Socket socket m_serverSocket.Accept();
                    
    ClientSocket client = new ClientSocket(socket);
                    
    client.State STATE_LOGIN;

                    
    m_dicConnections[socket] = (client);
                }
                catch (
    Exception ex)
                {
                    
    // Socket error
                
    }
            }
        } 
    Client
    PHP Code:
    public class ClientSocket
        
    {
            
    #region Constants 
            
    protected const int READ_DATA_SIZE 1024;
            
    #endregion Constants

            #region Fields     
            
    protected int m_nState 0;
            protected 
    int m_nLoginRequest 0;
            protected 
    byte[] m_data = new byte[READ_DATA_SIZE];
            protected 
    Socket m_socket null;

            
    // input and output Message Queue
            
    protected Queue<NetworkMessagem_inputQueue = new Queue<NetworkMessage>();
            protected 
    Queue<NetworkMessagem_outputQueue = new Queue<NetworkMessage>();
            
    #endregion Fields

            #region Constructors
            
    public ClientSocket(Socket socket)
            {
                
    m_socket socket;
            }

            
    #endregion Constructors

            #region Properties 
            
    public Socket Socket get { return m_socket; } }
            public 
    Queue<NetworkMessageInputQueue get { return m_inputQueue; } }
            public 
    Queue<NetworkMessageOutputQueue get { return m_outputQueue; } }

            public 
    int State
            
    {
                
    get { return m_nState; }
                
    set m_nState value; }
            }

            public 
    int LoginRequest
            
    {
                
    get { return m_nLoginRequest; }
                
    set m_nLoginRequest value; }
            }
            
    #endregion Properties

            
    public void Disconnect()
            {
                
    m_socket.Close();
            }

            public 
    int Receive()
            {
                
    int nSize m_socket.Receive(m_data);
                if (
    nSize <= 0)
                {
                    
    m_nState 0// 0 - STATE_CLOSE
                    
    return nSize;
                }

                
    // Process network packets / packets(there could be multiple packets)
                // Also use a buffer on the client to read partial packets
                
    bool bStop false;
                while (!
    bStop)
                {
                    
    int nMsgIndex = -1;
                    
    //..
                    
    NetworkMessage netMsg = new NetworkMessage(nMsgIndex);
                    
    // Add network data
                    // ...
                    
    m_inputQueue.Enqueue(netMsg);
                }

                return 
    nSize;
            }

            public 
    int Send()
            {
                
    int nResult 0;
                
    int nQueueSize m_outputQueue.Count;
                for (
    int nIndex 0nIndex nQueueSize; ++nIndex)
                {
                    
    NetworkMessage netMsg m_outputQueue.Dequeue();
                    
    int nMsgSize m_socket.Send(netMsg.RawData);
                    if (
    nMsgSize <= 0)
                    {
                        return 
    nMsgSize;
                    }

                    
    nResult += nMsgSize;
                }

                return 
    nResult;
            }
        } 
    can you give me NetworkMessage class please

  11. #11
    Ultimate Member GHOST107 is offline
    MemberRank
    Oct 2008 Join Date
    170Posts

    Re: Creating emulator

    You should analyze more network packets, try to use a sniffer, to capture more packets and see what all the packets have in common, like a packet header, usually the packet header is the first bytes in the packet most of the times not encrypted and it specifies the size of the packet.

    About encryption, if the packet encryption is xor you only have to xor your data with the packet to get the encryption key, on big packets you will notice small keys will repeat themselves, if it is another type of encryption you will need to actually reverse it.

    Then try to classify packets on their type, and structure them with the information you get by sending to the server or client the same packet type with different information.

    Also the client and client files contains a lot of useful information about the game, like types of items, etc.

    @Ashime posted a link to start.
    http://cellframework.sourceforge.net...0Emulation.pdf

    Network Message is a stream, that handles reading and writing
    PHP Code:
     public class NetworkMessage
        
    {
            protected const 
    int READ_DATA_SIZE 1024;

            protected 
    int m_nIndex 0;
            protected 
    byte[] m_buffer = new byte[READ_DATA_SIZE];
            protected 
    MemoryStream m_stream null;
            private 
    ClientSocket m_socket;

            public 
    NetworkMessage(int nIndex)
            {
                
    m_nIndex nIndex;
                
    m_stream = new MemoryStream(m_buffer);
            }

            public 
    ClientSocket Socket
            
    {
                
    get { return m_socket; }
                
    set m_socket value; ; }
            }

            public 
    int Index
            
    {
                
    get { return m_nIndex; }
            }

            public 
    byte[] Buffer
            
    {
                
    get { return m_buffer; }
            }

            public 
    int Read(byte[] bufferint nSize)
            {
                return 
    m_stream.Read(buffer0nSize);
            }

            public 
    void Write(byte[] bufferint nSize)
            {
                
    m_stream.Write(buffer0nSize);
            }
        } 

  12. #12
    Hardcore Member zipper20032 is offline
    MemberRank
    Oct 2006 Join Date
    114Posts

    Re: Creating emulator

    I'm using Socket Sniffer for sniffing out packets sent by client (It is possible if the game doesn't have a GameGuard or Anti-Sniffing shields,etc,etc). But, you can use WireShark(pretty powerful) or Socket Sniffer(easy interface with attaching the client.exe process into the software and sniff the s*** out of it, of course, pretty sure every packet you'll see is encrypted.. or maybe not if you are lucky).

  13. #13
    Programmer cyberinferno is offline
    True MemberRank
    Jun 2009 Join Date
    127.0.0.1Location
    690Posts

    Re: Creating emulator

    Quote Originally Posted by zipper20032 View Post
    I'm using Socket Sniffer for sniffing out packets sent by client (It is possible if the game doesn't have a GameGuard or Anti-Sniffing shields,etc,etc). But, you can use WireShark(pretty powerful) or Socket Sniffer(easy interface with attaching the client.exe process into the software and sniff the s*** out of it, of course, pretty sure every packet you'll see is encrypted.. or maybe not if you are lucky).
    Or he can use this tool I made https://github.com/cyberinferno/PacketDumper
    ** Web developer **

  14. #14
    Hardcore Member zipper20032 is offline
    MemberRank
    Oct 2006 Join Date
    114Posts

    Re: Creating emulator

    Quote Originally Posted by cyberinferno View Post
    Or he can use this tool I made https://github.com/cyberinferno/PacketDumper
    Ha! Very nice tool, mate! Good job!

  15. #15
    Programmer cyberinferno is offline
    True MemberRank
    Jun 2009 Join Date
    127.0.0.1Location
    690Posts

    Re: Creating emulator

    Quote Originally Posted by zipper20032 View Post
    Ha! Very nice tool, mate! Good job!
    Thanks!
    ** Web developer **



Advertisement