I remember in my teens using free trainers from Cheat Happens and trying to figure out how to use Cheat Engine to coast through some games (most of the time when I cared more about the story than the gameplay itself), also around last week I even saw a video on YouTube where the sponsor was a company that provided trainers as a service for a large catalogue of games, all in a neatly packaged client.
It's nice to get a look behind the scenes at how it's done.
I first learned how these sorts of programs worked using memory inspection tools that some emulators have built into them, but eventually flirted with some very basic cheat engine stuff myself. More advanced stuff like code caving is hard unless you're an assembly wizard, but it's surprisingly easy to find and poke values once you get the basic technique down. I once made a trainer for a friend because he wanted to skip some of the grind for cosmetics in Nioh. I also had fun realizing that the enemy skill materia in ff7 basically works by treating what would typically be the experience of the materia as a bitfield, with one bit for each learnable skill.
It's funny though, I realized that I generally don't enjoy cheating at games, even single player games, unless the cheats are amusing stuff like big head mode or whatever. I once actually cheated to reduce my character's level in dark souls because I'd accidentally allocated a bunch of points into a famously rather useless stat and, in that game, stat point allocation is permanent. To clarify, I knew it was useless, I had mismatched which row I was looking at when assigning points.
Which is still cheating, I suppose, given that it saved me the convenience of starting the character over completely.
Dark Souls on PC rather famously was locked at some low resolution no matter what you did in the settings, among other problems that the PC port had. There was a hack program called DSFix that did a bunch of work to make it playable in a reasonable way on PC
artmoney dot r u was the way for some of us for many years. There was also WPE Pro. I remember, making a private room in Coke Studios, that was an official room, so I could skip the DJ line and earn decibels.
The weird mini rabbit hole of Cheat Engine's "source (somewhat) available" status is pretty interesting one. The issue linked in this article has been deleted, but thankfully was picked up by the wayback machine, where it appears the owner of the project doesn't really know what they want with regards to how other people can actually use their code (not to mention the fact that the project is definitely violating their dependencies' GPLs.
I previously wrote a helper tool in rust that injected into a C++ based online game, and it worked really well. Rust turned out to be an excellent choice for the job to me.
It works wonders! I build free-cameras and some other tools (all for offline games, of course) fully in Rust, and you'd be surprised how much you could do.
In one of them I hook into C++'s inheritance with no issue, just by understanding how everything works within the compiler you can do a lot.
in part 4, it seems like most of the time was just fighting against rust's semantics for how code should exist, and it made me wonder if rust was really the right tool for this? Every time I see something like this, it just sort of reinforces my belief that to write code in rust, you have to spend half your time fighting with how rust thinks code should work
I didn't know you could read random process memory in Linux. Where can I get documentation for things like this? I was learning about cgroups some time ago and got frustrated about the lack of documentation. I had to go read containerd code, which isn't ideal for wanting to just learn.
Scanmem[0] is a library that does this for the purposes of reading/modifying game memory and a useful resource. You can also poke around in /proc for some helpers
ls -la /proc/$PID/map_files
cat /proc/$PID/maps
cat /proc/$PID/status
That’s fair, but to me the “in Rust” part is the most relevant. I wanted to see how ergonomic it was to do such raw memory tweaking in the memory-safe systems programming language.
As you can see they're creating safe wrappers around the raw unsafe windows API which uphold the invariants. Microsoft should provide these as a crate.
It's nice to get a look behind the scenes at how it's done.
reply