Advertisement
Guest User

Untitled

a guest
Dec 20th, 2018
118
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 8.30 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Windows.Forms;
  9. using SilkroadSecurityApi;
  10. using System.Diagnostics;
  11. using System.Net;
  12. using System.Net.Sockets;
  13. using System.Threading;
  14.  
  15. namespace PacketAnalyzer
  16. {
  17.     public class Agent
  18.     {
  19.         public static Security ag_security = new Security();
  20.         static TransferBuffer ag_recv_buffer = new TransferBuffer(4096, 0, 0);
  21.         static List<Packet> ag_packets = new List<Packet>();
  22.         static Socket ag_socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
  23.        
  24.         static uint loginID;
  25.         static string username;
  26.         static string password;
  27.         object recv_obj = new object();
  28.  
  29.         //Async Connecting & Starting threads.
  30.         #region AsyncConnect
  31.         public void Start(string IP, string Port, uint _loginID, string _username, string _password)
  32.         {
  33.             loginID = _loginID;
  34.             username = _username;
  35.             password = _password;
  36.            
  37.             ag_socket.BeginConnect(IP, Int32.Parse(Port), new AsyncCallback(AcceptedCallBack), null);
  38.         }
  39.  
  40.         void AcceptedCallBack(IAsyncResult result)
  41.         {
  42.             ag_socket.EndConnect(result);
  43.             //Globals.MainWindow.LogMain("Agent socket successfully connected.");
  44.             Thread Send = new Thread(SendToServer);
  45.             Thread Recv = new Thread(AsyncRecv);
  46.            
  47.             Send.Start();
  48.             Recv.Start();
  49.         }
  50.         #endregion
  51.  
  52.         #region AsyncReceiving
  53.         void AsyncRecv()
  54.         {
  55.                 ag_socket.BeginReceive(ag_recv_buffer.Buffer, 0, 0x1000, SocketFlags.None, new AsyncCallback(AsyncRecvFromServer), null);
  56.  
  57.         }
  58.  
  59.         void AsyncRecvFromServer(IAsyncResult iar)
  60.         {
  61.             lock (recv_obj)
  62.             {
  63.  
  64.                 int nReceived = ag_socket.EndReceive(iar);
  65.                 if (nReceived != 0)
  66.                 {
  67.                     ag_recv_buffer.Offset = 0;
  68.                     ag_recv_buffer.Size = nReceived;
  69.  
  70.                     ag_security.Recv(ag_recv_buffer);
  71.  
  72.                     List<Packet> RemotePackets = ag_security.TransferIncoming();
  73.  
  74.                     if (RemotePackets != null)
  75.                     {
  76.                         foreach (Packet packet in RemotePackets)
  77.                         {
  78.  
  79.                             byte[] packet_bytes = packet.GetBytes();
  80.  
  81.                             Globals.MainWindow.Log("[S->C][{0:X4}][{1} bytes]{2}{3}{4}{5}{6}", packet.Opcode, packet_bytes.Length, packet.Encrypted ? "[Encrypted]" : "", packet.Massive ? "[Massive]" : "", Environment.NewLine, Utility.HexDump(packet_bytes), Environment.NewLine);
  82.                             if (packet.Opcode == 0x5000 || packet.Opcode == 0x9000)
  83.                             {
  84.                                 continue;
  85.                             }
  86.                             if (packet.Opcode == 0x2001)
  87.                             {
  88.                                 if (packet.ReadAscii() == "AgentServer")
  89.                                 {
  90.                                     Globals.Server = Globals.ServerEnum.Agent;
  91.                                     Packet p = new Packet(0x6103);
  92.                                     p.WriteUInt32(loginID);
  93.                                     p.WriteAscii(username);
  94.                                     p.WriteAscii(password);
  95.                                     p.WriteUInt8(22);
  96.                                     p.WriteUInt32(0);
  97.                                     p.WriteUInt16(0);
  98.                                     ag_security.Send(p);
  99.                                 }
  100.  
  101.                             }
  102.                             else if (packet.Opcode == 0xA103)
  103.                             {
  104.                                 if (packet.ReadUInt8() == 1)
  105.                                 {
  106.                                     Packet response = new Packet(0x7007);
  107.                                     response.WriteUInt8(2);
  108.                                     ag_security.Send(response);
  109.  
  110.                                 }
  111.                             }
  112.  
  113.                             else if (packet.Opcode == 0xB007)
  114.                             {
  115.                                 Login.HandleCharList(packet);
  116.                             }
  117.                             else if (packet.Opcode == 0x3020)
  118.                             {
  119.                                 Packet p = new Packet(0x3012);
  120.                                 Send(p);
  121.                             }
  122.  
  123.                             else if (packet.Opcode == 0x34b5)
  124.                             {
  125.                                 Packet packet3 = new Packet(0x34b6);
  126.                                 Send(packet3);
  127.  
  128.                                 //LogMain("[NOTIFY] Spawn Confirmed !!! " + System.DateTime.Now);
  129.  
  130.                             }
  131.  
  132.                             else if (packet.Opcode == 0x3026)
  133.                             {
  134.                                 //LogMain("[GMCMD][NOTICE]: "); /*IN-COMPLETE*/
  135.                             }
  136.  
  137.                             else if (packet.Opcode == 0x34A6)
  138.                             {
  139.                                 Globals.MainWindow.LogMain("[NOTIFY] Character spawned succesfully");
  140.                                 Globals.MainWindow.button4.Enabled = true;
  141.                                 Globals.MainWindow.button7.Enabled = true;
  142.                             }
  143.  
  144.  
  145.  
  146.    
  147.                         }
  148.                         AsyncRecv();
  149.                         ag_packets.Clear();
  150.                     }
  151.  
  152.                 }
  153.             }
  154.         }
  155.         #endregion
  156.  
  157.         #region AsyncSending
  158.         void AsyncSend(IAsyncResult iar)
  159.         {
  160.             int nSent = ag_socket.EndSend(iar);
  161.  
  162.         }
  163.        
  164.         void SendToServer()
  165.         {
  166.             try
  167.             {
  168.                 while (true)
  169.                 {
  170.  
  171.                     List<KeyValuePair<TransferBuffer, Packet>> list = ag_security.TransferOutgoing();
  172.                     if (list != null)
  173.                     {
  174.                         foreach (var kvp in list)
  175.                         {
  176.  
  177.                             byte[] packet_bytes = kvp.Value.GetBytes();
  178.                             Globals.MainWindow.Log("[C->S][{0:X4}][{1} bytes]{2}{3}{4}{5}{6}", kvp.Value.Opcode, packet_bytes.Length, kvp.Value.Encrypted ? "[Encrypted]" : "", kvp.Value.Massive ? "[Massive]" : "", Environment.NewLine, Utility.HexDump(packet_bytes), Environment.NewLine);
  179.                             ag_socket.BeginSend(kvp.Key.Buffer, 0, kvp.Key.Size, SocketFlags.None, new AsyncCallback(AsyncSend), null);
  180.  
  181.                             if (kvp.Value.Opcode == 0x2002)
  182.                             {
  183.                                 Globals.MainWindow.label6.ForeColor = Color.Green;
  184.                                 Globals.MainWindow.label6.Text = "Responsive(Agent) " + DateTime.Now.ToString("h:mm:ss"); ;
  185.                             }
  186.  
  187.                         }
  188.                     }
  189.                     else
  190.                     {
  191.                         Thread.Sleep(100);
  192.                     }
  193.                 }
  194.  
  195.             }
  196.             catch (Exception ex)
  197.             {
  198.                 Globals.MainWindow.LogMain("[NOTIFY] Cannot Send Data(Agent).");
  199.             }
  200.         }
  201.         #endregion
  202.        
  203.         #region AsyncDisconnecting
  204.         public static void DisconnectModuleSocket()
  205.         {
  206.             try
  207.             {
  208.                 if (ag_socket != null)
  209.                 {
  210.                     ag_socket.BeginDisconnect(true, new AsyncCallback(EndDC), null);
  211.                     Globals.MainWindow.LogMain("Succsefully disconnect Agent.");
  212.                 }
  213.  
  214.                 //gw_socket = null;
  215.             }
  216.             catch (Exception ex)
  217.             {
  218.                 Globals.MainWindow.LogMain("Cannot disconnect Agent.");
  219.             }
  220.         }
  221.  
  222.         static void EndDC(IAsyncResult iar)
  223.         {
  224.             ag_socket.EndDisconnect(iar);
  225.         }
  226.         #endregion
  227.  
  228.         public static void Send(Packet packet)
  229.         {
  230.             ag_security.Send(packet);
  231.         }
  232.     }
  233. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement