Wii ID NAND Modifier [Vega]
#1
Wii ID NAND Modifier [Vega]

This code will allow you to permanently change your Wii ID to whatever value you want. With this code on, simply boot your game. After a split second, you will return to the Wii Main Menu. Go ahead and check your Wii ID number and you will see the changes. If you are using Dolphin, the return to the Wii Menu function may not work, but the code will still take effect.

WWWWXXXXYYYYZZZZ = Wii ID (in hex)

NTSC-U
C20095F4 00000044
38600400 7C781B78
38800020 80ADA358
80A50024 3D808022
618C9490 7D8803A6
4E800021 7C791B78
3FA08016 48000021
2F736861 72656432
2F776332 342F6E77
6332346D 73672E63
66670000 7C6802A6
7C7A1B78 38800001
63BCADBC 7F8803A6
4E800021 2C030000
418001A4 7C7B1B78
7F24CB78 7F05C378
63BCB15C 7F8803A6
4E800021 7C03C000
40820184 7F63DB78
63BCB2E4 7F8803A6
4E800021 2C030000
4180016C 3FC0WWWW
63DEXXXX 3FE0YYYY
63FFZZZZ BFD90008
3800001F 7F24CB78
38A00000 7C0903A6
80640000 80040004
7CA51A14 80640008
7CA50214 8004000C
7CA51A14 80640010
7CA50214 80040014
7CA51A14 80640018
7CA50214 8004001C
7CA51A14 38840020
7CA50214 4200FFBC
80640000 80040004
7CA51A14 80640008
7CA50214 8004000C
7CA51A14 80640010
7CA50214 80040014
7CA51A14 80640018
7CA50214 7CA51A14
90B903FC 7F43D378
38800002 63BCADBC
7F8803A6 4E800021
2C030000 418000A8
7C7B1B78 7F24CB78
7F05C378 63BCB220
7F8803A6 4E800021
7C03C000 40820088
7F63DB78 63BCB2E4
7F8803A6 4E800021
2C030000 41800070
48000021 2F736861
72656432 2F776332
342F6E77 6332346D
73672E63 626B0000
7C6802A6 38800002
63BCADBC 7F8803A6
4E800021 2C030000
41800034 7C7B1B78
7F24CB78 7F05C378
63BCB220 7F8803A6
4E800021 7C03C000
40820014 7F63DB78
63BCB2E4 7F8803A6
4E800021 3D80801A
618C87B8 7D8803A6
4E800020 00000000

PAL
C2009634 00000044
38600400 7C781B78
38800020 80ADA360
80A50024 3D808022
618C9814 7D8803A6
4E800021 7C791B78
3FA08016 48000021
2F736861 72656432
2F776332 342F6E77
6332346D 73672E63
66670000 7C6802A6
7C7A1B78 38800001
63BCAE5C 7F8803A6
4E800021 2C030000
418001A4 7C7B1B78
7F24CB78 7F05C378
63BCB1FC 7F8803A6
4E800021 7C03C000
40820184 7F63DB78
63BCB384 7F8803A6
4E800021 2C030000
4180016C 3FC0WWWW
63DEXXXX 3FE0YYYY
63FFZZZZ BFD90008
3800001F 7F24CB78
38A00000 7C0903A6
80640000 80040004
7CA51A14 80640008
7CA50214 8004000C
7CA51A14 80640010
7CA50214 80040014
7CA51A14 80640018
7CA50214 8004001C
7CA51A14 38840020
7CA50214 4200FFBC
80640000 80040004
7CA51A14 80640008
7CA50214 8004000C
7CA51A14 80640010
7CA50214 80040014
7CA51A14 80640018
7CA50214 7CA51A14
90B903FC 7F43D378
38800002 63BCAE5C
7F8803A6 4E800021
2C030000 418000A8
7C7B1B78 7F24CB78
7F05C378 63BCB2C0
7F8803A6 4E800021
7C03C000 40820088
7F63DB78 63BCB384
7F8803A6 4E800021
2C030000 41800070
48000021 2F736861
72656432 2F776332
342F6E77 6332346D
73672E63 626B0000
7C6802A6 38800002
63BCAE5C 7F8803A6
4E800021 2C030000
41800034 7C7B1B78
7F24CB78 7F05C378
63BCB2C0 7F8803A6
4E800021 7C03C000
40820014 7F63DB78
63BCB384 7F8803A6
4E800021 3D80801A
618C8858 7D8803A6
4E800020 00000000

NTSC-J
C2009590 00000044
38600400 7C781B78
38800020 80ADA360
80A50024 3D808022
618C9734 7D8803A6
4E800021 7C791B78
3FA08016 48000021
2F736861 72656432
2F776332 342F6E77
6332346D 73672E63
66670000 7C6802A6
7C7A1B78 38800001
63BCAD7C 7F8803A6
4E800021 2C030000
418001A4 7C7B1B78
7F24CB78 7F05C378
63BCB11C 7F8803A6
4E800021 7C03C000
40820184 7F63DB78
63BCB2A4 7F8803A6
4E800021 2C030000
4180016C 3FC0WWWW
63DEXXXX 3FE0YYYY
63FFZZZZ BFD90008
3800001F 7F24CB78
38A00000 7C0903A6
80640000 80040004
7CA51A14 80640008
7CA50214 8004000C
7CA51A14 80640010
7CA50214 80040014
7CA51A14 80640018
7CA50214 8004001C
7CA51A14 38840020
7CA50214 4200FFBC
80640000 80040004
7CA51A14 80640008
7CA50214 8004000C
7CA51A14 80640010
7CA50214 80040014
7CA51A14 80640018
7CA50214 7CA51A14
90B903FC 7F43D378
38800002 63BCAD7C
7F8803A6 4E800021
2C030000 418000A8
7C7B1B78 7F24CB78
7F05C378 63BCB1E0
7F8803A6 4E800021
7C03C000 40820088
7F63DB78 63BCB2A4
7F8803A6 4E800021
2C030000 41800070
48000021 2F736861
72656432 2F776332
342F6E77 6332346D
73672E63 626B0000
7C6802A6 38800002
63BCAD7C 7F8803A6
4E800021 2C030000
41800034 7C7B1B78
7F24CB78 7F05C378
63BCB1E0 7F8803A6
4E800021 7C03C000
40820014 7F63DB78
63BCB2A4 7F8803A6
4E800021 3D80801A
618C8778 7D8803A6
4E800020 00000000

NTSC-K
C200973C 00000044
38600400 7C781B78
38800020 80ADA380
80A50024 3D808022
618C9B88 7D8803A6
4E800021 7C791B78
3FA08016 48000021
2F736861 72656432
2F776332 342F6E77
6332346D 73672E63
66670000 7C6802A6
7C7A1B78 38800001
63BCAEF8 7F8803A6
4E800021 2C030000
418001A4 7C7B1B78
7F24CB78 7F05C378
63BCB298 7F8803A6
4E800021 7C03C000
40820184 7F63DB78
63BCB420 7F8803A6
4E800021 2C030000
4180016C 3FC0WWWW
63DEXXXX 3FE0YYYY
63FFZZZZ BFD90008
3800001F 7F24CB78
38A00000 7C0903A6
80640000 80040004
7CA51A14 80640008
7CA50214 8004000C
7CA51A14 80640010
7CA50214 80040014
7CA51A14 80640018
7CA50214 8004001C
7CA51A14 38840020
7CA50214 4200FFBC
80640000 80040004
7CA51A14 80640008
7CA50214 8004000C
7CA51A14 80640010
7CA50214 80040014
7CA51A14 80640018
7CA50214 7CA51A14
90B903FC 7F43D378
38800002 63BCAEF8
7F8803A6 4E800021
2C030000 418000A8
7C7B1B78 7F24CB78
7F05C378 63BCB35C
7F8803A6 4E800021
7C03C000 40820088
7F63DB78 63BCB420
7F8803A6 4E800021
2C030000 41800070
48000021 2F736861
72656432 2F776332
342F6E77 6332346D
73672E63 626B0000
7C6802A6 38800002
63BCAEF8 7F8803A6
4E800021 2C030000
41800034 7C7B1B78
7F24CB78 7F05C378
63BCB35C 7F8803A6
4E800021 7C03C000
40820014 7F63DB78
63BCB420 7F8803A6
4E800021 3D80801A
618C8BB4 7D8803A6
4E800020 00000000



Code creator: Vega

Code credits: RiiDefi (Egg Alloc Function), Megazig (Return to Wii Menu and ISFS Functions)



Source:
#~~~~~~~~~~~~~~~~#
# START ASSEMBLY #
#~~~~~~~~~~~~~~~~#

#

#Address Ports
#NTSC-U = 800095F4
#PAL = 80009634
#NTSC-J = 80009590
#NTSC-K = 8000973C

#~~~~~~~~~~~~~~~~~~~~~~#
# Macros and Variables #
#~~~~~~~~~~~~~~~~~~~~~~#

.macro call_link address
    lis r12, \address@h
    ori r12, r12, \address@l
    mtlr r12
    blrl
.endm

.macro call_isfs address
    ori r28, r29, \address@l
    mtlr r28
    blrl
.endm

.macro call_nolink address
    lis r12, \address@h
    ori r12, r12, \address@l
    mtlr r12
    blr
.endm

.set region, '' #Fill in E, P, J, or K within the quotes for your region when Compiling! Lowercase letters can also be used.

.if    (region == 'E' || region == 'e') # RMCE
    .set ISFS_Open, 0xADBC
    .set ISFS_Read, 0xB15C
    .set ISFS_Write, 0xB220
    .set ISFS_Close, 0xB2E4
    .set Wii_Menu, 0x801A87B8
    .set Egg_Alloc, 0x80229490
.elseif (region == 'P' || region == 'p') # RMCP
    .set ISFS_Open, 0xAE5C
    .set ISFS_Read, 0xB1FC
    .set ISFS_Write, 0xB2C0
    .set ISFS_Close, 0xB384
    .set Wii_Menu, 0x801A8858
    .set Egg_Alloc, 0x80229814
.elseif (region == 'J' || region == 'j') # RMCJ
    .set ISFS_Open, 0xAD7C
    .set ISFS_Read, 0xB11C
    .set ISFS_Write, 0xB1E0
    .set ISFS_Close, 0xB2A4
    .set Wii_Menu, 0x801A8778
    .set Egg_Alloc, 0x80229734
.elseif (region == 'K' || region == 'k') # RMCK
    .set ISFS_Open, 0xAEF8
    .set ISFS_Read, 0xB298
    .set ISFS_Write, 0xB35C
    .set ISFS_Close, 0xB420
    .set Wii_Menu, 0x801A8BB4
    .set Egg_Alloc, 0x80229B88
.else # Invalid Region
    .abort
.endif

#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~#
#          Register Notes        #
#  r31 = Wii ID Upper 32 bits  #
#  r30 = Wii ID Lower 32 bits  #
# r29 & r28 = Part of ISFS Macro #
#            r27 = fd          #
# r26 = File Path Addr 1st file  #
#  r25  = Heap Address Pointer  #
#  r24 = Size of File (0x400)  #
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~#

#~~~~~~~~~~~~~~~~~~~~~~~#
#    EGG::Heap::alloc  #
#  r3 = Size of Heap  #
#    r4 = Alignment    #
# r5 = System Heap Calc #
#~~~~~~~~~~~~~~~~~~~~~~~#

li r3, 0x0400

mr r24, r3 #Backup Size of File for later uses of ISFS_Read & ISFS_Write

li r4, 0x20

.if    (region == 'E' || region == 'e')
        lwz r5, -0x5CA8(r13)
.elseif (region == 'P' || region == 'p')
        lwz r5, -0x5CA0(r13)
.elseif (region == 'J' || region == 'j')
        lwz r5, -0x5CA0(r13)
.elseif (region == 'K' || region == 'k')
        lwz r5, -0x5C80(r13)
.endif

lwz r5, 0x0024 (r5)

call_link Egg_Alloc
mr r25, r3 #Backup Heap Address Pointer

#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~#
#      ISFS_Open  (1st file)    #
#        r3 = File Path        #
# r4 = 0x1 for Read Permissions #
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~#

lis r29, 0x8016 #Set 1st half address for all ISFS Functions

bl open_file1

.string "/shared2/wc24/nwc24msg.cfg\0"

open_file1:
mflr r3
mr r26, r3 #Backup file path address pointer
li r4, 0x1

call_isfs ISFS_Open
cmpwi r3, 0x0 #r3 should return fd value. If negative value, then error occured.
blt- launch_menu

mr r27, r3 #Backup file descriptor

#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~#
#                ISFS_Read                #
#                  r3 = fd                  #
# r4 = Address Pointer to dump read Data to #
#    r5 = Amount of Bytes to read & dump    #
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~#

mr r4, r25 #Move backed up Heap Address Pointer to r4
mr r5, r24 #Move backed up Byte Write Size to r5

call_isfs ISFS_Read
cmpw r3, r24 #r3 should return r5's aka r24's value. If not, then error occured.
bne- launch_menu

#~~~~~~~~~~~~#
# ISFS_Close #
#  r3 = fd  #
#~~~~~~~~~~~~#

mr r3, r27

call_isfs ISFS_Close
cmpwi r3, 0
blt- launch_menu

#~~~~~~~~~~~~~~~~~~#
# Write New Wii ID #
#~~~~~~~~~~~~~~~~~~#

lis r30, 0x0001 #Random Wii ID value used for compilation, use your own value for code
ori r30, r30, 0x2222
lis r31, 0x1111
ori r31, r31, 0x2222

stmw r30, 0x8 (r25) #Write Wii ID

#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~#
# Custom CRC32 Checksum (copied from Wii's System Menu #
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~#

li r0, 0x1F
mr r4, r25
li r5, 0
mtctr r0

start_loop:
lwz r3, 0 (r4)

lwz r0, 0x4 (r4)
add r5, r5, r3

lwz r3, 0x8 (r4)
add r5, r5, r0

lwz r0, 0xC (r4)
add r5, r5, r3

lwz r3, 0x10 (r4)
add r5, r5, r0

lwz r0, 0x14 (r4)
add r5, r5, r3

lwz r3, 0x18 (r4)
add r5, r5, r0

lwz r0, 0x1C (r4)
add r5, r5, r3

addi r4, r4, 0x20
add r5, r5, r0

bdnz+ start_loop #Loop has to be split cuz we can't load final word of file cuz thats the checksum to check compared to calculated one

lwz r3, 0 (r4)

lwz r0, 0x4 (r4)
add r5, r5, r3

lwz r3, 0x8 (r4)
add r5, r5, r0

lwz r0, 0xC (r4)
add r5, r5, r3

lwz r3, 0x10 (r4)
add r5, r5, r0

lwz r0, 0x14 (r4)
add r5, r5, r3

lwz r3, 0x18 (r4) #This will load the final word right before the checksum that is on file
add r5, r5, r0

add r5, r5, r3 #One more final instruction to calculate checksum

stw r5, 0x03FC (r25) #Store CRC32 Word to spot (which is final word location of entire contents)

#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~#
#      ISFS_Open (1st file)    #
#          r3 = File Path        #
# r4 = 0x2 for Write Permissions #
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~#

mr r3, r26 #Move backed up file path address pointer to r3
li r4, 0x2

call_isfs ISFS_Open
cmpwi r3, 0x0
blt- launch_menu
mr r27, r3 #Backup fd

#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~#
#                          ISFS_Write  (1st file)                            #
#                                  r3 = fd                                    #
# r4 = Address Pointer where String Data that will used for writes is located #
#                    r5 = Amount of Bytes to Write to File                    #
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~#

mr r4, r25 #Move backed up Heap Address Pointer to r4
mr r5, r24 #Move backed up Byte Write Size to r5

call_isfs ISFS_Write
cmpw r3, r24 #r3 should return r5's aka r24's value. If not, then error occured.
bne- launch_menu

#~~~~~~~~~~~~~~~~~~~~~~~#
# ISFS_Close (1st file) #
#      r3 = fd        #
#~~~~~~~~~~~~~~~~~~~~~~~#

mr r3, r27
call_isfs ISFS_Close
cmpwi r3, 0
blt- launch_menu

#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~#
#      ISFS_Open  (2nd file)    #
#          r3 = File Path        #
# r4 = 0x2 for Write Permissions #
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~#

bl open_file2

.string "/shared2/wc24/nwc24msg.cbk\0"

open_file2:
mflr r3
li r4, 0x2

call_isfs ISFS_Open
cmpwi r3, 0x0 #r3 should return fd value. If not, then error occured.
blt- launch_menu

mr r27, r3 #Backup fd

#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~#
#                          ISFS_Write  (2nd file)                            #
#                                  r3 = fd                                    #
# r4 = Address Pointer where String Data that will used for writes is located #
#                    r5 = Amount of Bytes to Write to File                    #
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~#

mr r4, r25 #Move backed up Heap Address Pointer to r4
mr r5, r24 #Move backed up Byte Write Size to r5

call_isfs ISFS_Write
cmpw r3, r24 #r3 should return r5's aka r24's value. If not, then error occured.
bne- launch_menu

#~~~~~~~~~~~~~~~~~~~~~~~#
# ISFS_Close (2nd file) #
#      r3 = fd        #
#~~~~~~~~~~~~~~~~~~~~~~~#

mr r3, r27
call_isfs ISFS_Close #No need for return check of final close as code is ending now

#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~#
# Writes Successful, Return to Wii Menu. No need to free the Heap. No need to close the Files #
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~#

launch_menu:
call_nolink Wii_Menu

#

#~~~~~~~~~~~~~~#
# END ASSEMBLY #
#~~~~~~~~~~~~~~#


Reply


Messages In This Thread
Wii ID NAND Modifier [Vega] - by Vega - 07-24-2019, 10:03 PM
RE: Wii ID NAND Modifier - by JoshuaMK - 07-25-2019, 05:45 AM
RE: Wii ID NAND Modifier - by Vega - 07-25-2019, 04:04 PM
RE: Wii ID NAND Modifier - by Dorian - 07-25-2019, 04:06 PM
RE: Wii ID NAND Modifier - by Vega - 07-25-2019, 07:01 PM
RE: Wii ID NAND Modifier - by Vega - 07-25-2019, 08:22 PM
RE: Wii ID NAND Modifier - by JoshuaMK - 07-25-2019, 08:52 PM
RE: Wii ID NAND Modifier - by Vega - 07-25-2019, 09:21 PM
RE: Wii ID NAND Modifier - by Vega - 07-25-2019, 09:27 PM
RE: Wii ID NAND Modifier - by JoshuaMK - 07-25-2019, 10:22 PM
RE: Wii ID NAND Modifier - by Vega - 07-25-2019, 10:30 PM
RE: Wii ID NAND Modifier - by Vega - 07-27-2019, 02:09 PM
RE: Wii ID NAND Modifier - by JoshuaMK - 07-27-2019, 06:54 PM

Forum Jump:


Users browsing this thread: 1 Guest(s)