/game-reversing

Beginner learning materials on how to reverse engineer video games

The UnlicenseUnlicense

Beginner Learning Materials on Reverse Engineering Video Games

Here is a compiled list based on personally recommended learning materials to help people with the process of learning how to reverse engineer video games.
I hope it will help others spend more time learning and less time searching.

Majority of the collected resources here will be focused on reversing PC games on the Microsoft Windows operating system with x86 assembly in mind over x64 as it is easier to learn.

Reversing engineering video games is more often than not related to "game hacking", they come and go together so don't be surprised if some of the learning materials come from such sites/sources.

Recommended order to learn

  1. Learn how to search efficiently on Google, all your answers and resources are found on the internet
  2. Learn using Cheat Engine
  3. Learn about hexadecimal and binary numbering systems, and about computer memory in general
  4. Learn x86 assembly
  5. Learn C++
  6. Learn using IDA/Ghidra
  7. Learn basics of game programming
  8. Learn fundamentals of the Win32 API
  9. Learn the inner workings of Windows operating system, aka Windows internals
  10. Practice, practice, practice...

Software needed for reversing

It's not recommended to run any of these tools (especially Cheat Engine) while playing multiplayer games that have anti-cheat systems in place, unless you know what you are doing.

For starters get familiar with Cheat Engine, and either IDA or Ghidra.

Picking the right tools

Before getting to work on a game you must know your target, so it's important to gather some information such as:

  • What software technologies it uses
  • What programming language and compiler it had been developed with
  • Does it have any anti-reversing or anti-tamper technology in place
  • Is it running on any popular third-party game engines (Unity, Unreal Engine, Source Engine, etc.)

Games sharing the same engines often have really similar and recurring codebase that you can use to your advantage. For third-party game engines such as Unreal Engine or Unity there are a lot of custom tools online that can ease the process of reverse engineering.

Games coded in high-level interpreted/intermediate programming languages such as C# or Java are generally much easier to reverse engineer as compared to C/C++, due to the metadata not being lost as they aren't compiled into low-level machine code.

For Unity-based games (and for any other games developed with the .Net Framework) use dnSpy instead of IDA/Ghidra.

We are mainly going to focus on reversing games coded in C++ as it is still the gold standard in video game programming.

  • Examples of games made with C++:

    • Counter-Strike
    • Grand Theft Auto V
    • Fortnite
    • World of Warcraft
    • Tom Clancy's Rainbow Six Siege
    • Fallout 4
    • Borderlands
    • Rocket League
    • Destiny 2
    • ARK: Survival Evolved
  • Examples of games made with C#:

    • Genshin Impact
    • Beat Saber
    • Rust
    • Hearthstone
    • Subnautica
    • RimWorld
    • Hollow Knight
    • Cuphead
    • Getting Over It
    • Risk of Rain 2

Must-read beginner level materials

Must-watch youtube channels

Other really useful materials

Useful sites along the way

Keywords you want to learn about in general

  • Memory scanning
  • Memory editing
  • Memory patching
  • Pattern scanning
  • x86 assembly
  • x64 assembly
  • Process debugging
  • Disassembling code
  • Decompiling code
  • Function hooking
  • API hooking
  • Detouring functions
  • Dll injection
  • Internal cheats
  • External cheats
  • Threads
  • Windows PE format
  • Win32 API
  • Windows internals
  • Anti-debugging
  • Anti-reversing
  • Anti-tamper
  • Software packers
  • Software unpacking