Giter VIP home page Giter VIP logo

breeze-beta's Introduction

Breeze

A Nintendo Switch game cheating tool designed to work with Atmosphere's cheatVM.

This will start as a rewrite of the features I put into EdiZon SE. As I added features to EdiZon SE the code has become increasing hard to maintain and the UI is probably confusing for many users.

I have three objectives:

  1. To improve the UI so more users are able to enjoy the features.
  2. To make the code easier to build on.
  3. Apply what I have learned in developing SE tools to build a better foundation for further development.

Features

  1. Manage cheat codes for atmosphere cheat VM. Toggling code on/off, easy adding/removing of conditional key, loading cheats from cheat database, picking cheats from multiple cheat files, editing cheats in the app.
  2. Cheat code editor with disassembler and assistant to assemble cheat code. Assistant to create loop code starting with code with a single starget.
  3. ARM64 instruction assembly and disassembly.
  4. Search memory, edit memory, freeze memory, and create bookmark with static offset from main and heap.
  5. Set memory break point to catch instruction that access the memory. Set instruction watch to see what memory the instruction access.
  6. ASM composer to create ASM cheat.
  7. Auto update of app and database.
  8. Consistent and easy-to-use UI.

Search concepts

  1. Memory locations used for storing data of interest can remain static for a window of time. The objective of the search is to locate these locations while it is still valid.
  2. Game state where such memory locations remain static can vary between games. For most games, many locations of interest stay between the loading screen. Some location only stay for a certain mode, for example in a specific screen and is lost upon exiting the screen. It is for the user to guess the condition (where memory address of the data of interest stay static) and hope that the search converge within the window of opportunity.
  3. The data type is the format how data is stored in memory. Commonly use data types are u32, f32, f64, u16, u8, obfuscate type, packed integer (in my opinion try your search in this order).
  4. What you see is what you search(first). Normally you will start with a known(you think you know the data format and value) search. Guess the data type and make search for the number that you see on screen.
  5. Fast unknown(fuzzy) search. Sometimes the value is not directly represented. For example a heart may be not 1 in data representation but is 4 or 5 or 10 ... or you may see a bar on screen. Guess the datatype and try range search first, for example you see three hearts, search for number between 3 and 300(make the range too big it will take longer time to converge, make the range too small and you risk excluding the data and the whole search exercise in vain), play until you loose heart, search for less(current value < previous value), continue to search for less or more(in case you have potion to recover heart) until you have a smaller list of candidates.
  6. Full unknown search. When 4 and 5 above fail to give you the results that you seek first examine you assumption on point 2 above and decide if you want to repeat 4 and 5. When you are sure you want to do full unknown search then continue as full unknown search is time consuming. First do a dump on memory. See that the item you want to search has changed, now you have another decision to make, if you think you know that the number is increasing or decreasing do "increasing" or "decreasing" search, if you have no idea do "different" search.

Game hacking concept

  1. There are two ways to hack a game, you can either change game data directly or you can change the game code that modify the data.
  2. Searching memory help you find memory address that are changing in tandem with the game value you want to hack. The only way to know which one is effective in changing the game prpoerty is by hacking the value. Some changes the effective value and some changes the display value. Most of them will appear to have no effect to the game.
  3. The most valuable memory address is of course the one that store the effective value but sometimes the game don't fetch this and update the display regularly and instead only update the display when the game code make the change to the value. So you may miss it and think that the address isn't the right one, instead you may think that the display value is the one, only to be disappointed later when you found out that you have been fooled. Display value and those other value that only change in tandem are useful in code tracing that leads to effective value.
  4. ASLR cause memory address of a Switch game to be always different when you start a game. What is call "static" address are those that are static relative to the start of game code(main) or relative to the start of dynamic storage(heap). For static address once you have found it you are done as main and heap are both easy to locate and will be automatically supplied by (probably)all hacking tools. Unfortunately, not all memory of interest are "static", for these either a game code hack(often referred to as ASM hack) is needed or a pointer chain is needed(to find this chain is often referred to as pointer search).

Breeze search manager

  1. There are four search commands: "memory dump", "dump compare", "start search", and "continue search".
  2. Each search command produce a file with the extension of ".dat" in "sdmc:\switch\Breeze". These files are valid only while in the window of opportunity to find the target(please read search concept above). While in the current game session Breeze can't tell if you are still in the window of opportunity, it's a matter for you to decide if you want to keep any of the file produced. If you enter search manager in a different gaming session Breeze will delete the useless files(before you do this the files will be taking up space and you may want to delete them manually, some of these file can be very large in size).
  3. There are two type of search file in Breeze, memory dump and address data pair of candidates found. "memory dump" is the only command that produces memory dump, the rest of the commands produce address data pair.
  4. There is two way to start a search. "memory dump"(then "dump compare" followed by as many "continue search" as desired) or "start search"(follow by as many "continue search" as desired).
  5. "dump compare" and "continue search" can only be follow up action upon a prior search file. "dump compare" requires a prior memory dump file and "continue search" requires a prior address data pair file.
  6. This system allows as many undo and as many search missions as your storage can support and you can continue or start any search any time within the windows of time where the memory state is valid. Name the file according to your preference to help you identify them. You can delete any file to free up space.
  7. All search can be paused with the "Pause Search" command. The search will resume with any search command ("memory dump", "dump compare", "start search", "continue search"). To issue a new search command use "End Search" to end the current search. When "End Search" is issued the file is closed and can be use for follow on search even if the search wasn't 100% complete, you may choose to do this if you have the gut feeling that the target is already in the found candidates list.

Breeze data type

  1. "u8", "s8", "u16", "s16", "u32", "s32", "u64", "s64", "flt", "dbl", "pointer"

Breeze search mode

  1. "==", "!=", ">", "<", ">=", "<=", "[A..B]", "<A..B>", "++", "--", "DIFF", "SAME", "[A,B]", "[A,,B]", "STRING", "++Val", "--Val", "DIFFB", "SAMEB", "B++", "B--", "NotAB"
  2. Search mode that is comparing current value to a known value. "==", "!=", ">", "<", ">=", "<="
  3. Search mode that is looking for current value that falls within a range. "[A..B]", "<A..B>"
  4. Search mode that looks for a string of either null terminated text or a string of hex bytes. "STRING"
  5. Search mode that is comparing current value to a unknown value. "++", "--", "DIFF", "SAME", "++Val", "--Val", "DIFFB", "SAMEB", "B++", "B--"
  6. Two value search mode looks for two value to be present. "[A,B]" looks for A follow immediately by B, "[A,,B]" looks for A then B that is near (right now within 3 spaces from A in front or behind).
  7. The whole purpose of the search is to have a small list of addresses some of which can cause the desired effect when hacked.

Breeze search condition display

  1. The search condition is displayed in this format: DataType SearchMode Value A .. Value B
  2. Value A and Value B is displayed in the data type chosen of if hex mode is enabled in hex.
  3. u32 == 123 means you are searching for the value 123 encoded in unsign 32 interger format.
  4. flt == 123 means you are searching for the value 123 in floating point format.
  5. flt [A..B] 0.1 .. 1000 means you are looking for a value between 0.1 and 1000 inclusive of 0.1 and 1000 in the floating point format.
  6. flt <A..B> 0.1 .. 1000 means you are looking for a value between 0.1 and 1000 excluding 0.1 and 1000 in floating point format.
  7. flt ++Val 2.0 means you are looking for a value that has increased by 2.0 from the prior search.

Breeze result files

  1. The search result is stored as 64-bit address data pair.
  2. First search will scan the whole memory range specified (currently that is all the memory that the game have read and write access).
  3. Subsequent search (search that make use of the resulten file) only look at the address in the prior file used and depending on the search mode it may or may not make use of the stored data in the prior search result file.
  4. Up to three files can be involved in a search.
  5. Using the search manager interface you specify a prior file (A file) to be used for the address range and optionally a B file used for data.
  6. "++", "--", "DIFF", "SAME", "++Val", "--Val" compares current value in RAM at the address stored in A file to the value stored in A file.
  7. "DIFFB", "SAMEB", "B++", "B--" compares current value in RAM at the address stored in A file to the value stored in B file at the same address.
  8. "NotAB" looks for value at the address stored in A file that has value that is different from both the value stored in A file and the value stored in B file.
  9. The whole process continues until the number stored in the result files becomes small enough for hacking to start.

How to install

Copy the contents of Breeze.zip to the root of your SD card.

How to use

https://github.com/tomvita/Breeze-Beta/wiki

Cheat code database

https://github.com/tomvita/NXCheatCode The latest release can be fetched in the app. For people whose Switch is not connected to the internet the file can be fetched and placed in "/switch/breeze/cheats/titles.zip"

Acknowledgement

The UI framework is derived from daybreak. The knowledge on game hacking is gained from making edizon se and many thanks to Werwolv for showing the way both in the work he did and the advice he gave. Thanks to the many people who share their knowledge in coding and game hacking. A big thanks to the Atmosphere team, without atmosphere, there can be no breeze.

breeze-beta's People

Contributors

saintpepsicola avatar tomvita avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

breeze-beta's Issues

Can't change Profile shortcut setting

Hello,
I can't change the "Profile shortcut = 0" setting. When I click on it, I have the message "Profile set to launch Breeze. Go back to launch Profile by toggling this option".
But when I click on "OK", I still have "Profile shortcut = 0".

Am I missing something ? Is there anything I should do ?

Thanks a lot for your help.

Cannot access cheatDB

I was going to use cheats on Mario kart 8 deluxe with breeze but then there were no cheats at all the first time I used this there were but after some time it all the sudden was gone I tried loading from DB and it just said cannot access cheatDB I even use the latest version of cheat database and the breeze app even Edizon

About translation

I want to translate it into Japanese
Doesn't it support language files?

Cannot access cheatfile

when try to Load Cheat from DB the breeze report "Cannot access cheatfile"
titles/010007B010FCC000/cheats/4EEA2970DF38ECE1.txt
the game was sniper elite 4

how to start a unknown search?

i select float type, and SAME, but i cant start search, how to?

btw, anyone can help to search MLB 23 player's attributes?

not work with exefs

i try install exefs mod(main.npdm, subsdk9).

edizon, breeze can’t detect title.

how force load cheat or fix this?

Fire Emblem Engage 1.2.0 BID not recognized

When I try to open Breeze for Fire Emblem Engage it doesn't show me my cheats because Breeze doesn't see the latest BID of the game. It seems to only see the base game's BID.

I'm not sure if I am doing something wrong.

Unable to launch Breeze without all Cheats loading!

Hello @tomvita,

Would you be able to add a LAUNCH option to the Settings for Breeze?
"Launch with all of Title's Cheats Disabled"

There really needs to be a way of launching Breeze without ALL cheats from a specific title enabled. This option must be available as a default of all games. There are a lot of cheats which games just do not refresh the portion of memory they alter so if you launch the games with cheats enabled or launch Breeze with a game booted with cheats disabled, the program immediately enables all Cheats.

This produces two noticible pains in the back side:

  1. Conflicting Cheat Codes
    There are many games wtih more complicated options than ON/OFF. There are many games where a player has a choice between A, B, C, D, and E in which depending upon your level or game, you would want an "ALWAYS A", "ALWAYS B", "ALWAYS C", "ALWAYS D", and "ALWAYS E" in your cheat file.

  2. Anti-Cheat Protection
    There are various Nintendo 1st Party Titles (and adjustence 1st Party titles ~ ie Pokémon series) in which the bootload is programmed to check for interference with memory addresses. The Nintendo titles with these anti-cheats will typically hard lock the game in the boot screen preventing it from loading.

3.) Programming Cheats
The cheat codes designed by replacing game mechanics code typically do not turn until the game is closed. For cheat codes which would crash the game or conflict with others, these becomes stuck in the game if launched at all. This is extremely problematic.

This is an issue that seemed to be remedied in the later versions of EdiZon SE as prior to this microSD format, EdiZon would default to all cheats Disabled on Start-up.

It just too problematic for the application defaulting to immediately enabling every cheat. A user should not have to prey that a game breaking cheat loaded cause their save was in an incompatible area of the game nor should they have to manually add cheats back to their list every other game session cause Breeze won't let the cheats just sit there doing nothing.)

There's some suggestion that the "TOGGLE" setting is supposed to provide a method for doing this. I found a file in my BREEZE file folder with a list of cheats with the word TRUE under them. None of the cheat names match my list of cheats in ATMOSPHERE/CONTENTS... so if this has anything to do with what I am looking for... documentation would be very helpful.

(I do agree that Breeze has an easier on the eyes interface.)

Thanks in advance!

freezes and error when clicking game info

Just added latest cheat file for TOTK (in multiple folders because breeze kept saying it couldnt find) then i reinstalled with github (copied to sd etc) and now it stopped working any tips??
IMG_20231027_135247

zing froze my whole switch if I use larger cheat txt over 250kb or more.

I know this may be wrong place. this is about zing overlay menu for cheats.
you need to enable issues posting in the zing repo.

I run modded atmosphere because I need to run large cheat txts. I make my own cheats thou.
my modded atmosphere can be found at https://github.com/ELY3M/Atmosphere

I had to reduce my txt size to 225 kb to avoid zing freezing my whole switch.
It is for latest Animal Crossing: New Horizons.

to reproduce, load my modified atmosphere and zing and latest tesla overlay and menu
reboot switch
get this text cheats txt from this post and put it in /atmosphere/contents/01006F8002326000/cheats on your sd card.

load acnh game and let game load all way to where you stand at your house.

try to bring the menu and load cheats. it will freeze your switch.
you have to hold power button for 30 secs and get in RCM mode and boot cfw.

test cheat txt here.
747A5B4CBC530AED.txt

Ftp server 420000000000000F included with Breeze "sys-ftpd-10k" causes Atmosphere to crash randomly in some games when opening Homebrew menu.

(Breeze beta88)
When the "sys-ftpd-10k" (420000000000000F) module is active some games can crash when opening homebrew menu via album while game is running. Guaranteed crash is Megaman 11

To reproduce:
Install Megaman 11 [v65536], Reboot console, open Megaman 11, switch out of the game(leave it running in the background) and open Homebrew menu via album. Console will crash with 0x290 (2144-0001) error. If it does not happen on first try, reboot and try again. This only happens if the sys-ftpd-10k module is enabled after a reboot. If it is disabled momentarily and afterwards is enabled the crash will not occur. So we can reboot, disable module and then re-enable module crash will not occur. It seems the problem only occurs if the module is loaded at boot and not disabled for that session.

To avoid crash, after a fresh reboot, just disable and re-enable sys-ftpd-10k and it will not crash for that session.
Rebooting with the module disabled and then enabled afterwards will also not cause crash.
Removing 420000000000000F from Atmosphere contents will permanently fix the problem, but we cannot make use of the ftp server that runs in the background obviously.

NOTE: 0100000000001000 is not present in atmosphere/contents

Atmosphère Fatal Report (v1.1):
Result: 0x290 (2144-0001)

Program ID: 0100000000001000
Process Name: qlaunch
Firmware: 17.0.1 (Atmosphère 1.6.2-master-f7bf379cf)
General Purpose Registers:
FP: 0000004f41f2e4d0
LR: 000000701a4a5de4
SP: 0000004f41f2e4d0
PC: 000000701a43a0b8
Start Address: 000000701a200000
Stack Trace:
ReturnAddress[00]: 000000701a509fa8
ReturnAddress[01]: 000000701a509988
ReturnAddress[02]: 000000701a509ab8
ReturnAddress[03]: 000000701a3fb09c
ReturnAddress[04]: 000000701a3fa1ac
ReturnAddress[05]: 000000701a3fa268
ReturnAddress[06]: 000000701a3fa348
ReturnAddress[07]: 000000701a509208
ReturnAddress[08]: 000000701a28cc34
ReturnAddress[09]: 000000701a28ccc8
ReturnAddress[10]: 000000701ab65a98
ReturnAddress[11]: 000000701a53c740
ReturnAddress[12]: 000000701a53bfb0
ReturnAddress[13]: 000000701a3e03d0
ReturnAddress[14]: 000000701a3e3594
ReturnAddress[15]: 0000000000000000
Stack Dump: 00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f
004f41f2e4d0 70 e5 f2 41 4f 00 00 00 a8 9f 50 1a 70 00 00 00
004f41f2e4e0 01 01 00 00 00 00 10 00 0c 00 00 80 01 00 00 00
004f41f2e4f0 03 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
004f41f2e500 05 00 00 00 00 00 00 00 00 00 00 00 08 00 00 00
004f41f2e510 00 00 00 00 14 00 00 00 00 00 00 00 00 00 00 00
004f41f2e520 00 d0 bb 44 26 00 00 00 00 00 00 00 00 00 00 00
004f41f2e530 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
004f41f2e540 58 e5 f2 41 4f 00 00 00 15 00 00 00 00 00 00 00
004f41f2e550 d8 22 20 1b 70 00 00 00 50 02 00 00 00 00 00 00
004f41f2e560 e0 e4 f2 41 4f 00 00 00 00 3e 8a d0 31 00 00 00
004f41f2e570 e0 e5 f2 41 4f 00 00 00 88 99 50 1a 70 00 00 00
004f41f2e580 d7 d9 be 1a 70 00 00 00 d0 e7 f2 41 4f 00 00 00
004f41f2e590 d7 d9 be 1a 70 00 00 00 00 00 00 00 00 00 00 00
004f41f2e5a0 90 e3 16 1b 70 00 00 00 a0 e4 16 1b 70 00 00 00
004f41f2e5b0 18 e6 f2 41 4f 00 00 00 00 00 00 00 00 00 00 00
004f41f2e5c0 d0 e3 16 1b 70 00 00 00 30 e8 ec 1a 70 00 00 00
TLS Address: 00000031d08a3e00
TLS Dump: 00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f
0031d08a3e00 06 00 10 00 0c 00 00 80 01 00 00 00 9c 01 6e 00
0031d08a3e10 00 00 00 00 50 02 00 00 d8 22 20 1b 1c 00 00 00
0031d08a3e20 53 46 43 49 01 00 00 00 02 00 00 00 00 00 00 00
0031d08a3e30 90 02 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0031d08a3e40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0031d08a3e50 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0031d08a3e60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0031d08a3e70 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0031d08a3e80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0031d08a3e90 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0031d08a3ea0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0031d08a3eb0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0031d08a3ec0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0031d08a3ed0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0031d08a3ee0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0031d08a3ef0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

App crash

App crashes if edizon/profile.zip is removed, even thought breeze/profile.zip is newer.

User page crash

If you were to install the current version of Breeze and then try to open your user page on emunand (you don't need to have launched breeze at all) atmosphere will completely crash.

Edizon used the user page as a way to access the cheat menu, so I'm guessing this is a remnant of that.

Clarify release contents with better documentation

I'm quite interested in this project but I'm wondering if you can clarify the file contents and the purpose of some things that are included without any documentation.

  • Why is EdiZon included?
  • Why is there a bunch of ZIP files in the Breeze folder (I assume they are moved/copied at runtime to enable various features)?
  • Why is there a contents folder for DMNT (010000000000000D) included with only a flag and nothing else (I suspect this is something to do with the ZIPs)?
  • Why is there an alternate hbl.nsp and hbmenu,nro included in the Breeze folder?
  • Why is there another folder inside the Breeze folder called "reeze" with another hbmenu.nro in it?

I'm asking these because it seems super confusing to me and I imagine it is confusing to others as well, especially with respect to the hbmenu and hbl files.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.