Advertisement
goroh_kun

3DS Toolkit ROP code analysis(2)

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