Unofficial ICQ Protocol v7
|
Ниже вашему вниманию предоставляется
неофициальная версия 7-ого протокола ICQ. Именно его используют клиенты
ICQ2000a и ICQ2000b. Так что можете изучать и программировать свой
собственный СОФТ. Надеюсь, скоро список софта пополнит и Ваша собственная
программа.
Список ключей и параметров:
affiliations.txt
- Список Affiliations (Категории)
ages.txt - Возраст.
Ключи для поиска по White Pages.
countries.txt -
Страны. Коды стран для User details
gmt.txt - Время
относительно GMT пользователя. Для User Details.
interests.txt -
Интересы пользователя.
languages.txt -
Ключи к языкам.
occupations.txt
- Ключи профессий пользователя. Occupations.
pasts.txt - User
Pasts.
sex.txt
- Пол пользователя. 2 ключа.
Сам 7-ой протокол ICQ:
ICQv7 (personal) protocol notes
by Massimo Melina,rejetto@libero.it
www.rejetto.com/icq
last
update Nov 02, 2001
THESE ARE ONLY _PERSONAL_ NOTES
USE IT AT YOUR OWN RISK
if you
want to tell me about additional info or wrong info in this file, contact
me
important note:
* this doc is very bad written for several
reasons i won't list here.
* i don't earn money from this, i'm a
student, i'm only having some fun.
* a list of people who contributed
to this doc is at bottom
* you won't understand too much in here if you
don't read AIM protocol docs at www.icqv7.cjb.net
some notes:
* unk = unknown
* communication is over FLAP protocol
(find info about it in AIM protocol docs)
* where specified,
communication is over SNAC protocol, over FLAP (AIM proto docs too)
*
password is xored with these bytes:
F3,26,81,C4,39,86,DB,92,71,A3,B9,E6,53,7A,95,7C
* LE stands for
little-endian
* BE stands for big-endian
* BYTE is a 8 bit
integer
* WORD is a 2-byte integer (BE)
* DWORD is a 4-byte integer
(BE)
* TIME_T is a DWORD, unix time format
* IPADDR is a quadruple
of bytes A,B,C,D where in dotted form is A.B.C.D
* COLOR is a quadruple
of bytes: R,G,B,N where N is not used (you should set it zero)
* STRING
is a succession of (ascii) characters without length-leading or
null-char-ending
* UIN is a 4-byte integer (LE) that codifies the uin
number
* B-UIN is a BYTE preceded STRING: the byte indicates the length
of the string and the string report an uin number
* UINLIST is a raw
succession of B-UINs
* NTS is a Null Termined String
* LNTS is a
word (LE) preceeded NTS: the word indicates the length of the NTS string
(null char included)
* DLS is a dword (LE) preceeded string
*
msg-subtype is a BYTE:
CODE |
FORMAT |
MEANING |
01 |
plain |
msg |
02 |
? |
chat |
03 |
? |
file |
04 |
url-msg |
url |
06 |
user-msg |
authorization request |
07 |
plain |
authorization denied |
08 |
empty |
authorization given |
0C |
user-msg |
user added you |
0E |
email-msg |
emailExpress |
13 |
contacts-msg |
contacts |
1A |
empty |
contacts-req |
E? |
plain |
auto-msg-req (E8 away, E9 occupied, EA na, EB dnd, EC
f4c) |
* msg-flags is a BYTE:
00 = normal
80
= multiple
03 = special (used for auto-msg-req)
* error-code is a
WORD:
00 00 no error
00 01 bad uin
00 05 bad password
00 18
rate exceeded
00 1D (probably) you're trying to reconnect too fast,
wait a second and retry
* user-msg is a LNTS: nick FE first FE last FE
email FE unk-char FE msg
* url-msg is a LNTS: msg FE url
*
contacts-msg is a LNTS: contacts# FE uin FE nick FE uin FE nick FE...
*
email-msg is a LNTS: name FE FE FE email FE unk-char FE body
* gmt
offset is a signed byte, specifies negative half hours from GMT 0 (e.g. -3
= GMT+1:30)
* status codes is a double word: WORD flags + WORD status
WORD
flags
2000 direct connection only for contact list
1000 direct
connection by request
0002 show ip? (licq uses it on invisible
state)
0001 webaware
WORD status (sometime i saw bit 3 set, or bit 9
in invisible state)
0000 online
0020 free4chat
0001 away
0004
n/a
0005 n/a
0010 occupied
0011 occupied
0013 dnd
0100
invisible
* accept-status codes
0 normally accepted (use this replying to
auto-msg-req)
9 not accepted, occupied
A not accepted, dnd
4
accepted but away
E accepted but NA
C accepted to contact list (no
blink in tray)
* priority codes
00 00 = file-reply
01 00 = normal
02 00 =
send urgent
04 00 = send to contact list (don't blink in tray)
* direct-connection-info
IPADDR my ip address, often second NIC ip,
leave 0 for no direct-connection
DWORD port where listening for
connections, leave 0 for no direct-connection
BYTE 04
WORD protocol
version (licq 0006, icq2000 0007, icq2001 0008)
4 BYTE unk
8 BYTE 00
00 00 50 00 00 00 03
TIME_T unk, usually a recent time
TIME_T unk,
usually a recent time
TIME_T unk, usually a recent time
WORD 0
* wp-short-request-info
LNTS first
LNTS last
LNTS nick
* wp-full-request-info
wp-short-request-info
LNTS email
WORD
(LE) minimum age, 0 if disabled
WORD (LE) maximum age, 0 if
disabled
BYTE sex (0=disabled, other=see table)
BYTE language
(0=disabled, other=see table)
LNTS city
LNTS state
WORD country
(0=disabled, other=see table)
LNTS company-name
LNTS
department
LNTS position
BYTE occupation field (0=disabled)
WORD
past information category (0=disabled, other=see table)
LNTS
desc
WORD interests-category (0=disabled, other=see table)
LNTS
interests-specific (comma separated)
WORD affiliation/organization
(0=disabled, other=see table)
LNTS desc
WORD homepage
category
LNTS desc
BYTE only-online-users, (0=off, 1=on)
* wp-result-info
WORD length of this record (you can't rely on
fields if record is shorter)
UIN his uin
LNTS nick
LNTS
first
LNTS last
LNTS email
BYTE auth (0=required,
1=always)
BYTE status (00 offline, 01 online, 02 not webaware)
BYTE
unknown, usually 0
BYTE sex
BYTE age
9 BYTE unk, 0
* main-home-info
LNTS nick
LNTS first
LNTS last
LNTS
email
LNTS city
LNTS state
LNTS phone
LNTS fax
LNTS
street
LNTS cellular (if SMS-able string contains an ending '
SMS')
LNTS zip
WORD country (LE)
BYTE gmt
BYTE unknown,
usually 0
* work-info
LNTS city
LNTS state
DWORD 0
LNTS
street
LNTS zip
WORD country (LE)
LNTS company-name
LNTS
company-dept
LNTS company-position
WORD 0 (LE?)
LNTS company-web
* homepage-more-info
BYTE age
BYTE 0
BYTE sex
LNTS
homepage
WORD birth-year (LE)
BYTE birth-month
BYTE
birth-day
BYTE lang1
BYTE lang2
BYTE lang3
* work-info
LNTS city
LNTS state
LNTS unk
LNTS unk
LNTS
street address
LNTS zip code
WORD unk, 2700
LNTS company
name
LNTS unk
LNTS position
WORD unk, 0500
LNTS unk
* more-email-info
BYTE number (of addresses)
for number
times
BYTE unknown, usually 00
LNTS address
* personal-interests-in
BYTE # of categories to follow
for #
times
WORD category (6800 => Computers, 7100 => Music)
LNTS
specific
* past-background-info
012F01 university
LNTS specific
00616E
* capability is a 4 DWORD number
4 capabilities are known
1)
09461349 4C7F11D1 82224445 53540000
2) 09461344 4C7F11D1 82224445
53540000
3) 97B12751 243C4334 AD22D6AB F73F1492 //
sent by icq2001
4) 2E7A6475 FADF4DC8 886FEA35 95FDB6DF
// sent by icq2001
* capability-info is a succession of capabilities
note: icq2000b
sends 1) and 2), licq sends only 2)
*******************************
------LOGIN SESSION-----------
*******************************
connection to login server
server sends (1) <- in parenthesis lies the FLAP channel (SNACs use
always channel 2) 4 BYTE 00 00 00 01
client sends (1)
4 BYTE 00 00 00 01
TLV(1) STRING my
uin
TLV(2) STRING encrypted password
TLV(3) STRING client profile,
example "ICQ Inc. - Product of ICQ (TM).2000b.4.63.1.3279.85"
TLV(16)
WORD unk, usually 01 0A
TLV(17) WORD major version, 4 for icq2000, 5
for icq2001
TLV(18) WORD minor version
TLV(19) WORD lesser
version
TLV(1A) WORD build version
TLV(14) DWORD dunno
version
TLV(0F) STRING language, 2 chars, usually "en"
TLV(0E)
STRING country, 2 chars, usually "us"
server sends (4)
TLV(1) STRING my uin
if all goes right
TLV(5)
STRING BOS-address:port
TLV(6) STRING cookie
else TLV(8)
error-code
TLV(4) STRING url // not always present
TLV(C) WORD unknown
close connection
-----SERVICE SESSION---------
connection to service server specified in TLV(5)
server sends (1)
4 BYTE 00 00 00 01
client sends (1)
4 BYTE 00 00 00 01
TLV(6) STRING cookie
------SNAC COMMANDS------------
server sends // Server is ready
SNAC
1,03
24 BYTE 00 01 00 02 00 03 00 04 00 06 00 08 00 09 00 0A 00 0B 00
0C 00 13 00 15 <
> client sends // hey, i'm an icq client, not
aim
SNAC 1,17
32 BYTE 00 01 00 03 00 13 00 02 00 02 00 01 00 03 00
01 00 15 00 01
00 04 00 01 00 06 00 01 00 09 00 01 00 0A 00 01 00 0B
00 01
server sends // got it, ack to 1,17
SNAC
1,18
48 BYTE 00 01 00 03 00 02 00 01 00 03 00 01 00 04 00 01 00 06 00
01 00 08 00 01
00 09 00 01 00 0A 00 01 00 0B 00 01 00 0C 00 01 00 13 00
02 00 15 00 01
client sends // request rate
SNAC 1,06
empty
server sends // response to 1,06
SNAC 1,07
181
BYTE unknown
WORD # of known messagges (N)
N DWORD known messages, a
known message is a words pair: FAMILY/SUBTYPE
17 DWORD unknown, they
seems messagge IDs too
client sends // ack to 1,07
SNAC 1,08
10 BYTE
00 01 00 02 00 03 00 04 00 05
client sends // Requests personal
information.
SNAC 1,0E
empty
client sends // Request rights information for
location service
SNAC 2,02
empty
client sends // Request rights information for buddy
list
SNAC 3,02
empty
client sends // Requests rights for ICBM (Instant
Message) operations.
SNAC 4,04
empty
client sends // Requests BOS rights
SNAC
9,02
empty
server sends // response to 1,0E
SNAC 1,0F
if
bit15 set in flag
8 BYTE 00 06 00 01 00 02 00 03
BUIN my uin
WORD
warning level
WORD user class?
TLV(1) WORD class2, usually 00 00 or
00 50
TLV(C) direct-connection-info, usually 0s
TLV(A) IPADDR my ip
address
TLV(4) WORD idle time, usually 00 00
TLV(6) DWORD status
code
TLV(F) DWORD unknown, it seems to be an incrementing
value
TLV(2) TIME_T member since
TLV(3) TIME_T online since
server sends //response to 2,02
SNAC
2,03
TLV(1) 04 00
TLV(2) 00 10
TLV(3) 00 0A
server sends //response to 3,02
SNAC
3,03
TLV(1) 02 58
TLV(2) 02 EE
TLV(3) 02 00
server sends // response to 4,04
SNAC 4,05
16
BYTE unknown, 00 02 00 00 00 03 02 00 03 E7 03 E7 00 00 03 E8
server sends // response to 9,02
SNAC
9,03
TLV(2) 00 A0
TLV(1) 00 A0
client sends // Add ICBM parameter
SNAC 4,02
16
BYTE 00 00 00 00 00 03 1F 40 03 E7 03 E7 00 00 00 00
client sends // set user info
SNAC 2,04
TLV(5)
capability-info
client sends // add to contact list
SNAC
3,04
UIN-LIST
client sends // remove from contact list
SNAC
3,05
UIN-LIST
client sends // add to visible list
SNAC
9,05
UIN-LIST
client sends // remove from visible list
SNAC
9,06
UIN-LIST
client sends // add to invisible list
SNAC
9,07
UIN-LIST
client sends // remove from invisible list
SNAC
9,08
UIN-LIST
client sends // add to a sort of visible list
SNAC
9,0A
UIN-LIST
client sends // remove from a sort of visible
list
SNAC 9,0B
UIN-LIST
client sends // set status code
SNAC
1,1E
TLV(6) status-code
TLV(8) error-code
TLV(C)
direct-connection-info
TLV(11) variable length, sent changing user
info
here some cases (they seems to be groups of 5 bytes)
15 BYTE:
01 0A 19 0B 3B 01 2E 19 0B 3B 01 5E 19 0B 3B
5 BYTE: 01 18 E5 CC
3B
TLV(12) WORD unknown, sent changing user info, usually 0
client sends // unknown (usually after set status
code)
SNAC 1,11
DWORD 00 00 00 00
client sends //client ready
SNAC 1,02
64 BYTE
unknown, usually 00 01 00 03 01 10 02 8A 00 02 00 01 01 01 02 8A 00 03 00
01
01 10 02 8A 00 15 00 01 01 10 02 8A 00 04 00 01 01 10 02 8A
00 06
00 01 01 10 02 8A 00 09 00 01 01 10 02 8A 00 0A 00 01
01 10 02 8A
client sends //many purposes
SNAC
15,02
TLV(1)
WORD (LE) bytes remaining, useless
UIN my
uin
WORD type
WORD req-id
type=3C00 //ask for
offlines messages
nothing
type=3E00 //ack to
offline messages
nothing
type=D007
WORD subtype
subtype=9808
xml-stype in an LNTS
LNTS '<key>' name of required data
'</key>'
subtype=1F05 //simple query
info
UIN user to request info
subtype=6905
//simple query info extended (used by icq2001)
DWORD
unk, 36 01 04 00
UIN user to request info
subtype=B204
//query info about user
UIN user to request
info
subtype=D004 //query my info
UIN my
uin
subtype=1505
//wp-short-request
wp-short-request-info
subtype=3305
//wp-full-request
wp-full-request-info
subtype=EA03
//modify user info
(main/home)
main-home-info
subtype=FD03 //modify
user info (homepage/more)
homepage-more-info
subtype=0604
// modify user info (about)
LNTS
about
subtype=F303 //modify user info
(work)
work-info
subtype=2E04 // change
password
LNTS new password
subtype=C404 // remove
user (warning!)
UIN uin to remove
LNTS password
subtype=2404
// set permissions?
BYTE authorization, 00 =
required, 01 = not required
BYTE webaware, 00 = off, 01 = on
2 BYTE
unknown, 01 00
subtype=D70A // unknown (icq2001)
server sends // Message of the day
SNAC 1,13
if
bit15 set in flag
8 BYTE 00 06 00 01 00 02 00 03
WORD unknown,
usually 0004
TLV(B) STRING message of the day, usually
'http://www.aol.com'
server sends // many purposes
SNAC 15,03 flag:000x
TLV(1) used for a lot of things
WORD (LE) bytes remaining,
useless
UIN my uin
WORD message-type
WORD req-id
message-type
= 4100 // offline message
UIN his uin
WORD year
(LE)
BYTE month (1=jan)
BYTE day
BYTE hour (GMT time)
BYTE
minutes
BYTE msg-subtype
BYTE msg-flags
LNTS msg
WORD 0000,
present only in single messages
message-type = 4200
// end of offline messages
BYTE unknown, usually
0
message-type = D007
2 BYTE unknown, usually 98 08
WORD length
of the following NTS
NTS
"<key>"field-type"</key>"
field-type = DataFilesIP
6
BYTE unk, usually 2A 02 44 25 00 31
message-type = DA07
3 BYTE
subtype
subtype=A2080A // where to get ads
stuff
LNTS ip address (a web server), usually
'<value>205.188.250.25</value>' that is
cb.icq.com
subtype=A40132 or AE0132 // empty
whitepages result
empty
subtype=A4010A //
wp-full-request result
wp-result-info
subtype=AE010A
// wp-full-request result (the
last)
wp-result-info
DWORD lasting results (LE)
subtype=90010A
// wp-short-request
result
wp-result-info
subtype=9A010A //
wp-short-request result (the last)
wp-result-info
DWORD lasting
results (LE)
subtype=C8000A // query
result
main-home-info
WORD unknown
subtype=D2000A
// query result
work-info
subtype=E6000A
// query result
LNTS about
subtype=F0000A
// query
result
personal-interests-info
subtype=FA000A //
query result
past-background-info
subtype=FA0014
// query result: users does not exist
s
empty
subtype=EB000A // query
result
more-email-info
subtype=DC000A // query
result
homepage-more-info
WORD unknown
subtype=0E010A
// query: additional info
WORD unknown,
0000
subtype=64000A // ack to modify info
(main/home)
empty
subtype=78000A // ack to modify
info (homepage/more)
empty
subtype=82000A // ack
to modify info (about)
empty
subtype=6E000A //
ack to modify info (work)
empty
subtype=B4000A //
ack to remove user
empty
subtype=AA000A // ack to
change password
empty
subtype=A0000A // ack to
2404
empty
subtype=1D030A // ack to D70A
empty
server sends // ONcoming user
SNAC
3,0B
B-UIN
WORD 0
WORD # of following TLVs
TLV(1) 00
50
TLV(C) direct-connection-info
TLV(A) IPADDR
TLV(4) WORD
0
TLV(6) status
TLV(D) capability-info
TLV(F) DWORD it seems a
time in seconds
TLV(2) TIME_T member since
TLV(3) TIME_T online
since
server sends // OFFgoing user
SNAC
3,0C
B-UIN
4 BYTE 00 00 00 01
TLV(1) 00 00
server sends
// incoming message
SNAC 4,07
8 BYTE ??B, a sort
of ID (it seems to be based on timestamp)
WORD msg-format
B-UIN
sender's uin
WORD warning level? garbage of OSCAR protocol
WORD 5 or
6, maybe it counts the following TLVs before the format-dipendent
datas
TLV(1) WORD 00 50
TLV(4) WORD 0 (not present in file-req and
auto-msg-req)
TLV(6) sender's status
TLV(F) DWORD it seems a time in
seconds
TLV(2) TIME_T member since
TLV(3) TIME_T online since
if
msg-format = 1 // message
TLV(2)
7 BYTE 05 01 00
01 01 01 01
WORD msg length + 4
4 BYTE 0
STRING message
if
msg-format = 4 // url or contacts or auth-req or
userAddedYou
TLV(5)
UIN sender's uin
BYTE msg-subtype
BYTE
msg-flags
LNTS msg
if text-msg
COLOR foreground
COLOR
background
if msg-format = 2 // advanced
message
TLV(5)
WORD ??A, 00 02 for file-ack, else 00 00
8 BYTE
same as ??B
16 BYTE capability1
if ??A=0000
TLV(A) 00 02 on
file-reply, 00 01 else
TLV(5) WORD, listening port (BE) (present on
FT)
TLV(3) IPADDR, internal ip (present on FT and file-reply)
TLV(F)
empty
TLV(2711)
WORD 1B 00
BYTE ??E (08 in auto-msg-req, else
07)
19 BYTE unk, 0
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00
3 BYTE unk, 03 00 00
if auto-msg-req
BYTE 00
BYTE
unk, 00 or 04 (00 in auto-msg-req)
WORD ??D, seems to be a downcounter
starting from FFFF
2 BYTE 0E 00
WORD same as ??D
12 BYTE
0
BYTE msg-subtype
BYTE msg-flags
WORD unk, 00 00 or 01 00 or 02
00 (0000 in file-reply, auto-msg-req)
WORD priority
LNTS msg
if
file-req
4 BYTE 9F CD D3 11
LNTS filename
DWORD filesize
(LE)
4 BYTE 00 FD 81 01
if file-reply
WORD ??C
2 BYTE
0
LNTS ''
DWORD unk
WORD same as ??C but inverted endian
2
BYTE 0
if auto-msg-req
empt
if text-msg
COLOR
foreground
COLOR background
TLV(4) IPADDR, external ip (BE) (present
on file-req, file-ok)
server sends // server ack to type-2 messages
SNAC
4,0C
10 BYTE equals to first 10 BYTE of message
BUIN equals to
message' uin
client sends // send message
SNAC 4,06
8 BYTED
??B, a sort of ID (it seems to be based on timestamp, ACKs should use same
ID)
WORD message-format
B-UIN recipient
msg-format=1
// simple message
TLV(2)
7 BYTE 05 01 00 01 01 01
01
WORD msg length + 4
4 BYTE 0
STRING
msg
TLV(6)
empty
msg-format=2 // advanced
message (only for ICQv7+ clients)
TLV(5)
WORD ??A (00 01 on abort
request, else 00 00)
8 BYTE same as ??B
16 BYTE capability1
if
??A = 00 00
TLV(A) 00 01 (maybe 00 02 for file-ack)
TLV(B) 00 01
(present on abort requests)
TLV(5) WORD, listening port (BE) (present
on file-req)
TLV(3) IPADDR, internal ip (present on file-req)
TLV(F)
empty
TLV(2711)
26 BYTE ??E, 1B 00 07 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 03 00 00 00
BYTE unk, 00 or 04 (00 on
auto-msg-req)
WORD ??D, seems to be a downcounter starting from
FFFF
WORD 0E 00 (it could be a LE counter of following bytes: 0E =
2+12)
WORD same as ??D
12 BYTE 0
BYTE msg-subtype
BYTE
msg-flags
WORD unk, 00 00 or 01 00 or 02 00 (0000 in file-reply, 0100
in auto-msg-req)
WORD priority
LNTS msg
if subtype=FT
WORD
unk, can be 0
WORD ??C, can be 0
LNTS filename (empty on
file-reply)
DWORD filesize (LE) (zero on file-reply)
WORD unk, can
be 0
WORD same or similar to ??C
if subtype=chat
BYTE 01
10
BYTE 0
if subtype=msg
COLOR foreground
COLOR background
if
subtype=auto-msg-req
empty
TLV(3) empty // ack
request?
msg-format=4 // url or contacts or
auth-reply or multi-send
TLV(5)
UIN my uin
BYTE
msg-subtype
BYTE msg-flags
LNTS msg
if contacts-req
2 BYTE 39
00, it seems to be the number of the following bytes
18 BYTE unk, 2A 0E
7D 46 76 76 D4 11 BC E6 00 04 AC 96 1E A6 02 00
DTS Request For
Contacts
15 BYTE 00 00 00 00 00 01 00 00 00 00 00 00 00 00 00
2 BYTE
11 00, it seems to be the number of the following bytes
2 BYTE 0
DTS
request message
TLV(6) empty // ack request?
client or server sends // ack to type-2 message
(answer to auto-msg-req too)
SNAC 4,0B flags:0000
10 BYTE equals to
first 10 BYTE of message
BUIN equals to message' uin
2 BYTE 00
03
47 BYTE from offset 40 (??E) to 86 of TLV(5)
BYTE accept-status
3 BYTE 0
LNTS message
if not auto-msg
4 BYTE 0
if msg
4
BYTE FF FF FF FF
if file-deny
11 BYTE unk, 01 00 00 xx xx 00 00 xx
xx 00 00
server sends // warning: you're sending too fast
SNAC 1,0A
flags:0000
WORD unk, usually 1, 2 or 3
24 BYTE 00 01 00 00 00 50 00
00 09 C4 00 00 07 D0 00 00 05 DC 00 00 03 20 00 00
WORD unk, maybe
indicates the available buffer in the server and it's always under 2000dec
under 5DC (1500dec), the first word is 3 over it's 2
9 BYTE 00 00 17 70
00 00 00 00 01
client sends // add to ignore list (it seems to have no
effects)
SNAC 3,05
UIN-LIST
server sends (4)
TLV(9) WORD disconnect reason
00 01 = another
client is loggin with this uin
TLV(B) STRING comment?
for reason 00
01, "http://www.aim.aol.com/errors/USER_LOGGED_OFF_NEW_LOGIN.html"
server sends
SNAC 4,01 flags:0000
WORD error-code
000E invalid
packet?
server sends
SNAC 17,03 flags:0000
TLV(4) STRING message of the
day, usually "http://www.aol.com"
TLV(8) error-code
TLV(C) 00 01
client sends // add to visible lsit
SNAC 13,08 flags:0000
BYTE
00
BUIN an uin
8 BYTE 00 00 2B 63 00 02 00 00 // maybe last dword is
my status
client sends // remove from visible list
SNAC 13,0A
flags:0000
BYTE 00
BUIN an uin
8 BYTE 00 00 22 64 00 02 00 00
server sends // ack to 13,0A
SNAC 13,0E flags:8000
10 BYTE
unknown, 00 06 00 01 00 02 00 02 00 00
----A (hopely) CORRECT LOGIN SEQUENCE
login packet
(uin/password)
get the cookie and reconnect
send cookie
SNAC
1/3
SNAC 1/17
SNAC 1/6
SNAC 1/E
SNAC 2/2
SNAC 3/2
SNAC
4/4
SNAC 9/2
the server reply 1/7 to the 1/6, and then it
goes:
SNAC 1/8
SNAC 4/2
SNAC 2/4
SNAC 3/4 with the contact
list
if status = invisible SNAC 9/5 with visible list
SNAC 1/1E with
status
SNAC 1/11
if status invisible SNAC 9/7 with invisible
list
SNAC 1/2
SNAC 15/2, to require offline messages
---RECEIVE A FILE TRANSFER REQUEST VIA SERVER
server:
SNAC 4,07
(file-req)
client:
SNAC 4,06 (file-ok)
or
SNAC 4,0B
(file-denied)
server:
SNAC 4,07 (file-ack, with ??A=0002)
after file-req a SNAC 4,07 (file-abort) could happen
---NEW UIN REGISTRATION
server sends (1)
4 BYTE 00 00 00 01
client sends (1)
4 BYTE 00 00 00 01
client sends
SNAC 17,04
3 BYTE 00 01 00
BYTE unk, 3B or
38
4 BYTE 0
4 BYTE 28 00 03 00
4 BYTE 0
4 BYTE 0
4 BYTE
??A, unk, 03 46 00 00 or B4 25 00 00
4 BYTE same as ??A
4 BYTE
0
4 BYTE 0
4 BYTE 0
4 BYTE 0
LNTS chosen password
4 BYTE
same as ??A
4 BYTE 00 00 CF 01
server sends
SNAC 17,05
17 BYTE 00 01 00 32 30 00 00 00 00 00 2D
00 03 00 00 00 06
BYTE unk, 0F or 72
2 BYTE 3E 62
2 BYTE unk, E3
53 or CD B5
2 BYTE 7E FF
4 BYTE unk, 14 18 03 46 or 17 08 B4
25
18 BYTE 0
UIN new uin number
2 BYTE unk, 03 46 or B4 25
2
BYTE 00 00
---PEOPLE WHO CONTRIBUTED TO THIS DOC (i decide the order, that is,
random)
Jeff Hughes valaxer@nwinet.com
Filippov Joe
joe@idisys.iae.nsk.su
Robin Fisher robin@phase3solutions.com
Daniel
Wirtz daniel@skywebs.net
Alex Efros powerman@sky.net.ua
Протокол в текстовом файле: ICQv7proto.txt