Botting WoW in 2019

First, a bit of knowledge. The most handy way to make a bot is to read directly into the game's memory to retrieve informations about the game state (health point, position of our character in the world, targets etc). Having all these ressources available to us makes it easy to take decisions.

s_CurrentTarget = 0x00BD07A8,

Example of an old hexadecimal memory offset for getting current target on WoW

However game designers who are rightfully concerned about people reading their game's memory like an open book, try to hide these informations to make the job harder. This can drastically increase the amount of time required to reverse and index everything.

On top of that, they made tools to track down any program trying to read their process' memory, as they have access to other processes running in parallel of their game.

Altogether it's very risky to use such programs nowadays so I don't think people will put time into developing these kind of bots for major franchises like Blizzard games anymore. Cheaters are also getting banned for it consistently.

Now the interesting part, there are less intrusive ways of getting the game's informations we need. For example by reading and analysing directly the pixels of our screen, that are public to every program.

It becomes especially powerful with games like World of Warcraft where we can code Add-ons to register game events and display anything we want on the screen.

An example of UI display for an external bot

The main thing you cannot do on WoW add-on programming interface is casting spells - that would allow you to code a bot within the game basically. But instead you can use the logic of the Add-on to display squares of distinct colors at precise location on the screen. Our external program then reads the colors and performs relevant actions : mouse clicks and keystrokes.

This works for sure and is hardly detectable, but it's only useful for WoW. We can go a step further and use image recognition algorithms to find and compare specific shapes on our screen.

Screenshot taken at the moment it detects the spell icon on screen

In this compelling example, you can see the cast bar of my target on the right part, and on the left part the "pattern" I was trying to find (a spell icon). The screenshot is taken when it detects a decent match and as you can see the cast is at 0.01%. At this time, our program can send an input corresponding to our interrupt keybind. There we have our kickbot ready.

This method can be used to do anything that would require locating an element on the screen and sending mouse or keyboard inputs. The only thing we need to effectively do is delimiting our search area to avoid false positives.

Needless to say I don't use any cheat myself and I will not disclose the code to anyone. I just made it to prove a point, there are undoubtly cheaters ruining our fun in the game even today. These hand-made bots, which do not have a proper signature that are detected by Blizzard, can only be caught through reports and investigations.

It's then our responsibility to create community tools like deck trackers for card games and not to abuse its fascinating power.