I have online game for which I wrote a simple external anticheat in c#, it checks my game's process modules and handles for suspicious activity. And so it works like this:
- player starts launcher (anticheat) which then starts the game with its pid as parameter
- actual game (upon starting) reads that pid, locates anticheat path using this pid and fetches md5 hash of my anticheat
- If it doesn't match the game closes. Also if you close anticheat the game closes too.
So theoretically there's no way user could exit anticheat without exiting the game except he could for instance suspend anticheat process and then its of no use. What simple thing I could do to prevent this from happening? I was thinking - make a thread in the game that would check in a loop if anticheat process is suspended and exit if it is. Would that be a correct approach?
Is my architecture flawed or is it ok?