goroh_kun

3DS gateway GW_INSTALLER ROP Code analysis(1)

Jan 4th, 2014
1,484
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. 2014/01/04
  2.  
  3. ・まず実行されるコードは、eepromの0x1ffb4番地から。
  4. ・eeprom内のuser profileは0x1fe00~と0x1ff00~の2種類あって、update counter(0x1fe70, 0x1ff70)の値が
  5. 多いほうが使われる。このexploitでは0x1fe70の値が51, 0x1ff70の値が52なので、1ff00~が利用される。
  6. ・ここで、eepromの0x1fe00からまた別のコードを0x279400にロードして、Threadを起動。entrypointは0x1002f9, stackpointは0x279400へ。
  7. ・0x18f198からの関数にてSDカードを"YS:に"マウントしている。
  8. ・別Threadにて、YS:Launcher.datをオープンして、0x2b0000番地にロード、その後 sub_22efa8にておそらくロードしたバイナリを復号化している?
  9. ・その後、ropを0x2b0000から継続。
  10.  
  11. #########################
  12. # 3D gateway Installer
  13. #EEPROM 0x1ffb4
  14. #########################
  15. B9 F2 10 00 : PC ; POP {R0,R2,PC}
  16. 00 FE 01 00 : R0
  17. 00 01 00 00 : R2
  18. C4 4F 1C 00 : PC ; LDMFD SP!, {R1,PC}
  19. 00 94 27 00 : R1
  20. FC 34 13 00 : PC ; eeprom_read(0x1fe00, 0x279400, 0x100) ; return code LDMFD SP!, {R4,PC}
  21. FE FF FF FF : R4 ; Thread processorid CPUID0
  22. B1 49 15 00 : PC ; POP {R1-R3,PC}
  23. F9 02 10 00 : R1 ; Thread func entry point
  24. 00 00 00 00 : R2 ; Thread arg
  25. 00 94 27 00 : R3 ; Thread stacktop
  26. 8C 3D 14 00 : PC ; LDMFD SP!, {R0,PC}
  27. 2D 00 00 00 : R0 ; Thread Handle
  28. 90 B6 10 00 : PC ; SVC 8(create thread)
  29. F0 93 27 00 : ; thread result addr (R1 value)
  30. E8 93 27 00 : ; thread result addr (R4 value)
  31. 00 00 00 00 : ???
  32. 09 FB 19 00 : PC ; B loc_19FB08
  33. ; 無限ループ
  34.  
  35.  
  36. #########################
  37. #EEPROM 0x1fe00
  38. #loaded at 0x279400
  39. #########################
  40. B9 F2 10 00 : PC ; POP {R0,R2,PC}
  41. AE 2B 27 00 : R0 ; "YS:"
  42. ED 0D DC BA : R2 ; no use
  43. 9C F1 18 00 : PC ; mount_sd("YS:") ; return code LDMFD SP!, {R3-R5,PC}
  44. 90 B6 10 00 : R3
  45. 00 B0 FA 00 : R4
  46. 00 02 20 00 : R5
  47. B9 F2 10 00 : PC ; POP {R0,R2,PC}
  48. 00 90 27 00 : R0
  49. 01 00 00 00 : R2
  50. E1 49 15 00 : PC ; POP {R1,PC}
  51. 38 6F 27 00 : R1 ; "YS:/Launcher.dat"
  52. AC 82 1B 00 : PC ; IFile_Open(0x279000, "YS:/Launcher.dat", 0x1); return code LDMFD SP!, {R4-R8,PC}
  53. DC D5 18 00 : R4
  54. 40 83 27 00 : R5
  55. 00 02 10 00 : R6
  56. CC 48 00 00 : R7
  57. 60 3D 14 00 : R8
  58. B9 F2 10 00 : PC ; POP {R0,R2,PC}
  59. 00 90 27 00 : R0
  60. 00 00 2B 00 : R2
  61. 8C 53 10 00 : PC ; LDMFD SP!, {R3,PC}
  62. 00 90 00 00 : R3
  63. F9 02 10 00 : PC ; POP {PC}
  64. F9 02 10 00 : PC ; POP {PC}
  65. F9 02 10 00 : PC ; POP {PC}
  66. F9 02 10 00 : PC ; POP {PC}
  67. E1 49 15 00 : PC ; POP {R1,PC}
  68. 51 00 63 36 : R1 ; ### it's profile data counter and crc16 ###
  69. E1 49 15 00 : PC ; POP {R1,PC}
  70. 20 90 27 00 : R1
  71. 58 39 1B 00 : PC ; IFile_Read(0x279000, 0x279020, 0x2b0000, 0x9000); return code LDMFD SP!, {R4-R9,PC}
  72. E5 04 21 00 : R4
  73. 00 DA 19 00 : R5
  74. 00 75 01 00 : R6
  75. 86 DF 21 00 : R7
  76. 00 C1 1A 00 : R8
  77. 22 DA 1D 00 : R9
  78. 9B 44 1B 00 : PC ; POP {R0-R4,R7,PC}
  79. 00 01 10 00 : R0
  80. BC 4C 14 00 : R1
  81. 00 00 2B 00 : R2
  82. 00 90 00 00 : R3
  83. E1 49 15 00 : R4
  84. 77 77 77 77 : R7
  85. AC EF 22 00 : PC ; sub_22efa8(0x100100, 0x144cbc, 0x2b0000, 0x9000) ; return code LDMFD SP!, {R4-R8,PC}
  86. 88 5C 10 00 : R4
  87. 00 00 0E 00 : R5
  88. 90 03 25 00 : R6
  89. C0 FA 1E 00 : R7
  90. 91 FE 16 00 : R8
  91. 8C 53 10 00 : PC ; LDMFD SP!, {R3,PC}
  92. 28 6B 03 00 : R3
  93. 60 3D 14 00 : PC ;
  94. ROM:00143D60 03 D0 8D E0 ADD SP, SP, R3
  95. ROM:00143D64 04 F0 9D E4 LDR PC, [SP+4+var_4],#4
  96.  
  97. ########################
  98. 1st stage
  99. #loaded at 0x2b0000
  100. #########################
  101. B9 F2 10 00 : PC ; POP {R0,R2,PC}
  102. E0 FE 01 00 : R0
  103. 10 00 00 00 : R2
  104. C4 4F 1C 00 : PC ; LDMFD SP!, {R1,PC}
  105. 00 94 27 00 : R1
  106. FC 34 13 00 : PC ; eeprom_read(0x1fee0, 0x279400, 0x10) ; return code LDMFD SP!, {R4,PC}
  107. 44 44 44 44 : R4
  108. 8C 3D 14 00 : PC ; LDMFD SP!, {R0,PC}
  109. 00 94 27 00 : R0
  110. 2F F7 1A 00 : PC
  111. ;001AF72E LDR R0, [R0]
  112. ;001AF730 POP {R4,PC}
  113. ⇒ ここで、R0に0x9a7e0000が入るはず
  114. 44 44 44 44 : R4
  115. C4 4F 1C 00 : PC ; LDMFD SP!, {R1,PC}
  116. 01 00 7E 9A : R1
  117. 58 B2 18 00 : PC
  118. ;0018B258 CMP R0, R1
  119. ;0018B25C MOVEQ R0, #1
  120. ;0018B260 MOVNE R0, #0
  121. ;0018B264 LDMFD SP!, {R4,PC}
  122. ⇒ R1(0x9a7e0001)とR0(0x9a7e0000)との比較。ローダのバージョンを見てる
  123. ⇒ eur_jpn_kor(0x9a7e0000), taiwan(0x9a7e0001), china(0x9a7e0002)
  124. 44 44 44 44 : R4
  125. D4 14 10 00 : PC ; LDMFD SP!, {R4,PC}
  126. 84 7D 2B 00 : R4
  127. 8C 3D 14 00 : PC ; LDMFD SP!, {R0,PC}
  128. 88 01 27 00 : R0
  129. 18 CF 18 00 : PC
  130. ;0018CF18 STREQ R0, [R4,#0x24]
  131. ;0018CF1C LDMFD SP!, {R4,PC}
  132. ⇒ R1 == R0だったら、0x2b7d84+0x24=0x2b7da8に、0x270188を書き込む
  133. 44 44 44 44 : R4
  134. B9 F2 10 00 : PC ; POP {R0,R2,PC}
  135. E0 FE 01 00 : R0
  136. 10 00 00 00 : R2
  137. C4 4F 1C 00 : PC ; LDMFD SP!, {R1,PC}
  138. 00 94 27 00 : R1
  139. FC 34 13 00 : PC ; eeprom_read(0x1fee0, 0x279400, 0x10) ; return code LDMFD SP!, {R4,PC}
  140. 44 44 44 44 : R4
  141. 8C 3D 14 00 : PC ; LDMFD SP!, {R0,PC}
  142. 00 94 27 00 : R0
  143. 2F F7 1A 00 : PC
  144. ;RAM:001AF72E LDR R0, [R0]
  145. ;RAM:001AF730 POP {R4,PC}
  146. 44 44 44 44 : R4
  147. C4 4F 1C 00 : PC ; LDMFD SP!, {R1,PC}
  148. 02 00 7E 9A : R1
  149. 58 B2 18 00 : PC
  150. ;0018B258 CMP R0, R1
  151. ;0018B25C MOVEQ R0, #1
  152. ;0018B260 MOVNE R0, #0
  153. ;0018B264 LDMFD SP!, {R4,PC}
  154. ⇒ R1(0x9a7e0002)とR0(0x9a7e0000)との比較。ローダのバージョンを見てる
  155. ⇒ eur_jpn_kor(0x9a7e0000), taiwan(0x9a7e0001), china(0x9a7e0002)
  156. 44 44 44 44 : R4
  157. D4 14 10 00 : PC ; LDMFD SP!, {R4,PC}
  158. 48 01 2B 00 : R4
  159. 8C 3D 14 00 : PC ; LDMFD SP!, {R0,PC}
  160. E4 EF 22 00 : R0
  161. 18 CF 18 00 : PC
  162. ;0018CF18 STREQ R0, [R4,#0x24]
  163. ;0018CF1C LDMFD SP!, {R4,PC}
  164. ⇒ R1 == R0だったら、0x2b0148+0x24=0x2b016cに、0x22efe4を書き込む
  165. 44 44 44 44 : R4
  166. 08 30 10 00 : PC ; LDMFD SP!, {R4-R12,PC}
  167. E5 04 21 00 : R4
  168. 7C CF 2C 00 : R5
  169. 00 47 18 00 : R6
  170. 00 64 11 00 : R7
  171. 00 43 1B 00 : R8
  172. 00 32 11 00 : R9
  173. 00 B8 07 00 : R10
  174. 30 E6 21 00 : R11
  175. F9 02 10 00 : R12
  176. 28 43 1E 00 : PC
  177. ;001E4328 LDMFD SP!, {R4-R6,LR}
  178. ;001E432C BX R12
  179. 44 44 44 44 : R4
  180. 55 55 55 55 : R5
  181. 66 66 66 66 : R6
  182. F9 02 10 00 : LR
  183. ;001002F8 POP {PC}
  184. 8C 3D 14 00 : PC ; LDMFD SP!, {R0,PC}
  185. A8 7D 2B 00 : R0
  186. 4C 9A 19 00 : sub_199a48(0x2b7da8) ; return code
  187. ;00199A8C LDMFD SP!, {R4-R8}
  188. ;00199A90 BX LR
  189. ;001002F8 POP {PC}
  190. -----------------------------------------------------------------------
  191. AESの鍵の設定くさい
  192. -----------------------------------------------------------------------
  193. RAM:00199A4C MOV R1, #0
  194. RAM:00199A50 STR R1, [R0,#0x48]
  195. RAM:00199A54 STR R1, [R0,#0x4C]
  196. RAM:00199A58 LDR R2, =0x6A09E667
  197. RAM:00199A5C LDR R3, =0xBB67AE85
  198. RAM:00199A60 LDR R12, =0x3C6EF372
  199. RAM:00199A64 STR R1, [R0,#0x44]
  200. RAM:00199A68 ADD R1, R0, #0x50
  201. RAM:00199A6C LDR R4, =0xA54FF53A
  202. RAM:00199A70 LDR R5, =0x510E527F
  203. RAM:00199A74 LDR R6, =0x9B05688C
  204. RAM:00199A78 LDR R7, =0x1F83D9AB
  205. RAM:00199A7C LDR R8, =0x5BE0CD19
  206. RAM:00199A80 ADD R0, R0, #0x5C
  207. RAM:00199A84 STMIA R1, {R2,R3,R12}
  208. RAM:00199A88 STMIA R0, {R4-R8}
  209. RAM:00199A8C LDMFD SP!, {R4-R8}
  210. RAM:00199A90 BX LR
  211. -----------------------------------------------------------------------
  212. 84 0D 24 00 : R4
  213. 00 91 00 00 : R5
  214. 1A DC 2D 00 : R6
  215. 00 D6 05 00 : R7
  216. 3E 04 17 00 : R8
  217. B9 F2 10 00 : PC ; POP {R0,R2,PC}
  218. A8 7D 2B 00 : R0
  219. 70 00 00 00 : R2
  220. C4 4F 1C 00 : PC ; LDMFD SP!, {R1,PC}
  221. 50 62 70 00 : R1
  222. 38 62 1B 00 : sub_1b622c(0x2b7da8, 0x706250, 0x70); return code LDMFD SP!, {R4-R8,PC}
  223. 84 0D 24 00 : R4
  224. 00 C0 16 00 : R5
  225. 00 85 0F 00 : R6
  226. 12 C0 2A 00 : R7
  227. 7E 6D 1F 00 : R8
  228. 8C 3D 14 00 : PC ; LDMFD SP!, {R0,PC}
  229. A8 7D 2B 00 : R0
  230. C4 4F 1C 00 : PC ; LDMFD SP!, {R1,PC}
  231. 48 7E 2B 00 : R1
  232. D8 99 19 00 : sub_1999d4(0x2b7da8, 0x2b7e48); return code LDMFD SP!, {R4-R6,PC}
  233. 68 8F 10 00 : R4
  234. 00 8C 00 00 : R5
  235. 86 EB 24 00 : R6
  236. 9B 44 1B 00 : PC ; POP {R0-R4,R7,PC}
  237. 48 7E 2B 00 : R0
  238. BC 4C 14 00 : R1
  239. 88 01 2B 00 : R2
  240. 20 7C 00 00 : R3
  241. C4 4F 1C 00 : R4 ; LDMFD SP!, {R1,PC}
  242. 77 77 77 77 : R7
  243. AC EF 22 00 : sub_22efa8(0x2b7e48, 0x144cbc, 0x2b0188, 0x7c20) ; return code LDMFD SP!, {R4-R8,PC}
  244. ; china版では、0x22efe4にパッチされる
  245. ; ここで、0x2b0188~0x2b7da8のコードを復号化する
  246. 88 5C 10 00 : R4
  247. 00 00 0E 00 : R5
  248. 90 03 25 00 : R6
  249. C0 FA 1E 00 : R7
  250. 9B 44 1B 00 : R8
  251. F9 02 10 00 : PC ; POP {PC}
Advertisement
Add Comment
Please, Sign In to add comment