Crackme 2번 문제 풀이
Crackme 2번 문제를 풀기 위해서 올리디버거로 실행을 해보았다.
1번 문제처럼 접근을 위해 처음부터 stepinto를 통해 정보를 획득해 보기로 했다.
004013 C0 : ModuleEntryPoint
0040149B에서 프로그램이 실행되었다.
EXit를 누를 시 프로그램이 종료되고 , 문자와 OK를 입력해도 화면이 막 바뀌진 않았다.
0040149B의 내용은
call CrackMe2. 00401000이었다.
00401000으로 디렉트로 가보려 했지만 왜 인지 가지지 않았다..
처음부터 다시 해보기로 했다.
F7로 들어갈 수 있는 첫 번째 접근 지다
F7로 계속해서 이 코드를 탐구하다 보면 어느 순간부터 무한루프에 빠진 듯한 느낌이 든다.
계속해서 똑같은 부분을 통과하는 부분을 깨닫게 되는데 , 이 구문에 빠지기 전에 여기서 탈출하는 구문을 찾는 게 우선인 거 같았다.
첫 번째 접근지에서 F9를 통해 retn 구문을 나오면
00401494 부분으로 나오는 것을 확인했고 , 프로그램 실행 부분 근처였다. 프로그램 실행 부분코드로 들어가 보기로 했다.
F7을 통해 00401000으로 오게 되었다. 중요한 부분임이 틀림없는 게 아까와 다르게 주석 부분이 엄청 많았다.
F8을 통해 살펴보기로 했다.
살펴보다 보니 CreateWindowExA 부분이 보였고 이 부분에서 브레이크포인트를 건 뒤 예상처럼 프로그램 실행창이 나왔다.
이후 004010A7 부분을 F8을 통해 들어가서 내용을 확인해 보았지만, 별다른 내용 없이 retn을 통해 바로 빠져나오는 것을 확인했다. 계속해서 F8을 눌러보았다. 이 과정에서 무한루프를 몇 번을 빠졌는지 모르겠다.
이런 식으로는 진행이 되질 않을 거 같아서 가장 원초적인 방법인 스크롤을 통해 중요구문의 내용들을 살펴보기로 했다.
CreateWindowExA, ShowWindow, GetmessageA , DispatchMessageA , TranslateMessage, DefWindowProcA GetDlgitemTextA, SetDlgItemText 등등을 많이 보았다. 여기서 GetDlgitemTextA, SetDlgItemTextA 이 두 개에 집중을 해보았다.
출처 : https://garage-fullof-dummy.tistory.com/62
[MFC] 에디트 컨트롤 GetDlgItemText, SetDlgItemText
이 포스팅에서는 두개의 버튼과 두 개의 에디트 컨트롤을 이용해서 위쪽의 에디트 컨트롤에 입력한 문자열을 아래의 에디드 컨트롤에 보여주는 프로젝트를 만들어 보려고 합니다. 이 포스팅을
garage-fullof-dummy.tistory.com
이 함수 같은 경우 간단히 말해 Get에 문자를 입력하면 버튼등을 통해서 Set으로 보내는 함수였다.
GetDlgItemText 함수 근처에는 "HackFun"이라는 단어가 있었고 ,
SetDlgItemText 함수 근처에는 "SEP"가 결과 값으로 나와 있는 것을 확인했다.
HackFun을 입력해 보았다
정석은 아닌듯한 느낌으로 문제를 풀어서 아쉬웠다.
이 문제를 풀면서 조금이라도 집중력을 잃어버리면 무한루프에 너무 빠지는 나쁜 문제였다.
정답 키워드를 찾아서 다행이다.