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); }
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); }
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); }
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); }
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); } }
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); }
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); } }
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); }