示例#1
0
        private static void send_ErectDomainRequest()
        {
            RdpPacket data = new RdpPacket();

            data.WriteByte((byte)(EDRQ << 2));
            data.WriteBigEndian16((short)1);
            data.WriteBigEndian16((short)1);
            IsoLayer.SendTPKT(data);
        }
示例#2
0
        private static void send_ChannelJoinRequest(int channelid)
        {
            RdpPacket data = new RdpPacket();

            data.WriteByte((byte)(CJRQ << 2));
            data.WriteBigEndian16((short)RDPClient.McsUserID);
            data.WriteBigEndian16((short)channelid);
            IsoLayer.SendTPKT(data);
        }
示例#3
0
        internal static void SendMCS(RdpPacket packet, int channel)
        {
            int length = (int)packet.Length;

            length |= 0x8000;
            RdpPacket data = new RdpPacket();

            data.WriteByte((byte)(MCS.SDRQ << 2));
            data.WriteBigEndian16((short)RDPClient.McsUserID);
            data.WriteBigEndian16((short)channel);
            data.WriteByte(0x70);
            data.WriteBigEndian16((short)length);
            data.copyToByteArray(packet);
            SendTPKT(data);
        }
示例#4
0
        private static void sendConnectNegotiation(int NegotiationFlags, byte[] loadBalanceToken)
        {
            string domainAndUsername = RDPClient.DomainAndUsername;

            if (domainAndUsername.Length > 9)
            {
                domainAndUsername = domainAndUsername.Substring(0, 9);
            }
            RdpPacket packet = new RdpPacket();

            packet.WriteByte(3);
            packet.WriteByte(0);
            long position = packet.Position;

            packet.WriteBigEndian16((short)0);
            packet.WriteByte(0);
            packet.WriteByte(0xe0);
            packet.WriteBigEndian16((short)0);
            packet.WriteBigEndian16((short)0);
            packet.WriteByte(0);
            if (loadBalanceToken != null)
            {
                packet.Write(loadBalanceToken, 0, loadBalanceToken.Length);
                packet.WriteString("\r\n", false);
            }
            else
            {
                packet.WriteString("Cookie: mstshash=" + domainAndUsername + "\r\n", true);
            }
            packet.WriteByte(1);
            packet.WriteByte(0);
            packet.WriteLittleEndian16((short)8);
            packet.WriteLittleEndian32(NegotiationFlags);
            long num2 = packet.Position;

            packet.Position = position;
            packet.WriteBigEndian16((short)num2);
            packet.WriteByte((byte)(num2 - 5L));
            IsoLayer.Write(packet);
        }
示例#5
0
        private static void sendBerHeader(RdpPacket data0, BER_Header data1, int data2)
        {
            int num = (int)data1;

            if (num > 0xff)
            {
                data0.WriteBigEndian16((short)num);
            }
            else
            {
                data0.WriteByte((byte)num);
            }
            if (data2 >= 0x80)
            {
                data0.WriteByte(130);
                data0.WriteBigEndian16((short)data2);
            }
            else
            {
                data0.WriteByte((byte)data2);
            }
        }
示例#6
0
        public static void SendTPKT(RdpPacket data)
        {
            short num = (short)(data.Length + 7L);

            data.Position = 0L;
            RdpPacket packet = new RdpPacket();

            packet.WriteByte(3);
            packet.WriteByte(0);
            packet.WriteBigEndian16(num);
            packet.WriteByte(2);
            packet.WriteByte(240);
            packet.WriteByte(0x80);
            packet.copyToByteArray(data);
            Write(packet);
        }
示例#7
0
        private static void sendBerInteger(RdpPacket buffer, int value)
        {
            int num = 1;

            if (value > 0xff)
            {
                num = 2;
            }
            sendBerHeader(buffer, BER_Header.BER_TAG_INTEGER, num);
            if (value > 0xff)
            {
                buffer.WriteBigEndian16((short)value);
            }
            else
            {
                buffer.WriteByte((byte)value);
            }
        }
示例#8
0
        internal static RdpPacket sendMcsData(bool use_rdp5, int num_channels, int serverSelectedProtocol)
        {
            RdpPacket packet     = new RdpPacket();
            string    clientName = RDPClient.ClientName;

            if (clientName.Length > 15)
            {
                clientName = clientName.Substring(0, 15);
            }
            int num  = 2 * clientName.Length;
            int num2 = 0x9e;

            if (use_rdp5)
            {
                num2 += 0x60;
            }
            if (use_rdp5 && (num_channels > 0))
            {
                num2 += (num_channels * 12) + 8;
            }
            if ((RDPClient.serverNegotiateFlags & NegotiationFlags.EXTENDED_CLIENT_DATA_SUPPORTED) != ((NegotiationFlags)0))
            {
                num2 += 8;
            }
            packet.WriteBigEndian16((short)5);
            packet.WriteBigEndian16((short)20);
            packet.WriteByte(0x7c);
            packet.WriteBigEndian16((short)1);
            packet.WriteBigEndian16((short)(num2 | 0x8000));
            packet.WriteBigEndian16((short)8);
            packet.WriteBigEndian16((short)0x10);
            packet.WriteByte(0);
            packet.WriteLittleEndian16((ushort)0xc001);
            packet.WriteByte(0);
            packet.WriteLittleEndian32(0x61637544);
            packet.WriteBigEndian16((short)((num2 - 14) | 0x8000));
            packet.WriteLittleEndian16((ushort)0xc001);
            packet.WriteLittleEndian16(use_rdp5 ? ((short)0xd8) : ((short)0x88));
            packet.WriteLittleEndian16(use_rdp5 ? ((short)4) : ((short)1));
            packet.WriteLittleEndian16((short)8);
            packet.WriteLittleEndian16((short)RDPClient.width);
            packet.WriteLittleEndian16((short)RDPClient.height);
            packet.WriteLittleEndian16((ushort)0xca01);
            packet.WriteLittleEndian16((ushort)0xaa03);
            packet.WriteLittleEndian32(0x409);
            packet.WriteLittleEndian32(use_rdp5 ? 0xa28 : 0x1a3);
            packet.WriteUnicodeString(clientName);
            packet.Position += 30 - num;
            packet.WriteLittleEndian32(4);
            packet.WriteLittleEndian32(0);
            packet.WriteLittleEndian32(12);
            packet.Position += 0x40L;
            packet.WriteLittleEndian16((ushort)0xca01);
            packet.WriteLittleEndian16(use_rdp5 ? ((short)1) : ((short)0));
            if (use_rdp5)
            {
                packet.WriteLittleEndian32(0);
                packet.WriteLittleEndian16((short)((byte)RDPClient.server_bpp));
                packet.WriteLittleEndian16((short)7);
                packet.WriteLittleEndian16((short)1);
                packet.Position += 0x40L;
                packet.WriteByte(0);
                packet.WriteByte(0);
                packet.WriteLittleEndian32(serverSelectedProtocol);
                packet.WriteLittleEndian16((ushort)0xc004);
                packet.WriteLittleEndian16((short)12);
                int num3 = 13;

                if (((RDPClient.flags & HostFlags.ConsoleSession) != ((HostFlags)0)) || (RDPClient.sessionID != 0))
                {
                    num3 |= 2;
                }
                packet.WriteLittleEndian32(num3);
                packet.WriteLittleEndian32(RDPClient.sessionID);
            }
            packet.WriteLittleEndian16((ushort)0xc002);
            packet.WriteLittleEndian16(use_rdp5 ? ((short)12) : ((short)8));
            int num4 = 0;

            if (serverSelectedProtocol == 0)
            {
                num4 |= 3;
            }
            packet.WriteLittleEndian32(num4);
            if (use_rdp5)
            {
                packet.WriteLittleEndian32(0);
            }
            if (use_rdp5 && (num_channels > 0))
            {
                packet.WriteLittleEndian16((ushort)0xc003);
                packet.WriteLittleEndian16((short)((num_channels * 12) + 8));
                packet.WriteLittleEndian32(num_channels);
                foreach (IVirtualChannel channel in Channels.RegisteredChannels)
                {
                    packet.WriteString(channel.ChannelName, false);
                    packet.WriteByte(0);
                    packet.WriteBigEndian32((uint)0xc0a00000);
                }
            }
            if ((RDPClient.serverNegotiateFlags & NegotiationFlags.EXTENDED_CLIENT_DATA_SUPPORTED) != ((NegotiationFlags)0))
            {
                packet.WriteLittleEndian16((ushort)0xc006);
                packet.WriteLittleEndian16((short)8);
                packet.WriteLittleEndian32(0);
            }
            return(packet);
        }