Unlocks your ability of updating ASM codes for Nintendo Switch.
Now supports:
- Migrate codes to games from different distribution areas
- Upgrade or degrade codes for all available game versions
- XCZ/XCI/NSP/NSZ game packages auto extraction
- ARM64/ARM32 codes update with automatic sorting
- Recognize branch codes and modify their pointer
- Update multiple code cave codes with precisely structures
- Save modified .txt or .NSO file as you like
What's new:
- Catchy tool title (which is very important)
- Faster code feature localization algorithm
- Support master/normal code cross branches
- Support codes in .rodata
- Customizable code type recognization
- Detailed logs if error occurs
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.
Build ID of the old main file will be shown after loading. Please make sure it is the same with the old codes file name.
- 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
** Please unpack game packages and load main files manually if automatic dumping process failed to work.
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.
- Force ARM64: Force the tool to disassemble codes as ARM64.
- Python 3.8+
- Packages in requirements.txt
- upx
- Don't forget to add environment variables.
cd your_source_code_root_dir
py -3.8 -m pip install -r requirements.txt
py -3.8 __main__.py
pyinstaller -F -w -i xcw.ico __main__.py --upx-dir your_upx_root_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.
Thank you for your contribution:
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.