Reversing.kr의 첫번째 문제다
실행시 위와같은 화면이 나오고 아무값이나 입력한 후 확인을 누르면 틀렸다고 뜬다
x64dbg 디버거를 통해 풀어보자
문자열을 찾아 주요 코드부분을 찾아냈다.
시작부분에 브레이크포인트를 걸어 재실행시 찾기 쉽게 해놓자
코드를 잘 보면 cmp로 메모리를 특정 문자와 비교하는것을 볼 수 있다
이것이 비밀번호와 비교하는 부분이라고 추측할 수 있다
하지만 자세히 보면 문자열참조 기준이 esp이다
esp는 스택의 최상단을 가리키기 때문에 코드가 실행되는동안 계속 변화한다
esp의 변화과정을 알아내는것이 이 문제의 핵심인듯 하다
스택에 데이터 입출력을 담당하는 명령인 push와 pop을 찾고
esp를 직접적으로 수정하는 부분이 있나 확인해보자
esp+5의 값과 61(a)를 비교한 후에 push를 하면서 기존의 esp에서 4만큼 마이너스가 되어있는 상태다
여기서 esp+A를 ecx에 담아 호출하는 함수의 인자로 삼는다
이번에는 저 함수의 역할을 알아보자
"5y" 문자열과 esp+A를 인자로 받는다
받은 인자 두개를 비교한다
다시 메인으로 돌아와서 보면 반복문이 존재함을 알 수 있다
2.
이번에는 esp+10을 참조하고 있다
위에서 401150 함수가 끝나고 add를 통해 정리해 주었으므로 원위치가 되고
push를 두번 해주었기 때문에 esp는 -8만큼 변경된다
위에서 분석한 내용을 정리해보면 아래와 같다.
ESP의 변화에 따라 입력한 문자열의 위치가 상대적으로 나타났다
이를 고려해서 풀어보면 위와같은 답이 나온다.
'Wargame > etc' 카테고리의 다른 글
abex Crackme 4번 (0) | 2017.09.24 |
---|---|
abex Crackme 3번 (0) | 2017.09.23 |
abex Crackme 1번 (0) | 2017.08.24 |
[xcz.kr]Web Basic (0) | 2017.08.03 |
[pwnable.kr]fd (0) | 2017.07.14 |