You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
A savegame exploit / homebrew entrypoint for the game Robotech: Battlecry on the GameCube.
3
+
A savegame exploit / homebrew entrypoint for the game Robotech: Battlecry on the GameCube and Xbox.
4
4
5
-
Compatible with both USA and EUR revisions of the game. (Only USA has been tested on real GC hardware.)
5
+
Compatible with both USA and EUR revisions of the game, and all 7 retail Xbox kernels. (Untested)
6
6
7
7
["it's a stack overflow in the profile name on a 6th gen console game"](https://tenor.com/view/buzz-lightyear-factory-you-will-never-find-another-store-shelf-a-bunch-of-buzz-lightyears-gif-21719996) (Tenor GIF link)
8
8
9
-
## How to Use
10
-
11
-
1. Copy the .gci file for your region from [the robohaxx releases page](https://github.com/InvoxiPlayGames/robohaxx/releases)
9
+
## How to Use (Xbox)
10
+
11
+
1. Get the kernel version from your Xbox using the dashboard.
12
+
* Go to Settings -> System Info, then read the value that says **K** (e.g. K:1.00.**5530**.01, bold is the important part).
13
+
**The part that says "D" is the dashboard version, and does not matter!*
14
+
2. Download the .zip file for your region and kernel version from [the robohaxx releases page](https://github.com/InvoxiPlayGames/robohaxx/releases/tag/release-xbox-1.0)
15
+
and extract the contents, then copy it to an Xbox formatted USB drive using a tool like Xplorer360.
16
+
* If using Rocky5's softmod tool, you also want to have the "Softmod Save" from [Rocky5's Xbox Softmodding Tool](https://github.com/Rocky5/Xbox-Softmodding-Tool/blob/master/README.md)
17
+
copied to the USB drive as well. This file is in the "Softmod Package" folder in the downloaded Xbox Softmodding Tool ZIP file.
18
+
* If not using the Rocky5 softmod tool, replace the "default.xbe" in the files you extracted with whatever you're using.
19
+
3. On the Xbox dashboard, connect your USB drive and copy the robohaxx savegame as well as the Xbox Softmodding Tool.
20
+
* Ensure there are **NO** other savegames for Robotech: Battlecry on the hard drive.
21
+
* While you're here, double check that the kernel version and region on the save file match your console.
22
+
4. Launch Robotech: Battlecry.
23
+
5. At the main menu, select the "Load Game" option.
24
+
6. After a few seconds, the Xbox Softmodding Tool (or anything else you decide to load) *should* load!
25
+
* The light on your Xbox will blink and change colour. This is expected and normal.
26
+
27
+
## How to Use (GameCube)
28
+
29
+
1. Copy the .gci file for your region from [the robohaxx releases page](https://github.com/InvoxiPlayGames/robohaxx/releases/tag/release-1.0)
12
30
to your Memory Card using [GCMM](https://github.com/suloku/gcmm/releases).
13
31
* While you're here, make sure you have the latest Swiss boot GCI, too. (Or any other boot.dol.)
14
32
* Ensure there are **NO** other savegames for Robotech: Battlecry on the memory card.
15
33
2. Launch Robotech: Battlecry.
16
34
3. At the main menu, select the "Load Game" option.
17
-
4.Afetr a few seconds, Swiss (or any other homebrew) *should* load!
35
+
4.Aetfer a few seconds, Swiss (or any other homebrew) *should* load!
18
36
19
37
## Credits
20
38
39
+
### Xbox
40
+
41
+
Thank you to [agarmash](https://github.com/agarmash) for the clean writeup on his [Frogger Beyond exploit](https://github.com/agarmash/FroggerBeyondExploit),
42
+
as well as assistance and motivation in building this, and the modified "ernie" shellcode.
43
+
44
+
Thank you to the NKPatcher developer(s) for the base of the shellcode used in the exploit, and thanks to [Rocky5](https://github.com/Rocky5)
45
+
for the Xbox Softmodding Tool.
46
+
47
+
Shoutouts to the helpful folks in the XboxDev Discord server for pointers and guidance in putting this together.
48
+
49
+
### GameCube
50
+
21
51
Thank you to [FIX94](https://github.com/FIX94) for the gc-exploit-common-loader DOL loader, and for
22
-
example code for memory card loaders in other GC savegame exploits.
52
+
example code for memory card loaders in other GameCube savegame exploits.
23
53
24
-
Thanks to [Essem](https://github.com/TheEssem) for testing on real hardware, and being the inspiration behind this
25
-
[by just wanting a way to launch Swiss that isn't Animal Crossing.](https://wetdry.world/@esm/110792836912696997)
54
+
Thanks to [Essem](https://github.com/TheEssem) for testing on real GameCube hardware, and being the inspiration behind
55
+
this discovery [by just wanting a way to launch Swiss that isn't Animal Crossing.](https://wetdry.world/@esm/110792836912696997)
26
56
27
-
## Building from Source
57
+
## Building from Source (GameCube)
28
58
29
59
The source has two components, the memory card loader and the GCI builder. The memory card loader will
30
60
build if you have devkitPPC installed (although any powerpc-eabi GCC will work, change the Makefile).
@@ -36,10 +66,42 @@ compile the GCI builder, and then build the robohaxx GCI savefiles. Type `make`
36
66
37
67
If you only want to build for a specific region, type `make usa` or `make eur`.
38
68
69
+
## Building from Source (Xbox)
70
+
71
+
The Xbox source consists of the modified "ernie" shellcode and the XSV builder. The ernie shellcode requires
72
+
the NASM assembler, while the XSV builder requires a C build system installed.
73
+
74
+
First, open a Terminal **in the xbox_src directory.** To build the ernie shellcode, run `nasm ernie.asm`, and to
75
+
build the XSV builder, run `make`. It should build on macOS, Linux/WSL, and MingW64 on Windows.
76
+
77
+
The resulting game.xsv file can be created by typing `./xsv_builder ernie E 5530`, replacing E with U if
78
+
targeting the USA version of the game, and 5530 with a supported target kernel version. If using another payload,
79
+
replace "ernie" with the filename, and if using a custom set of offsets, provide the filename in place of the
80
+
kernel version.
81
+
82
+
Supported kernels are 3944, 4034, 4817, 5101, 5530, 5713 and 5838, which should cover all retail kernels.
83
+
Note that kernels 5530, 5713 and 5838 use the same ROP offsets - the output savegame will be identical.
84
+
85
+
Additional support is left over for the unofficial 4627 debug kernel. Unsupported/unofficial/debug kernels can
86
+
be supported - if you use a tool such as ROPper to find offsets to identical gadgets in xboxkrnl.exe, you can
87
+
create a file containing the raw addresses in binary little-endian format according to this structure:
88
+
89
+
```c
90
+
typedefstruct _ROPStringGadgets {
91
+
uint32_t pop_eax__ret_4; // ("pop eax; ret 4;")
92
+
uint32_t pop_ecx__pop_ebx__ret_4; // ("pop ecx; pop ebx; ret 4;")
; Originally modified from: https://github.com/agarmash/FroggerBeyondExploit/blob/master/source/savefile.asm
4
+
; which was modified from https://github.com/Rocky5/Xbox-Softmodding-Tool/blob/master/App%20Sources/NKPatcher/Main%20NKP11/ernie.asm
5
+
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
6
+
7
+
BITS 32
8
+
base:
9
+
movebp,eax ; Set the EBP to point to the beginning of the exploit (ROP chain makes eax the start address!)
10
+
cld ; Clear the Direction Flag so the string instructions increment the address
11
+
movesi,80010000h ; Kernel base address
12
+
moveax,[esi+3Ch] ; Value of e_lfanew (File address of new exe header)
13
+
movebx,[esi+eax+78h] ; Value of IMAGE_NT_HEADERS32 -> IMAGE_OPTIONAL_HEADER32 -> IMAGE_DATA_DIRECTORY -> ibo32 (Virtual Address) (0x02e0)
14
+
addebx,esi
15
+
movedx,[ebx+1Ch] ; Value of IMAGE_DIRECTORY_ENTRY_EXPORT -> AddressOfFunctions (0x0308)
16
+
addedx,esi ; Address of kernel export table
17
+
leaedi,[ebp+kexports-base] ; Address of the local kernel export table
18
+
getexports:
19
+
movecx,[edi] ; Load the entry from the local table
20
+
jecxz .done
21
+
subecx,[ebx+10h] ; Subtract the IMAGE_DIRECTORY_ENTRY_EXPORT -> Base
22
+
moveax,[edx+4*ecx] ; Load the export by number from the kernel table
23
+
testeax,eax
24
+
jz .empty ; Skip if the export is empty
25
+
addeax,esi ; Add kernel base address to the export to construct a valid pointer
26
+
.empty:
27
+
stosd ; Save the value back to the local table and increment EDI by 4
28
+
jmp getexports
29
+
.done:
30
+
blinkled: ; https://xboxdevwiki.net/PIC#The_LED
31
+
movedi,[ebp+HalWriteSMBusValue-base]
32
+
push0D7h ; Red-orange-green-orange LED sequence
33
+
push byte 0
34
+
push byte 8
35
+
push byte 20h
36
+
calledi
37
+
push byte 1
38
+
push byte 0
39
+
push byte 7
40
+
push byte 20h
41
+
calledi
42
+
patchpublickey:
43
+
movebx,[ebp+XePublicKeyData-base] ; The structure and location of the RSA key hasn't been changed between the kernel versions, no need to search for anything
44
+
pushf ; Enter the critical section, more details here:
0 commit comments