diff --git a/Makefile b/Makefile index 65b90f8..fca9c8a 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,11 @@ rwildcard = $(foreach d, $(wildcard $1*), $(filter $(subst *, %, $2), $d) $(call rwildcard, $d/, $2)) +ifeq ($(strip $(DEVKITARM)),) +$(error "Please set DEVKITARM in your environment. export DEVKITARM=devkitARM") +endif + +include $(DEVKITARM)/3ds_rules + CC := arm-none-eabi-gcc AS := arm-none-eabi-as LD := arm-none-eabi-ld diff --git a/injector/source/patcher.c b/injector/source/patcher.c index b99a914..10c71e5 100644 --- a/injector/source/patcher.c +++ b/injector/source/patcher.c @@ -180,6 +180,53 @@ void patchCode(u64 progId, u8 *code, u32 size) break; } + case 0x0004013000003202LL: // FRIENDS + { + static const u8 fpdverPattern[] = { + 0xE0, 0x1E, 0xFF, 0x2F, 0xE1, 0x01, 0x01, 0x01, 0x01 + }; + + u8 *fdpver = memsearch(code, fpdverPattern, size, sizeof(fpdverPattern)); + + if(fdpver == NULL) break; + else fdpver += sizeof(fpdverPattern); + + if(*fdpver < 5) *fdpver = 5; + + break; + } + + case 0x0004003000008A02LL: // ErrDisp + { + static const u8 unitinfoCheckPattern1[] = { + 0x14, 0x00, 0xD0, 0xE5, 0xDB, 0x9A, 0x9F, 0xED + }; + + static const u8 unitinfoCheckPattern2[] = { + 0x14, 0x00, 0xD0, 0xE5, 0x01, 0x00, 0x10, 0xE3 + } ; + + static const u8 unitinfoCheckPatch[] = { + 0x00, 0x00, 0xA0, 0xE3 + } ; + + patchMemory(code, size, + unitinfoCheckPattern1, + sizeof(unitinfoCheckPattern1), 0, + unitinfoCheckPatch, + sizeof(unitinfoCheckPatch), 1 + ); + + patchMemory(code, size, + unitinfoCheckPattern2, + sizeof(unitinfoCheckPattern2), 0, + unitinfoCheckPatch, + sizeof(unitinfoCheckPatch), 3 + ); + + break; + } + case 0x0004001000021000LL: // USA MSET case 0x0004001000020000LL: // JPN MSET case 0x0004001000022000LL: // EUR MSET