Home

Awesome

Introduction

This is a collection of tools to analyse the Runes of Magic network protocol; however, the tools are quite generic which means you should be able to use them to analyse different data with minor adjustments.

protocol.xml

COntains the reverse-engineered protocol of Runes of Magic 6.0.5.2579.en - this is by no means complete, but it does provide enough to be able to understand how the game works.

mkdef

Using protocol.xml, capable of generating packet parsing/construction code and Python bindings per packet type.

romdump

Reads a tcpflow-written text output stream or a romproxy log file and decodes the stream using definitions from protocol.xml and optionally a sysname.csv file (see below)

romproxy

A proxy server which 'sits' between the game client and the actual game servers, with the purpose to log all traffic in a custom format which is far easier to process than packet dumps.

License

Everything is licensed using the GNU Affero Generic Public License version 3 - make sure you understand it before using this work. Furthermore, ensure you read and understand the terms and conditions of Runes of Magic before applying any of these tools to the actual game itself.

Building

You'll need libxml2's development package (libxml2-dev on Debian-based distributions) to build this. It's only been tested on Linux-based hosts.

Creating sysname.csv for use with romdump

You will need https://github.com/zhmu/romdb; clone it to ~/romdb and:

$ cd ~/romdb/tools/fdbtool
$ make
$ cd /tmp
$ (path to)fdbtool (path to)data.fdb
$ cd ~/romdb/scripts
$ cp lib/config.sample.py lib/config.py
$ cd /tmp/data
$ $EDITOR ~/romdb/scripts/stringdb2csv.py

And put the following in there:

#!/usr/bin/python3

import sys, os
sys.path.append(os.path.join(os.path.dirname(__file__), 'lib'))
import romdb

if len(sys.argv) != 2:
	print("usage: %s string_....db" % sys.argv[0])
	sys.exit(0)

fname = sys.argv[1]
strings = romdb.read_stringdb(fname)
for k, v in strings.items():
	if k.startswith('Sys'):
		print("%s,%s" % (k, v))

Then generate sysname.csv by:

$ chmod +x ~/romdb/scripts/stringdb2csv.py
$ ~/romdb/scripts/stringdb2csv.py string_eneu.db > sysname.csv

Configuring the game client

The official Runes of Magic client, appropriately named Client.exe, has several configuration options which are useful when performing analysis.

Using a different server

You can alter the IP address of the server to use by editing 'runedev.ini' in the game folder and setting the following options:

[Server]
IP=(your IP address here)
Port=21002
RunewakerInsideTestServer=1
DisplayMaintainMode=1

[Debug]
SkipVersionCheck=1

Skipping the version check

Create a shortcut to Client.exe with NoCheckVersion as argument