From c58aa93d1e9265ff6be3a64d05cd01697ed0a656 Mon Sep 17 00:00:00 2001 From: Bernhard Urban Date: Wed, 2 Feb 2011 03:14:14 +0100 Subject: [PATCH] LEGO Star Wars by roto --- Makefile | 2 + lsw/.gitignore | 5 ++ lsw/Makefile | 127 +++++++++++++++++++++++++++++++++++++++++ lsw/README | 41 +++++++++++++ lsw/exploit.s | 38 ++++++++++++ lsw/exploit2.s | 57 ++++++++++++++++++ lsw/generic-banner.png | Bin 0 -> 20173 bytes lsw/generic-banner.ppm | Bin 0 -> 36878 bytes lsw/head.b | Bin 0 -> 1256 bytes lsw/head.s | 43 ++++++++++++++ lsw/lego.lds | 26 +++++++++ lsw/make-title-bin.pl | 16 ++++++ lsw/pack.sh | 3 + lsw/rlge-icon.png | Bin 0 -> 4017 bytes lsw/rlge-icon.ppm | Bin 0 -> 6925 bytes lsw/rlgj-icon.png | Bin 0 -> 3943 bytes lsw/rlgj-icon.ppm | Bin 0 -> 6925 bytes lsw/rlgp-icon.png | Bin 0 -> 3950 bytes lsw/rlgp-icon.ppm | Bin 0 -> 6925 bytes lsw/titleid.pl | 2 + lsw/toc-rlge | 4 ++ lsw/toc-rlgj | 4 ++ lsw/toc-rlgp | 4 ++ 23 files changed, 372 insertions(+) create mode 100644 lsw/.gitignore create mode 100644 lsw/Makefile create mode 100644 lsw/README create mode 100644 lsw/exploit.s create mode 100644 lsw/exploit2.s create mode 100644 lsw/generic-banner.png create mode 100644 lsw/generic-banner.ppm create mode 100755 lsw/head.b create mode 100644 lsw/head.s create mode 100644 lsw/lego.lds create mode 100755 lsw/make-title-bin.pl create mode 100755 lsw/pack.sh create mode 100644 lsw/rlge-icon.png create mode 100644 lsw/rlge-icon.ppm create mode 100644 lsw/rlgj-icon.png create mode 100644 lsw/rlgj-icon.ppm create mode 100644 lsw/rlgp-icon.png create mode 100644 lsw/rlgp-icon.ppm create mode 100755 lsw/titleid.pl create mode 100644 lsw/toc-rlge create mode 100644 lsw/toc-rlgj create mode 100644 lsw/toc-rlgp diff --git a/Makefile b/Makefile index d9920c0..65f82d3 100644 --- a/Makefile +++ b/Makefile @@ -53,6 +53,7 @@ all: FORCE .version $(Q)$(MAKE) -C twilight $(Q)$(MAKE) -C lego $(Q)$(MAKE) -C batman + $(Q)$(MAKE) -C lsw FORCE: @@ -62,3 +63,4 @@ clean: $(MAKE) -C twilight clean $(MAKE) -C lego clean $(MAKE) -C batman clean + $(MAKE) -C lsw clean diff --git a/lsw/.gitignore b/lsw/.gitignore new file mode 100644 index 0000000..7b626cd --- /dev/null +++ b/lsw/.gitignore @@ -0,0 +1,5 @@ +rlg?.bin +FILE_V28 +exploit.bin +exploit.elf +title.bin diff --git a/lsw/Makefile b/lsw/Makefile new file mode 100644 index 0000000..60e345f --- /dev/null +++ b/lsw/Makefile @@ -0,0 +1,127 @@ +# Copyright 2008-2009 Segher Boessenkool +# Copyright 2011 roto +# Copyright 2011 Bernhard Urban +# This code is licensed to you under the terms of the GNU GPL, version 2; +# see file COPYING or http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt + + +# Configuration: + +# What toolchain prefix should we use +CROSS ?= broadway- + +# Where are the tools (http://git.infradead.org/users/segher/wii.git) +TOOLS ?= $(HOME)/wii/segher + +# End of configuration. + + + +# Set CC, LD, OBJCOPY based on CROSS, unless they are set already + +ifeq ($(origin CC), default) + CC := $(CROSS)gcc -m32 +endif +ifeq ($(origin LD), default) + LD := $(CROSS)ld +endif +OBJCOPY ?= $(CROSS)objcopy + + +# The compiler flags we need. + +CFLAGS := -Wall -W -Os -ffreestanding -mno-eabi -mno-sdata -mcpu=750 + + +# Build with "V=1" to see the commands executed; be quiet otherwise. + +ifeq ($(V),1) + Q := +else + Q := @ + MAKEFLAGS += --no-print-directory +endif + + +targets := rlge.bin rlgp.bin rlgj.bin + +ppms := $(targets:%.bin=%-icon.ppm) generic-banner.ppm +assets := title.bin $(ppms) + +loader := ../loader/loader.bin + + +titleid = $(shell perl titleid.pl $(1)) + + +define twintig + D=$(call titleid,$(1)); \ + $(TOOLS)/twintig $$D $@ toc-$1 +endef + + +all: $(targets) + +$(targets): %.bin: toc-% FILE_V28 $(assets) + @echo " TWINTIG $@" + $(Q)$(call twintig,$*) + +FILE_V28: head.bin exploit.bin $(loader) + @echo " LEGOSTACK $@" + $(Q)./pack.sh $@ $^ + $(Q)$(TOOLS)/lego-cksum $@ 32380 #32328 #32688 + +head.bin: head.elf + @echo " OBJCOPY $@" + $(Q)$(OBJCOPY) -Obinary $< $@ + +exploit.bin: exploit.elf + @echo " OBJCOPY $@" + $(Q)$(OBJCOPY) -Obinary $< $@ + +exploit.elf: lego.lds exploit.o + @echo " LINK $@" + $(Q)$(LD) -T $^ -o $@ + +head.elf: head.o + @echo " LINK $@" + $(Q)$(LD) -e 0 $< -o $@ + +exploit.o: exploit.s + @echo " ASSEMBLE $@" + $(Q)$(CC) $(CFLAGS) -c $< -o $@ + +head.o: head.s head.b exploit2.s exploit.bin + @echo " ASSEMBLE $@" + $(Q)$(CC) $(CFLAGS) \ + -Wa,--defsym,exploitlen=$(shell wc -c exploit.bin | awk '{ print $$1 }') \ + -c $< -o $@ + +title.bin: ../.version + @echo " TITLEBIN $@" + $(Q)perl make-title-bin.pl > $@ + +../.version: FORCE + $(Q)$(MAKE) -C .. .version + +$(ppms): %.ppm: %.png + @echo " PPM $@" + $(Q)convert $< $@ + +zero16k: + $(Q)dd if=/dev/zero bs=18256 count=1 2>/dev/null > $@ +#17332 +#16384 +FAILURE: + $(Q)echo FAILURE > $@ + +$(loader): FORCE + $(Q)$(MAKE) -C ../loader + +FORCE: + +clean: + -rm -f $(targets) FILE_V28 + -rm -f exploit.bin exploit.elf exploit.o + -rm -f head.bin head.elf head.o + -rm -f title.bin diff --git a/lsw/README b/lsw/README new file mode 100644 index 0000000..060c267 --- /dev/null +++ b/lsw/README @@ -0,0 +1,41 @@ +Copyright 2011 roto +Copyright 2011 Bernhard Urban +Copyright 2008-2009 Segher Boessenkool +Copyright 2008 Haxx Enterprises +Copyright 2008 Hector Martin "marcan" +Copyright 2003-2004 Felix Domke + +This code is licensed to you under the terms of the GNU GPL, version 2; +see file COPYING or http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt + +Console font created by Freddy Leitner [www.dreamer.de], based on +the Droid Sans Mono font [www.droidfonts.com]. + +-- + +This is the Lego Star Wars exploit known as "Return of the Jodi". This exploit +works on all versions of the game (including 1.01) in all regions that are +currently known to have a release. + +Instructions: + +1. Copy the save to your SD card. +2. Put a "boot.elf" (such as the HackMii installer or Homebrew Channel) into the + ROOT of your SD card (not into any folder). +3. Copy the save to your Wii system, make sure you have a save for this game + already on your system, otherwise you won't be able to copy the exploit + save over. +4. Start up the game, load the first save slot (on the left, at 0.0%) +5. As soon as the level loads, run to the right and you'll see two characters + floating. Run to the area in front of them and you'll see "Return of Jodi" + show up, press the "A" button on your Wiimote and your boot.elf will run! + + +Credits: +Team Twiizers - Original LIJ release, source, savezelda (and many other things). +roto - Developing and testing this exploit. +lewurm - Cleaning up, fixing bugs, testing. +drmr - Awesome banner/icons! + +Thanks: +Everyone! diff --git a/lsw/exploit.s b/lsw/exploit.s new file mode 100644 index 0000000..f5b6bbd --- /dev/null +++ b/lsw/exploit.s @@ -0,0 +1,38 @@ +# Copyright 2008-2009 Segher Boessenkool +# Copyright 2011 roto +# This code is licensed to you under the terms of the GNU GPL, version 2; +# see file COPYING or http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt + + .section .start,"ax" + +start: + # Set up a stack frame. + lis 1,0x8080 ; li 0,0 ; stwu 0,-64(1) + + # Stop audio and video. + lis 0,audio_stop@h ; ori 0,0,audio_stop@l ; mtctr 0 ; bctrl + lis 0,video_stop@h ; ori 0,0,video_stop@l ; mtctr 0 ; bctrl + + # Move code into place; a generous 32kB, starting at 64kB in + # the save file. + + # Load address where we're going to move our exploit code to + # (0x90000020) into R03 + lis 3,main@h ; ori 3,3,main@l ; addi 5,3,-4 + + # Load the address for the beginning of our save data + # (0x91168ea0) into R04 + lis 4,save@h ; ori 4,4,save@l ; addi 4,4,-4 + + addis 4,4,1 ; addi 4,4,end-start + li 0,0x2000 ; mtctr 0 +0: lwzu 0,4(4) ; stwu 0,4(5) ; bdnz 0b + + # Sync caches on it. + li 0,0x0400 ; mtctr 0 ; mr 5,3 +0: dcbst 0,5 ; sync ; icbi 0,5 ; addi 5,5,0x20 ; bdnz 0b + sync ; isync + + # Jump to 0x90000020 and go for it! + mtctr 3 ; bctr +end: diff --git a/lsw/exploit2.s b/lsw/exploit2.s new file mode 100644 index 0000000..a845958 --- /dev/null +++ b/lsw/exploit2.s @@ -0,0 +1,57 @@ +# Copyright 2008-2009 Segher Boessenkool +# Copyright 2011 roto +# Copyright 2011 Bernhard Urban +# This code is licensed to you under the terms of the GNU GPL, version 2; +# see file COPYING or http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt + + bptr = 0x91178ea0 + save = 0x91177f40 + main = 0x90000020 + + audio_stop_usa = 0x8038ce9c + video_stop_usa = 0x8039971c + + audio_stop_eur = 0x8038cfec + video_stop_eur = 0x80399708 + + audio_stop_data = 0x9421fff0 # stwu 1,-16(1) + video_stop_data = 0x9421ffe0 # stwu 1,-32(1) + + # Set up a stack frame. + lis 1,0x8080 ; li 0,0 ; stwu 0,-64(1) + + # Stop audio. + lis 10,audio_stop_data@h ; ori 10,10,audio_stop_data@l + lis 3,audio_stop_usa@h ; ori 3,3,audio_stop_usa@l; lwz 5,0(3) + cmpw 5,10 ; beq execa + lis 3,audio_stop_eur@h ; ori 3,3,audio_stop_eur@l +execa: + mtctr 3 ; bctrl + + # Stop video. + lis 10,video_stop_data@h ; ori 10,10,video_stop_data@l + lis 3,video_stop_usa@h ; ori 3,3,video_stop_usa@l; lwz 5,0(3) + cmpw 5,10 ; beq execv + lis 3,video_stop_eur@h ; ori 3,3,video_stop_eur@l +execv: + mtctr 3 ; bctrl + + # Move code into place; a generous 32kB, starting at 64kB in + # the save file. + lis 3,main@h ; ori 3,3,main@l ; addi 5,3,-4 + lis 4,save@h ; ori 4,4,save@l ; addi 4,4,-4 + + addis 4,4,1 ; addi 4,4,exploitlen # offset for exploit.bin + + li 0,0x2000 ; mtctr 0 +loop1: + lwzu 0,4(4) ; stwu 0,4(5) ; bdnz loop1 + + # Sync caches on it. + li 0,0x0400 ; mtctr 0 ; mr 5,3 +loop2: + dcbst 0,5 ; sync ; icbi 0,5 ; addi 5,5,0x20 ; bdnz loop2 + sync ; isync + + # Go for it! + mtctr 3 ; bctr diff --git a/lsw/generic-banner.png b/lsw/generic-banner.png new file mode 100644 index 0000000000000000000000000000000000000000..870b6bb5f3b2f6e68184dd038aa9f2abc9ded754 GIT binary patch literal 20173 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�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 F002ICKPvzL literal 0 HcmV?d00001 diff --git a/lsw/head.s b/lsw/head.s new file mode 100644 index 0000000..6670b80 --- /dev/null +++ b/lsw/head.s @@ -0,0 +1,43 @@ +# Copyright 2011 roto +# This code is licensed to you under the terms of the GNU GPL, version 2; +# see file COPYING or http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt + + bptr = 0x91178ea0 + +0: + # Part of the savefile + .long 0x00000001, 0x00000000, 0x00000000, 0x00000000 + .long 0x00000000, 0x00000013, 0x0000000d, 0x00000000 + .long 0x00000002, 0x00000000, 0x000007db, 0x00000000 + .long 0x00000001, 0x0000029e, 0x0000019d, 0x00050000 + .long 0x01010008, 0x060a0100, 0x00000001, 0x00000000 + .long 0x00000000, 0x00000000, 0x00000000, 0x00000000 + + # Filler + .fill 0xF60 - (. - 0b) + +exploitv2: + # This is necessary for the 2nd exploit (first release) of LSW + .include "exploit2.s" + + # More filler + .fill 0x7860 - (. - 0b) + + # Insert rest of the save + .incbin "head.b" + + # Smack the stack. + .long 0x11111111, 0x11111111, 0x11111111, 0x11111111 + .long 0x11111111, 0x11111111, 0x11111111, 0x11111111 + .long 0x11111111, 0x11111111, 0x11111111, 0x11111111 + .long 0x11111111, 0x11111111, 0x11111111, 0x11111111 + .long 0x11111111, 0x11111111, 0x11111111, 0x11111111 + .long 0x11111111, 0x11111111, 0x11111111, 0x11111111 + .long 0x11111111, 0x11111111, 0x11111111, 0x11111111 + .long 0x11111111, 0x11111111, 0x11111111, 0x11111111 + .long 0x11111111 + + # Depending on the version we jump now to exploit.s or to "exploit2v:" + .long 0x11111111, bptr, 0x11111111, 0x11111111 + + .fill 0x10000 - (. - 0b) diff --git a/lsw/lego.lds b/lsw/lego.lds new file mode 100644 index 0000000..1718044 --- /dev/null +++ b/lsw/lego.lds @@ -0,0 +1,26 @@ +/* Copyright 2008-2009 Segher Boessenkool + This code is licensed to you under the terms of the GNU GPL, version 2; + see file COPYING or http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt */ + +OUTPUT_FORMAT("elf32-powerpc") +OUTPUT_ARCH(powerpc:common) + +SECTIONS { + audio_stop = 0x8038ce90; + video_stop = 0x80399708; + + save = 0x91168ea0; + bptr = 0x91178ea0; + + main = 0x90000020; + + .twilight save : + { + rli*.o(.start) + *(.text) + *(.rodata .rodata.*) + *(.data) + *(.bss) + /* . = 0x0a94; */ + } +} diff --git a/lsw/make-title-bin.pl b/lsw/make-title-bin.pl new file mode 100755 index 0000000..4bcc5d7 --- /dev/null +++ b/lsw/make-title-bin.pl @@ -0,0 +1,16 @@ +#!/usr/bin/perl +sub printline { + my $x = shift; + chomp $x; + $x .= "\0" x 32; + $x = substr $x, 0, 32; + $x =~ s/(.)/\0$1/g; + + print $x; +} + +$name = "Return of the Jodi"; +$version = `cat ../.version`; + +printline $name; +printline $version; diff --git a/lsw/pack.sh b/lsw/pack.sh new file mode 100755 index 0000000..57a388b --- /dev/null +++ b/lsw/pack.sh @@ -0,0 +1,3 @@ +#!/bin/bash +TARGET=$1; shift +cat $* /dev/zero | dd bs=1024 count=128 2>/dev/null > $TARGET diff --git a/lsw/rlge-icon.png b/lsw/rlge-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..222c293a819a587cb4d0091ff95cd5f8a79f0797 GIT binary patch literal 4017 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 X_NLi|e@X~|00000NkvXXu0mjf4%pcE literal 0 HcmV?d00001 diff --git a/lsw/rlge-icon.ppm b/lsw/rlge-icon.ppm new file mode 100644 index 0000000000000000000000000000000000000000..0b55e590314cb83b18c7fb6614b3031ddf18baeb GIT binary patch literal 6925 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 Sd40A}APcwOG^GEt8~+={|EIP9 literal 0 HcmV?d00001 diff --git a/lsw/rlgj-icon.png b/lsw/rlgj-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..cc0edc003424b228a3bec35b1bd8280c62b7ad51 GIT binary patch literal 3943 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

ns$mjdcyVOp>FlMAqS0 zzNM-9LT~*1`5t7GZ5hdo;RxP=Aq~5R0&-(xRpB77qv#+B+OZ73Na5YwAHyOl z$CAMklvsXQu(cdUNJ5XN(n*Q2!RNSTBSD_9^%9w#JH2u7(wk!KCwo=7%NmW+%uutm zZA*1^4Gd*=^+p9w5+#YCK%F%1=!~LA2Vz56y(^j%d{udi!z(qJR&#l4*37Y-B=--d z0v=8jIfLXgIa~J1J`az#J5E^|5EDZ=(#jQnWRYcx<|5^lv7t;}Ng=vMJ~y#Ouyt*) zr#q?$T4+)%!_<~bIYlEc;r{<~p@_dS`R^HoVi_dp7St$;$*;>Tx7<>!m(g9ZVnuNx zK4Ij|H{bk0J%s&68iAT=*REYZbjVQHyRRxVT$?WO=wA_rP&?y=Kk~u!Lm1?OqX?jT z?zyMye{s6|Ysvqb zL2!G~0>GlRwe|aZ$dwmfc;Wji|NmX~UGiT73;;YVsg7>uf>Zzi002ovPDHLkV1jQV BssjK3 literal 0 HcmV?d00001 diff --git a/lsw/rlgj-icon.ppm b/lsw/rlgj-icon.ppm new file mode 100644 index 0000000000000000000000000000000000000000..6388419a1d7dd4d9749df042130ea06c64e881ad GIT binary patch literal 6925 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 IM6N<$g3!{tH2?qr literal 0 HcmV?d00001 diff --git a/lsw/rlgp-icon.ppm b/lsw/rlgp-icon.ppm new file mode 100644 index 0000000000000000000000000000000000000000..4fb2024e27a66988edac3a328092d80c75f426a3 GIT binary patch literal 6925 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