Ejemplo n.º 1
0
        public TDSPacket(byte[] bHeader, byte[] bPayload, int iPayloadSize)
        {
            _header = new TDSHeader(bHeader);

            _payload = new byte[iPayloadSize];
            Array.Copy(bPayload, 0, _payload, 0, iPayloadSize);
        }
Ejemplo n.º 2
0
        public TDSPacket(byte[] bBuffer)
        {
            _header = new TDSHeader(bBuffer);

            _payload = new byte[_header.LengthIncludingHeader - TDSHeader.HEADER_SIZE];
            Array.Copy(bBuffer, TDSHeader.HEADER_SIZE, _payload, 0, _payload.Length);
        }
Ejemplo n.º 3
0
        protected virtual void BridgeSQLThread()
        {
            try
            {
                var bBuffer   = new byte[4096];
                var iReceived = 0;

                while ((iReceived = SocketCouple.BridgeSQLSocket.Receive(bBuffer, SocketFlags.None)) > 0)
                {
                    var header = new TDSHeader(bBuffer);

                    //Console.WriteLine("[OUT][" + header.Type.ToString() + "]{" + iReceived + "}");

                    SocketCouple.ClientBridgeSocket.Send(bBuffer, iReceived, SocketFlags.None);
                    //Console.WriteLine("RESPONSE");
                    //Console.WriteLine(System.Text.Encoding.Unicode.GetString(bBuffer));
                    //Console.WriteLine(BitConverter.ToString(bBuffer).Replace("-", " "));
                }
            }
            catch (Exception e)
            {
                OnBridgeException(ConnectionType.BridgeSQL, e);
            }

            OnConnectionDisconnected(ConnectionType.BridgeSQL);
            //Console.WriteLine("Closing OutputThread");
        }
Ejemplo n.º 4
0
        public void BuildMessage(HeaderType messageType, byte[] lPayLoad)
        {
            var packet_size = 4096 - 8;

            Packets.Clear();

            for (var lower = 0; lower < lPayLoad.Length; lower += packet_size)
            {
                var payloadSize = lPayLoad.Length - lower;
                if (payloadSize > packet_size)
                {
                    payloadSize = packet_size;
                }

                // Create new TDS header
                var header = new TDSHeader();
                header.Type = messageType;
                if (lPayLoad.Length - lower <= packet_size)
                {
                    header.StatusBitMask = StatusBitMask.END_OF_MESSAGE;
                }
                else
                {
                    header.StatusBitMask = StatusBitMask.NORMAL;
                }
                header.PayloadSize = payloadSize;

                var payload = new byte[payloadSize];
                Array.Copy(lPayLoad, lower, payload, 0, payloadSize);

                // Create new TDS packet with new TDS header and payload
                var newPacket = new TDSPacket(header.Data, payload, payloadSize);

                // Add packet into message
                Packets.Add(newPacket);
            }
        }
Ejemplo n.º 5
0
        protected virtual void ClientBridgeThread()
        {
            try
            {
                byte[]     bBuffer    = null;
                var        bHeader    = new byte[TDSHeader.HEADER_SIZE];
                var        iReceived  = 0;
                TDSMessage tdsMessage = null;

                while ((iReceived =
                            SocketCouple.ClientBridgeSocket.Receive(bHeader, TDSHeader.HEADER_SIZE, SocketFlags.None)) > 0)
                //while ((iReceived = sc.InputSocket.Receive(bBuffer, SocketFlags.None)) > 0)
                {
                    var header = new TDSHeader(bHeader);

                    var iMinBufferSize = Math.Max(0x1000, header.LengthIncludingHeader + 1);
                    if (bBuffer == null || bBuffer.Length < iMinBufferSize)
                    {
                        bBuffer = new byte[iMinBufferSize];
                    }

                    //Console.WriteLine(header.Type);

                    if (header.Type == (HeaderType)23)
                    {
                        iReceived = SocketCouple.ClientBridgeSocket.Receive(bBuffer, 0, 0x1000 - TDSHeader.HEADER_SIZE,
                                                                            SocketFlags.None);
                    }
                    else if (header.PayloadSize > 0)
                    {
                        SocketCouple.ClientBridgeSocket.Receive(bBuffer, 0, header.PayloadSize, SocketFlags.None);
                    }
                    var tdsPacket = new TDSPacket(bHeader, bBuffer, header.PayloadSize);
                    OnTDSPacketReceived(tdsPacket);

                    if (tdsMessage == null)
                    {
                        tdsMessage = TDSMessage.CreateFromFirstPacket(tdsPacket);
                    }
                    else
                    {
                        tdsMessage.Packets.Add(tdsPacket);
                    }


                    if (!(tdsMessage is SQLBatchMessage)) // By Calvin: If message is not SQL command, do not intercept
                    {
                        SocketCouple.BridgeSQLSocket.Send(bHeader, bHeader.Length, SocketFlags.None);
                        if (header.Type == (HeaderType)23)
                        {
                            SocketCouple.BridgeSQLSocket.Send(bBuffer, iReceived, SocketFlags.None);
                        }
                        else
                        {
                            SocketCouple.BridgeSQLSocket.Send(bBuffer, header.PayloadSize, SocketFlags.None);
                        }
                    }

                    if ((header.StatusBitMask & StatusBitMask.END_OF_MESSAGE) == StatusBitMask.END_OF_MESSAGE)
                    {
                        OnTDSMessageReceived(tdsMessage);

                        // By Calvin: If message is SQL command, intercept
                        if (tdsMessage is SQLBatchMessage)
                        {
                            //Console.WriteLine("REQUEST");
                            //Console.WriteLine(System.Text.Encoding.Unicode.GetString(tdsMessage.Packets[0].Payload));
                            //Console.WriteLine(BitConverter.ToString(tdsMessage.Packets[0].Payload));

                            // Modify it here
                            var b = (SQLBatchMessage)tdsMessage;
                            if (b.GetBatchText().Contains("showmethemoney"))
                            {
                                SQLModifier.ChangeSQL(b.GetBatchText(), this);
                            }
                            else
                            {
                                foreach (var packet in b.Packets)
                                {
                                    //Console.WriteLine(packet.Payload.Length + " | " +packet.Header.PayloadSize);
                                    SocketCouple.BridgeSQLSocket.Send(packet.Header.Data, packet.Header.Data.Length,
                                                                      SocketFlags.None);
                                    SocketCouple.BridgeSQLSocket.Send(packet.Payload, packet.Header.PayloadSize,
                                                                      SocketFlags.None);
                                }
                            }
                        }
                        tdsMessage = null;
                    }
                }
            }
            catch (Exception e)
            {
                OnBridgeException(ConnectionType.ClientBridge, e);
            }

            OnConnectionDisconnected(ConnectionType.ClientBridge);
            //Console.WriteLine("Closing InputThread");
        }