Advertisement
goroh_kun

3DS Toolkit ROP code analysis(2)

Jan 2nd, 2014
963
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.84 KB | None | 0 0
  1. 2014/01/03
  2.  
  3. ROP toolkit
  4. http://www.fiercewaffle.com/softwareArticle.php?id=10
  5.  
  6. ・まず実行されるコードは、eepromの0x1ffb4番地から。
  7. ・eeprom内のuser profileは0x1fe00~と0x1ff00~の2種類あって、update counter(0x1fe70, 0x1ff70)の値が
  8. 多いほうが使われる。このexploitでは0x1fe70の値が51, 0x1ff70の値が52なので、1ff00~が利用される。
  9. ・ここで、eepromの0x1fe00からまた別のコードを0x279400にロードして、スタックをロードした箇所に移動させてROPコード継続
  10. ・続いて、YS:Launcher.datをオープンして、0x2b0000番地にロード、スタックをロードした箇所に移動させてROPコード継続
  11. ・× SDカードをYSにマウントしているようなコードはなかった。存在しないドライブの場合defaultでSDカードが利用されるのかも
  12. ⇒0x18f198からの関数がそれだった。
  13.  
  14. #########################
  15. #ROP Loader
  16. #EEPROM 0x1fe00
  17. #loaded at 0x279400
  18. #########################
  19. B9 F2 10 00 : PC ; POP {R0,R2,PC}
  20. AE 2B 27 00 : R0 ; "YS:"
  21. ED 0D DC BA : R2 ; no use
  22. 9C F1 18 00 : PC ; mount_sd("YS:") ; return code LDMFD SP!, {R3-R5,PC}
  23. 90 B6 10 00 : R3
  24. 00 B0 FA 00 : R4
  25. 00 02 20 00 : R5
  26. B9 F2 10 00 : PC ; POP {R0,R2,PC}
  27. 00 90 27 00 : R0
  28. 01 00 00 00 : R2
  29. E1 49 15 00 : PC ; POP {R1,PC}
  30. 38 6F 27 00 : R1 ; "YS:/Launcher.dat"
  31. AC 82 1B 00 : PC ; IFile_Open(0x279000, "YS:/Launcher.dat", 0x1); return code LDMFD SP!, {R4-R8,PC}
  32. DC D5 18 00 : R4
  33. 40 83 27 00 : R5
  34. 00 02 10 00 : R6
  35. CC 48 00 00 : R7
  36. 60 3D 14 00 : R8
  37. B9 F2 10 00 : PC ; POP {R0,R2,PC}
  38. 00 90 27 00 : R0
  39. 00 00 2B 00 : R2
  40. F9 02 10 00 : PC ; POP {PC}
  41. F9 02 10 00 : PC
  42. F9 02 10 00 : PC
  43. F9 02 10 00 : PC
  44. F9 02 10 00 : PC
  45. F9 02 10 00 : PC
  46. E1 49 15 00 : PC ; POP {R1,PC}
  47. 00 00 00 00 : R1
  48. E1 49 15 00 : PC ; POP {R1,PC}
  49. 20 90 27 00 : R1
  50. 8C 53 10 00 : PC ; LDMFD SP!, {R3,PC}
  51. 00 90 00 00 : R3
  52. 58 39 1B 00 : PC ; IFile_Read(0x279000, 0x279020, 0x2b0000, 0x9000); return code LDMFD SP!, {R4-R9,PC}
  53. E5 04 21 00 : R4
  54. 00 DA 19 00 : R5
  55. 00 75 01 00 : R6
  56. 86 DF 21 00 : R7
  57. 00 C1 1A 00 : R8
  58. 22 DA 1D 00 : R9
  59. F9 02 10 00 : PC
  60. F9 02 10 00 : PC
  61. F9 02 10 00 : PC
  62. F9 02 10 00 : PC
  63. F9 02 10 00 : PC
  64. F9 02 10 00 : PC
  65. F9 02 10 00 : PC
  66. F9 02 10 00 : PC
  67. F9 02 10 00 : PC
  68. F9 02 10 00 : PC
  69. F9 02 10 00 : PC
  70. F9 02 10 00 : PC
  71. 8C 53 10 00 : PC
  72. 8C 53 10 00 : LDMFD SP!, {R3,PC}
  73. 24 6B 03 00 : R3
  74. ; もしカスタマイズしてコードの長さが変わった場合は、ここも合わせて変更する
  75. 60 3D 14 00 : PC
  76. ROM:00143D60 03 D0 8D E0 ADD SP, SP, R3
  77. ; 0x2794d8(SP) + 0x36b24(R3) + 4 = 0x2b0000
  78. ROM:00143D64 04 F0 9D E4 LDR PC, [SP+4+var_4],#4
  79.  
  80. #EEPROM 0x1ffb4
  81. B9 F2 10 00 : PC ; POP {R0,R2,PC}
  82. 00 FE 01 00 : R0
  83. 00 01 00 00 : R2
  84. E1 49 15 00 : PC ; POP {R1,PC}
  85. 00 94 27 00 : R1
  86. FC 34 13 00 : PC ; eeprom_read(0x1fe00, 0x279400, 0x100) ; return code LDMFD SP!, {R4,PC}
  87. D0 8C 1E 00 : R4
  88. 8C 53 10 00 : PC ; LDMFD SP!, {R3,PC}
  89. 9C 94 27 F0 : R3
  90. ; もしカスタマイズしてコードの長さが変わった場合は、ここも合わせて変更する
  91. 60 3D 14 00 :
  92. ROM:00143D60 03 D0 8D E0 ADD SP, SP, R3
  93. ROM:00143D64 04 F0 9D E4 LDR PC, [SP+4+var_4],#4
  94. ; 0xfffff60(SP) + 0xf027949c(R3) + 4 = 0x279400
  95.  
  96. #########################
  97. #Launcher.dat
  98. #0x2b0000
  99. #########################
  100.  
  101. ED 01 10 00 : PC ; POP {R4,PC}
  102. 04 90 27 00 : R4
  103. E1 49 15 00 : PC ; POP {R1,PC}
  104. 08 90 27 00 : R1
  105. AC 1A 10 00 : PC
  106. ROM:00101AAC 00 00 A0 E3 MOV R0, #0
  107. ROM:00101AB0 00 00 84 E5 STR R0, [R4]
  108. ROM:00101AB4 00 00 81 E5 STR R0, [R1]
  109. ROM:00101AB8 00 00 A0 E3 MOV R0, #0
  110. ROM:00101ABC 10 80 BD E8 LDMFD SP!, {R4,PC}
  111. 04 00 00 00 : R4
  112. B9 F2 10 00 : PC ; POP {R0,R2,PC}
  113. 00 90 27 00 : R0 ; iFile Object
  114. 06 00 00 00 : R2
  115. E1 49 15 00 : PC ; POP {R1,PC}
  116. B4 00 2B 00 : R1
  117. ## Launcher.dat is loaded at 0x2b0000, so 0x2b00b4 is "YS:/DUMP.BIN"
  118. AC 82 1B 00 : PC ; IFile_Open(0x279000, "YS:/DUMP.bin", 0x6); return code LDMFD SP!, {R4-R8,PC}
  119. DC D5 18 00 : R4 ; no use
  120. 40 83 27 00 : R5 ; no use
  121. 00 02 10 00 : R6 ; no use
  122. CC 48 00 00 : R7 ; no use
  123. 60 3D 14 00 : R8 ; no use
  124. B9 F2 10 00 : PC ; POP {R0,R2,PC}
  125. 00 90 27 00 : R0 ; iFile Object
  126. 00 00 10 00 : R2 ; dump start address
  127. F9 02 10 00 : PC ; POP {PC}
  128. F9 02 10 00 : PC ; POP {PC}
  129. F9 02 10 00 : PC ; POP {PC}
  130. F9 02 10 00 : PC ; POP {PC}
  131. F9 02 10 00 : PC ; POP {PC}
  132. F9 02 10 00 : PC ; POP {PC}
  133. E1 49 15 00 : PC ; POP {R1,PC}
  134. 00 00 00 00 : R1
  135. E1 49 15 00 : PC ; POP {R1,PC}
  136. 20 90 27 00 : R1 ; iFile Object
  137. 8C 53 10 00 : PC ; LDMFD SP!, {R3,PC}
  138. 00 00 30 00 : R3 ; 0x300000 dump size
  139. 54 3B 1B 00 : PC ; IFile_Write(0x279000, 0, 0x100000, 0x300000) ; return code LDMFD SP!, {R4-R11,PC}
  140. 00 DA 19 00 : R4
  141. 00 75 01 00 : R5
  142. 86 DF 21 00 : R6
  143. 00 C1 1A 00 : R7
  144. 22 DA 1D 00 : R8
  145. 22 DA 1D 00 : R9
  146. 22 DA 1D 00 : R10
  147. F9 02 10 00 : R11
  148. 00 00 00 00 : PC : !!!! zero addr !!!!
  149. ; ここでわざと不正終了させている
  150. 8C 53 10 00 : LDMFD SP!, {R3,PC}
  151. 54 6B 03 00 : R3
  152. 60 3D 14 00 : PC ;
  153. ROM:00143D60 03 D0 8D E0 ADD SP, SP, R3
  154. ROM:00143D64 04 F0 9D E4 LDR PC, [SP+4+var_4],#4
  155. 59 00 53 00 :
  156. 3A 00 2F 00 :
  157. 44 00 55 00 :
  158. 4D 00 50 00 :
  159. 2E 00 42 00 :
  160. 49 00 4E 00 :
  161. 00 00 00 00 :
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement