https://github.com/angrycarrot789/memengine360
A remake of Cheat Engine for consoles, currently Xbox360 only, written in C# using Avalonia
https://github.com/angrycarrot789/memengine360
avalonia c-sharp cheatengine xbdm xbox360
Last synced: 11 months ago
JSON representation
A remake of Cheat Engine for consoles, currently Xbox360 only, written in C# using Avalonia
- Host: GitHub
- URL: https://github.com/angrycarrot789/memengine360
- Owner: AngryCarrot789
- License: gpl-3.0
- Created: 2025-04-21T23:57:32.000Z (11 months ago)
- Default Branch: master
- Last Pushed: 2025-05-07T06:08:53.000Z (11 months ago)
- Last Synced: 2025-05-07T07:25:27.521Z (11 months ago)
- Topics: avalonia, c-sharp, cheatengine, xbdm, xbox360
- Language: C#
- Homepage:
- Size: 800 KB
- Stars: 14
- Watchers: 1
- Forks: 2
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: COPYING.GPLv3
Awesome Lists containing this project
README
# MemEngine360 v1.1.4
This is a remake of Cheat Engine, but for consoles.

This project was inspired from https://github.com/XeClutch/Cheat-Engine-For-Xbox-360
I've only just gotten start in console modding, and I don't have much experience in the low level features that this app
definitely needs (such as parsing memory blocks as executable code, and displaying as assembnly). So any help/contributions would be great!
General tips and advice on how the UI can be improved or made more productive are also welcomed.
# Download and built
Clone repo: `git clone --recursive https://github.com/AngryCarrot789/MemEngine360`
Open `MemEngine360.sln` and then run/debug.
# How to use
Press `CTRL + O` (or go to `File > Connect to console...`). A dialog pops up allowing you to connect to different consoles.
So far, only the Xbox 360 is implemented, however, plugins are supported to add more.
In the case you want to connect to an xbox 360, just supply its IP address in the text field and click `Connect`

You'll see in the bottom right corner a progress bar will sometimes appear. They represent 'Activities', such as read/write operation status, scan status, and more.
You can click that area to open a window which shows all activities.

## Scanning
- Enter a value in the `Value` field
- Select the data type you wish to scan for (e.g. Byte, Int32, String)
- Specify search options such as the `Scan Type` (match equal values, less than, between and more), and string type (ASCII, UTF32, etc.)
Then, specify a start address in the `Memory Scanning Options` panel and also how many bytes you want to read (default is `0x10000000` or 256MB).
On supported consoles, you can click the little green table button to open a dialog, which lets you select a memory region to scan.
Click any of the column headers to sort them (e.g. sort by region size and look for the bigger ones; that's where the games usually are, usually after base address 0x80000000)

- DEBUG PAUSE will freeze the console during scan (speeds up scan and useful if you don't want values to change during scan). Only works on consoles supporting freezing (including Xbox 360)
- Scan Memory Pages will scan the console's memory regions rather than blindly scan the entire search range. Only works on consoles supporting memory region querying (including Xbox 360)
- Align... code explains it better: `for (addr = start; addr < end; addr += align) /* scan addr */`
### First Scan
Click `First Scan`. The activity status (bottom right) shows the scan progress. You can cancel the scan by clicking the X.
The activity bar will show something like `Region a/b (c/d)`. This means it's processing memory region A out of B, and has read C out of D bytes from the console. It may also say `Chunk` when Scan Memory Pages is off, since we read in chunks of 64K
Then, once the scan is complete, it may show `Updating result list...`. This is where it adds the results into the UI at a steady pace to prevent the UI freezing (rate of about 2000/s (system performance dependent)). It shows how many results are pending at the top.
> You can cancel the activity once it shows `Updating results list`, and the rows become 'Hidden', but they will still be processed next scan along with the rows in the UI.
### Next Scan
Then, if you want to check if any results' current value have changed, click `Next Scan` and it will read the current value of all results
and compare it to the value field(s) and remove any results that no longer match (because the value changed)
There are 2 buttons `First` and `Prev` next to the value field. These toggle whether to use the result rows' First value or Previous Value as a search value, instead of using the value field.
## Saved addresses

If you wish to keep an eye on specific addresses, you can add entries in here.
- Select results in the scan results panel, then click `Add Scan Result(s)` to automatically add them.
- Add them manually by clicking the green `+` button. It will open two dialogs to configure the row.
- Open/Save a CSV file containing saved addresses.
The refresh button manually refreshes the values. This is done automatically every second by default (changeable in preferences; CTRL+ALT+S)
## Changing values
You can double click the cell in the `Value` column(s) to modify that cell.
You can also select multiple rows and click `CTRL + E` to modify the value of all of them.

## Copying scan results
Select any number of scan results and press `CTRL + C`. A dialog will show the results formatted in CSV
## Deleting rows
Select any scan result or saved address rows and press the Delete key to remove them.
## Memory Viewer
Once connected to a console, in the "Saved Addresses" panel will be a green chip. Click it, and it will show a new window.
It will automatically fill in the Address/Length fields with the Start/Length fields in your scanning options.
Then click Read All, and it will first read the data from the console (progress shown in the activity bar in main window) and then present it in the hex editor.

This also supports auto-refresh. Select a region (click+drag), then click CTRL+SHIFT+S (or click the north-west arrow button) and it will update the two text fields (optionally you
can manually enter a range). Then, click `Start Auto Refresh`, and it will refresh the values 10 times per second. Note, you cannot scan or refresh results/saved addresses in the main UI during auto-refresh.
You can write values back to the console in the Data Inspector panel (e.g. write an int or a double, but not chars at the moment). The field you're writing into will not be refreshed until you click away from it (e.g. click anywhere in the hex editor)
### Remote Controls (xbox only so far)
There's a few remote control commands you can find in the `Remote Controls` menu. Some of which are:
- `Open Disk Tray` - Opens the console's disk tray (cannot be closed remotely since xbdm does not implement closing...???)
- `Debug Freeze` - Freezes the console
- `Debug Unfreeze` - Unfreezes the console
- `Soft Reboot` - Reboots the current title
- `Cold Reboot` - Fully reboots the console (shows the xbox boot animation)
- `Shutdown` - Tells the console to shut down
# What is...
### "Waiting for busy operations..."
This means that something else is using the engine elsewhere (scan is running, the hex editor auto-refresh is running, or maybe the results list/saved addresses are being refreshed).
This application is multithreaded, but connections are not thread safe, so there exists a `BusyToken` to synchronize access. This message is shown in the status bar while waiting to obtain the token.