Live data from Hacker News

Reverse engineering Call of Duty anti-cheat

ssno.cc

11–20 of 223 posts

Re: Reverse engineering Call of Duty anti-cheat

#11

I have been doing a bit of reverse engineering on a popular Horde/Alliance based MMO game and it follows almost the exact same steps (including the FNV32 export hashes). It almost seems very similar as I have seen it employ very similar tricks. I wonder if it's packed using the same protection?

would make sense to reuse warden for Activision IP post merge

Re: Reverse engineering Call of Duty anti-cheat

#12
post #9

Earlier quoted context omitted.

Dang, I'm old. I was going to say hang out in Gamedeception, but apparently it's been gone for years! greetz to readers of Unknowncheats, cs.rin.ru, etc.

I used to frequent cs.rin.ru for all things non-steam back when I operated non-steam CSS servers. UnknownCheats is also absolutely amazing for cheat development. Back when I was writing undetected kernel cheats for my own experimentation purposes, I learned so much there.

I made my lifelong best friends hosting non-Steam servers, and writing the first cracks in Lua to generate fake Steam IDs from IP addresses.

Re: Reverse engineering Call of Duty anti-cheat

#13

I have been doing a bit of reverse engineering on a popular Horde/Alliance based MMO game and it follows almost the exact same steps (including the FNV32 export hashes). It almost seems very similar as I have seen it employ very similar tricks. I wonder if it's packed using the same protection?

The source 2 engine also uses fnv to hash the schema (basically entity properties)

Re: Reverse engineering Call of Duty anti-cheat

#14

I'm very curious about the jump obfuscation. Maybe somebody who's done more reverse-engineering can answer this for me: a) Are unconditional jumps common enough that they couldn't be filtered out with some set of pre-conditions? b) It seems like finding the end of a function would be easy, because there's a return. Is there some way to analyze the stack so that you know where a function is returning to, then look for…

There's some other cool tricks you can do, where you symbolically execute using angr or another emulator such as https://github.com/cea-sec/miasm to be able to use control flow graph unflattening. You can also use Intel's PIN framework to do some interesting analysis. Some helpful articles here:

- https://calwa.re/reversing/obfuscation/binary-deobfuscation-...

- https://www.nccgroup.com/us/research-blog/a-look-at-some-rea...

Re: Reverse engineering Call of Duty anti-cheat

#15

Signature scanning is indeed the hot shit. It's like the most addicting part of reverse engineering to me. Building signature lists, and then writing bindings to scripting languages to call those function pointers. It's also the foundation of how many third-party mod platforms work, because you need to build a meaningful API to modders that isn't exposed by the first-party.

No idea what signature scanning is, but found this resource for those curious:

https://www.unknowncheats.me/forum/general-programming-and-r...

Re: Reverse engineering Call of Duty anti-cheat

#16
post #2

Where did you learn how to do this? I would love to learn more about understanding half of what this article said but I don’t know how to start.

Dang, I'm old. I was going to say hang out in Gamedeception, but apparently it's been gone for years! greetz to readers of Unknowncheats, cs.rin.ru, etc.

Yoo haha Unknowncheats, now there's a blast from the past.

Milworm (milw0rm?) also got me started back in the day.

Re: Reverse engineering Call of Duty anti-cheat

#17
post #6

I'm very curious about the jump obfuscation. Maybe somebody who's done more reverse-engineering can answer this for me: a) Are unconditional jumps common enough that they couldn't be filtered out with some set of pre-conditions? b) It seems like finding the end of a function would be easy, because there's a return. Is there some way to analyze the stack so that you know where a function is returning to, then look for…

Unconditional jumps are very common and everything in x86 assembly is very very messy after optimizations. Many functions do not end in ret.

How do functions that not end in ret work?

Re: Reverse engineering Call of Duty anti-cheat

#18
post #17
post #6

Earlier quoted context omitted.

Unconditional jumps are very common and everything in x86 assembly is very very messy after optimizations. Many functions do not end in ret.

How do functions that not end in ret work?

My gut (been a while since I've been that low level) is various forms of inlining and/or flow continuation (which is kinda inlining, except when we talk about obfuscation/protection schemes where you might inline but then do fun stuff on the inlined version.)

Re: Reverse engineering Call of Duty anti-cheat

#20
post #17
post #6

Earlier quoted context omitted.

Unconditional jumps are very common and everything in x86 assembly is very very messy after optimizations. Many functions do not end in ret.

How do functions that not end in ret work?

The return is somewhere before the end of the function, e.g.

  loop:
    do stuff
    if some condition: return
    do more stuff
    goto loop
Alternatively, the function might end with a tail-call to another function, written as an unconditional branch.
Post reply on HN