Tursiops: Universal trainer for Linux

Tursiops screenshotOne 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.

15 Replies to “Tursiops: Universal trainer for Linux”

  1. Do you have a binary for this or source? can not seem to find anything like it out there and want to mess with some of my programs. Thank’s in advance.

  2. I’ll release the source when I have the time and motivation to go back and clean it up. It’s a pretty hackish thing right now and I’d like to make it presentable before releasing it.

  3. Oh, thank god Chris is still active especially with Tursiops!! I sincerely hope Chris releases this soon!! This application with or without the source code is currently my heart’s deepest desire and dream! I really don’t think anybody will care how messy it’s code is. I have much respect for you, Chris!! My head will be out of space when this is released!! Thank you again if you can Chris!!!!

  4. I am very interested in Tursiops. Do you have any idea when this will be released?? As for the messy code, I am, in fact, an experienced C/C++ programmer. I could help you clean it up. I’ve made four 2D games, a multi-platform user-friendly “file locker,” and a few other applications. I wish to remain anonymous, so I will refrain from publicly giving links and names. If Turiops is already finished, why not release it? I doubt any of my code is any nicer than yours. One project, in fact, was only based on a single main.cpp with over three thousand lines of code! That messy code was the obsoleted DOS file locker/unlocker now inoperable on the newer win32 Windows and has no support for *nix based operating systems. It’s been years since I’ve worked on that, but now that I remember it, I’ll rework it for Linux and the newer win32 Windows.

    I do hope you have no regret posting this blog if Tursiops was intended for private use. I would greatly appreciate you if the binary or source would be released. Unpresentable code isn’t a major issue and readable code could be improved and released to future version, even without any improvements. Again, I insist on the whole point of this comment: I would greatly appreciate you if the binary or source would be released, in any matter of time.

  5. Trainers for Linux have one big application area: WINE, because trainers for Windows don’t work with wine.
    More and more games are becoming usable with wine and cheating helps testing them faster.

    Unfortunately, some of these games are also going full screen without the possibility to switch to another workspace. This is why I’m coding an universal game trainer for the CLI.

    Invocation looks like this:

    It will check ~/.ugtrain/ for a file .conf which has the process name, memory addresses, values, etc. inside.

  6. @Sebastian: Can’t you CTRL+ALT+F# to get to an alternate workspace while the game is in full-screen? I used to run WoW in a dedicated X session for exactly this reason, so I could have full-screen and still switch to other apps. (After a while I gave up and used Wine in desktop mode, which I would highly recommend for doing this kind of work.)

  7. @Chris: Yes, the CTRL+ALT+F# works but not the CTRL+F#. Using the virtual desktop of Wine is a good thing for finding the memory addresses. But I don’t like running another X session.

    Now, my trainer for the CLI can finally do the config parsing, gets the PID of the configured process name itself, and uses something like non-blocking getch() so that you can enable/disable the modification of values by key press. Another thing I need to implement is universal checks before changing values. E.g. I had the trainer for the health of a fellow in “Magic & Mayhem” active. After he went through a portal an opponent became immortal – so they have a vector as unit store in memory. 😉

  8. Now, I’ve got the universal checks. I would really appreciate if someone of you could test my trainer approach. It is GPL licensed and uses autotools, the CLI, C++ as well as C. It has also a config file example.


    Use git clone to get the source:
    $ git://github.com/sriemer/ugtrain.git

    Read the README to get started. 😉

Comments are closed.