1. 程式人生 > >RDP協議簡介與通訊資料加密等級及設定說明

RDP協議簡介與通訊資料加密等級及設定說明

呼叫層次:

 rdp_--->sec_--->mcs_--->iso_--->tcp_

協議包編解碼層次:

 rdp_hdr->sec_hdr->mcs_hdr->iso_hdr->data,所有這些指標組成一個STREAM.

view plaincopy to clipboardprint?
01./* Parser state */  
02.typedef struct stream   
03.{   
04.    unsigned char *p;   
05.    unsigned char *end;   
06.    unsigned char *data;   
07.    unsigned int size;   
08.    /* Offsets of various headers */  
09.    unsigned char *iso_hdr;   
10.    unsigned char *mcs_hdr;   
11.    unsigned char *sec_hdr;   
12.    unsigned char *rdp_hdr;   
13.}   
14. *STREAM;  
/* Parser state */
typedef struct stream
{
 unsigned char *p;
 unsigned char *end;
 unsigned char *data;
 unsigned int size;
 /* Offsets of various headers */
 unsigned char *iso_hdr;
 unsigned char *mcs_hdr;
 unsigned char *sec_hdr;
 unsigned char *rdp_hdr;
}
 *STREAM;

主過程:

1.rdp_connect: 按照呼叫層次依次呼叫sec_connect……,然後呼叫rdp_send_logon_info傳送登入請求驗證資訊.其中rdp_send_logon_info呼叫sec_init初始化資料包,呼叫sec_send傳送資料包,根據flags(包含加密標識)呼叫加密處理邏輯.
2.然後進入rdp_main_loop迴圈,呼叫rdp_recv,根據觸發的事件型別做相應處理。
3.rdp_disconnect,按照呼叫層次依次呼叫sec_disconnect……斷開。特殊的,在iso_disconnect中首先呼叫iso_send_msg(ISO_PDU_DR)傳送PDU訊息包,然後再呼叫tcp_disconnect 斷開連線。
view plaincopy to clipboardprint?
01./* ISO PDU codes */  
02.enum ISO_PDU_CODE   
03.{   
04.    ISO_PDU_CR = 0xE0,  /* Connection Request */  
05.    ISO_PDU_CC = 0xD0,  /* Connection Confirm */  
06.    ISO_PDU_DR = 0x80,  /* Disconnect Request */  
07.    ISO_PDU_DT = 0xF0,  /* Data */  
08.    ISO_PDU_ER = 0x70   /* Error */  
09.};   
10./* MCS PDU codes */  
11.enum MCS_PDU_TYPE   
12.{   
13.    MCS_EDRQ = 1,       /* Erect Domain Request */  
14.    MCS_DPUM = 8,       /* Disconnect Provider Ultimatum */  
15.    MCS_AURQ = 10,      /* Attach User Request */  
16.    MCS_AUCF = 11,      /* Attach User Confirm */  
17.    MCS_CJRQ = 14,      /* Channel Join Request */  
18.    MCS_CJCF = 15,      /* Channel Join Confirm */  
19.    MCS_SDRQ = 25,      /* Send Data Request */  
20.    MCS_SDIN = 26       /* Send Data Indication */  
21.};  
/* ISO PDU codes */
enum ISO_PDU_CODE
{
 ISO_PDU_CR = 0xE0, /* Connection Request */
 ISO_PDU_CC = 0xD0, /* Connection Confirm */
 ISO_PDU_DR = 0x80, /* Disconnect Request */
 ISO_PDU_DT = 0xF0, /* Data */
 ISO_PDU_ER = 0x70 /* Error */
};
/* MCS PDU codes */
enum MCS_PDU_TYPE
{
 MCS_EDRQ = 1,  /* Erect Domain Request */
 MCS_DPUM = 8,  /* Disconnect Provider Ultimatum */
 MCS_AURQ = 10,  /* Attach User Request */
 MCS_AUCF = 11,  /* Attach User Confirm */
 MCS_CJRQ = 14,  /* Channel Join Request */
 MCS_CJCF = 15,  /* Channel Join Confirm */
 MCS_SDRQ = 25,  /* Send Data Request */
 MCS_SDIN = 26  /* Send Data Indication */
};
 
protocal interface(協議介面):

view plaincopy to clipboardprint?
01./* rdp.c */  
02.void rdp_out_unistr(STREAM s, char *string, int len);   
03.void rdp_send_input(uint32 time, uint16 message_type, uint16 device_flags, uint16 param1,   
04.            uint16 param2);   
05.void rdp_main_loop(void);   
06.BOOL rdp_connect(char *server, uint32 flags, char *domain, char *password, char *command,   
07.         char *directory);   
08.void rdp_disconnect(void);   
09./* secure.c */  
10.void sec_hash_48(uint8 * out, uint8 * in, uint8 * salt1, uint8 * salt2, uint8 salt);   
11.void sec_hash_16(uint8 * out, uint8 * in, uint8 * salt1, uint8 * salt2);   
12.void buf_out_uint32(uint8 * buffer, uint32 value);   
13.void sec_sign(uint8 * signature, int siglen, uint8 * session_key, int keylen, uint8 * data,   
14.          int datalen);   
15.STREAM sec_init(uint32 flags, int maxlen);   
16.void sec_send(STREAM s, uint32 flags);   
17.STREAM sec_recv(void);   
18.BOOL sec_connect(char *server);   
19.void sec_disconnect(void);   
20./* mcs.c */  
21.STREAM mcs_init(int length);   
22.void mcs_send(STREAM s);   
23.STREAM mcs_recv(void);   
24.BOOL mcs_connect(char *server, STREAM mcs_data);   
25.void mcs_disconnect(void);   
26./* iso.c */  
27.STREAM iso_init(int length);   
28.void iso_send(STREAM s);   
29.STREAM iso_recv(void);   
30.BOOL iso_connect(char *server);   
31.void iso_disconnect(void);   
32./* tcp.c */  
33.STREAM tcp_init(int maxlen);   
34.void tcp_send(STREAM s);   
35.STREAM tcp_recv(int length);   
36.BOOL tcp_connect(char *server);   
37.void tcp_disconnect(void);  
/* rdp.c */
void rdp_out_unistr(STREAM s, char *string, int len);
void rdp_send_input(uint32 time, uint16 message_type, uint16 device_flags, uint16 param1,
      uint16 param2);
void rdp_main_loop(void);
BOOL rdp_connect(char *server, uint32 flags, char *domain, char *password, char *command,
   char *directory);
void rdp_disconnect(void);
/* secure.c */
void sec_hash_48(uint8 * out, uint8 * in, uint8 * salt1, uint8 * salt2, uint8 salt);
void sec_hash_16(uint8 * out, uint8 * in, uint8 * salt1, uint8 * salt2);
void buf_out_uint32(uint8 * buffer, uint32 value);
void sec_sign(uint8 * signature, int siglen, uint8 * session_key, int keylen, uint8 * data,
       int datalen);
STREAM sec_init(uint32 flags, int maxlen);
void sec_send(STREAM s, uint32 flags);
STREAM sec_recv(void);
BOOL sec_connect(char *server);
void sec_disconnect(void);
/* mcs.c */
STREAM mcs_init(int length);
void mcs_send(STREAM s);
STREAM mcs_recv(void);
BOOL mcs_connect(char *server, STREAM mcs_data);
void mcs_disconnect(void);
/* iso.c */
STREAM iso_init(int length);
void iso_send(STREAM s);
STREAM iso_recv(void);
BOOL iso_connect(char *server);
void iso_disconnect(void);
/* tcp.c */
STREAM tcp_init(int maxlen);
void tcp_send(STREAM s);
STREAM tcp_recv(int length);
BOOL tcp_connect(char *server);
void tcp_disconnect(void);

ui interface(UI介面)

view plaincopy to clipboardprint?
01./* xkeymap.c */  
02.void xkeymap_init(void);   
03.BOOL handle_special_keys(uint32 keysym, unsigned int state, uint32 ev_time, BOOL pressed);   
04.key_translation xkeymap_translate_key(uint32 keysym, unsigned int keycode, unsigned int state);   
05.uint16 xkeymap_translate_button(unsigned int button);   
06.char *get_ksname(uint32 keysym);   
07.void ensure_remote_modifiers(uint32 ev_time, key_translation tr);   
08.void reset_modifier_keys(unsigned int state);   
09.void rdp_send_scancode(uint32 time, uint16 flags, uint8 scancode);   
10./* xwin.c */  
11.void mwm_hide_decorations(void);   
12.BOOL get_key_state(unsigned int state, uint32 keysym);   
13.BOOL ui_init(void);   
14.void ui_deinit(void);   
15.BOOL ui_create_window(void);   
16.void ui_destroy_window(void);   
17.void xwin_toggle_fullscreen(void);   
18.int ui_select(int rdp_socket);   
19.void ui_move_pointer(int x, int y);   
20.HBITMAP ui_create_bitmap(int width, int height, uint8 * data);   
21.void ui_paint_bitmap(int x, int y, int cx, int cy, int width, int height, uint8 * data);   
22.void ui_destroy_bitmap(HBITMAP bmp);   
23.HGLYPH ui_create_glyph(int width, int height, uint8 * data);   
24.void ui_destroy_glyph(HGLYPH glyph);   
25.HCURSOR ui_create_cursor(unsigned int x, unsigned int y, int width, int height, uint8 * andmask,   
26.             uint8 * xormask);   
27.void ui_set_cursor(HCURSOR cursor);   
28.void ui_destroy_cursor(HCURSOR cursor);   
29.HCOLOURMAP ui_create_colourmap(COLOURMAP * colours);   
30.void ui_destroy_colourmap(HCOLOURMAP map);   
31.void ui_set_colourmap(HCOLOURMAP map);   
32.void ui_set_clip(int x, int y, int cx, int cy);   
33.void ui_reset_clip(void);   
34.void ui_bell(void);   
35.void ui_destblt(uint8 opcode, int x, int y, int cx, int cy);   
36.void ui_patblt(uint8 opcode, int x, int y, int cx, int cy, BRUSH * brush, int bgcolour,   
37.           int fgcolour);   
38.void ui_screenblt(uint8 opcode, int x, int y, int cx, int cy, int srcx, int srcy);   
39.void ui_memblt(uint8 opcode, int x, int y, int cx, int cy, HBITMAP src, int srcx, int srcy);   
40.void ui_triblt(uint8 opcode, int x, int y, int cx, int cy, HBITMAP src, int srcx, int srcy,   
41.           BRUSH * brush, int bgcolour, int fgcolour);   
42.void ui_line(uint8 opcode, int startx, int starty, int endx, int endy, PEN * pen);   
43.void ui_rect(int x, int y, int cx, int cy, int colour);   
44.void ui_draw_glyph(int mixmode, int x, int y, int cx, int cy, HGLYPH glyph, int srcx, int srcy,   
45.           int bgcolour, int fgcolour);   
46.void ui_draw_text(uint8 font, uint8 flags, int mixmode, int x, int y, int clipx, int clipy,   
47.          int clipcx, int clipcy, int boxx, int boxy, int boxcx, int boxcy, int bgcolour,   
48.          int fgcolour, uint8 * text, uint8 length);   
49.void ui_desktop_save(uint32 offset, int x, int y, int cx, int cy);   
50.void ui_desktop_restore(uint32 offset, int x, int y, int cx, int cy);  
/* xkeymap.c */
void xkeymap_init(void);
BOOL handle_special_keys(uint32 keysym, unsigned int state, uint32 ev_time, BOOL pressed);
key_translation xkeymap_translate_key(uint32 keysym, unsigned int keycode, unsigned int state);
uint16 xkeymap_translate_button(unsigned int button);
char *get_ksname(uint32 keysym);
void ensure_remote_modifiers(uint32 ev_time, key_translation tr);
void reset_modifier_keys(unsigned int state);
void rdp_send_scancode(uint32 time, uint16 flags, uint8 scancode);
/* xwin.c */
void mwm_hide_decorations(void);
BOOL get_key_state(unsigned int state, uint32 keysym);
BOOL ui_init(void);
void ui_deinit(void);
BOOL ui_create_window(void);
void ui_destroy_window(void);
void xwin_toggle_fullscreen(void);
int ui_select(int rdp_socket);
void ui_move_pointer(int x, int y);
HBITMAP ui_create_bitmap(int width, int height, uint8 * data);
void ui_paint_bitmap(int x, int y, int cx, int cy, int width, int height, uint8 * data);
void ui_destroy_bitmap(HBITMAP bmp);
HGLYPH ui_create_glyph(int width, int height, uint8 * data);
void ui_destroy_glyph(HGLYPH glyph);
HCURSOR ui_create_cursor(unsigned int x, unsigned int y, int width, int height, uint8 * andmask,
    uint8 * xormask);
void ui_set_cursor(HCURSOR cursor);
void ui_destroy_cursor(HCURSOR cursor);
HCOLOURMAP ui_create_colourmap(COLOURMAP * colours);
void ui_destroy_colourmap(HCOLOURMAP map);
void ui_set_colourmap(HCOLOURMAP map);
void ui_set_clip(int x, int y, int cx, int cy);
void ui_reset_clip(void);
void ui_bell(void);
void ui_destblt(uint8 opcode, int x, int y, int cx, int cy);
void ui_patblt(uint8 opcode, int x, int y, int cx, int cy, BRUSH * brush, int bgcolour,
        int fgcolour);
void ui_screenblt(uint8 opcode, int x, int y, int cx, int cy, int srcx, int srcy);
void ui_memblt(uint8 opcode, int x, int y, int cx, int cy, HBITMAP src, int srcx, int srcy);
void ui_triblt(uint8 opcode, int x, int y, int cx, int cy, HBITMAP src, int srcx, int srcy,
        BRUSH * brush, int bgcolour, int fgcolour);
void ui_line(uint8 opcode, int startx, int starty, int endx, int endy, PEN * pen);
void ui_rect(int x, int y, int cx, int cy, int colour);
void ui_draw_glyph(int mixmode, int x, int y, int cx, int cy, HGLYPH glyph, int srcx, int srcy,
     int bgcolour, int fgcolour);
void ui_draw_text(uint8 font, uint8 flags, int mixmode, int x, int y, int clipx, int clipy,
    int clipcx, int clipcy, int boxx, int boxy, int boxcx, int boxcy, int bgcolour,
    int fgcolour, uint8 * text, uint8 length);
void ui_desktop_save(uint32 offset, int x, int y, int cx, int cy);
void ui_desktop_restore(uint32 offset, int x, int y, int cx, int cy);
 

其中,ui_select是整個UI的核心,負責UI排程。

cache interface(快取介面)

view plaincopy to clipboardprint?
01./* bitmap.c */  
02.BOOL bitmap_decompress(unsigned char *output, int width, int height, unsigned char *input,   
03.               int size);   
04./* cache.c */  
05.HBITMAP cache_get_bitmap(uint8 cache_id, uint16 cache_idx);   
06.void cache_put_bitmap(uint8 cache_id, uint16 cache_idx, HBITMAP bitmap);   
07.FONTGLYPH *cache_get_font(uint8 font, uint16 character);   
08.void cache_put_font(uint8 font, uint16 character, uint16 offset, uint16 baseline, uint16 width,   
09.            uint16 height, HGLYPH pixmap);   
10.DATABLOB *cache_get_text(uint8 cache_id);   
11.void cache_put_text(uint8 cache_id, void *data, int length);   
12.uint8 *cache_get_desktop(uint32 offset, int cx, int cy, int bytes_per_pixel);   
13.void cache_put_desktop(uint32 offset, int cx, int cy, int scanline, int bytes_per_pixel,   
14.               uint8 * data);   
15.HCURSOR cache_get_cursor(uint16 cache_idx);   
16.void cache_put_cursor(uint16 cache_idx, HCURSOR cursor);   
17./* ewmhints.c */  
18.int get_current_workarea(uint32 * x, uint32 * y, uint32 * width, uint32 * height);  
/* bitmap.c */
BOOL bitmap_decompress(unsigned char *output, int width, int height, unsigned char *input,
         int size);
/* cache.c */
HBITMAP cache_get_bitmap(uint8 cache_id, uint16 cache_idx);
void cache_put_bitmap(uint8 cache_id, uint16 cache_idx, HBITMAP bitmap);
FONTGLYPH *cache_get_font(uint8 font, uint16 character);
void cache_put_font(uint8 font, uint16 character, uint16 offset, uint16 baseline, uint16 width,
      uint16 height, HGLYPH pixmap);
DATABLOB *cache_get_text(uint8 cache_id);
void cache_put_text(uint8 cache_id, void *data, int length);
uint8 *cache_get_desktop(uint32 offset, int cx, int cy, int bytes_per_pixel);
void cache_put_desktop(uint32 offset, int cx, int cy, int scanline, int bytes_per_pixel,
         uint8 * data);
HCURSOR cache_get_cursor(uint16 cache_idx);
void cache_put_cursor(uint16 cache_idx, HCURSOR cursor);
/* ewmhints.c */
int get_current_workarea(uint32 * x, uint32 * y, uint32 * width, uint32 * height);

licence證書處理

view plaincopy to clipboardprint?
01./* licence.c */  
02.void licence_process(STREAM s);  
/* licence.c */
void licence_process(STREAM s);

主程序函式

view plaincopy to clipboardprint?
01./* rdesktop.c */  
02.int main(int argc, char *argv[]);   
03.void generate_random(uint8 * random);   
04.void *xmalloc(int size);   
05.void *xrealloc(void *oldmem, int size);   
06.void xfree(void *mem);   
07.void error(char *format, ...);   
08.void warning(char *format, ...);   
09.void unimpl(char *format, ...);   
10.void hexdump(unsigned char *p, unsigned int len);  
/* rdesktop.c */
int main(int argc, char *argv[]);
void generate_random(uint8 * random);
void *xmalloc(int size);
void *xrealloc(void *oldmem, int size);
void xfree(void *mem);
void error(char *format, ...);
void warning(char *format, ...);
void unimpl(char *format, ...);
void hexdump(unsigned char *p, unsigned int len);

次序處理:

view plaincopy to clipboardprint?
01./* orders.c */  
02.void process_orders(STREAM s);   
03.void reset_order_state(void);  
/* orders.c */
void process_orders(STREAM s);
void reset_order_state(void);

協議資料包:

view plaincopy to clipboardprint?
01.128-bit encryption enabled   
02.Sending encrypted packet:   
03.0000 00 00 00 00 33 00 00 00 00 00 1a 00 00 00 00 00 ....3...........   
04.0010 00 00 00 00 41 00 64 00 6d 00 69 00 6e 00 69 00 ....A.d.m.i.n.i.   
05.0020 73 00 74 00 72 00 61 00 74 00 6f 00 72 00 00 00 s.t.r.a.t.o.r...   
06.0030 00 00 00 00 00 00                               ......   
07.Connection successful.   
08.Sending encrypted packet:   
09.0000 22 00 17 00 ec 03 00 00 00 00 00 01 14 00 1c 00 "...............   
10.0010 00 00 01 00 00 00 11 4e 7a 4b 01 80 00 08 cf 01 .......NzK......   
11.0020 91 00                                           ..   
12.Sending encrypted packet:   
13.0000 22 00 17 00 ec 03 00 00 00 00 00 01 14 00 1c 00 "...............   
14.0010 00 00 01 00 00 00 12 4e 7a 4b 01 80 00 08 cf 01 .......NzK......   
15.0020 91 00                                           ..   
16.RDP packet (type 1):   
17.0000 67 01 11 00 ea 03 ea 03 01 00 04 00 51 01 52 44 g...........Q.RD   
18.0010 50 00 0d 00 00 00 09 00 08 00 ea 03 65 e3 01 00 P...........e...   
19.0020 18 00 01 00 03 00 00 02 00 00 00 00 1d 04 00 00 ................   
20.0030 00 00 00 00 01 01 14 00 08 00 02 00 00 00 16 00 ................   
21.0040 28 00 01 00 00 00 6c 96 33 b7 01 00 00 00 95 a4 (.....l.3.......   
22.0050 84 80 b0 7d 38 84 b8 5b c4 e1 f4 96 33 b7 ea e8 ...}8..[....3...   
23.0060 84 80 20 02 c9 85 0e 00 04 00 02 00 1c 00 08 00 .. .............   
24.0070 01 00 01 00 01 00 c0 03 e9 02 00 00 01 00 01 00 ................   
25.0080 00 00 01 00 00 00 03 00 58 00 00 00 00 00 00 00 ........X.......   
26.0090 00 00 00 00 00 00 00 00 00 00 40 42 0f 00 01 00 [email protected]....   
27.00a0 14 00 00 00 01 00 00 00 22 00 01 01 01 01 01 00 ........".......   
28.00b0 00 01 01 01 01 01 00 00 00 01 01 01 01 01 01 01 ................   
29.00c0 01 00 01 01 01 01 00 00 00 00 a1 06 00 00 40 42 [email protected]   
30.00d0 0f 00 40 42 0f 00 01 00 00 00 00 00 00 00 0a 00 [email protected]............   
31.00e0 08 00 06 00 00 00 12 00 08 00 01 00 00 00 08 00 ................   
32.00f0 0a 00 01 00 19 00 19 00 0d 00 58 00 35 00 00 00 ..........X.5...   
33.0100 a1 06 00 00 40 42 0f 00 0c 96 33 b7 75 7a 6f b7 [email protected].   
34.0110 00 40 43 e1 48 3c 70 b7 40 96 33 b7 04 00 00 00 [email protected]<[email protected].....   
35.0120 4c 34 65 e3 08 30 65 e3 01 00 00 00 08 30 65 e3 L4e..0e......0e.   
36.0130 00 00 00 00 38 96 33 b7 42 25 70 b7 08 30 65 e3 ....8.3.B%p..0e.   
37.0140 2c 96 33 b7 00 00 00 00 08 00 0a 00 01 00 19 00 ,.3.............   
38.0150 17 00 08 00 00 00 00 00 18 00 0b 00 00 00 00 00 ................   
39.0160 00 00 00 00 00 00 00                            .......   
40.DEMAND_ACTIVE(id=0x103ea)   
41.Sending encrypted packet:   
42.0000 9a 01 13 00 ec 03 ea 03 01 00 ea 03 06 00 84 01 ................   
43.0010 4d 53 54 53 43 00 0d 00 00 00 01 00 18 00 01 00 MSTSC...........   
44.0020 03 00 00 02 00 00 00 00 00 00 00 00 00 00 00 00 ................   
45.0030 00 00 02 00 1c 00 08 00 01 00 01 00 01 00 20 03 .............. .   
46.0040 58 02 00 00 00 00 01 00 00 00 01 00 00 00 03 00 X...............   
47.0050 58 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 X...............   
48.0060 00 00 00 00 00 00 01 00 14 00 00 00 01 00 47 01 ..............G.   
49.0070 2a 00 01 01 01 01 00 00 00 00 01 01 01 01 00 01 *...............   
50.0080 01 00 00 00 00 00 00 00 01 00 00 00 00 01 00 00 ................   
51.0090 00 00 a1 06 00 00 00 00 00 00 00 84 03 00 00 00 ................   
52.00a0 00 00 e4 04 00 00 04 00 28 00 00 00 00 00 00 00 ........(.......   
53.00b0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................   
54.00c0 00 00 58 02 00 01 2c 01 00 04 06 01 00 10 0a 00 ..X...,.........   
55.00d0 08 00 06 00 00 00 07 00 0c 00 00 00 00 00 00 00 ................   
56.00e0 00 00 05 00 0c 00 00 00 00 00 02 00 02 00 08 00 ................   
57.00f0 08 00 00 00 14 00 09 00 08 00 00 00 00 00 0d 00 ................   
58.0100 58 00 01 00 00 00 09 04 00 00 04 00 00 00 00 00 X...............   
59.0110 00 00 0c 00 00 00 00 00 00 00 00 00 00 00 00 00 ................   
60.0120 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................   
61.0130 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................   
62.0140 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................   
63.0150 00 00 00 00 00 00 0c 00 08 00 01 00 00 00 0e 00 ................   
64.0160 08 00 01 00 00 00 10 00 34 00 fe 00 04 00 fe 00 ........4.......   
65.0170 04 00 fe 00 08 00 fe 00 08 00 fe 00 10 00 fe 00 ................   
66.0180 20 00 fe 00 40 00 fe 00 80 00 fe 00 00 01 40 00  [email protected]@.   
67.0190 00 08 00 01 00 01 02 00 00 00                   ..........   
68.RDP packet (type 7):   
69.0000 6d 00 17 00 ea 03 ea 03 01 00 3b 02 6d 00 02 00 m.........;.m...   
70.0010 00 00 00 00 75 20 08 00 bb 3e 15 4a 01 50 21 44 ....u ...>.J.P!D   
71.0020 21 23 01 00 00 15 4a 01 50 3f 40 3f 01 ff 01 00 !#[email protected]?....   
72.0030 15 02 01 50 40 40 40 02 00 15 02 01 50 40 40 40 [email protected]@@.....P@@@   
73.0040 03 00 15 02 01 50 40 40 40 01 00 15 0a 01 50 40 [email protected]@@.....P@   
74.0050 2f 40 ef 04 00 45 4a 05 12 01 22 01 12 01 11 00 /@...EJ...".....   
75.0060 2f 00 15 4a 01 50 11 1c 11 0b d1 05 00          /..J.P.......   
76.MEMBLT(op=0xcc,x=319,y=297,cx=63,cy=5,id=1,idx=0)   
77.MEMBLT(op=0xcc,x=382,y=297,cx=64,cy=5,id=1,idx=1)   
78.MEMBLT(op=0xcc,x=446,y=297,cx=64,cy=5,id=1,idx=2)   
79.MEMBLT(op=0xcc,x=510,y=297,cx=64,cy=5,id=1,idx=3)   
80.MEMBLT(op=0xcc,x=574,y=297,cx=64,cy=5,id=1,idx=1)   
81.MEMBLT(op=0xcc,x=638,y=297,cx=47,cy=5,id=1,idx=4)   
82.MEMBLT(op=0xcc,x=274,y=297,cx=17,cy=5,id=1,idx=4)   
83.MEMBLT(op=0xcc,x=291,y=297,cx=28,cy=5,id=1,idx=5)   
84.RDP packet (type 7):   
85.0000 1e 00 17 00 ea 03 ea 03 01 00 04 02 1e 00 02 00 ................   
86.0010 00 00 00 00 85 7e 01 00 d5 f5 19 0b 20 01       .....~...... .   
87.DESKSAVE(l=271,t=200,r=687,b=343,off=0,op=1)   
88.RDP packet (type 6):   
89.0000 0d 00 16 00 ea 03 ea 03 01 00 01 00 00          .............   
90.Disconnecting... 

相關推薦

RDP協議簡介通訊資料加密等級設定說明

呼叫層次:  rdp_--->sec_--->mcs_--->iso_--->tcp_ 協議包編解碼層次:  rdp_hdr->sec_hdr->mcs_hdr->iso_hdr->data,所有這些指標組成一個STREAM. view plainc

SSL/TLS 協議簡介例項分析

作者:drinkey 以前讀RFC時總結的一篇文章,主要介紹了SSL/TLS協議的相關知識,包括協議本身以及簡單的密碼學概念,以及用例項解析了HTTP over SSL的協商過程,在最後簡要列出了SSL的安全問題。 1. RFC documents about SSL

C#C++資料型別比較結構體轉換

//c++:HANDLE(void *) —- c#:System.IntPtr //c++:Byte(unsigned char) —- c#:Sy

python pandas中seriesdataframe資料型別屬性操作基礎

一)屬性 series :.index,.values, .name,.index.name dataframe :.columns, .index,.values 二)建立方法 ser

Gabor濾波簡介Opencv中的實現引數變化實驗

Gabor濾波是一種非常常見的特徵提取演算法,在人臉識別等領域有著很廣泛的應用,在這裡我主要介紹一下Gabor濾波器的公式及Opencv下的程式碼實現,以及我做的一些引數變化的實驗。 一、Gabor濾波簡介 注意,這裡我介紹的Gabor演算法與在人臉識別

轉載 STM32簡單資料傳輸方法通訊協議(適合串列埠和一般匯流排)

版權宣告:謝謝你那麼厲害還看了我的文章,歡迎轉載交流學習~    https://blog.csdn.net/kilotwo/article/details/79307090 引言 在一般的專案開發過程中,往往需要兩塊或以上微控制器進行通訊完成資料傳輸,例如四旋翼無人機

系統安全之數據的加密和解密、CA的介紹、SSL或TLS協議簡介握手過程

網絡運維 網絡通信需要安全 所謂的網絡通信就是進程與進程之間的通信 然而進程的通信一般可以分成兩類:1、同一主機之間的進程通信

軟交換接口信令協議簡介

二進制 問題 長度 sap 發現 服務 區別 接口 包括 軟交換 原帖地址http://www.51hei.com/bbs/dpj-44943-1.html 是網絡演進以及下一代分組網絡的核心設備之一,它獨立於傳送網絡,主要完成呼叫控制、資源分配、協議處理、路由、認證、計費

開放資料介面 API 簡介使用場景、呼叫方法

此文章對開放資料介面 API 進行了功能介紹、使用場景介紹以及呼叫方法的說明,供使用者在使用資料介面時參考之用。 在給大家分享的一系列軟體開發視訊課程中,以及在我們的社群微信群聊天中,都積極地鼓勵大家開發自己的專案,包括微信小程式或者 App 等。 但是很多同學遇到的問題是,當開發自己的網站、微信小程式、

資料加密演算法簡介(轉載)(經典又權威)

資料加密 資料加密技術是最基本的安全技術,被譽為資訊保安的核心,最初主要用於保證資料在儲存和傳輸過程中的保密性。它通過變換和置換等各種方法將被保護資訊置換成密文,然後再進行資訊的儲存或傳輸,即使加密資訊在儲存或者傳輸過程為非授權人員所獲得,也可以保證這些資訊不為其認知,從而達到保護資訊的目的。該

全國天氣預報資訊資料 API 功能簡介程式碼呼叫實戰視訊

此文章對開放資料介面 API 之「全國天氣預報資訊資料 API」進行了功能介紹、使用場景介紹以及呼叫方法的說明,供使用者在使用資料介面時參考之用,並對實戰開發進行了視訊演示。 1. 產品功能 介面開放了全國天氣預報資訊資料,你可以通過關鍵字查詢任意市或者區級別的位置程式碼,通過位置程式碼查詢最詳細的天氣預

CAN通訊最常用的標定協議--CCPXCP

CCP與XCP CCP協議(CAN Calibration Protocol) CAN標定協議,基於CAN匯流排的標定協議   XCP協議(Universal Measurement and Calibration Protocol) 通用測試標定協議

TCP粘包、拆包通訊協議

在TCP程式設計中,通常Sever端與Client通訊時的訊息都有著固定的訊息格式,稱之為協議(protocol),例如FTP協議、Telnet協議等,有的公司也會自己開發協議。 那麼協議到底是幹什麼的呢?說白了,協議了就是定義了資料通訊的格式。主要是為了解決

Android進階:網路資料儲存—步驟1:Android網路通訊(第2小節:Handler)

內容概覽 Handler是什麼 為什麼要使用Handler Handler/Looper/MessageQueue/Message Handler如何去實現(三種實現:1、下載檔案並更新進度條 2、倒計時 3、打地鼠的遊戲實現) 工作原理 如果更好的使用 擴充套

Android進階:網路資料儲存—步驟1:Android網路通訊(第3小節:ListView上)

內容概要: 一、課程介紹 二、ListView的準備工作 ListView簡介 ListView的實現步驟 三、ListView簡單應用 Adapter的資料繫結 最簡單ListView效果演示 獲取系統已安裝應用列表 優化效能 一、課程介紹 什麼是List

Android進階:網路資料儲存—步驟1:Android網路通訊(第4小節:ListView下)

內容概括: 一、網路下載資料並顯示在ListView上 使用非同步訪問網路 解析獲取的Json資料 載入資料到ListView上 二、不同item的引用 引用不同行佈局 一、網路下載資料並顯示在ListView上 1.1-使用非同步訪問網路 //非同步訪問網路

Android進階:網路資料儲存—步驟1:Android網路通訊(第6小節:GridView)

內容概要: GirdView(網格檢視)顯示本地資料 GirdView屬性簡介 案例一:用GirdView展示文字 案例二:用GridView顯示已安裝應用 GridView顯示網路 用GridView載入網路圖片(上) 用GridView載入網路圖片(下) 一、

Android進階:網路資料儲存—步驟1:Android網路通訊(第7小節:CadView)

內容概要: CardView基礎 CardView介紹 CardVie常用屬性 CardView屬性效果展示 CardView案例實現 CardVie基本操作 案例-佈局搭建 案例-實體類建立 案例-功能實現 案例-適配 CardView開發注意事項 一、Ca

URL協議HTTP協議簡介

HTTP:(Hypertext transfer protocol)超文字傳輸協議,是用於從全球資訊網(WWW:World Wide Web)伺服器傳輸超文字到本地瀏覽器的傳送協議。 URL:(Uniform Resource Locator)統一資源定位符,對可以從網際網路上得到的資源的位置和訪問

計算機網路通訊資料加密技術的應用

通訊方面的安全,重點在下述的兩個領域:第一個是資訊在進行傳遞過程中的安全,第二個是資訊在進行儲存過程中的安全。 使用鏈路的方式進行加密 過程:因為在所有中間部位的傳遞節點當中,訊息全部被經過解密以後,再一次實施加密操作,所以,將路由資訊涵蓋在鏈路當中,全部的資料普遍使用祕聞的方式進