One of the things I do miss about Windows is the abundance of universal trainers for it. If you don’t know what a trainer is, it’s a program that writes over the memory of another process, typically a game, to confuse the program into doing something it wouldn’t normally do. Trainers are often used to get infinite lives/money/ammo in games. However, they must know where in memory these variables are being stored.
A universal trainer is the most generic trainer: it allows the user to search a process’ memory space for a certain value, and further refine the search until the variable’s location in memory is isolated. Then the user may modify that memory to change that variable while the program is running.
Kcheat is the only similar program I’ve seen for Linux. Unfortunately, it requires KDE 1… which nobody is going to install just to use this program.
Well, Wednesday I decided it might be cool to design a new one. So I did, using portions of Kcheat (mainly the lower level stuff). It’s implemented in C# with Gtk# as the UI, and a small C library to take care of the nasty work. As of last night it’s almost done — already! It can search the memory of a process for six different data types (signed/unsigned 8/16/32-bit integers) and allow their contents to be tweaked. It’s a little unstable as I haven’t done any exception handling yet (except where necessary) but the stable release will be pretty slick. The UI is uncluttered and simple, though demand may see the addition of new features.
The only drawback is that the project is generally pointless: most Linux games that people care about are either network games, which prevent clients from tampering with the data on the server, and the others are open source anyway, so you can just comment out the “if (lives == 0)” line and recompile.
On the other hand, this is easier than recompiling, if a bit hackish.