Home

Awesome

Game Hacking Resources

heres my attempt at a good list of reading material thats interesting/educational when learning to hack/mod games. ill try to separate it into categories for easy access. generally focuses specifically on fighting games, and has opinionated recommendations on tools/libraries.

Contents

Starting Out

when learning to RE games its very important to understand the actual relation between higher-level languages and the assembly code thats output from them, i think that one of the major problems i had when starting out was misunderstanding how something like an injected DLL worked, and not having an idea of what a calling convention is, i hope to clear these up if you havent heard of them before. all mentioned pages are in the Interesting Write-ups section.

first do the cheat engine tutorial to learn how to find values in memory that seem interesting, then read some of the wiki tutorials on how x86 assembly works, this should give you a good enough idea of whats actually happening when compiled code is getting executed. once you have an understanding of basic assembly, you can learn about how a function hook works.

very important note about function hooking that isnt mentioned enough in most explanations ive seen is that function calls typically use specific calling conventions, when you dont understand these it makes no sense how a function can call another and completely understand where all arguments should be stored when calling it. calling conventions provide specific standards for where arguments should be stored and how values should be returned, as well as specifying whether the caller or callee should clean up the stack. ghidra can also automatically detect the calling convention of functions in certain cases.

these function hooks are the base of basically every PC game mod out there, it enables you to change basically anything about a game if you work hard enough at it, the way that you actually put the hooks into the game is through something like DLL injection, there are plenty of guides on how it works but essentially you are creating a new thread on the program that says "load in this dll" and once the DLL is loaded in it will automatically execute whatever is in a "DllMain" function, you usually want to create a new thread to run your initialization stuff outside of DllMain because of limitations to what you can safely do inside of DllMain.

Interesting Write-ups

The Tools

Source Code

Libraries

C#

Rust

C++