You are reading:
Under the Surface of Azeroth:
A Network Baseline and Security Analysis
of Blizzard's World of Warcraft


Upgrading the World of Warcraft Client

Upgrading the World of Warcraft client is much more involved than upgrading the launcher. The client is a complex multi-gigabyte compilation of graphics files, sounds, video, and local gameplay logic. Since the client's total disk space amounts to nearly two DVD-ROMs worth of material, downloading and replacing the entire client for each update is impractical. To address this challenge, Blizzard has created an upgrade process that only upgrades the sections of the programs that have been modified. Even with this efficient upgrade process, significant World of Warcraft client upgrades can sometimes be hundreds of megabytes in size.

To complicate things further, every client must run exactly the same version of software, without exception. An upgrade to the World of Warcraft client must be executed at the same time for every user, across an entire area. Every time Blizzard introduces a patch, significant bandwidth is used while every World of Warcraft player upgrades their client. Since these upgrades happen simultaneously, much of the upgrade activity takes place over a short period of time. This upgrade process has to happen quickly; there's no opportunity for a gradual rollout process or staged service deployment.

If you can imagine thousands of end users requesting hundreds of megabytes of information simultaneously, then you'll understand why Blizzard has introduced a well-known peer-to-peer distribution system to upgrade the World of Warcraft client. Instead of every end user contending for a limited amount of bandwidth on a small group of servers, the upgrade process uses the BitTorrent protocol to distribute the file download over hundreds of available peers. The BitTorrent protocol pulls a little bit of the upgrade over a large area, making the download process more efficient, more bandwidth-friendly, and ultimately available to more people simultaneously.


Retrieving the Blizzard Downloader

Once the startup process recognizes that the local workstation is running an older version of the World of Warcraft client, it immediately begins downloading a file from us.version.worldofwarcraft.com via HTTP over TCP port 80. This file download isn't huge, but it does average about 500 kilobytes of downloaded information.

This is a summary of the beginning and end of the file transfer. The requested filename is embedded in the GET command found in frame 4.


The filename requested in frame 4, WoW-2.1.0.6729-2.1.1.6739-x86-Win-enUS is actually a compressed archive of files. Blizzard's proprietary MPQ compression format is often used to combine many files together and compress them for transfer across the Internet. In this example, the size of this single downloaded file is approximately 482 kilobytes, but after uncompressing the size inflates to 790 kilobytes. This simple compression mechanism saves time and bandwidth for both World of Warcraft players and Blizzard's file servers.

In this example, the single compressed file archive actually contains two separate files. The majority of the archive is an executable called the Blizzard Downloader. Once uncompressed, our filename is WoW-2.1.0.6729-to-2.1.1.673-enUS-downloader.exe and it's 790 kilobytes in size. The second file in the archive is named prepatch.lst, and the size of this file is a paltry 116 bytes. Even though it's tiny in comparison to the Blizzard Downloader, this small text file is critical to the upgrade process. The prepatch.lst file contains two lines of text that appear to contain the control information for the archive:
extract WoW-2.1.1.6739-to-2.1.2.6803-enUS-downloader.exe
execute WoW-2.1.1.6739-to-2.1.2.6803-enUS-downloader.exe
The contents of this file are relatively straightforward. This control file shows that the first step is the extraction of the Blizzard Downloader from the archive, and the second command is the execution of the Blizzard Downloader application.