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