added ninjhax entry code
This commit is contained in:
134
ninjhax/data/payload/Makefile
Normal file
134
ninjhax/data/payload/Makefile
Normal file
@@ -0,0 +1,134 @@
|
||||
#---------------------------------------------------------------------------------
|
||||
.SUFFIXES:
|
||||
#---------------------------------------------------------------------------------
|
||||
|
||||
ifeq ($(strip $(DEVKITARM)),)
|
||||
$(error "Please set DEVKITARM in your environment. export DEVKITARM=<path to>devkitARM")
|
||||
endif
|
||||
|
||||
include $(DEVKITARM)/ds_rules
|
||||
|
||||
#---------------------------------------------------------------------------------
|
||||
# TARGET is the name of the output
|
||||
# BUILD is the directory where object files & intermediate files will be placed
|
||||
# SOURCES is a list of directories containing source code
|
||||
# DATA is a list of directories containing data files
|
||||
# INCLUDES is a list of directories containing header files
|
||||
# SPECS is the directory containing the important build and link files
|
||||
#---------------------------------------------------------------------------------
|
||||
export TARGET := $(shell basename $(CURDIR))
|
||||
BUILD := build
|
||||
SOURCES := source source/fatfs source/decryptor
|
||||
DATA := data
|
||||
INCLUDES := include source source/fatfs
|
||||
|
||||
#---------------------------------------------------------------------------------
|
||||
# Setup some defines
|
||||
#---------------------------------------------------------------------------------
|
||||
|
||||
#---------------------------------------------------------------------------------
|
||||
# options for code generation
|
||||
#---------------------------------------------------------------------------------
|
||||
ARCH := -mthumb -mthumb-interwork
|
||||
|
||||
CFLAGS := -g -Wall -O2\
|
||||
-march=armv5te -mtune=arm946e-s -fomit-frame-pointer\
|
||||
-ffast-math -std=c99 -mthumb\
|
||||
$(ARCH)
|
||||
|
||||
CFLAGS += $(INCLUDE) -DARM9
|
||||
|
||||
CXXFLAGS := $(CFLAGS) -fno-rtti -fno-exceptions
|
||||
|
||||
ASFLAGS := -g $(ARCH)
|
||||
LDFLAGS = -nostartfiles -g --specs=../stub.specs $(ARCH) -Wl,-Map,$(TARGET).map
|
||||
|
||||
LIBS :=
|
||||
|
||||
#---------------------------------------------------------------------------------
|
||||
# list of directories containing libraries, this must be the top level containing
|
||||
# include and lib
|
||||
#---------------------------------------------------------------------------------
|
||||
LIBDIRS :=
|
||||
|
||||
#---------------------------------------------------------------------------------
|
||||
# no real need to edit anything past this point unless you need to add additional
|
||||
# rules for different file extensions
|
||||
#---------------------------------------------------------------------------------
|
||||
ifneq ($(BUILD),$(notdir $(CURDIR)))
|
||||
#---------------------------------------------------------------------------------
|
||||
|
||||
export OUTPUT := $(CURDIR)
|
||||
|
||||
export VPATH := $(foreach dir,$(SOURCES),$(CURDIR)/$(dir)) \
|
||||
$(foreach dir,$(DATA),$(CURDIR)/$(dir))
|
||||
|
||||
export DEPSDIR := $(CURDIR)/$(BUILD)
|
||||
|
||||
CFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.c)))
|
||||
CPPFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.cpp)))
|
||||
SFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.s)))
|
||||
BINFILES := $(foreach dir,$(DATA),$(notdir $(wildcard $(dir)/*.*)))
|
||||
|
||||
#---------------------------------------------------------------------------------
|
||||
# use CXX for linking C++ projects, CC for standard C
|
||||
#---------------------------------------------------------------------------------
|
||||
ifeq ($(strip $(CPPFILES)),)
|
||||
#---------------------------------------------------------------------------------
|
||||
export LD := $(CC)
|
||||
#---------------------------------------------------------------------------------
|
||||
else
|
||||
#---------------------------------------------------------------------------------
|
||||
export LD := $(CXX)
|
||||
#---------------------------------------------------------------------------------
|
||||
endif
|
||||
#---------------------------------------------------------------------------------
|
||||
|
||||
export OFILES := $(addsuffix .o,$(BINFILES)) \
|
||||
$(CPPFILES:.cpp=.o) $(CFILES:.c=.o) $(SFILES:.s=.o)
|
||||
|
||||
export INCLUDE := $(foreach dir,$(INCLUDES),-I$(CURDIR)/$(dir)) \
|
||||
$(foreach dir,$(LIBDIRS),-I$(dir)/include) \
|
||||
-I$(CURDIR)/$(BUILD)
|
||||
|
||||
export LIBPATHS := $(foreach dir,$(LIBDIRS),-L$(dir)/lib)
|
||||
|
||||
.PHONY: $(BUILD) clean all
|
||||
|
||||
#---------------------------------------------------------------------------------
|
||||
all: $(BUILD)
|
||||
|
||||
$(BUILD):
|
||||
@[ -d $@ ] || mkdir -p $@
|
||||
@make --no-print-directory -C $(BUILD) -f $(CURDIR)/Makefile
|
||||
|
||||
#---------------------------------------------------------------------------------
|
||||
clean:
|
||||
@echo clean ...
|
||||
@rm -fr $(BUILD) $(OUTPUT).elf $(OUTPUT).bin
|
||||
|
||||
|
||||
#---------------------------------------------------------------------------------
|
||||
else
|
||||
|
||||
DEPENDS := $(OFILES:.o=.d)
|
||||
|
||||
#---------------------------------------------------------------------------------
|
||||
# main targets
|
||||
#---------------------------------------------------------------------------------
|
||||
$(OUTPUT).bin : $(OUTPUT).elf
|
||||
$(OUTPUT).elf : $(OFILES)
|
||||
|
||||
|
||||
#---------------------------------------------------------------------------------
|
||||
%.bin: %.elf
|
||||
@$(OBJCOPY) -O binary $< $@
|
||||
@rm $<
|
||||
@echo built ... $(notdir $@)
|
||||
|
||||
-include $(DEPENDS)
|
||||
|
||||
|
||||
#---------------------------------------------------------------------------------------
|
||||
endif
|
||||
#---------------------------------------------------------------------------------------
|
||||
50
ninjhax/data/payload/source/main.c
Normal file
50
ninjhax/data/payload/source/main.c
Normal file
@@ -0,0 +1,50 @@
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
|
||||
void* (*reiNand)() = 0x08000030;
|
||||
|
||||
void main()
|
||||
{
|
||||
/*int fbfound = 0;
|
||||
unsigned char* screen = 0x20000000;
|
||||
for(int i = 0; i < 0x30; i++){
|
||||
if( *((unsigned int*)(screen + i + 0)) == 0xABADF00D &&
|
||||
*((unsigned int*)(screen + i + 4)) == 0xDEADBEEF ){
|
||||
fbfound = 1;
|
||||
screen += i;
|
||||
}
|
||||
}
|
||||
if(!fbfound){
|
||||
screen = 0x20046500;
|
||||
for(int i = 0; i < 0x30; i++){
|
||||
if( *((unsigned int*)(screen + i + 0)) == 0xABADF00D &&
|
||||
*((unsigned int*)(screen + i + 4)) == 0xDEADBEEF ){
|
||||
fbfound = 1;
|
||||
screen += i;
|
||||
}
|
||||
}
|
||||
}
|
||||
*/
|
||||
*((unsigned int*)0x080FFFC0) = 0x20000000;
|
||||
*((unsigned int*)0x080FFFC4) = 0x20046500;
|
||||
*((unsigned int*)0x080FFFD8) = 0;
|
||||
|
||||
unsigned int* buf = 0x20400000;
|
||||
unsigned int base = 0x67893421;
|
||||
unsigned int seed = 0x12756342;
|
||||
for(int i = 0; i < 400*1024/4; i++){
|
||||
buf[i] ^= base;
|
||||
base += seed;
|
||||
}
|
||||
|
||||
unsigned char*src = 0x20400000;
|
||||
unsigned char*dst = 0x08000000;
|
||||
for(int i = 0; i < 320*1024; i++){
|
||||
dst[i] = src[i];
|
||||
}
|
||||
|
||||
*(unsigned int*)0x10000020 = 0;
|
||||
*(unsigned int*)0x10000020 = 0x340;
|
||||
reiNand();
|
||||
}
|
||||
75
ninjhax/data/payload/source/start.s
Normal file
75
ninjhax/data/payload/source/start.s
Normal file
@@ -0,0 +1,75 @@
|
||||
@---------------------------------------------------------------------------------
|
||||
.section ".init"
|
||||
@---------------------------------------------------------------------------------
|
||||
.global _start
|
||||
.extern main
|
||||
.align 4
|
||||
.arm
|
||||
@---------------------------------------------------------------------------------
|
||||
b _start
|
||||
NOP
|
||||
NOP
|
||||
NOP
|
||||
_start:
|
||||
MSR CPSR_c, #0xDF
|
||||
LDR R0, =0x2078
|
||||
MCR p15, 0, R0,c1,c0, 0
|
||||
LDR R0, =0xFFFF001D
|
||||
LDR R1, =0x1FF801D
|
||||
LDR R2, =0x8000027
|
||||
LDR R3, =0x10000021
|
||||
LDR R4, =0x10100025
|
||||
LDR R5, =0x20000035
|
||||
LDR R6, =0x2800801B
|
||||
LDR R7, =0x1800002D
|
||||
LDR R8, =0x33333336
|
||||
LDR R9, =0x60600666
|
||||
MOV R10, #0x25
|
||||
MOV R11, #0x25
|
||||
MOV R12, #0x25
|
||||
MCR p15, 0, R0,c6,c0, 0
|
||||
MCR p15, 0, R1,c6,c1, 0
|
||||
MCR p15, 0, R2,c6,c2, 0
|
||||
MCR p15, 0, R3,c6,c3, 0
|
||||
MCR p15, 0, R4,c6,c4, 0
|
||||
MCR p15, 0, R5,c6,c5, 0
|
||||
MCR p15, 0, R6,c6,c6, 0
|
||||
MCR p15, 0, R7,c6,c7, 0
|
||||
MCR p15, 0, R8,c5,c0, 2
|
||||
MCR p15, 0, R9,c5,c0, 3
|
||||
MCR p15, 0, R10,c3,c0, 0
|
||||
MCR p15, 0, R11,c2,c0, 0
|
||||
MCR p15, 0, R12,c2,c0, 1
|
||||
LDR R0, =0x2800800C
|
||||
MCR p15, 0, R0,c9,c1, 0
|
||||
MOV R0, #0x1E
|
||||
MCR p15, 0, R0,c9,c1, 1
|
||||
|
||||
MOV R12, #0
|
||||
loc_9D3D54:
|
||||
MOV R0, #0
|
||||
MOV R2, R12,LSL#30
|
||||
loc_9D3D5C:
|
||||
ORR R1, R2, R0,LSL#5
|
||||
MCR p15, 0, R1,c7,c14, 2
|
||||
ADD R0, R0, #1
|
||||
CMP R0, #0x20
|
||||
BCC loc_9D3D5C
|
||||
ADD R12, R12, #1
|
||||
CMP R12, #4
|
||||
BCC loc_9D3D54
|
||||
MOV R0, #0
|
||||
MCR p15, 0, R0,c7,c10, 4
|
||||
|
||||
MOV R0, #0
|
||||
MCR p15, 0, R0,c7,c5, 0
|
||||
|
||||
LDR R0, =0x5307D
|
||||
MCR p15, 0, R0,c1,c0, 0
|
||||
|
||||
ldr r3, =main;
|
||||
blx r3
|
||||
|
||||
InfiniteLoop:
|
||||
b InfiniteLoop
|
||||
.pool
|
||||
164
ninjhax/data/payload/stub.ld
Normal file
164
ninjhax/data/payload/stub.ld
Normal file
@@ -0,0 +1,164 @@
|
||||
OUTPUT_FORMAT("elf32-littlearm", "elf32-bigarm", "elf32-littlearm")
|
||||
OUTPUT_ARCH(arm)
|
||||
ENTRY(_start)
|
||||
|
||||
MEMORY
|
||||
{
|
||||
ram : ORIGIN = 0x23F00000, LENGTH = 128K
|
||||
}
|
||||
|
||||
SECTIONS
|
||||
{
|
||||
.init :
|
||||
{
|
||||
__text_start = . ;
|
||||
KEEP (*(.init))
|
||||
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
|
||||
} >ram = 0xff
|
||||
.plt : { *(.plt) } >ram = 0xff
|
||||
|
||||
.text : /* ALIGN (4): */
|
||||
{
|
||||
*(.text .stub .text.* .gnu.linkonce.t.*)
|
||||
KEEP (*(.text.*personality*))
|
||||
/* .gnu.warning sections are handled specially by elf32.em. */
|
||||
*(.gnu.warning)
|
||||
*(.glue_7t) *(.glue_7) *(.vfp11_veneer)
|
||||
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
|
||||
} >ram = 0xff
|
||||
|
||||
.fini :
|
||||
{
|
||||
KEEP (*(.fini))
|
||||
} >ram =0xff
|
||||
|
||||
__text_end = . ;
|
||||
|
||||
.rodata :
|
||||
{
|
||||
*(.rodata)
|
||||
*all.rodata*(*)
|
||||
*(.roda)
|
||||
*(.rodata.*)
|
||||
*(.gnu.linkonce.r*)
|
||||
SORT(CONSTRUCTORS)
|
||||
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
|
||||
} >ram = 0xff
|
||||
|
||||
.ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) } >ram
|
||||
__exidx_start = .;
|
||||
.ARM.exidx : { *(.ARM.exidx* .gnu.linkonce.armexidx.*) } >ram
|
||||
__exidx_end = .;
|
||||
|
||||
/* Ensure the __preinit_array_start label is properly aligned. We
|
||||
could instead move the label definition inside the section, but
|
||||
the linker would then create the section even if it turns out to
|
||||
be empty, which isn't pretty. */
|
||||
. = ALIGN(32 / 8);
|
||||
PROVIDE (__preinit_array_start = .);
|
||||
.preinit_array : { KEEP (*(.preinit_array)) } >ram = 0xff
|
||||
PROVIDE (__preinit_array_end = .);
|
||||
PROVIDE (__init_array_start = .);
|
||||
.init_array : { KEEP (*(.init_array)) } >ram = 0xff
|
||||
PROVIDE (__init_array_end = .);
|
||||
PROVIDE (__fini_array_start = .);
|
||||
.fini_array : { KEEP (*(.fini_array)) } >ram = 0xff
|
||||
PROVIDE (__fini_array_end = .);
|
||||
|
||||
.ctors :
|
||||
{
|
||||
/* gcc uses crtbegin.o to find the start of the constructors, so
|
||||
we make sure it is first. Because this is a wildcard, it
|
||||
doesn't matter if the user does not actually link against
|
||||
crtbegin.o; the linker won't look for a file to match a
|
||||
wildcard. The wildcard also means that it doesn't matter which
|
||||
directory crtbegin.o is in. */
|
||||
KEEP (*crtbegin.o(.ctors))
|
||||
KEEP (*(EXCLUDE_FILE (*crtend.o) .ctors))
|
||||
KEEP (*(SORT(.ctors.*)))
|
||||
KEEP (*(.ctors))
|
||||
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
|
||||
} >ram = 0xff
|
||||
|
||||
.dtors :
|
||||
{
|
||||
KEEP (*crtbegin.o(.dtors))
|
||||
KEEP (*(EXCLUDE_FILE (*crtend.o) .dtors))
|
||||
KEEP (*(SORT(.dtors.*)))
|
||||
KEEP (*(.dtors))
|
||||
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
|
||||
} >ram = 0xff
|
||||
|
||||
.eh_frame :
|
||||
{
|
||||
KEEP (*(.eh_frame))
|
||||
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
|
||||
} >ram = 0xff
|
||||
|
||||
.gcc_except_table :
|
||||
{
|
||||
*(.gcc_except_table)
|
||||
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
|
||||
} >ram = 0xff
|
||||
.jcr : { KEEP (*(.jcr)) } >ram = 0
|
||||
.got : { *(.got.plt) *(.got) } >ram = 0
|
||||
|
||||
.data ALIGN(4) : {
|
||||
__data_start = ABSOLUTE(.);
|
||||
*(.data)
|
||||
*(.data.*)
|
||||
*(.gnu.linkonce.d*)
|
||||
CONSTRUCTORS
|
||||
. = ALIGN(4);
|
||||
__data_end = ABSOLUTE(.) ;
|
||||
} >ram = 0xff
|
||||
|
||||
.bss ALIGN(4) :
|
||||
{
|
||||
__bss_start = ABSOLUTE(.);
|
||||
__bss_start__ = ABSOLUTE(.);
|
||||
*(.dynbss)
|
||||
*(.gnu.linkonce.b*)
|
||||
*(.bss*)
|
||||
*(COMMON)
|
||||
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
|
||||
__bss_end__ = ABSOLUTE(.);
|
||||
__end__ = ABSOLUTE(.);
|
||||
} >ram
|
||||
|
||||
/* Stabs debugging sections. */
|
||||
.stab 0 : { *(.stab) }
|
||||
.stabstr 0 : { *(.stabstr) }
|
||||
.stab.excl 0 : { *(.stab.excl) }
|
||||
.stab.exclstr 0 : { *(.stab.exclstr) }
|
||||
.stab.index 0 : { *(.stab.index) }
|
||||
.stab.indexstr 0 : { *(.stab.indexstr) }
|
||||
.comment 0 : { *(.comment) }
|
||||
/* DWARF debug sections.
|
||||
Symbols in the DWARF debugging sections are relative to the beginning
|
||||
of the section so we begin them at 0. */
|
||||
/* DWARF 1 */
|
||||
.debug 0 : { *(.debug) }
|
||||
.line 0 : { *(.line) }
|
||||
/* GNU DWARF 1 extensions */
|
||||
.debug_srcinfo 0 : { *(.debug_srcinfo) }
|
||||
.debug_sfnames 0 : { *(.debug_sfnames) }
|
||||
/* DWARF 1.1 and DWARF 2 */
|
||||
.debug_aranges 0 : { *(.debug_aranges) }
|
||||
.debug_pubnames 0 : { *(.debug_pubnames) }
|
||||
/* DWARF 2 */
|
||||
.debug_info 0 : { *(.debug_info) }
|
||||
.debug_abbrev 0 : { *(.debug_abbrev) }
|
||||
.debug_line 0 : { *(.debug_line) }
|
||||
.debug_frame 0 : { *(.debug_frame) }
|
||||
.debug_str 0 : { *(.debug_str) }
|
||||
.debug_loc 0 : { *(.debug_loc) }
|
||||
.debug_macinfo 0 : { *(.debug_macinfo) }
|
||||
/* SGI/MIPS DWARF 2 extensions */
|
||||
.debug_weaknames 0 : { *(.debug_weaknames) }
|
||||
.debug_funcnames 0 : { *(.debug_funcnames) }
|
||||
.debug_typenames 0 : { *(.debug_typenames) }
|
||||
.debug_varnames 0 : { *(.debug_varnames) }
|
||||
.stack 0x80000 : { _stack = .; *(.stack) }
|
||||
/* These must appear regardless of . */
|
||||
}
|
||||
5
ninjhax/data/payload/stub.specs
Normal file
5
ninjhax/data/payload/stub.specs
Normal file
@@ -0,0 +1,5 @@
|
||||
%rename link old_link
|
||||
|
||||
*link:
|
||||
%(old_link) -T ../stub.ld%s
|
||||
|
||||
BIN
ninjhax/data/payload/tools/Launcher.dat
Normal file
BIN
ninjhax/data/payload/tools/Launcher.dat
Normal file
Binary file not shown.
BIN
ninjhax/data/payload/tools/LauncherTemplate.dat
Normal file
BIN
ninjhax/data/payload/tools/LauncherTemplate.dat
Normal file
Binary file not shown.
BIN
ninjhax/data/payload/tools/fill_with_zero.exe
Normal file
BIN
ninjhax/data/payload/tools/fill_with_zero.exe
Normal file
Binary file not shown.
16
ninjhax/data/payload/tools/insert.py
Normal file
16
ninjhax/data/payload/tools/insert.py
Normal file
@@ -0,0 +1,16 @@
|
||||
import sys;
|
||||
import os
|
||||
|
||||
f1 = 0
|
||||
f2 = 0
|
||||
f3 = 0
|
||||
|
||||
f1size = 0
|
||||
|
||||
with open(sys.argv[1], "rb+") as file1:
|
||||
with open(sys.argv[2], "rb") as file2:
|
||||
f1 = file1.read()
|
||||
f2 = file2.read()
|
||||
file1.seek(int(sys.argv[3], 16), os.SEEK_SET)
|
||||
file1.write(f2);
|
||||
|
||||
Reference in New Issue
Block a user