LivelyIM
Cross-platform, easy to setup, open source*, MSNP 2+ server written in Go. Licensed under LGPL
* Will be after a proper way to manage it and some better code commenting
Background
So my last attempt at an MSNP server flopped pretty hard, the code got very messy, it was poorly architectured and structured, so implementing the planned MSNP 2-7 versions wasn’t viable. This time I implemented forwards rather than backwards! Well, sort of… Going from MSNP4 to 2,3 and then 5,6,7, quite an interesting journey I’d say
Now with this server, I plan (for now atleast) to only reach MSNP9, as after MSNP10, it’s ABCH hell (maybe I will gain some interest in dealing with the best design Microsoft could come up???)
MSN 4.7.0105 under MSNP7:
Same client version talking to a contact using MSN3.6:
Baggage carried over
- Access tokens
If you saw my previous post, you will probably remember my idea of an access token system. It has been implemented in this server. Basically, instead of reducing the security of your account by allowing login with MD5/CTP (and as such storing the password in plain text), you use tokens instead of the password that can be easily revoked.
- Restoring p2p services
The previous server had a niche feature of being able to force p2p features over a VPN service like Radmin or Hamachi. This was possible due to a custom patcher and some MSG payload tampering. This feature will come back, but currently there is no patcher implemented, so it will have to wait for that. And as previously mentioned, I will probably add a relay system so you don’t have to deal with VPNs or port-forwarding (although this is going to be hard with load balancing )
- Accuracy
While I did say that the previous server focused on accuracy, I was just being optimistic, the behaviour it had was far from the original Microsoft servers. This one is a little bit better, but still not 100% accurate, and more importantly, not as strict when it comes to the protocol syntax. Accuracy was aimed for where it was feasable and not a pain in the ass
Why Go?
I decided to use Go this time since I started learning and wanted to do a major project to help me cross over the finish line. Since I have been a C#/Java developer for over 5 years at this point, I decided to try and spice it up and use something else, and Go is also perfect for server side software due to it’s amazing concurrency, and low resource footprint
Current state
The current state of the project (as of 1.6.2025) is as follows:
- MSNP 2 thru 7 fully implemented (all commands do as expected, or have convincing enough placeholders, mostly FND, SDC, SND, URL etc)
- Fully secure password storage using bcrypt
- A token system to not expose your passwords to clients using MD5/CTP
- Easy to setup, just generate the HTTPS certificates and run
- Proper privacy, your nickname is hidden by your privacy settings, logs do not show MSG payload contents (although anyone who forks the code can easily change this, so don’t rely on it!!!, and also the messages go thru the server un-encrypted, an unfortunate limitation of MSNP)
The code is currently not open sourced nor hosted publicly, read the top of the post for more information
In the works and planned:
- MSNP 8 and 9
- A website, even a basic one should suffice
- A patcher utility, for easier patching of clients and restoring more features (to also allow the mentioned p2p proxying)
- Emulating pager devices (via a virtual contact or maybe the website)
- Emulating hotmail services from the era