다운받은 프로그램을 실행해보면 위와 같습니다. 아무거나 입력하고 확인을 누른다면..
비번이 잘못됐다고 하네요. 올바른 비밀번호를 알아내면 flag를 주거나, 아니면 그 비밀번호 자체가 flag일 것 같습니다. 고민할 필요 없이 Ollydbg로 까보면 시작점은 401188번지이고 401114번지부터 실패, 성공 메시지가 있음을 확인할 수 있습니다.
저 부근에 있는 조건문들을 확인해서 어떤 경우에 실패로 빠지는지를 봐도 되지만, 간단한 프로그램인 만큼 실제로 프로그램이 어떤 구조를 가지고 있는지 최대한 꼼꼼하게 분석을 해보겠습니다.
401188번지부터 F8(step over)을 누르면서 한 칸씩 가다보면 401250번지까지는 별 변화가 없다가 401251번지에 도달해서 창이 뜨는 것을 볼 수 있습니다. 401251번지에서는 401000번지의 함수를 CALL하니 F7(step into)로 들어가봅시다.
401000번지의 함수에서는 DialogBoxParamA라는 함수를 실행합니다. DialogBoxParamA 함수는 https://msdn.microsoft.com/ko-kr/library/windows/desktop/ms645465(v=vs.85).aspx 에서 어떤 함수인지 볼 수 있는데, 봐도 잘 이해가 안갑니다. 큰일입니다. F7로 저 함수 내부에서 어떤 일이 벌어지는가를 보려고도 했으나 빠르게 포기했습니다. 잘 이해는 안가지만 401020번지로 이동한다는 사실만 알기로 스스로 타협했습니다. 그러면 이제 401020번지를 보겠습니다.
이제는 401080번지로 가네요. EAX에 3F06FE라는 값이 담겨있고, 이걸 인자로 전달하지만 현재로서는 조금 불명확합니다. 401080번지를 확인해봅시다.
이제 조금 살 것 같습니다. 딱 봐도 비교루틴같네요. 천천히 따라가봅시다. 그러면 4010AA번지에 GetDlgItemTextA를 call하는 것을 확인할 수 있는데요, https://msdn.microsoft.com/ko-kr/library/windows/desktop/ms645489(v=vs.85).aspx 에서 확인해보면 저 함수는 EAX가 가리키는 주소에 최대 0x64바이트까지 Dialog에 써져있는 내용을 옮기는 것입니다. ControlID 0x3E8은 식별자 역할인 것 같은데 이 프로그램에서 실행된 Dialog 창은 1개밖에 없으니 우리가 입력한 비밀번호일 것이라고 생각해도 무방해보입니다.
EAX에 저장되는 주소는 ESP+8 = 19F718번지입니다. 실제로 0123456789를 입력했을 때
이렇게 19F718번지부터 쌓이는 것을 확인할 수 있습니다. 그렇다면 어떻게 올바른 키를 만들어낼 수 있을까요?
1. 4010B0번지를 확인해봅시다. [ESP+5] (19F719번지에 적힌 값)와 61(a)이 일치하는지 확인하고, 일치하지 않는다면 Incorrect Password로 가버립니다. 그러므로 일단 두 번째 글자는 a여야겠네요.
2. 401150번지의 함수에 인자 (2, "5y"의 주소, ESP+A(19F71A번지, 즉 세 번째 글자의 주소))를 보내서 그 return 값이 0이 아니면 Incorrect password로 가버립니다. 401150번지의 함수를 확인해보면 문자열 비교 함수입니다.
3. 다섯번째 글자부터 이어지는 문자열과 "R3versing"을 비교합니다.
4. 40110D번지를 확인해봅시다. [ESP+4](19F718번지에 적힌 값)와 45(E)가 일치하는지 확인합니다.
이 4가지를 전부 통과하면 Conguratulation을 얻을 수 있습니다.
그러므로 키는 Ea5yR3versing 임을 알 수 있습니다.
엄청 복잡한 프로그램은 아니지만 그럼에도 불구하고 하나하나 분석하려고 하니까 생각보다 꽤 어렵네요. 앞으로는 적당히 건너뛸건 건너뛰어야겠습니다.
'워게임 > Reversing.kr' 카테고리의 다른 글
[Reversing.kr] Position (0) | 2017.12.30 |
---|---|
[Reversing.kr] ImagePrc (0) | 2017.12.29 |
[Reversing.kr] Replace (0) | 2017.12.29 |
[Reversing.kr] Music Player (0) | 2017.12.29 |
[Reversing.kr] Easy Unpack (0) | 2017.12.29 |
[Reversing.kr] Easy Keygen (0) | 2017.12.29 |