-
WhitehorseWargame/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