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
- Learn how to search efficiently on Google, all your answers and resources are found on the internet
- Learn using Cheat Engine
- Learn about hexadecimal and binary numbering systems, and about computer memory in general
- Learn x86 assembly
- Learn C++
- Learn using IDA/Ghidra
- Learn basics of game programming
- Learn fundamentals of the Win32 API
- Learn the inner workings of Windows operating system, aka Windows internals
- 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.
-
Memory scanners:
-
Disassemblers / Decompilers / Debuggers:
-
Process Tools:
-
PE Tools:
-
Network Tools:
-
Other:
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
-
Guides to game reversing:
-
Guides to x86 assembly:
-
Guides to IDA:
-
Basic game programming concepts:
- Game Programming Algorithms and Techniques - Sanjay Madhav (This article has 7 pages in total, read up to page 5-6)
- Understanding the Game Main Loop - Rodrigo Monteiro
-
Books:
- Reversing and game hacking:
- Game programming:
-
Google:
Must-watch youtube channels
- Guided Hacking YouTube channel for reverse engineering and game hacking tutorials
- Stephen Chapman's YouTube channel for Cheat Engine tutorials
Other really useful materials
-
More x86 assembly learning material:
- x86 Assembly Language Applicable To Reverse Engineering: The Basics – Part 1
- X86 Assembly Language, Part 2
- Lena151 Assembly Tutorials (might be outdated, but it is still recommended a lot):
-
Other useful tools and tool guides:
-
Practical reverse engineering and game hacking materials:
- Reverse Engineering/Game Patching Tutorial: Full Res Roller Coaster Tycoon with Ghidra+x64dbg+Python
- Reverse Engineering and Weaponizing XP Solitaire (Mini-Course)
- DOOM95 | Making an aimbot
- Game Hacking: Hack, Slash, Loot
- User Mode Rootkits: IAT and Inline Hooking
- x86 API Hooking Demystified
- [C/C++] Reverse Engineering Tutorial for newbies
- Reverse Engineering and Function Calling by Address
- Reverse Engineering Online Games - Dragomon Hunter
- [Tutorial] Packet Hacking and Reversing MMO
- Run-time directx hooking using code injection and vtable
- How to implement pattern-scanning to obtain offsets dynamically
- C++:How to patch Bytes using PatternScan (AOB) + Explanation / Snippet
-
Bit flags and bit masks:
-
Books and papers:
- Reversing and game hacking:
- Practical Video Game Bots: Automating Game Processes using C++, Python, and AutoIt - Ilya Shpigor
- Reversing: Secrets of Reverse Engineering - Eldad Eilam
- X86 Disassembly - Wikibooks.org
- Learning Malware Analysis: Explore the concepts, tools, and techniques to analyze and investigate Windows malware - Monnappa K A
- Game programming:
- Windows and Win32 API programming:
- Bypassing anti-debugging, anti-reversing, and anti-tamper techniques:
- Reversing and game hacking:
-
Curated lists of tools, tutorials, resources, and much more for reverse engineering video games:
-
Guided Hacking resources (As of 2023 it is now paywalled content):
Useful sites along the way
- Google (seriously, use it, a lot, all the time)
- Official Microsoft documentation (includes documentations on MSVC, DirectX, Win32 API, etc.)
- Godbolt (Extremely useful to verify compiler generated C++ code)
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