Hacker News new | ask | show | jobs
by ayane_m 1810 days ago
I don't understand why anti-cheat requires invasive software. Encryption can be used to communicate with the server, and the server can then authenticate the client's state. The application itself can use tokens to prevent the user from prying in its address space via a rigged kernel.
7 comments

Not sure why you are being downvoted for not understanding and asking a question to fix that, as the matter is relevant to the post you replied to...

Essentially anti-cheat code needs that level of access to detect/circumvent cheat enabling code that has that level of access - it is a protracted arms race. There is money and kudos to be made through gaming, so people will cheat by any means necessary.

You can't remotely prove the entire state of the client unless you entirely control the client, and no current OS can offer the level of sandboxing required to offer that assurance. If you can't 100% trust the state of the client then no transport level encryption and such will fix that - you are just guaranteeing the faked data is transported safely at that point.

Of course that level of control being required for single player games is much more dubious, so there is a grain of truth in the more tin-foil-hat sounding theories about identity tracking & such on the part of the publishers.

Anti cheat is the excuse used to collect saleable or exploitable private data, and as a mechanism to perpetuate walled gardens. Centralizing accounts and identities to enforce ban lists, associate payment methods, target advertising, enable microtransactions, and so on are the reason for the security theater.

Rent seekers will extract as much cash and time from players as can be gotten away with.

Server level ban lists and competent game referees and volunteers could be a powerful answer to the problem, but there's not a lot of incentive to innovate away from rent seeking, as the big studios and stores crush any threats to their success.

Server level ban lists and competent game referees could perhaps solve this for high level play, but there’s no way you could scale that out so that the average player of a first person shooter doesn’t have to deal with cheating. That said, I’m not really a fan of things like Vanguard if for no other reason than it’s not clear that they have helped much beyond making cheats somewhat more expensive but not enough to be much rarer.

It’s also worth noting that multiplayer games without anti-cheat have had centralized accounts and microtransactions for a long time, so I’m not sure I understand how the anti-cheat measures are furthering those.

Ideal solution is to make "cheating" impossible by design rather than by trying to ensure trust.

Don't send the data player is not supposed to know. Don't trust clients to just tell the server what happened. And - I realize this is extremely controversial - ideally don't design games on pure reaction speed, visual acuity and mechanical dexterity where a sophisticated enough machine would consistently and unpreventably beat any human.

I believe we should be able to compete with bots just like we're able to compete with humans - and not because bots are handicapped and constantly toss coins deciding if they want to let the puny meatbag win.

I'm curious if there are any special tournaments where "cheats" are encouraged and even required, not prohibited. Would love to see a FPS where you have all the software aid you can think of. Texture hacks become enhanced vision aids (server may toss a coin and enforce camouflaging by not sending any information, though), auto-aim is smart munitions (so we don't compete on whoever has the faster hands or a better mouse -- see, it's already a competition of machinery!), last-seen markers and sound source visualization are tactical HUDs, and if you want some other feature you're free - as your competitors - to implement it. Naturally, if that's based on an existing game that would require heavy re-balancing of its rules (e.g. nerf of one-shot-kill weapons or buff for supports so in a teamplay they can save their teammates from such weapons). That would be a whole next level e-sports, true to the name.

> And - I realize this is extremely controversial - ideally don't design games on pure reaction speed, visual acuity and mechanical dexterity where a sophisticated enough machine would consistently and unpreventably beat any human.

What games, other than turn based strategy games or puzzle games, don't have the property you list here? And even then, you can absolutely cheat at chess. Like it or not, people want to play shooters online.

> What games [...] don't have the property you list there.

A game of almost any genre doesn't have to be designed purely on those neural and mechanical skills.

(And puzzles are actually a bad example, as many can be unimaginatively played by a machine, and machine typically wins in terms of the computing speed. Unlike a complex strategy game where bots don't necessarily dominate human players.)

My previous comment had even hinted at how a FPS could be designed to not depend on one's eyesight difference, sleight of hand or gaming chair performance. If everyone has a perfect aimbot by design, tactics and teamplay (if that's a team game) becomes a deciding factor in a shooter. If everyone has a helper AI that alleviates mundane clicking you don't have to put your mouse on fire doing that 9000 APM micro - the actual strategic thinking and planning ("macro" rather than "micro") makes more important in winning a tower defense or RTS game.

I'd wish I could just write a whole implementation idea, but I'm no game designer. I just believe that things could be designed and balanced in such a way. I can be wrong, but I don't think it's proven yet (given the modern status quo of "don't you dare think of any aids or tools but those game designers have very very explicitly allowed").

It's just that most games out there were never designed for this so their gameplay becomes extremely unrewarding, as there would be a huge imbalance if everyone is mechanically perfect. Which is probably why there is no cheaters' competitions.

Maybe I'm thinking about a different genre, something like first-person-shooter-but-not-FPS?

I wonder if more low tech solutions could work. What if you added random short screen blackouts or unexpected lags and see if perfect input still comes through. Anything that a human would react to but a bot won’t.
If your shooter intentionally drops frames or adds network or input lag, nobody is going to want to play it. This is the genre that generates most of the consumer demand for > 60 Hz refresh rate monitors.
This is so incredibly wrong, I'm not sure why you come to a forum and lie openly like this. Anyone who has reversed modern anti-cheats will disagree with this statement.
Maybe they take advantage of it but no it's not just an excuse. 10+ years ago hacking in games was very common and annoying.
This is true also for other SW. Now everybody has telemetry and services running with elevated rights. I think the future is to treat these programs as malware.
This is incredibly wrong. One of the main USPs of the service that I'm working on right now, fastcup.net, is a third-party anticheat. People use our service exactly because they trust our anti-cheat to provide a better value than what CS:GO has by default.
"Thanks" to competitive gaming involving real money incentives these days, cheats have reached the level of custom PCIe cards directly accessing kernel memory via DMA.

So a kernel rootkit is the bare minimum to try and detect these attacks, preventing them isn't even on the table any more.

In the distant future, you might be able to bypass it with hardware-authenticated homomorphic encryption, but that's still way off.

The client can just lie about its state.

The only solution that is deterministic would be to move all rendering server-side. You could guarantee a fair match as long as participants are within some reasonable distance to the server.

Note that this has other massive benefits if you can build for it natively...

> server can then authenticate the client's state

I'm sorry, but how exactly would it work? Do you mean that the server would authenticate the whole memory of the client's process, a few hundred megabytes at least, in order to make sure that there's no code that switches alpha of the wall textures to 0 every 5th frame, for example?

That has always be the promise behind Trusted Computing, yes. Maybe in another 20 years Intel will actually deliver a reliable implementation of it.
Doesn't require it. Anticheat for multilayer could all be done server-side, by peers (started by vote), on demand or by peers on demand; all by just checking the player could do what their client claimed to do.

It's just event logging and replay.

But checking drivers and secure connections is easier.

Event logging is irrelevant if you have incorporated certain optimizations into your game.

For instance, many forms of netcode necessitate revealing slightly more information to players than you otherwise would want to. The world coordinates of player footstep sounds is almost certainly some information flowing across the network.

All you would need to do is intercept this information on the network and view it on an entirely decoupled system in a 3d coordinate space - potentially one synchronized to your player character using similar snooping tactics. Valve has done a pretty good job at making this harder with asymmetric encryption, but its still something the client can ultimately decode or otherwise you wouldn't hear shit during a multiplayer match.

Trying to lock down/validate the actual gamer's PC is a fool's errand. Just go back to first principles in information theory to see what a joke this is. If a certain fact made its way to a player's computer (or simply their home network), you should assume that they know it in the most adversarial way possible and model for that outcome. Obfuscation is just playing yourself in the long run.

How does checking if the client claimed to do something possible answer questions about if the player had the skill to actually do what they could have possibly done?
Because many cheaters do things which are impossible. This is low hanging fruit that we're told we need a ring0 driver to have access to EVERYTHING. Stupid things like tracking other players through walls. Still common because it's so damned easy. You play back their events and you see the cheater always knows where to go, where to hide. There are also exploits. These can all be unit tested away.

But there are cheats like kickback compensation, hitbox tracking. You can apply statistical models and find unlikely consistency but it's hard to say for certain.

How do you "use tokens" to prevent prying in its address space?