microcorruption Reykjavik

Microcorruption.com lvl. Reykjavik

Level začíná povzbuzujícím zjištěním:

OVERVIEW

– Lockitall developers have implemented military-grade on-device
encryption to keep the password secure.
– This lock is not attached to any hardware security module.

   This is Software Revision 02. This release contains military-grade
    encryption so users can be confident that the passwords they enter
    can not be read from memory.   We apologize for making it too easy
    for the password to be recovered on prior versions.  The engineers
    responsible have been sacked.

Takže supiš, něco se bude zakodovavat.

4438
4438:  3e40 2045      mov #0x4520, r14
443c:  0f4e           mov r14, r15
443e:  3e40 f800      mov #0xf8, r14
4442:  3f40 0024      mov #0x2400, r15
4446:  b012 8644      call #0x4486
444a:  b012 0024      call #0x2400
444e:  0f43           clr r15

Takže obsah r14 je v adrese 4520, a r15 je v 2400. Pak se zavolá funkce enc a pak se zavolá něco, co je uloženo v adrese 2400. Takže mě zajímá, co je v 2400 a co dělá enc.

Na 2400 je uloženo:

2400:   0b12 0412 0441 2452 3150 e0ff 3b40 2045   .....A$R1P..;@ E
2410:   073c 1b53 8f11 0f12 0312 b012 6424 2152   .<.S........d$!R
2420:   6f4b 4f93 f623 3012 0a00 0312 b012 6424   oKO..#0.......d$
2430:   2152 3012 1f00 3f40 dcff 0f54 0f12 2312   !R0...?@...T..#.
2440:   b012 6424 3150 0600 b490 ca11 dcff 0520   ..d$1P.........
2450:   3012 7f00 b012 6424 2153 3150 2000 3441   0....d$!S1P .4A
2460:   3b41 3041 1e41 0200 0212 0f4e 8f10 024f   ;A0A.A.....N...O
2470:   32d0 0080 b012 1000 3241 3041 d21a 189a   2.......2A0A....
2480:   22dc 45b9 4279 2d55 858e a4a2 67d7 14ae   ".E.By-U....g...
2490:   a119 76f6 42cb 1c04 0efa a61b 74a7 416b   ..v.B.......t.Ak
24a0:   d237 a253 22e4 66af c1a5 938b 8971 9b88   .7.S".f......q..
24b0:   fa9b 6674 4e21 2a6b b143 9151 3dcc a6f5   ..ftN!*k.C.Q=...
24c0:   daa7 db3f 8d3c 4d18 4736 dfa6 459a 2461   ...?.<M.G6..E.$a
24d0:   921d 3291 14e6 8157 b0fe 2ddd 400b 8688   ..2....W..-.@...
24e0:   6310 3ab3 612b 0bd9 483f 4e04 5870 4c38   c.:.a+..H?N.XpL8
24f0:   c93c ff36 0e01 7f3e fa55 aeef 051c 242c   ..U....$,
2500:   3c56 13af e57b 8abf 3040 c537 656e 8278   <V...{..0@.7en.x
2510:   9af9 9d02 be83 b38c e181 3ad8 395a fce3   ..........:.9Z..
2520:   4f03 8ec9 9395 4a15 ce3b fd1e 7779 c9c3   O.....J..;..wy..
2530:   5ff2 3dc7 5953 8826 d0b5 d9f8 639e e970   _.=.YS.&....c..p
2540:   01cd 2119 ca6a d12c 97e2 7538 96c5 8f28   ..!..j.,..u8...(
2550:   d682 1be5 ab20 7389 48aa 1fa3 472f a564   ..... s.H...G/.d
2560:   de2d b710 9081 5205 8d44 cff4 bc2e 577a   .-....R..D....Wz
2570:   d5f4 a851 c243 277d a4ca 1e6b 0000 0000   ...Q.C'}...k....
2580:   *

Což po odstranění bordelu v Notepad++ dělá tenhle kod:
0b12 0412 0441 2452 3150 e0ff 3b40 2045
073c 1b53 8f11 0f12 0312 b012 6424 2152
6f4b 4f93 f623 3012 0a00 0312 b012 6424
2152 3012 1f00 3f40 dcff 0f54 0f12 2312
b012 6424 3150 0600 b490 ca11 dcff 0520
3012 7f00 b012 6424 2153 3150 2000 3441
3b41 3041 1e41 0200 0212 0f4e 8f10 024f
32d0 0080 b012 1000 3241 3041 d21a 189a
22dc 45b9 4279 2d55 858e a4a2 67d7 14ae
a119 76f6 42cb 1c04 0efa a61b 74a7 416b
d237 a253 22e4 66af c1a5 938b 8971 9b88
fa9b 6674 4e21 2a6b b143 9151 3dcc a6f5
daa7 db3f 8d3c 4d18 4736 dfa6 459a 2461
921d 3291 14e6 8157 b0fe 2ddd 400b 8688
6310 3ab3 612b 0bd9 483f 4e04 5870 4c38
c93c ff36 0e01 7f3e fa55 aeef 051c 242c
3c56 13af e57b 8abf 3040 c537 656e 8278
9af9 9d02 be83 b38c e181 3ad8 395a fce3
4f03 8ec9 9395 4a15 ce3b fd1e 7779 c9c3
5ff2 3dc7 5953 8826 d0b5 d9f8 639e e970
01cd 2119 ca6a d12c 97e2 7538 96c5 8f28
d682 1be5 ab20 7389 48aa 1fa3 472f a564
de2d b710 9081 5205 8d44 cff4 bc2e 577a
d5f4 a851 c243 277d a4ca 1e6b 0000 0000

Když ho disasembluju, dostanu:

0b12 push r11 0412 push r4 0441 mov sp, r4 2452 add #0x4, r4 3150 e0ff add #0xffe0, sp 3b40 2045 mov #0x4520, r11 073c jmp $+0x10 1b53 inc r11 8f11 sxt r15 0f12 push r15 0312 push #0x0 b012 6424 call #0x2464 2152 add #0x4, sp 6f4b mov.b @r11, r15 4f93 tst.b r15 f623 jnz $-0x12 3012 0a00 push #0xa 0312 push #0x0 b012 6424 call #0x2464 2152 add #0x4, sp 3012 1f00 push #0x1f 3f40 dcff mov #0xffdc, r15 0f54 add r4, r15 0f12 push r15 2312 push #0x2 b012 6424 call #0x2464 3150 0600 add #0x6, sp b490 ca11 dcff cmp #0x11ca, -0x24(r4) 0520 jnz $+0xc 3012 7f00 push #0x7f b012 6424 call #0x2464 2153 incd sp 3150 2000 add #0x20, sp 3441 pop r4 3b41 pop r11 3041 ret
1e41 0200 mov 0x2(sp), r14 0212 push sr 0f4e mov r14, r15 8f10 swpb r15 024f mov r15, sr 32d0 0080 bis #0x8000, sr b012 1000 call #0x10 3241 pop sr 3041 ret
d21a 189a call &0x9a18 22dc bis @r12, sr 45b9 bit.b r9, r5 4279 subc.b r9, sr 2d55 add @r5, r13 858e a4a2 sub r14, -0x5d5c(r5) 67d7 bis.b @r7, r7 14ae a119 dadd 0x19a1(r14), r4 76f6 and.b @r6+, r6 42cb bic.b r11, sr 1c04 0efa rrc -0x5f2(r12) a61b invalid @r6 74a7 dadd.b @r7+, r4 416b addc.b r11, sp d237 jge $-0x5a a253 22e4 incd &0xe422 66af dadd.b @r15, r6 c1a5 938b dadd.b r5, -0x746d(sp) 8971 9b88 subc sp, -0x7765(r9) fa9b 6674 cmp.b @r11+, 0x7466(r10) 4e21 jnz $+0x29e 2a6b addc @r11, r10 b143 9151 mov #-0x1, 0x5191(sp) 3dcc bic @r12+, r13 a6f5 daa7 and @r5, -0x5826(r6) db3f jmp $-0x48 8d3c jmp $+0x11c 4d18 rrc.b r13 4736 jge $-0x370 dfa6 459a 2461 dadd.b -0x65bb(r6), 0x6124(r15) 921d 3291 sxt &0x9132 14e6 8157 xor 0x5781(r6), r4 b0fe 2ddd and @r14+, -0x22d3(pc) 400b reti pc 8688 6310 sub r8, 0x1063(r6) 3ab3 bit #-0x1, r10 612b jnc $-0x13c 0bd9 bis r9, r11 483f jmp $-0x16e 4e04 rrc.b r14 5870 4c38 subc.b 0x384c(pc), r8 c93c jmp $+0x194 ff36 jge $-0x200 0e01 rra r14 7f3e jmp $-0x300 fa55 aeef add.b @r5+, -0x1052(r10) 051c rrc r5 242c jc $+0x4a 3c56 add @r6+, r12 13af e57b dadd 0x7be5(r15), 4 8abf 3040 bit r15, 0x4030(r10) c537 jge $-0x74 656e addc.b @r14, r5 8278 9af9 subc r8, &0xf99a 9d02 be83 call -0x7c42(r13) b38c e181 sub @r12+, 8 3ad8 bis @r8+, r10 395a add @r10+, r9 fce3 4f03 xor.b #-0x1, 0x34f(r12) 8ec9 9395 bic r9, -0x6a6d(r14) 4a15 rra.b r10 ce3b jl $-0x62 fd1e call @r13+ 7779 subc.b @r9+, r7 c9c3 5ff2 bic.b #0x0, -0xda1(r9) 3dc7 bic @r7+, r13 5953 add.b #0x1, r9 8826 jz $-0x2ee d0b5 d9f8 639e bit.b -0x727(r5), -0x619d(pc) e970 01cd subc.b @pc, -0x32ff(r9) 2119 rra @sp ca6a d12c addc.b r10, 0x2cd1(r10) 97e2 7538 96c5 xor &0x3875, -0x3a6a(r7) 8f28 jnc $+0x120 d682 1be5 ab20 sub.b &0xe51b, 0x20ab(r6) 7389 sub.b @r9+, 4 48aa dadd.b r10, r8 1fa3 dinc r15 472f jc $-0x170 a564 de2d addc @r4, 0x2dde(r5) b710 swpb @r7+ 9081 5205 8d44 sub 0x552(sp), 0x448d(pc) cff4 bc2e and.b r4, 0x2ebc(r15) 577a d5f4 subc.b -0xb2b(r10), r7 a851 c243 add @sp, 0x43c2(r8) 277d subc @r13, r7 a4ca 1e6b bic @r10, 0x6b1e(r4) 0000 rrc pc 0000 rrc pc

Takže tady vidím, že se projíždí po inicializaci kód a pak dojde ke srovnání toho, co je v r4 s hodnotou 11ca: b490 ca11 dcff cmp #0x11ca, -0x24(r4)

Co je r4? Podle registru: r04=43fe. Tady je od r4 odečtena 24, což je 43da, Když se podívám do memory dump, na této adrese vidím: 43d0:   0100 4424 0200 da43 1f00 7465 7374 696e   ..D$…C..testin
43e0:   6769 6e70 7574 0000 0000 0000 0000 0000   ginput……….
Takže se tady srovnává můj vstup! A rovnou tak, že tady můj řetězec začíná. Takže co se stane, když zadám 11ca (respektive správně little endian: ca11)?

Voilá. Nějaký nápady na zlepšení?

Advertisements

Zanechat Odpověď

Vyplňte detaily níže nebo klikněte na ikonu pro přihlášení:

WordPress.com Logo

Komentujete pomocí vašeho WordPress.com účtu. Odhlásit / Změnit )

Twitter picture

Komentujete pomocí vašeho Twitter účtu. Odhlásit / Změnit )

Facebook photo

Komentujete pomocí vašeho Facebook účtu. Odhlásit / Změnit )

Google+ photo

Komentujete pomocí vašeho Google+ účtu. Odhlásit / Změnit )

Připojování k %s