ICQ: 20 Years Is No Limit!
ICQ is turning 20 (and that is no small potatoes). A whole generation has already grown up with the forerunner of all messengers. For this occasion, we have decided to take a retrospective look at how our technology developed over the past two decades.
After so many years, you still cannot find too much information about ICQ’s early years on the Internet. The first version, issued by four high school students from Israel on November 15, 1996, was quite simple. In fact, you could use it only to exchange text messages. Customers had to connect to the UDP 4000 port on the icq.mirabilis.com server.
Just a year later, by December 1997, client applications for Windows 3.1x, 95, NT, and Macintosh were available. Our total users exceeded 5 million people, with a daily audience of 1.3 million people. More than 300,000 could be online simultaneously. Of course, it looks ridiculous compared to the scale of today’s social networks and messenger apps. Nevertheless, just think about it: 1997, dial-up Internet access, no broadband. The only gadgets affordable to a wide audience were pagers.
In 1998, ICQ’s user base increased by one million people every three weeks. Developers had to work day and night to update the ICQ client and protocol to keep up with this rapid and explosive growth. We added the microblog function in ICQ 98, and made it possible to send undelivered messages in 98SE easily.
In mid-1998, AOL (America Online) Corporation acquired Mirabilis for $407 million.
Just 2.5 years after appearing, ICQ 99a had most of the functions we all now find familiar: conversation history storage, user search, e-mail sending, contact list grouping, etc.
The ICQ protocol combined features of p2p and client-server architectures. Initially, there was no encryption at all, which means data transmission was open. Frankly speaking, the first few versions of the protocol were actually sieve-like.
By the time we had issued ICQ 99b, a fifth protocol version was already in use. We should note that the very first protocol was not publicly available; formally, ICQ was released with the second protocol version. The checksum test appeared in the third version. Here is an example:
2 Bytes — This is the Version of the protocol = 03 00 (Major, Minor)
2 Bytes — This is the Function code. The ones I know are listed below.
2 Bytes — First Sequence Code \ These are usually the same
2 Bytes — Second Sequence Code /
4 Bytes — This is the user ID of the client user
4 Bytes — These four bytes are ICQ’s weak attempt at security:
to get these do the following:
check1 = ( data << 24) | ( data << 16 ) | ( data << 8 ) | ( data );
offs1 = Random % length; // offset into packet
offs2 = Random % 256; // offset into magic data
check2 = ( offs1 << 24 ) | !( data[offs1] << 16 ) | ( offs2 << 8) | !( magic[offs2] );
check = check1 ^ check2; // XOR the two checks
Data encryption appeared in the fourth version:
2 Bytes — Version Number (not Encrypted) = 04 00 (Major, Minor)
2 Bytes — Random number (Not Encrypted)
***** Everything from this point to the 1/4 mark is encrypted *****
2 Bytes — Always 00 00 un-encrypted
— Since the key is xored to encrypt — whatever numbers are here
are the first 2 bytes of the encryption Key.
2 Bytes — Command Code.
2 Bytes — First Sequence Code
2 Bytes — Second Sequence Code
4 Bytes — User ID Number
4 Bytes — This is a Checksum. It is calculated the same as above
— The packet is encrypted by XORing 1/4 of the packet with a key
— The Key is calculated by multiplying the length * 0x66756B65 and
adding the check value.1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 3 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
| 4 | 0 | RANDOM |
Everything below this point is encrypted
| ZEROS | COMMAND |
| SEQUENCE | SECOND SEQUENCE |
| UIN |
| CHECK |
When connecting to the server, the client would send its IP, TCP port, user password, and contacts list. Then it would confirm the client’s online status, and requested the same from all other users in the contacts list. All data exchange with the server was performed via UDP.
A TCP client-server connection would be established for exchanging messages, sending files, and other tasks. Clients would receive each other’s IPs and ports from the server.
The sixth protocol version appeared in ICQ 2000b and faced a complete rework. Encryption was significantly improved. Thanks to the new protocol, ICQ learned how to call phones, and send SMS and pager messages. Users also got the option of sending contact requests to other users.
In 2002, AOL patented the OSCAR protocol. All packets sent via this protocol are encapsulated uniformly in FLAP containers holding information on packet size, channel, and sequential number in the packet sequence. This protocol has been out of use for long time. WIM is now used in its place.
The next milestone was the release of the first mobile ICQ version developed for the Symbian S60. To be fair, though, a beta-version for Palm OS had existed as early as 1998. Who remembers these handheld computers today?
The fifth version of the desktop client was launched a year later. Now users could organize voice chats. ICQ had become an even more versatile messenger. Voice communication was also improved, with help from Global IP Solutions.
In 2007, ICQ 6 was issued, with an interface made on Boxely, AOL’s proprietary XML/CSS engine.
In 2009, ICQ for Windows Mobile appeared. It remains the closest relative of today’s ICQ.
Between 2007 and 2010, ICQ made halting progress, practically being abandoned by AOL. In 2010, ICQ was purchased by Mail.Ru Group, and just a year later, we issued the seventh version, providing integration with Facebook, Twitter, Gmail, YouTube, Flickr, and Mail.Ru services.
After that, changes rolled in one after another. In version 7.7, it become possible to login with a phone number instead of a Universal Internet Number (UIN). So long, six-digit numbers! (UINs used to be rather expensive, by the way). Users could also now connect to the same account on mobile and desktop clients. A bit later, we made it easy to send photos and videos to friends from phones and Facebook.
From March 2012, ICQ was no longer officially advertised anywhere. Completely.
In late 2012, ICQ 8 appeared, with an option to call mobile and stationary phones. By the way, ICQ’s development team now includes a group working on VoIP: thanks to them, shifting from GIPS to WebRTC is more like upgrading to a stronger engine. Integration with the Russian social networks VKontakte and Odnoklassniki also appeared. The nest releases contained an improved file-sending function and a weather tracker.
Global ICQ changes began in 2014: brand new applications for various platforms, a new protocol, new possibilities, and a new user interface. This May, ICQ got end-to-end encryption of voice and video calls, a first in the world of messenger apps. This is ensured by ZRTP, a protocol that prevents data from being deciphered on your provider’s server, and ours.
In July 2016, the ICQ Stories function appeared. Now you can make small video clips or photo sets that can be viewed by your friends and subscribers in the common feed within 24 hours. Of course, reposts and comments are available.
In August 2016, ICQ included a built-in photo editor that allows users to add various effects to photos and video clips, including texts, patterns, and stickers. The program analyses geolocation, and offers dozens of thematic badges.
ICQ was integrated with neural networks that can process photos in one of dozens of picture styles with a single click, also a first for messenger apps. This functionality is implemented using Vinci, an API mobile application.
This September, we added functionality for 2D and 3D mask overlay during video chat. The application analyses images from your camera in real time and adapts the mask to head position and mimic on-the-fly. Facial-recognition technology from VisionLabs helps make it work.
Finally, the latest news from the world of ICQ technology: neural networks can now process your videos as well as your photos. This is done using integration with one of our lesser-known services, Artisto.
Today, ICQ is working on the following advances:
- end-to-end conversation history: all your messages will be available on all devices and clients, no matter where you log in;
- unlimited live chats: you can create chats with an unlimited number of participants, and join any public chat;
- short voice messages transcribed as text: you can say any phrase to ICQ, and it will recognize and transform your incoming or sent voice message into a text; this function is based on the same technology that powers Siri.
This is just a brief overview of the advancements and technologies we have launched over the 20 years that we have worked on the world’s first messenger. We hope that after another 20 years together, we will have even more fantastic things to remember.