# Table of contents:
# Introduction
MSNP15 is the fourteenth released version of the Messenger Service Notification Protocol.
It was introduced officially in Client Version 8.1.0178.
# Command information
No commands for any service were known to be introduced in this version.
No commands were known to be removed in this version.
# Known changes
(from MSNP14):
-
Introduced the SSO authentication scheme, which uses Passport over HTTPS. You will need to generate a response if the authentication policy is
MBI_KEYorMBI_KEY_OLD.
This is done by:- Using the challenge nonce (provided by the
USR SSO S's fourth parameter, 64 characters.) - Using the binary secret (provided by the Passport SOAP (RST) response for
messengerclear.live.com, 32 characters.) - Generating an IV (8 bytes, 12 characters).
- First, the binary secret should be base64 decoded into a buffer of 24 bytes.
NOTE: Do not decode the challenge nonce. It is treated as 64 bytes already.
NOTE: If replaying a generation, the IV is required to be extracted from the challenge response. - Instance a HMAC-SHA1 hash function with the 24-byte binary secret as the parameter. Call this
hashProvider. - Then compute hashes using the decoded binary secret (
key1): - Using
hashProvider, generate a hash with the constantWS-SecureConversationSESSION KEY HASH. Save this ashash1. - Concatenate
hash1with the constantWS-SecureConversationSESSION KEY HASH. Save this ashash1constant. - Using
hashProvider, generate a hash ofhash1constant. Save this ashash2, and keep forkey2. - Using
hashProvider, generate a hash ofhash1. Save this ashash3. - Concatenate
hash3with the constantWS-SecureConversationSESSION KEY HASH. Save this ashash3constant. - Using
hashProvider, generate a hash ofhash1constant. Save this ashash4, and keep forkey2. - To create
key2, create a 24 byte buffer.
The first 20 bytes should be the entirity ofhash2, and the remaining 4 bytes should be the first 4 bytes ofhash4. - Then compute more hashes using the decoded binary secret (
key1).
Use the constantWS-SecureConversationSESSION KEY ENCRYPTIONinstead.
This should providehash5,hash6,hash7andhash8. - To create
key3, create a 24 byte buffer.
The first 20 bytes should be the entirity ofhash6. the remaining 4 bytes should be the first 4 bytes ofhash8. - Instance a HMAC-SHA1 hash function for
key2. - Use the
key2HMAC-SHA1 to compute the hash for the challenge nonce. Save this ashash9. - Create a 72-byte buffer called
inputBuffer. The last 8 bytes should be all the value8. - Copy the whole nonce (64 bytes) into the first 64 bytes of
inputBuffer. - Using 3DES-CBC, encrypt the first 64 bytes of
inputBufferwith your IV. Call thistdesBlock. - Create a 128-byte buffer called
result.
The first 28 bytes should be:28,0,0,0,1,0,0,0,3,102,0,0,4,128,0,0,8,0,0,0,20,0,0,0,72,0,0, and finally0. - The next 8 bytes of
resultshould be your IV. - The next 20 bytes of
resultshould behash9. - The next 72 bytes of
resultshould betdesBlock. - Encode
resultin base64. This is your challenge response.
An example of doing this is provided as
SolveSSOChallengeinmsnp_challenges.cs. - Using the challenge nonce (provided by the
-
Official Client: User profiles can now "roam". The client uses the Schematized Storage Service for this.
-
Official Client: The SOAP action for Offline Instant Messages has changed to
http://messenger.live.com/ws/2006/09/oim/Store2.
# Client-server communication example
NOTE: This has been line-broken.
Lines beginning with .. followed by a space are continuations of the previous line.
C: VER 1 MSNP15 MSNP14 MSNP13 CVR0
S: VER 1 MSNP15
C: CVR 2 0x0409 winnt 5.1 i386 MSNMSGR 8.1.0178 msmsgs example@hotmail.com
S: CVR 2 8.5.1302 8.5.1302 8.1.0178
.. http://msgr.dlservice.microsoft.com/download/5/6/4/5646481F-33EF-4B08-AF00-4904F7677B89/EN/Install_WLMessenger.exe
.. http://get.live.com
C: USR 3 SSO I example@hotmail.com
S: XFR 3 NS 10.0.0.5:1863 U D
Client disconnects from server.
Client opens a connection to 10.0.0.5:1863.
C: VER 4 MSNP15 MSNP14 MSNP13 CVR0
S: VER 4 MSNP15
C: CVR 5 0x0409 winnt 5.1 i386 MSNMSGR 8.1.0178 msmsgs example@hotmail.com
S: CVR 5 8.5.1302 8.5.1302 8.1.0178
.. http://msgr.dlservice.microsoft.com/download/5/6/4/5646481F-33EF-4B08-AF00-4904F7677B89/EN/Install_WLMessenger.exe
.. http://get.live.com
C: USR 6 SSO I example@hotmail.com
S: GCF 0 245
<Policies>
<Policy type="SHIELDS" checksum="83B30425941CE296DED998A20861F87B">
<config>
<shield>
<cli maj="7" min="0" minbld="0" maxbld="9999" deny=" " />
</shield>
<block>
</block>
</config>
</Policy>
</Policies>
S: USR 6 SSO S MBI_KEY_OLD AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
The HTTPS interlude is described in the Passport SOAP (RST) article. *
C: USR 7 SSO S $(xmldecode(RequestSecurityTokenResponse.BinarySecurityToken#Compact1)) $(base64(key_challenge_response))
S: USR 7 OK example@hotmail.com 1 0
S: SBS 0 null
S: MSG Hotmail Hotmail 465
MIME-Version: 1.0
Content-Type: text/x-msmsgsprofile; charset=UTF-8
LoginTime: 1732890086
EmailEnabled: 1
MemberIdHigh: 1
MemberIdLow: 2
lang_preference: 1033
PreferredEmail: example@hotmail.com
country: US
PostalCode:
Gender:
Kid: 0
Age:
BDayPre:
Birthday:
Wallet:
Flags: 1027
sid: 507
kv: 11
MSPAuth: whatever+t+is+in+your+passport+login+ticket+that+you+sent+for+USR+SSO+S$
ClientIP: 192.168.1.111
ClientPort: 18183
ABCHMigrated: 1
The Client now uses both the ABFindAll
and the FindMembership actions
to get the current state of all lists and the last stored name and privacy mode.
NOTE: The following ADL and UUX payloads
have been exploded for visibility and formatting reasons.
No whitespace is allowed in ADL's payload and the payload size reflects this,
and is set to the correct value.
C: BLP 8 AL
S: BLP 8 AL
C: ADL 9 110
<ml l="1">
<d n="hotmail.com">
<c n="anotheruser" l="3" t="1" />
</d>
<t>
<c n="tel:+15551111222" l="3" />
</t>
</ml>
S: ADL 9 OK
C: PRP 10 MFN example%20user
S: PRP 10 MFN example%20user
C: CHG 11 NLN
S: CHG 11 NLN
C: UUX 12 118
<Data>
<PSM></PSM>
<CurrentMedia></CurrentMedia>
<MachineGuid>{44BFD5A4-7450-4BDA-BA3A-C51B3031126D}</MachineGuid>
</Data>
S: UUX 12 0
C: OUT
Client disconnects from server.
Server disconnects client.