This updater unlocks your ability of updating most of the ASM cheats for Nintendo Switch.
Now supports (same logic with cheats makers updating their codes like AOB):
- Update cheat codes to other locales (if they don't rewrite the game code, then yes)
- Upgrade or degrade cheat codes for all available version if no game major shift
- ARM64/ARM32 cheat codes update with automatic sorting
- XCZ/XCI/NSP/NSZ game packages auto extraction
- Search the whole main file for code features
- Update normal ASM codes
- Update multiple code cave codes with preserved structures
- Skip page/pageoff codes
- Recognize branch codes and modify their pointer
- Auto fill cheat bids when saving .txt file
- Save modified .NSO file base on cheats
TODO:
- Updating codes in .rodata or somewhere else (aka. high probability breaking the new game 😰)
If you need a Chinese version introduction, please refer here. 中文版请参考此帖。
- Windows 10 (:heavy_check_mark:), Windows 7 (:x:), Mac/Linux (❓: rebuild required (thx to Amuyea))
- No python environment required
Visit out releases page or download the latest version.
There are lots of excellent works for you to dump the main file, like hactool, NSC_Builder, DBI or nxdumptool. Please choose anyone you familiar with to dump two main files:
- Old Main File: dump from the game which old cheat runs on
- New main File: dump from the game which you want to update the old cheat to
Load main file and copy cheat codes (or load the gamepackages (super ones excluded) directly if version > 0.5.0)
Build ID of the old main file will be shown after loading. Please make sure it is the same with the old cheat.
Logs window has everything you need when updating cheat codes.
- Generate: Generate one code or title
- Skip: Skip one code or title, especially for pointer cheats.
- Undo: Undo the last operation.
- Restart: Restart the whole process.
- Wing Length: Decide how many asm code lines are extracted as code features before and after the target address. Supported input type like array [left_side, right_side] and integer "single_input" are listed below:
Type | Left Side | Right Side | Support Single Input |
---|---|---|---|
Normal ASM code | feature lines before ASM address | feature lines after ASM address | ✔️ |
Branch to code cave | feature lines before bl address | feature lines after bl address | ✔️ |
Branch with target address | wing length for bl address | wing length for bl target address | ❌ |
- Regenerate: Useful when logs window show "address not found". Please change wing length and regenerate until single hit, or maybe double.
- Debug: Generate a debug folder with procedure files to show you what happend during the whole progress.
- Python 3.9
- Packages in requirements.txt
- upx (if bundling to one file need)
- Spec file for pyinstaller (refer here for more info)
- Choose any python version lower than 3.9 will unleash the support of Windows 7, but not tested. Please use at your own risk.
- There is a main.spec template in project root directory, please change demanded parameters before use.
- Don't forget to add environment variables.
cd your_source_code_root_dir
py -3.9 -m pip install -r requirements.txt
py -3.9 __main__.py
pyinstaller -F -w your_spec_name.spec --upx-dir your_upx_dir
-
Why my new codes doesn't work?
A: On most cases, they are pointer cheat codes that can be recognized from the logs window. Please update these cheats with EdiZon SE or SE tools.
-
Why my new codes break the game?
A: Game developer will make a huge change for some specific version of games, like adding new function or improving code efficiency. In these cases, the ASM cheat codes need to be refind.
-
Why this application repeating same title over and over again?
A: It happened when capstone in the application failed to recognize bytes features. Here are some major reasons: zero gap in bytes file fail to work in capstone (fixed), nsnsotool decompressing command failed (fixed), application folder structure destroyed. Please re-download this application or create an issue. Please note that "out of .text or code cave border" has been fixed from 0.4.0.
-
What does "main file" stand for?
A: "main file" is the executable game file dumped from NSP or XCI, which is located in the exefs folder. It can be dumped automatically with the latest version.
-
What does "wing length" stand for?
A: "wing length" represents the number of code lines before and after the target area. Here is the diagram for a better view:
-
What code cave remake brings between version 0.3 and 0.4?
A: In the new version, the code cave structure strictly follows the one from the original cheat code instead of previous "relocate every code cave automatically". Therefore, code caves in cheat codes like [EXP 2X]/[EXP 4X]/[EXP 8X] will only demand identical addresses and nothing more.
-
I have fully run the program and never see any warning, but still no luck. Why?
A: In most cases, the "master code" which has a title within "{}" takes the responsibility. Some code creater prefer use them as "default function that should run with the game start". These codes and some non "master code" titled like "recovery code" always have links with other ASM codes like "BL #0xADDR". Please add these code contents to other parts of the cheat codes that don't work properly and run the program again.
Feel free to dive in! Open an issue or submit PRs.
Interactive ASM Cheats Updater is based on
a.) Keystone Engine and Capstone Engine: Without their brilliant work, Interactive ASM Cheats Updater will never be born.
b.) nsnsotool: This tiny program helps a lot on transforming nso files, made by 0CBH0.
c.) nsz: Light my day, created by nicoboss.
d.) getMain: main file extraction for IDA Pro by Eiffel2018.
e.) python AES128 implementation: written by SciresM.
Also thanks to:
Eiffel2018, donghui2199, 怪盗B, Geminize, Konia1234 and lulu for their testing.
All cheat makers that sparing no effort in creating and updating cheat codes, you ARE the true heros!
All the helpers for bringing this project to life!
This project is licensed under GNU General Public License v3.0.
Refer the LICENSE file for more details.