microcorruption Cusco

microcorruption.com lvl Cusco

(tady jsem zjistil, že nemusím screenshotovat a taky, že musím pořádně číst instrukce:D)

- We have fixed issues with passwords which may be too long.
    - This lock is attached the the LockIT Pro HSM-1.

 LockIT Pro Hardware  Security Module 1 stores  the login password,
    ensuring users  can not access  the password through  other means.
    The LockIT Pro  can send the LockIT Pro HSM-1  a password, and the
    HSM will  return if the password  is correct by setting  a flag in
    memory.

Security module kontroluje heslo, takže do něj se patrně nedostanu. V kodu ho čte test_password_valid. Jinak je heslo v r15, ale nikde na něj nedosáhnu. Ale je tu jiná zajímavá funkce: unlock_door

 

4446
4446:  3012 7f00      push #0x7f
444a:  b012 4245      call #0x4542
444e:  2153           incd sp
4450:  3041           ret

 

4500
4500:  3150 f0ff      add #0xfff0, sp
4504:  3f40 7c44      mov #0x447c "Enter the password to continue.", r15
4508:  b012 a645      call #0x45a6
450c:  3f40 9c44      mov #0x449c "Remember: passwords are between 8 and 16 characters.", r15
4510:  b012 a645      call #0x45a6
4514:  3e40 3000      mov #0x30, r14
4518:  0f41           mov sp, r15
451a:  b012 9645      call #0x4596
451e:  0f41           mov sp, r15
4520:  b012 5244      call #0x4452
4524:  0f93           tst r15
4526:  0524           jz #0x4532
4528:  b012 4644      call #0x4446
452c:  3f40 d144      mov #0x44d1 "Access granted.", r15
4530:  023c           jmp #0x4536
4532:  3f40 e144      mov #0x44e1 "That password is not correct.", r15
4536:  b012 a645      call #0x45a6
453a:  3150 1000      add #0x10, sp
453e:  3041           ret

Heslo musí být 8-16 znaků. Ale na 4514 je r14 nastaveno na 48 znaků! No, při zadání 010203045060708091011121314151617 dostanu: insn address unaligned, což je divný.

 

insn address unaligned
> r pc 8
   3139:   0000 0000 0000 0000  ........

3139..wtf…v memory na inputu vidím:

43e0:   5645 0300 ca45 0000 0a00 0000 3a45 3031   VE...E......:E01
43f0:   3032 3033 3034 3530 3630 3730 3830 3931   0203045060708091
4400:   3031 3131 3231 3331 3431 3531 3631 3720   011121314151617

HA! 3931 je můj input. HEX hodnota 91, takže 19…tedy devítka a první číslo z desítky. Evidentně mi pointer skáče, kam mu ukážu.

Takže!

4500
4500:  3150 f0ff      add #0xfff0, sp
4504:  3f40 7c44      mov #0x447c "Enter the password to continue.", r15
4508:  b012 a645      call #0x45a6
450c:  3f40 9c44      mov #0x449c "Remember: passwords are between 8 and 16 characters.", r15
4510:  b012 a645      call #0x45a6
4514:  3e40 3000      mov #0x30, r14
4518:  0f41           mov sp, r15
451a:  b012 9645      call #0x4596
451e:  0f41           mov sp, r15
4520:  b012 5244      call #0x4452
4524:  0f93           tst r15
4526:  0524           jz #0x4532
4528:  b012 4644      call #0x4446
452c:  3f40 d144      mov #0x44d1 "Access granted.", r15
4530:  023c           jmp #0x4536
4532:  3f40 e144      mov #0x44e1 "That password is not correct.", r15
4536:  b012 a645      call #0x45a6
453a:  3150 1000      add #0x10, sp
453e:  3041           ret

Jednoduše chci skoči na unlock_door. To je na 4446, podle této instrukce. Ale protože little endian, tedy 4644…
A řešení je: 010203040506070809101112131415164644

Nápady na zlepšení?

Reklamy

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