Difference between revisions of "Wiimms mkw-ana (tool)"
m |
(mkw-ana v0.13 released) |
||
Line 16: | Line 16: | ||
|- | |- | ||
! Current Version: | ! Current Version: | ||
− | | 0. | + | | 0.13, 2013-09-07 |
|} | |} | ||
Line 40: | Line 40: | ||
<pre> | <pre> | ||
− | mkw-ana v0. | + | mkw-ana v0.13 r1683 - 2013-09-07 |
− | |||
− | |||
− | |||
− | - | + | - Improved built-in help system. Type "mkw-ana help help" for details. |
− | - | + | - New option --ana=file: Opens a output file to store analysis data. |
− | |||
− | - | + | - New option: --ana-mode=list (short: --amd=list): |
+ | Print only the specified events to the analysis file. | ||
− | - New | + | - New options --hms and --hms-info to print relative timestamps in HH:MM:SS. |
− | |||
− | |||
− | |||
− | |||
− | |||
</pre> | </pre> | ||
;Old change log: | ;Old change log: | ||
<spoiler><pre> | <spoiler><pre> | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
mkw-ana v0.10 r1577 - 2013-06-01 | mkw-ana v0.10 r1577 - 2013-06-01 | ||
Line 120: | Line 95: | ||
- Windows only: Cygwin update to v1.7.20 2013-06-07. | - Windows only: Cygwin update to v1.7.20 2013-06-07. | ||
- Windows only: The needed Cygwin DLL files are now delivered too. | - Windows only: The needed Cygwin DLL files are now delivered too. | ||
+ | |||
+ | mkw-ana v0.12 r1644 - 2013-08-19 | ||
+ | |||
+ | - Bug fix: For aligment, the Mii data in user records is 0x4c bytes long, | ||
+ | 2 bytes more than the Mii file size (0x4a=74). | ||
+ | - Detection of new records: ITEM_CTRL, ITEM_LIST, ITEM_DATA. | ||
+ | - First item cheat detection, only visible for command RACE. It produce | ||
+ | false positives, but if the counter is >5, a cheater play with you. | ||
+ | - Command RACE: New output with head line, speed and item cheat infos. | ||
+ | - New option for command RACE: --print=list (-P list): | ||
+ | Print only the specified columns of the output table. A comma separated | ||
+ | list of keywords is expected: RANK, TIME, POS=X-POS+Y-POS+Z-POS, DIR, | ||
+ | SPEED=3D-SPEED,H-SPEED, STATUS, DRIFT=D-COUNT+D-CHEAT, | ||
+ | XDRIFT=DRIFT+D-MINTIME, ITEM=I-CHEAT, CHEAT=D-CHEAT,I-CHEAT TEST, FC, | ||
+ | MINI-FC and NAME. Also available: CLEAR, MIN, DEFAULT, MAX and ALL. | ||
</pre></spoiler> | </pre></spoiler> | ||
Line 128: | Line 118: | ||
<spoiler><pre> | <spoiler><pre> | ||
− | mkw-ana v0. | + | mkw-ana v0.13/x86_64 r1683 -- Dirk Clemens -- 2013-09-07 |
-------------------------------------------------------- | -------------------------------------------------------- | ||
Line 139: | Line 129: | ||
VERSION : Print program name and version and exit. | VERSION : Print program name and version and exit. | ||
− | HELP | H : Print help | + | HELP | H : Print help for commands and options. |
− | |||
− | |||
− | |||
− | |||
ARGTEST : This debug command accepts all kinds of parameters and | ARGTEST : This debug command accepts all kinds of parameters and | ||
prints one line for each parameter or option. | prints one line for each parameter or option. | ||
Line 164: | Line 150: | ||
only for MKWii. | only for MKWii. | ||
+ | SILENT | SIL : Iterate and analyse the source files, but print nothing. | ||
CLIENTS | C : List all clients. | CLIENTS | C : List all clients. | ||
USERS | U : List all users. | USERS | U : List all users. | ||
Line 197: | Line 184: | ||
The impact is command dependent. | The impact is command dependent. | ||
-A --allow-all Usually commands accept only options with impact to the | -A --allow-all Usually commands accept only options with impact to the | ||
− | command. All other options fire | + | command. All other options fire a syntax error. But if |
--allow-all is set, all commands accept all options. | --allow-all is set, all commands accept all options. | ||
+ | This makes changing the command of a long command line | ||
+ | without removing useless options easier. It also helps to | ||
+ | override wrong option permissions. | ||
--de Use german names. | --de Use german names. | ||
--old Use old implementation if available. All previous --new | --old Use old implementation if available. All previous --new | ||
Line 211: | Line 201: | ||
load of team files. Multiple usage is possible. | load of team files. Multiple usage is possible. | ||
--origin x,y,z Define an alternative origin for positions. | --origin x,y,z Define an alternative origin for positions. | ||
+ | --rel Print timestamps as seconds relative to the beginning. | ||
+ | Dependent of option --long the formats are: 'SSSSS', | ||
+ | 'SSSSS.s' or 'SSSSS.sss' | ||
+ | --rel-info Like --rel, but reset the origin whenever a reference time | ||
+ | is defined in the info file. | ||
+ | --hms Enable relative time stamps Like --rel, but print them in | ||
+ | HH:MM:SS instead in seconds only. | ||
+ | --hms-info Short cut for '--rel-info --hms'. | ||
+ | --ana file Open a log file and dump text lines for further analysis. | ||
+ | The first word of each line classified the output type. If | ||
+ | first character of 'file' is a '+', append data to an | ||
+ | already existent file. If the filename is only '-', then | ||
+ | dump to stdout. | ||
+ | --ana-mode list Print only the specified events to the analysis file. | ||
+ | --amd is a short cut. A comma separated list of keywords | ||
+ | is expected: CHEATS=IT-CHEATS, XCHEATS=CHEATS,IT-XCHEATS, | ||
+ | ITEM, EV-DLEN, EV-ALL-DLEN, EV-NAME. Also available: | ||
+ | CLEAR, DEFAULT and ALL. If flag SINGLE is set, repeat | ||
+ | count support is disabled. If flag FLUSH is set, the | ||
+ | output is flushed for each line. | ||
+ | Command specific options with common description: | ||
− | |||
--adjust float Adjust time stamps of the network dump by adding 'float' | --adjust float Adjust time stamps of the network dump by adding 'float' | ||
Line 277: | Line 287: | ||
'mkw-ana test' for a list of stages or use the dumps to | 'mkw-ana test' for a list of stages or use the dumps to | ||
identify stage names. | identify stage names. | ||
+ | --xevent Support the XEVENT record type. It is an overlay over the | ||
+ | ITEM and EVENT records. --xeve is a shortcut. The option | ||
+ | is automatically set, if --type or --TYPE call the XEVENT | ||
+ | record. | ||
-t --type list Dump UDP packets only, if at least one record of the | -t --type list Dump UDP packets only, if at least one record of the | ||
packet match the entered record list. | packet match the entered record list. | ||
Line 289: | Line 303: | ||
timestamp and client info are not printed. All previous | timestamp and client info are not printed. All previous | ||
--long are canceled. | --long are canceled. | ||
− | -l --long This option is relevant for single line dumps. | + | -l --long This option is relevant for single line dumps. Usually the |
time format is printed as 'MM:SS.s' to keep the lines | time format is printed as 'MM:SS.s' to keep the lines | ||
small. If set once, 'HH:MM:SS.s' is used. If set twice, | small. If set once, 'HH:MM:SS.s' is used. If set twice, | ||
'HH:MM:SS.sss' is used. All previous --brief are canceled. | 'HH:MM:SS.sss' is used. All previous --brief are canceled. | ||
− | -- | + | --list Print a list of events instead of a summary. |
− | |||
− | |||
− | |||
− | |||
-1 --one-line Print the hexdumps as one line for each record. This makes | -1 --one-line Print the hexdumps as one line for each record. This makes | ||
the dumps horizontal very large, but it is good for | the dumps horizontal very large, but it is good for | ||
Line 308: | Line 318: | ||
empty line between packets. | empty line between packets. | ||
-a --ascii Append an ASCII character dump behind the hexdump. This | -a --ascii Append an ASCII character dump behind the hexdump. This | ||
− | option is ignored if using --one-line. | + | option is ignored if using --one-line or --sep-lines. |
-n --native If set, some known values are printed in native format | -n --native If set, some known values are printed in native format | ||
instead as simple hex number. If set twice, some other | instead as simple hex number. If set twice, some other | ||
Line 326: | Line 336: | ||
POS=X-POS+Y-POS+Z-POS, DIR, SPEED=3D-SPEED,H-SPEED, | POS=X-POS+Y-POS+Z-POS, DIR, SPEED=3D-SPEED,H-SPEED, | ||
STATUS, DRIFT=D-COUNT+D-CHEAT, XDRIFT=DRIFT+D-MINTIME, | STATUS, DRIFT=D-COUNT+D-CHEAT, XDRIFT=DRIFT+D-MINTIME, | ||
− | ITEM=I-CHEAT, CHEAT=D-CHEAT,I-CHEAT | + | ITEM=I-CHEAT+I-COUNT+I-SUMMARY, CHEAT=D-CHEAT,I-CHEAT, FC, |
− | + | WHO=MINI-FC+NAME. Also available: NONE, MIN, DEFAULT, MAX, | |
+ | ALL. | ||
--min-race num This is a statistic option: If a Grand Prix (single or | --min-race num This is a statistic option: If a Grand Prix (single or | ||
Line 337: | Line 348: | ||
--log file Log into the file using the same output as command LOG. If | --log file Log into the file using the same output as command LOG. If | ||
first character of 'file' is a '+', append data to an | first character of 'file' is a '+', append data to an | ||
− | already | + | already existent file. If the filename is only '-', then |
+ | log to stdout. | ||
--md file Create a MakeDoc script with results after each race. | --md file Create a MakeDoc script with results after each race. | ||
--mdx file Create a MakeDoc script with results after each race. Same | --mdx file Create a MakeDoc script with results after each race. Same |
Revision as of 12:07, 7 September 2013
File:Wiimms-SZS-Tools.png | |
Author: | Wiimm |
---|---|
Operating Systems: | Linux (i386,x86_64), Windows (Cygwin). |
Software Type: | Mario Kart Wii network traffic analyzer |
File Formats: | PCAP 2.4 (tcpdump), bzip2 compression, BMG (text). |
Current Version: | 0.13, 2013-09-07 |
The tools mkw-ana is a new project by Wiimm to analyze the network protocol of Mario Kart Wii.
Intention
In November 2012, Wiimm decided to analyze the network protocol of Mario Kart Wii. The main goal was to discover online cheaters. Another goal is to set up his own server if any time Nintendo will shut down its servers.
So the main feature is to dump the packets of a tcpdump (done by tcpdump or wireshark) in a user-friendly format. After first experiments, it becomes also a live racing statistic tool.
Terms and definition
The Tool
Change log
mkw-ana v0.13 r1683 - 2013-09-07 - Improved built-in help system. Type "mkw-ana help help" for details. - New option --ana=file: Opens a output file to store analysis data. - New option: --ana-mode=list (short: --amd=list): Print only the specified events to the analysis file. - New options --hms and --hms-info to print relative timestamps in HH:MM:SS.
- Old change log
Built-in Help
Let's start with the built-in help as an overview about the tool:
General Description
The tool started as simple hex dumper reading network dumps in PCAP format. In the first phase of the tool, the textual dumps of wireshark and tcpdump were much better. But after only a few days, the tool learned to handle records, clients, users, friend codes and Miis. From this moment the tool was better to analyze the Mario Kart Wii traffic.
Now, mkw-ana split the traffic into records and scans some data to detect stages of the online meeting. Stages are for example room, prepare race, count down, racing and end of race. It is able to separate races into events (grand prix and team rand prix) and to calculate racing tables. Racing data can also be exported to support live statistics.
At the moment there are three different kinds of hexdumps. All 3 are able to dump in one line mode to have large tables. Tool less is here a very good tool for vertical and horizontal scrolling. The stages are includes into the dump as comment lines. The dumped records can be filters by sending, receiving, proxy, record types, stage types and packet length. It is also possible to select the dumped bytes by indices and ranges.
Another feature is, that mkw-ana can read comment files. If making videos of the dumped meetings, you can write such comment file. Each line starts with a timestamp followed by a comment. Virtual Dub is a good tool for this job. Then you must synchronize the comment file with the network dump. The start of the first game ("GO" in the video) is a very good point for synchronization. Here is an example of a comment file (in german):
>2012-12-05 19:10:39.745 - 12:22.792 0:00:00.000 Video Start 0:12:22.792 Rennen 1.1, GO! 0:12:54.123 Tinti wird angekündigt, T=0:31.322 0:14:17.924 Power wird angekündigt, T=1:55.120 0:15:33.633 Blitz schlägt ein, T=1:35.326 ...
- Notes
- The first line is the real time of the start of the race minus the video time stamp. This is the synchronisation. An synchronisation can be done multiple times.
- The line with video timestamp and comment follow. The focus of the comment change as the point of interest.
- The name of the comment file must be the same as the network dump, but it must have the extension ".info" instead of ".eth".
???
Dumping Data
Options
Download
- You can find the latest and some old distributions here
- Content
- Binaries for:
- Linux i386
- Linux x86_64
- Cygwin/Windows (Needed Cygwin[1] DLL files are delivered. Best is to install a Cygwin system).
- Some scripts as examples.
- Some BMG text examples.
- Some doc files.
- Sometimes I upload single tool updates for testers
- And remember
- It is an alpha distribution and and only minimal support will be given at the moment.
Capture the network data
First you must capture the network traffic of the Wii. Therefore you must redirect it to a PC running a capture software. There are 3 general ways to to this:
- If you have a manageable switch, enable port mirroring and send all Wii traffic to a PC.
- Use your PC as router.
- Use old network hubs (not switches). A hub will mirror all traffic of all ports to all others; it's just a multi port repeater and will slow down your network.
Use a software like tcpdump or wireshark to capture the data. Best is to save the captured data directly to a file or to send it to other commands like mkw-ana for a live analysis.
It's also possible to save the data to a file and to make a live analysis at the same time. Use the following command pipe:
tcpdump -w- -U -i eth1 host wii | tee save.dump | mkw-ana ...
It is important to filter the data by host ip_or_name, because foreign traffic interfere the wii traffic analysis and will have curious side effects.
If using wireshark, save the dump to a file and use the following command for a live analysis:
mkw-ana --follow DUMPFILE ...
Live Statistics
mkw-ana can scan the network traffic in real time and can produce makedoc or php data files. Together with ssh and an cgi script, a live statistic is created. Live means that the tables are updates 2-5 seconds after the race have finished.
How it works
The whole job is done by 3 processes:
-
First, you must capture the network traffic like described above. Then use one of the commands:
... | mkw-ana log --md DATAFILE ... | mkw-ana log --php DATAFILE mkw-ana --follow DUMPFILE log --md DATAFILE mkw-ana --follow DUMPFILE log --php DATAFILE
- Each time, a new DATAFILE is written, it must be transferred to the web server. A script using shh, sftp scp or ftp within an endless loop will do this job automatically.
- Last not least, a CGI or PHP script running at the web server must read the data files to serve a html-page to the visitors.
To see, what live means, visit the live statistics on Wednesday or Thursday between 19:10 and 20:30 CET (Central European Time).