ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Whitehorse
    Wargame/Microcorruption 2014. 7. 31. 15:49

    login 함수를 보면 conditional_unlock_door라는 함수를 호출한다.

    4446 <conditional_unlock_door>
    4446:  0412           push	r4
    4448:  0441           mov	sp, r4
    444a:  2453           incd	r4
    444c:  2183           decd	sp
    444e:  c443 fcff      mov.b	#0x0, -0x4(r4)
    4452:  3e40 fcff      mov	#0xfffc, r14
    4456:  0e54           add	r4, r14
    4458:  0e12           push	r14
    445a:  0f12           push	r15
    445c:  3012 7e00      push	#0x7e
    4460:  b012 3245      call	#0x4532 <INT>
    4464:  5f44 fcff      mov.b	-0x4(r4), r15
    4468:  8f11           sxt	r15
    446a:  3152           add	#0x8, sp
    446c:  3441           pop	r4
    446e:  3041           ret


    그리고 이 함수에서는 인터럽트 넘버 0x7e를 호출하는것을 볼 수 있다.

    4446 <conditional_unlock_door>
    ...
    4458:  0e12           push	r14
    445a:  0f12           push	r15
    445c:  3012 7e00      push	#0x7e
    4460:  b012 3245      call	#0x4532 <INT>
    ...


    메뉴얼을 보면 이는 보안성이 향상된 HSM-2의 인터럽트 넘버이고, password가 맞아야 unlock된다.

    하지만 우리는 password를 모르니 이 방식으로는 unlock할 수 없다. 

    따라서 조건없이 unlock되는 0x7F를 인자로 인터럽트를 호출해야 한다.


    방법은 의외로 간단하다. 해당 문제에서도 buffer overflow를 할 수 있으므로,

    INT를 호출하는 주소로 RET로 덮고, 7f를 인자로 던져주면 된다.


    그러므로 키는 4141414141414141414141414141414160447f

    (이해가 잘 안된다면 키값을 입력하고, login함수의 RET부분에 break point를 건 다음 차근차근 실행해보자.)

    'Wargame > Microcorruption' 카테고리의 다른 글

    Santa Cruz  (0) 2014.08.04
    Montevideo  (0) 2014.07.31
    Johannesburg  (0) 2014.07.31
    Reykjavik  (0) 2014.07.31
    Cusco  (0) 2014.07.31
Designed by Tistory.