Live data from Hacker News

Reverse engineering Call of Duty anti-cheat

ssno.cc

71–80 of 223 posts

Re: Reverse engineering Call of Duty anti-cheat

#71
post #54

Earlier quoted context omitted.

In addition to what others said, I'd simply point out that all 'ret' does on x86 is pop an address off the top of the stack and jump to it. It's more of a "helper" than a special instruction and it's use is never required as long as you ensure the stack will be kept correct (such as with a tail-call situation).

`ret` also updates the branch predictor’s shadow stack. Failing to balance `call` and `ret` can seriously impact performance.

If anyone else is looking for more information on this, like I was, this stack is called the “return stack buffer”.

Re: Reverse engineering Call of Duty anti-cheat

#72
post #58

Earlier quoted context omitted.

Most hackers in the space start out at the freshman year or middle school age, my dude. Was the case 20 years ago.

Usually by the time you are in working age people have outgrown the e-ego waving contest to be incentivized to cheat in an inconsequential video game* *with some exceptions.

you're on a website called "Hacker News", man. you think the startup game is less of an "e-ego waving contest"?

Re: Reverse engineering Call of Duty anti-cheat

#73

As long as you can read and write to memory, you'll never stop cheating in multiplayer games.

Sure, and that's why there's more and more "trusted" hardware to try and get computers to a place where their users cannot read and write to or from their own memory.

Those kinds of things tend to be their own undoing.

You added a security processor to your hardware at ring -2, but hardware vendors are notoriously bad at software so it has an exploit that the device owner can use to get code running at ring -2. Congrats, your ring 0 anti-cheat kernel module has just been defeated by the attacker's code running on your "trusted" hardware.

But in the meantime you've now exposed the normal user who isn't trying to cheat to the possibility of ring -2 malware, which is why all of that nonsense needs to be destroyed with fire.

Re: Reverse engineering Call of Duty anti-cheat

#74
post #21

Cheating in multiplayer games has become such a huge problem, it has destroyed trust across every major FPS. I am a long time CS player, but I did briefly play one of the new CoD games, before they went crazy with Nicki Minaj skins and bong-guns. A person was so convinced I was cheating, they started doing OSINT on me while still in a match, and they found my old UnKnOwNcHeAtS account as some kind of proof that I am…

EFT also uses kernel level anti-cheat “Easy Anti-Cheat” (as invasive as what valorant uses (vanguard)). Don’t know why ETF implementation sucks. I’ve been on CS since 1.3, and i think their system is pretty good. Sure you get cheaters sometimes, but it’s not that bad, maybe I’ve been pretty lucky.

Remember having to install "Cheating-Death" to get on some CS 1.x servers? Always wondered what it even did to your computer.

Re: Reverse engineering Call of Duty anti-cheat

#75

A 2-year legal battle with Activision to overturn a false permanent ban. Activision showed up with zero evidence of cheating and lost: https://antiblizzard.win/2025/01/18/my-two-year-fight-agains...

The exact same thing happened to me with League of Legends. I was inexplicably banned for cheating, despite never having done any such thing (and despite regularly playing on three accounts (this is fully permitted), the other two of which were not banned!) Their support people repeatedly said "we reviewed your case and the ban is correct", etc. all the while giving zero information about what I did so I could correct it. I have a couple of the rarest skins in the game, and have played thousands of hours since 2009. I only play ARAM, so the suggestion I was risking my account of great sentimental value by cheating at the most casual mode in the game is beyond ridiculous. Anyway, nothing in gaming has ever stressed me out more. I got unbanned solely because of a contact in the industry who had it looked into, and the ban was inexplicably lifted. I still play, but I think about the false ban almost every time, and League will probably be the last competitive multiplayer game I ever put any time towards. Part of me doesn't want to play it anymore because I dread that happening again. :(

Re: Reverse engineering Call of Duty anti-cheat

#76
post #21

Cheating in multiplayer games has become such a huge problem, it has destroyed trust across every major FPS. I am a long time CS player, but I did briefly play one of the new CoD games, before they went crazy with Nicki Minaj skins and bong-guns. A person was so convinced I was cheating, they started doing OSINT on me while still in a match, and they found my old UnKnOwNcHeAtS account as some kind of proof that I am…

fwiw, cheating in CS(GO) taught me x86 RE and low-level programming way younger than is usual. sophomore year of high school. I still recommend writing an HvH cheat to anyone that wants to get into proggin' -- you get a taste of both static and dynamic RE, memory-level programming, UI development, bare dxsdk (usually), a skid-saturated environment, sysadmin (if you try to set yourself up an uber1337 cheat page), and…

i learnt a lot about virglrender, spice, opencv and ocr (and a bit of python but that was the easy part) by making a cv pokemmo bot

Re: Reverse engineering Call of Duty anti-cheat

#77
post #51

Earlier quoted context omitted.

Signature scanning is just scanning for unique bytes from a compiled function that will remain consistent across builds. You search memory for those bytes and when you find them, you find the function you're interested in. Here's an example from some shellcode loader I wrote: https://github.com/exploits-forsale/solstice/blob/c3fc9a55c6...

Thanks for explaining. How do you identify such byte patterns that are likely stable across builds? Is it experimental - i.e., look at a few versions of the binary and check if it has changed?

You can actually usually get a pretty good starting point from just a single build, and only refine it once you find a build it breaks on. It's essentially just finding a unique substring. In my experience this almost always involves some wildcard sections, so the signature in the parent got lucky not to need them. I like to think about it as more of matching the shape of the original instructions than matching them verbatim.

To manually construct a signature, you basically just take what the existing instructions encode to, and wildcard out the bits which are likely to change between builds. Then you'll see if it's still a unique match, and if not add a few more instructions on. This will be things like absolute addresses, larger pointer offsets, the length of relative jumps, and sometimes even what registers the instructions operate on. Here's an example of mine that needed all of those:

  "48 8B ?? ????????",        // mov rcx, [rdi+000001D0]
  "48 85 C9",                 // test rcx, rcx
  "74 ??",                    // je Talos2-Win64-Shipping.exe+25EE729
  "E8 ????????",              // call Talos2-Win64-Shipping.exe+25E45F0
  "48 63 ?? ????????",        // movsxd rax, dword ptr [rbx+000005D0]
  "8D 70 FF"                  // lea esi, [rax-01]

Now since making a signature is essentially just finding a unique substring, with a handful of extra rules for wildcards, you can also automate it. Here's a ghidra script (not my own) which I've found quite handy.

https://github.com/nosoop/ghidra_scripts/blob/master/makesig...

Re: Reverse engineering Call of Duty anti-cheat

#78

Earlier quoted context omitted.

I got a false permanent ban as well. Despite the fact that cheating is damn near impossible on consoles, and the fact that I worked way too long to get to an absolutely mediocre rank (gold 1) on ranked play, and the fact that I had never even had a warning or complaint for any behavior whatsoever, they permanently banned me with no explanation. Unlike the blogpost, I just decided I would just never spend any money on…

>>Despite the fact that cheating is damn near impossible on consoles Unfortunately, aim assist devices for consoles are very widespread now and a big problem for competitive gaming. . >>I had never even had a warning or complaint for any behavior whatsoever That's the gold standard in the industry though, you don't warn(suspected) cheaters to not give them opportunity to adjust their tactics. Sorry you got caught by…

> That's the gold standard in the industry though, you don't warn(suspected) cheaters to not give them opportunity to adjust their tactics.

Is this supposed to do any good? The actual cheater is still getting a signal that they've been detected, because they get banned. Then they figure out how, make a new account and go back to cheating.

Meanwhile the normal user is both confused and significantly more inconvenienced, because their rank etc. on the account you falsely banned was earned legitimately through hard work instead of low-effort cheating.

Re: Reverse engineering Call of Duty anti-cheat

#79

Earlier quoted context omitted.

There are things like compiling a tail call as JMP func_addr.

Would you not have to use a jump instead of call for it to be a tail call at all- ie otherwise a new frame is created on each call

the call is still in tail position whether or not it reuses the stack frame. there are also more involved ways to do tail call optimization than a direct single-jump compilation when you leave ret behind entirely, such as in forth-style threaded interpreters

Re: Reverse engineering Call of Duty anti-cheat

#80
Needs to be a law against the taking away of product functionality after the sale, even if it's contractual/EULA. A ban should never take the game away from the owner, and in cases where it does then they need to be refunded (treble damages on top of license, lawyer, and court fees if it takes a judgment to induce the refund). Getting banned on Steam, say, in the sense that all of one's purchases are invalidated should be impossible legally. In cases where an account is prevented from login, items and inventory must still be accessible for trade as those represent real time effort put in by a paying customer. Want to enforce your code of ethics in a multiplayer game? Can't charge for the game or users legally have rights against bans, and bans must follow a proportionality continuum and you must have a human-attended cost capped (at license cost, and only on loss) appeals tribunal system with record.
Post reply on HN