This project occupied me for quite some time, late 2003 me and a friend started working on a statistics tool for internet
texas hold'em.
The idea was to create a software which would take all hands you played, break them down, store them in a database and
then produce reports, graphs and statistics.
When I started working on the parsing of hand history data I also looked at some existing software for internet poker.
There was at the time one or two odds calculators wich calculated outs and pot odds for poker hands.
I reverse engineered them and saw that they in fact used memory reading to get the information in real time. I wondered
why this realtime aspect had not yet been introduced in any statistics application and decided that we must try that out.
It became a great sucess and we got a really good response to our first release. Everyone was exited about this new kind
of poker software and there was even talk about cheating and that PokerOffice was the end of internet poker.
Since the first version I worked on 80 plus upgrades to the software, we released two new major versions during my time
at the company and had over 30 000 users when I left in 2009. Take a look at
www.pokeroffice.com for the PokerOffice home page.
Working with this complex and advanced software I got the opportunity to specialize in many aspects of software development.
I was responsible for designing and implementing almost all steps in the product cycle from system design and development,
pacakaging, product installation, licensing and the busniess system handling customers and sales.
Database design and implementation in Java with McKoi and MySQL.
Reverse enginering of third part poker clients using debuggers, memory readers, decompilers, dependency walkers,
API hooks and other tools.
An API of the poker games complete state in real time was required to build our application.
GUI design and implementation in Java. Most common controls available is used in PokerOffice and I have also created
many custom controls.
API hooks, API spies, memmory scanners and even screen scraping routines based on the result from the reverse enginering.
Message hook in C++ to control what keyboard and mouse actions is let through to the poker clients.
C++ to Java connection using JNI. The C++ hooks and memory reading etc is best done in native code and the rest (GUI, text parsing, database,
calculations etc) in Java.
Copy protection system using Java byte code obfustaction (RetroGuard) and a custom built source code encryption system with a sub-classed
class loader to add extra security.
Note: it took the cracking/hacker community three years and many tries to break our copy protection. When they did we easily scaled the code
to use online licenses which still works good.
Packaging and product installation using NSIS (Nullsoft Scriptable Install System) to set up all copying of files and registry
editing etc.
Business system in PHP using MySQL databases on a Linux Apache server, integration of several affiliates and Google analytics.
Online licensing system with reoccuring fees using a client part in Java and a distributed server part in PHP/MySQL.
A syncronized worldwide network of HTTP/MySQL servers is used for best redundance and minimal downtime.
Setting up and designing a SVN versioning system for the developers.
AETBot and ArenaHelper (2009-present)
These projects goes deeply into the realm of reverse enginering in general and third part memory handling in detail. The actual proof of concept is
that I want to show that it is possible to build a very advanced bot which can not be detected by Bilzzards anti cheat detection, aka Warden. Most bot
are created with code injection and/or api hooks. Both are fairly easy to detect since they modify the process in some way or an other. There are of course
a lot of different ways to hide that you inject or hook, but, then there are always ways to detect the hiding and so the battle between software developers and hackers continue.
My approach is instead built on memory reading only. All interaction with the process is done by simulating mouse and keyboard so there is no way to discern the bot from a real human user.
Reverse engineering with Olly dbg and IDA Pro, to get the game state and objects from the WoW process.
Memory reading and bot AI was coded in C++
Dialog based GUI created with MFC.
Simulation of human like mouse and keyboard actions using AutoHotkey and C++
Message hook capturing mouse and keyboard to be able to filter or manipulate the input.
Online license system built in C++, PHP and MySQL.