{"id":30663299,"url":"https://github.com/nartodono/example-game-memory-trainer","last_synced_at":"2026-04-17T08:02:18.698Z","repository":{"id":307164027,"uuid":"1028545440","full_name":"nartodono/Example-Game-Memory-Trainer","owner":"nartodono","description":"Educational demo showing how to build a memory trainer for games in C# (WinForms). Features live value editing, pointer following, and a freeze option, using Supermarket Simulator as the example target.","archived":false,"fork":false,"pushed_at":"2025-08-01T14:24:17.000Z","size":4284,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-08-31T17:13:03.278Z","etag":null,"topics":["cheat-engine","csharp","educational","game-hacking","game-trainer","memory-hacking","pointer-chain","red-team","reverse-engineering","security","windows","winforms"],"latest_commit_sha":null,"homepage":"","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/nartodono.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-07-29T17:30:08.000Z","updated_at":"2025-08-01T14:24:21.000Z","dependencies_parsed_at":"2025-07-29T21:20:11.399Z","dependency_job_id":null,"html_url":"https://github.com/nartodono/Example-Game-Memory-Trainer","commit_stats":null,"previous_names":["nartodono/example-game-memory-trainer"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/nartodono/Example-Game-Memory-Trainer","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nartodono%2FExample-Game-Memory-Trainer","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nartodono%2FExample-Game-Memory-Trainer/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nartodono%2FExample-Game-Memory-Trainer/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nartodono%2FExample-Game-Memory-Trainer/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/nartodono","download_url":"https://codeload.github.com/nartodono/Example-Game-Memory-Trainer/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nartodono%2FExample-Game-Memory-Trainer/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31920518,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-16T18:22:33.417Z","status":"online","status_checked_at":"2026-04-17T02:00:06.879Z","response_time":62,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cheat-engine","csharp","educational","game-hacking","game-trainer","memory-hacking","pointer-chain","red-team","reverse-engineering","security","windows","winforms"],"created_at":"2025-08-31T17:04:48.455Z","updated_at":"2026-04-17T08:02:18.675Z","avatar_url":"https://github.com/nartodono.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Example Game Memory Trainer\n\n![C#](https://img.shields.io/badge/Made%20with-C%23-239120.svg?style=for-the-badge\u0026logo=c-sharp\u0026logoColor=white)\n![WinForms](https://img.shields.io/badge/WinForms-.NET-blueviolet?style=for-the-badge\u0026logo=windows)\n![Educational Purpose](https://img.shields.io/badge/Purpose-Educational-blue?style=for-the-badge\u0026logo=bookstack)\n![Reverse Engineering](https://img.shields.io/badge/Reverse%20Engineering-Practice-purple?style=for-the-badge\u0026logo=hackthebox)\n\n## Read This\n\n⚠️ **DISCLAIMER**  \nThis project is intended for **educational and research purposes only**.  \nDo **not** use it to cheat in online/multiplayer games or violate any game's ToS (Terms of Service).  \n**Use responsibly and ethically!**\n\n---\n\n## Introduction\n\nThis repository demonstrates how to build a **game memory trainer** in C# (WinForms), focusing on real process memory editing in Windows.  \nThe example uses *Supermarket Simulator v1.0.2 (133)* as the demo target.\n\n\u003e **Note:**  \n\u003e This project is an educational example and is designed specifically for Supermarket Simulator v1.0.2 (133).  \n\u003e There are no plans to update for future or older versions of the game.  \n\u003e The techniques shown here can be adapted by anyone wanting to update for a different version.\n\n---\n\n## Features\n\n- **Automatic game process detection**\n- **Edit in-game Money, EXP, and Level** via a simple UI\n- **Freeze Money:** lock the value so it never decreases (even if you spend in-game)\n- Clean, readable, and well-commented code for easy learning\n- Great starting point for anyone interested in game hacking, trainers, or the Windows API with C#\n\n---\n\n## Requirements\n\n- **Windows OS:**  \n  Project only works on Windows (tested on Windows 11)\n\n- **.NET Framework 4.8:**  \n  Make sure [.NET Framework 4.8](https://dotnet.microsoft.com/en-us/download/dotnet-framework/net48) is installed on your system\n\n- **Visual Studio:**  \n  Use [Visual Studio](https://visualstudio.microsoft.com/) (any recent version: Community, Professional, or Enterprise).  \n  \u003e *Note: Visual Studio Code is NOT supported.*\n\n- **Cheat Engine:**  \n  [Cheat Engine](https://cheatengine.org/) (any version should work, but the latest is recommended)\n\n- **Supermarket Simulator v1.0.2 (133):**  \n  The trainer is designed and tested for this specific game version\n\n- **Administrator Privileges:**  \n  (Optional)  \n  If you experience issues or the trainer can't access the game memory, run both the game and the trainer as Administrator.\n\n---\n\n## How to Use\n\n1. **Clone this repository to your computer:**\n    ```bash\n    git clone https://github.com/nartodono/Example-Game-Memory-Trainer.git\n    ```\n\n2. **Open the project folder:**  \n   (By default, it will be named `Example-Game-Memory-Trainer`.)\n\n3. **Open `Trainer.sln` using Visual Studio.**\n\n4. **Build and run the project:**  \n   - In Visual Studio, click the **Start** button or press `F5` to build and run.\n\n5. **Start _Supermarket Simulator v1.0.2 (133)_** on your PC.\n\n6. **Use the trainer app:**  \n   The trainer will automatically detect the running game and let you edit Money, EXP, Level, or freeze the money value in real time.\n\n\u003e **Please Note:**  \n\u003e - This trainer is designed and tested for *Supermarket Simulator v1.0.2 (133)*.  \n\u003e - It may **not** work for other versions of the game since those versions have not been tested yet.\n\n---\n\nWant to try the trainer without building from source?  \nJust head to the [Release](https://github.com/nartodono/Example-Game-Memory-Trainer/releases) page, download the latest pre-built trainer, and follow all instructions there.\n\n\u003e **Please read all information on the Release page before running the trainer.**\n\n---\n\n## Learning Section\n\nYou can see the main code logic here:  \n[**Form1.cs**](Trainer/Form1.cs)  \nYou can ignore the other files—those are mostly auto-generated or boilerplate needed to make the program run in Visual Studio.\n\n---\n\n### How Does It Work?\n\nThis trainer works by accessing the memory of another application (the game), reading, and modifying its values.\n\n1. **Process Detection:**  \n   The program first searches for the *Supermarket Simulator* process. It continuously checks every second, so it always knows if the game is open or not.\n\n2. **Pointer Chain Traversal:**  \n   If the process is found, the trainer locates the memory addresses for **Money, EXP, and Level** by following a multi-level pointer chain.  \n   These pointer chains were discovered using Cheat Engine.  \n   *(See the section below: [How to Find the Pointer Chain](#how-to-find-the-pointer-chain))*\n\n3. **Reading \u0026 Modifying Memory:**  \n   Once the addresses are found, the trainer can read or write the values in real-time.\n\n4. **Why Use a Pointer Chain?**  \n   The pointer chain is needed because the actual memory addresses change every time the game starts (dynamic memory allocation). The chain lets us always find the right spot, no matter what address is used in this session.\n\n---\n\n**Technical Note:**  \nThe entire memory manipulation in this project is based on **reverse engineering the game using Cheat Engine**.  \nThe relevant memory addresses (Money, EXP, Level) are dynamically found through **pointer chain analysis**.  \nPointer chains are located by first finding the value in Cheat Engine, then tracing back using the pointer scan feature, which is a standard reverse engineering approach for games with dynamic memory addresses.\n\n---\n\n### Screenshots\n\n| ![Inactive Trainer](docs/images/unactiveTrainer.png) | ![Active Trainer](docs/images/activeTrainer.png) |\n|:--:|:--:|\n| *Inactive Trainer* | *Active Trainer* |\n\n![In-game](docs/images/in-game.png)\n\n---\n\n### How to Find the Pointer Chain\n\nAssuming you have already found the value address using Cheat Engine (as shown below):\n\n| ![First Step](docs/images/ce-1.png) |\n|:--:|\n| _Find the correct value address using Cheat Engine (e.g., Money, EXP, Level)_ |\n\n1. **Generate Pointermap:**  \n   Right-click the found address and choose **\"Generate pointermap\"**.  \n   Wait until the process finished.\n\n2. **Restart \u0026 Repeat:**  \n   Close the game, open it again, and repeat step 1 to find the new address.  \n   Generate a **second pointermap** file using the same process.\n\n| ![Second Step](docs/images/ce-2.png) |\n|:--:|\n| _Right-click on the new address and generate another pointermap after restarting the game_ |\n\n3. **Pointer Scan:**  \n   With both pointermaps created, right-click the new found address and select **\"Pointer scan for this address...\"**.  \n   A new Cheat Engine window will open.\n\n4. **Compare with Saved Pointermaps:**  \n   In the pointer scan window, check **\"Compare results with other saved pointermap(s)\"** and select the two pointermap files you just made.  \n   (Optional) You can set the **Maximum Offset** to 2048 and the **Max Level** to 5 to narrow down the search depth.  \n   Press **OK** to start the scan.\n\n| ![Third Step](docs/images/ce-3.png) |\n|:--:|\n| _Configure the pointer scan settings: add both pointermaps, set offsets/levels, then start the scan_ |\n\n5. **Wait for Scan to Complete:**  \n   Cheat Engine will now scan and compare the pointermaps. Just wait until it is finished.\n\n| ![Fourth Step](docs/images/ce-4.png) |\n|:--:|\n| _Pointer scanner running: waiting for results_ |\n\n6. **Analyze the Results:**  \n   Once the scan is done, you will see results like below.  \n   Here, you can see that the base address is `mono-2.0-bdwgc.dll + 00A14118` and the pointer chain (offsets) is:  \n   `43C, 68, 0, 30, C8` (for the Level value; Money and EXP will have different last offsets).\n\n| ![Fifth Step](docs/images/ce-5.png) |\n|:--:|\n| _Pointer scanner results: final pointer chain and offsets you can use in your trainer code_ |\n\n\u003e **Note:**  \n\u003e The screenshots above were not taken in a single continuous session.  \n\u003e They are a mix of different steps while searching for Money, EXP, and Level addresses, so you may notice that the addresses, pointermaps, and pointer scan results don't always match up perfectly from one image to the next.\n\n**Tip:**  \nThis method ensures you get a reliable pointer chain that works even though the actual memory address changes every time the game is restarted (dynamic memory).  \nThe pointer chain you find here can then be used in your code to always locate the correct value in memory.\n\n---\n\n## License\n\n![MIT License](https://img.shields.io/badge/License-MIT-green)\n\nThis project is licensed under the [MIT License](LICENSE).\n\n---\n\n## FAQ\n\n### Q: Is this project a cheating tool?\n\n**A:**  \nNo, this project is intended **for educational and research purposes only**.  \nIt demonstrates the technical process of memory editing and reverse engineering using C#.  \nDo **not** use it to cheat in online or multiplayer games, or violate any game's Terms of Service.\n\n---\n\n### Q: Does the trainer work with versions other than Supermarket Simulator v1.0.2 (133)?\n\n**A:**  \nThis trainer is designed for **Supermarket Simulator v1.0.2 (133)**.  \nIf you use a different version, the memory layout and pointer chains may be different, so the trainer may not work as expected.  \nIf this happens, you will need to find and update the correct pointer chains for your game version.\n\n\u003e **Note:**  \n\u003e For this issue, a more robust technique is **signature scanning** (Array of Bytes / AoB scan),  \n\u003e which is more resistant to minor game updates because it searches for unique byte patterns instead of fixed memory addresses.\n\n---\n\n### Q: How do I update the pointer chain for a different version?\n\n**A:**  \nSee the section [How to Find the Pointer Chain](#how-to-find-the-pointer-chain) in this README for step-by-step instructions using Cheat Engine.\n\n---\n\n### Q: Can I use this trainer with other games?\n\n**A:**  \nTechnically, yes—**with significant modifications**.  \nYou will need to find the appropriate process, value addresses, and pointer chains for the other game using Cheat Engine or similar tools, and update the code accordingly.\n\n---\n\n### Q: Is it safe to use this project?\n\n**A:**  \nThe code itself is safe and open source.  \nHowever, modifying game memory can sometimes trigger anti-cheat protections in some games.  \n**Always use this project for offline, single-player, and educational purposes only.**\n\n---\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnartodono%2Fexample-game-memory-trainer","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnartodono%2Fexample-game-memory-trainer","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnartodono%2Fexample-game-memory-trainer/lists"}