이번엔 틀린 입력을 할 경우 Text Field의 모든 값이 사라진다.
이동해야 하는 부분은, Check 버튼을 누른 후의 가상 메모리이므로, Memory map에서 이미지처럼 breakpoint를 건다.
F9를 눌러 실행하다 보면, 입력 대기 부분에서 breakpoint가 걸린다.
Simples / 1234를 입력해보자. 402940에서 멈추는 것을 볼 수 있다.
한 줄씩 실행해보면, Name에 입력한 값을 402995의 함수에서 스택에 올린다.
4029DC에서 실행하는 함수의 결과로 String이 반환된다.
우선, 의심스러우므로 이게 키 값인지 한번 입력해보자.
다시 실행해서 4029DC에서 실행하는 함수를 분석해보자.
실행하면 40215F를 거쳐, 4027E0으로 간다.
3개의 레지스터를 PUSH한 후 함수를 실행하는데, EBX가 가리키는 스택 주소의 값이 Name에 입력한 “Simples”였다. EDX는 목적지 주소로 추정했다.
함수 실행 후, 추정했던 목적지 주소에 Name이 역으로 즉, selpmiS로 들어가있다.
402859에서 함수를 또 호출하는데, PUSH된 레지스터는 각각 ECX=18F358, EBX=18F448, ESI=882DB8이다.
EAX가 가리키는 값은 “selpmiS”이다.
실행 후, ECX가 가리켰던 18F358 주소에 “f\XEYPF”가 들어있다.
40288C에서 호출하는 함수 역시 3개의 레지스터를 PUSH한 후 호출하며, 그 값은 각각EAX=18F358, EBX=18F448, ESI=882DB8이다. 그럼 끝나게 된다.
약간의 프로그래밍으로 13F358의 값을 16진수로 바꿔보면, 해당 키가 나오는 것을 볼 수 있다.
정답은 665C5845595046
'[Wargame Write-up] > Simples.kr Season 1' 카테고리의 다른 글
[Simples.kr] [Season 1] Crackme 09 (0) | 2017.10.07 |
---|---|
[Simples.kr] [Season 1] Crackme 08 (0) | 2017.10.06 |
[Simples.kr] [Season 1] Crackme 06 (0) | 2017.10.06 |
[Simples.kr] [Season 1] Crackme 05 (0) | 2017.10.06 |
[Simples.kr] [Season 1] Crackme 04 (0) | 2017.10.05 |