-
MontevideoWargame/Microcorruption 2014. 7. 31. 16:41
login 함수를 살펴보면, 전체적으로 이전레벨인 Whitehorse와 별반 다를게 없다.
1. 0x2400 부분에 사용자가 입력한 값을 쓴다.
2. 위에서 입력받은 값을 strcpy를 이용해 sp가 가리키는 곳에 복사한다.
3. memset을 이용해 0x2400 부분에 사용자가 입력한 값을 0으로 초기화한다.
다만 memset이 추가되어, 0x2400 부분의 값들을 모두 0으로 초기화 하는것을 알 수 있다.
44f4 <login> 44f4: 3150 f0ff add #0xfff0, sp 44f8: 3f40 7044 mov #0x4470 "Enter the password to continue.", r15 44fc: b012 b045 call #0x45b0 <puts> 4500: 3f40 9044 mov #0x4490 "Remember: passwords are between 8 and 16 characters.", r15 4504: b012 b045 call #0x45b0 <puts> 4508: 3e40 3000 mov #0x30, r14 450c: 3f40 0024 mov #0x2400, r15 4510: b012 a045 call #0x45a0 <getsn> 4514: 3e40 0024 mov #0x2400, r14 4518: 0f41 mov sp, r15 451a: b012 dc45 call #0x45dc <strcpy> 451e: 3d40 6400 mov #0x64, r13 4522: 0e43 clr r14 4524: 3f40 0024 mov #0x2400, r15 4528: b012 f045 call #0x45f0 <memset> 452c: 0f41 mov sp, r15 452e: b012 4644 call #0x4446 <conditional_unlock_door> 4532: 0f93 tst r15 4534: 0324 jz #0x453c <login+0x48> 4536: 3f40 c544 mov #0x44c5 "Access granted.", r15 453a: 023c jmp #0x4540 <login+0x4c> 453c: 3f40 d544 mov #0x44d5 "That password is not correct.", r15 4540: b012 b045 call #0x45b0 <puts> 4544: 3150 1000 add #0x10, sp 4548: 3041 ret
하지만 memset이 끝난 시점에 break point를 걸어 확인해보면, 0x2400 부분은 모두 0으로 초기화 되었지만
sp가 가리키는 부분에 복사된 값들은 멀쩡한 것을 볼 수 있다.
또한 이 값들이 RET를 덮으므로 풀이방법은 전레벨과 동일하다.
그러므로 키는 이전레벨과 동일한 [ 16 Byte의 아무런 값 ] + [ INT를 Call하는 주소 ] + [ 7F ] 가 된다.
4141414141414141414141414141414160447f 로 클리어
'Wargame > Microcorruption' 카테고리의 다른 글
Jakarta (0) 2014.08.11 Santa Cruz (0) 2014.08.04 Whitehorse (0) 2014.07.31 Johannesburg (0) 2014.07.31 Reykjavik (0) 2014.07.31