Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Protection against automation

One of our next projects is supposed to be a MS Windows based game (written in C#, with a winform GUI and an integrated DirectX display-control) for a customer who wants to give away prizes to the best players. This project is meant to run for a couple of years, with championships, ladders, tournaments, player vs. player-action and so on.

One of the main concerns here is cheating, as a player would benefit dramatically if he was able to - for instance - let a custom made bot play the game for him (more in terms of strategy-decisions than in terms of playing many hours).

So my question is: what technical possibilites do we have to detect bot activity? We can of course track the number of hours played, analyze strategies to detect anomalies and so on, but as far as this question is concerned, I would be more interested in knowing details like

  • how to detect if another application makes periodical screenshots?
  • how to detect if another application scans our process memory?
  • what are good ways to determine whether user input (mouse movement, keyboard input) is human-generated and not automated?
  • is it possible to detect if another application requests informations about controls in our application (position of controls etc)?
  • what other ways exist in which a cheater could gather informations about the current game state, feed those to a bot and send the determined actions back to the client?

Your feedback is highly appreciated!

like image 953
Grimtron Avatar asked Sep 27 '08 08:09

Grimtron


2 Answers

I wrote d2botnet, a .net diablo 2 automation engine a while back, and something you can add to your list of things to watch out for are malformed /invalid/forged packets. I assume this game will communicate over TCP. Packet sniffing and forging are usually the first way games (online anyways) are automated. I know blizzard would detect malformed packets, somehting i tried to stay away from doing in d2botnet.

So make sure you detect invalid packets. Encrypt them. Hash them. do somethign to make sure they are valid. If you think about it, if someone can know exactly what every packet means that is sent back and forth they dont even need to run the client software, which then makes any process based detection a moot point. So you can also add in some sort of packet based challenge response that your cleint must know how to respond to.

like image 55
mattlant Avatar answered Oct 04 '22 20:10

mattlant


Just an idea what if the 'cheater' runs your software in a virtual machine (like vmware) and makes screenshots of that window? I doubt you can defend against that.

You obviously can't defend against the 'analog gap', e.g. the cheater's system makes external screenshots with a high quality camera - I guess it's only a theoretical issue.

Maybe you should investigate chess sites. There is a lot of money in chess, they don't like bots either - maybe they have come up with a solution already.

like image 24
Karl Avatar answered Oct 04 '22 21:10

Karl