summaryrefslogtreecommitdiffstats
path: root/scripts/external_libs/dpkt-1.8.6/dpkt/qq.py
blob: 4720c69b7ceead0a2628173fe4cf78224984c5aa (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
# $Id: qq.py 48 2008-05-27 17:31:15Z yardley $

from dpkt import Packet

# header_type
QQ_HEADER_BASIC_FAMILY = 0x02
QQ_HEADER_P2P_FAMILY = 0x00
QQ_HEADER_03_FAMILY = 0x03
QQ_HEADER_04_FAMILY = 0x04
QQ_HEADER_05_FAMILY = 0x05

header_type_str = [
    "QQ_HEADER_P2P_FAMILY",
    "Unknown Type",
    "QQ_HEADER_03_FAMILY",
    "QQ_HEADER_04_FAMILY",
    "QQ_HEADER_05_FAMILY",
]

# command
QQ_CMD_LOGOUT = 0x0001
QQ_CMD_KEEP_ALIVE = 0x0002
QQ_CMD_MODIFY_INFO = 0x0004
QQ_CMD_SEARCH_USER = 0x0005
QQ_CMD_GET_USER_INFO = 0x0006
QQ_CMD_ADD_FRIEND = 0x0009
QQ_CMD_DELETE_FRIEND = 0x000A
QQ_CMD_ADD_FRIEND_AUTH = 0x000B
QQ_CMD_CHANGE_STATUS = 0x000D
QQ_CMD_ACK_SYS_MSG = 0x0012
QQ_CMD_SEND_IM = 0x0016
QQ_CMD_RECV_IM = 0x0017
QQ_CMD_REMOVE_SELF = 0x001C
QQ_CMD_REQUEST_KEY = 0x001D
QQ_CMD_LOGIN = 0x0022
QQ_CMD_GET_FRIEND_LIST = 0x0026
QQ_CMD_GET_ONLINE_OP = 0x0027
QQ_CMD_SEND_SMS = 0x002D
QQ_CMD_CLUSTER_CMD = 0x0030
QQ_CMD_TEST = 0x0031
QQ_CMD_GROUP_DATA_OP = 0x003C
QQ_CMD_UPLOAD_GROUP_FRIEND = 0x003D
QQ_CMD_FRIEND_DATA_OP = 0x003E
QQ_CMD_DOWNLOAD_GROUP_FRIEND = 0x0058
QQ_CMD_FRIEND_LEVEL_OP = 0x005C 
QQ_CMD_PRIVACY_DATA_OP = 0x005E
QQ_CMD_CLUSTER_DATA_OP = 0x005F
QQ_CMD_ADVANCED_SEARCH = 0x0061
QQ_CMD_REQUEST_LOGIN_TOKEN = 0x0062
QQ_CMD_USER_PROPERTY_OP = 0x0065
QQ_CMD_TEMP_SESSION_OP = 0x0066
QQ_CMD_SIGNATURE_OP = 0x0067
QQ_CMD_RECV_MSG_SYS = 0x0080
QQ_CMD_RECV_MSG_FRIEND_CHANGE_STATUS = 0x0081
QQ_CMD_WEATHER_OP = 0x00A6
QQ_CMD_ADD_FRIEND_EX = 0x00A7
QQ_CMD_AUTHORIZE = 0X00A8
QQ_CMD_UNKNOWN = 0xFFFF
QQ_SUB_CMD_SEARCH_ME_BY_QQ_ONLY = 0x03
QQ_SUB_CMD_SHARE_GEOGRAPHY = 0x04
QQ_SUB_CMD_GET_FRIEND_LEVEL = 0x02
QQ_SUB_CMD_GET_CLUSTER_ONLINE_MEMBER = 0x01 
QQ_05_CMD_REQUEST_AGENT = 0x0021
QQ_05_CMD_REQUEST_FACE = 0x0022
QQ_05_CMD_TRANSFER = 0x0023
QQ_05_CMD_REQUEST_BEGIN = 0x0026
QQ_CLUSTER_CMD_CREATE_CLUSTER= 0x01
QQ_CLUSTER_CMD_MODIFY_MEMBER= 0x02
QQ_CLUSTER_CMD_MODIFY_CLUSTER_INFO= 0x03
QQ_CLUSTER_CMD_GET_CLUSTER_INFO= 0x04
QQ_CLUSTER_CMD_ACTIVATE_CLUSTER= 0x05
QQ_CLUSTER_CMD_SEARCH_CLUSTER= 0x06
QQ_CLUSTER_CMD_JOIN_CLUSTER= 0x07
QQ_CLUSTER_CMD_JOIN_CLUSTER_AUTH= 0x08
QQ_CLUSTER_CMD_EXIT_CLUSTER= 0x09
QQ_CLUSTER_CMD_SEND_IM= 0x0A
QQ_CLUSTER_CMD_GET_ONLINE_MEMBER= 0x0B
QQ_CLUSTER_CMD_GET_MEMBER_INFO= 0x0C
QQ_CLUSTER_CMD_MODIFY_CARD = 0x0E
QQ_CLUSTER_CMD_GET_CARD_BATCH= 0x0F
QQ_CLUSTER_CMD_GET_CARD = 0x10
QQ_CLUSTER_CMD_COMMIT_ORGANIZATION = 0x11
QQ_CLUSTER_CMD_UPDATE_ORGANIZATION= 0x12
QQ_CLUSTER_CMD_COMMIT_MEMBER_ORGANIZATION = 0x13
QQ_CLUSTER_CMD_GET_VERSION_ID= 0x19
QQ_CLUSTER_CMD_SEND_IM_EX = 0x1A
QQ_CLUSTER_CMD_SET_ROLE = 0x1B
QQ_CLUSTER_CMD_TRANSFER_ROLE = 0x1C
QQ_CLUSTER_CMD_CREATE_TEMP = 0x30
QQ_CLUSTER_CMD_MODIFY_TEMP_MEMBER = 0x31
QQ_CLUSTER_CMD_EXIT_TEMP = 0x32
QQ_CLUSTER_CMD_GET_TEMP_INFO = 0x33
QQ_CLUSTER_CMD_MODIFY_TEMP_INFO = 0x34
QQ_CLUSTER_CMD_SEND_TEMP_IM = 0x35
QQ_CLUSTER_CMD_SUB_CLUSTER_OP = 0x36
QQ_CLUSTER_CMD_ACTIVATE_TEMP = 0x37

QQ_CLUSTER_SUB_CMD_ADD_MEMBER = 0x01
QQ_CLUSTER_SUB_CMD_REMOVE_MEMBER = 0x02
QQ_CLUSTER_SUB_CMD_GET_SUBJECT_LIST = 0x02
QQ_CLUSTER_SUB_CMD_GET_DIALOG_LIST = 0x01

QQ_SUB_CMD_GET_ONLINE_FRIEND = 0x2
QQ_SUB_CMD_GET_ONLINE_SERVICE = 0x3
QQ_SUB_CMD_UPLOAD_GROUP_NAME = 0x2
QQ_SUB_CMD_DOWNLOAD_GROUP_NAME = 0x1
QQ_SUB_CMD_SEND_TEMP_SESSION_IM = 0x01
QQ_SUB_CMD_BATCH_DOWNLOAD_FRIEND_REMARK = 0x0
QQ_SUB_CMD_UPLOAD_FRIEND_REMARK = 0x1
QQ_SUB_CMD_REMOVE_FRIEND_FROM_LIST = 0x2
QQ_SUB_CMD_DOWNLOAD_FRIEND_REMARK = 0x3
QQ_SUB_CMD_MODIFY_SIGNATURE = 0x01
QQ_SUB_CMD_DELETE_SIGNATURE = 0x02
QQ_SUB_CMD_GET_SIGNATURE = 0x03
QQ_SUB_CMD_GET_USER_PROPERTY = 0x01
QQ_SUB_CMD_GET_WEATHER = 0x01

QQ_FILE_CMD_HEART_BEAT = 0x0001
QQ_FILE_CMD_HEART_BEAT_ACK = 0x0002
QQ_FILE_CMD_TRANSFER_FINISHED = 0x0003
QQ_FILE_CMD_FILE_OP = 0x0007
QQ_FILE_CMD_FILE_OP_ACK = 0x0008
QQ_FILE_CMD_SENDER_SAY_HELLO   = 0x0031
QQ_FILE_CMD_SENDER_SAY_HELLO_ACK  = 0x0032
QQ_FILE_CMD_RECEIVER_SAY_HELLO  = 0x0033
QQ_FILE_CMD_RECEIVER_SAY_HELLO_ACK  = 0x0034
QQ_FILE_CMD_NOTIFY_IP_ACK   = 0x003C
QQ_FILE_CMD_PING      = 0x003D
QQ_FILE_CMD_PONG   = 0x003E
QQ_FILE_CMD_YES_I_AM_BEHIND_FIREWALL = 0x0040
QQ_FILE_CMD_REQUEST_AGENT = 0x0001
QQ_FILE_CMD_CHECK_IN = 0x0002
QQ_FILE_CMD_FORWARD = 0x0003
QQ_FILE_CMD_FORWARD_FINISHED = 0x0004
QQ_FILE_CMD_IT_IS_TIME = 0x0005
QQ_FILE_CMD_I_AM_READY = 0x0006

command_str = {
    0x0001: "QQ_CMD_LOGOUT",
    0x0002: "QQ_CMD_KEEP_ALIVE",
    0x0004: "QQ_CMD_MODIFY_INFO",
    0x0005: "QQ_CMD_SEARCH_USER",
    0x0006: "QQ_CMD_GET_USER_INFO",
    0x0009: "QQ_CMD_ADD_FRIEND",
    0x000A: "QQ_CMD_DELETE_FRIEND",
    0x000B: "QQ_CMD_ADD_FRIEND_AUTH",
    0x000D: "QQ_CMD_CHANGE_STATUS",
    0x0012: "QQ_CMD_ACK_SYS_MSG",
    0x0016: "QQ_CMD_SEND_IM",
    0x0017: "QQ_CMD_RECV_IM",
    0x001C: "QQ_CMD_REMOVE_SELF",
    0x001D: "QQ_CMD_REQUEST_KEY",
    0x0022: "QQ_CMD_LOGIN",
    0x0026: "QQ_CMD_GET_FRIEND_LIST",
    0x0027: "QQ_CMD_GET_ONLINE_OP",
    0x002D: "QQ_CMD_SEND_SMS",
    0x0030: "QQ_CMD_CLUSTER_CMD",
    0x0031: "QQ_CMD_TEST",
    0x003C: "QQ_CMD_GROUP_DATA_OP",
    0x003D: "QQ_CMD_UPLOAD_GROUP_FRIEND",
    0x003E: "QQ_CMD_FRIEND_DATA_OP",
    0x0058: "QQ_CMD_DOWNLOAD_GROUP_FRIEND",
    0x005C: "QQ_CMD_FRIEND_LEVEL_OP",
    0x005E: "QQ_CMD_PRIVACY_DATA_OP",
    0x005F: "QQ_CMD_CLUSTER_DATA_OP",
    0x0061: "QQ_CMD_ADVANCED_SEARCH",
    0x0062: "QQ_CMD_REQUEST_LOGIN_TOKEN",
    0x0065: "QQ_CMD_USER_PROPERTY_OP",
    0x0066: "QQ_CMD_TEMP_SESSION_OP",
    0x0067: "QQ_CMD_SIGNATURE_OP",
    0x0080: "QQ_CMD_RECV_MSG_SYS",
    0x0081: "QQ_CMD_RECV_MSG_FRIEND_CHANGE_STATUS",
    0x00A6: "QQ_CMD_WEATHER_OP",
    0x00A7: "QQ_CMD_ADD_FRIEND_EX",
    0x00A8: "QQ_CMD_AUTHORIZE",
    0xFFFF: "QQ_CMD_UNKNOWN",
    0x0021: "_CMD_REQUEST_AGENT",
    0x0022: "_CMD_REQUEST_FACE",
    0x0023: "_CMD_TRANSFER",
    0x0026: "_CMD_REQUEST_BEGIN",
}


class QQBasicPacket(Packet):
    __hdr__ = (
        ('header_type', 'B', 2),
        ('source',      'H', 0),
        ('command',     'H', 0),
        ('sequence',    'H', 0),
        ('qqNum',       'L', 0),
    )


class QQ3Packet(Packet):
     __hdr__ = (
        ('header_type', 'B', 3),
        ('command',     'B', 0),
        ('sequence',    'H', 0),
        ('unknown1',    'L', 0),
        ('unknown2',    'L', 0),
        ('unknown3',    'L', 0),
        ('unknown4',    'L', 0),
        ('unknown5',    'L', 0),
        ('unknown6',    'L', 0),
        ('unknown7',    'L', 0),
        ('unknown8',    'L', 0),
        ('unknown9',    'L', 0),
        ('unknown10',   'B', 1),
        ('unknown11',   'B', 0),
        ('unknown12',   'B', 0),
        ('source',      'H', 0),
        ('unknown13',   'B', 0),
    )


class QQ5Packet(Packet):
    __hdr__ = (
        ('header_type', 'B', 5),
        ('source',      'H', 0),
        ('unknown',     'H', 0),
        ('command',     'H', 0),
        ('sequence',    'H', 0),
        ('qqNum',       'L', 0),
    )