실습/[System Hacking 실습]

Crackme 2번 문제 풀이

환석이 2023. 3. 17. 23:54

 

실행시 초기 모습
문자를 입력해도 넘어가지 않는다.
crackme2번 올리디버거 실행 모습

Crackme 2번 문제를 풀기 위해서 올리디버거로 실행을 해보았다. 

 

1번 문제처럼 접근을 위해 처음부터 stepinto를 통해 정보를 획득해 보기로 했다.

 

004013 C0 : ModuleEntryPoint

 

 

0040149B

 

0040149B에서 프로그램이 실행되었다.

 

EXit를 누를 시 프로그램이 종료되고 , 문자와 OK를 입력해도 화면이 막 바뀌진 않았다. 

 

0040149B의 내용은 

call CrackMe2. 00401000이었다. 

 

00401000으로 디렉트로 가보려 했지만 왜 인지 가지지 않았다..

 

처음부터 다시 해보기로 했다. 

 

004013E65

F7로 들어갈 수 있는 첫 번째 접근 지다

 

 

F7로 계속해서 이 코드를 탐구하다 보면 어느 순간부터 무한루프에 빠진 듯한 느낌이 든다.

 

계속해서 똑같은 부분을 통과하는 부분을 깨닫게 되는데 , 이 구문에 빠지기 전에 여기서 탈출하는 구문을 찾는 게 우선인 거 같았다. 

 

첫 번째 접근지에서 F9를 통해 retn 구문을 나오면 

00401494

00401494 부분으로 나오는 것을 확인했고 , 프로그램 실행 부분 근처였다. 프로그램 실행 부분코드로 들어가 보기로 했다. 

 

F7을 통해 00401000으로 오게 되었다. 중요한 부분임이 틀림없는 게 아까와 다르게 주석 부분이 엄청 많았다. 

F8을 통해 살펴보기로 했다. 

 

살펴보다 보니 CreateWindowExA 부분이 보였고 이 부분에서 브레이크포인트를 건 뒤 예상처럼 프로그램 실행창이 나왔다.

004010A7

 이후 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을 입력해 보았다

Ok버튼을 누르니 SEP으로 바뀐 모습

정석은 아닌듯한 느낌으로 문제를 풀어서 아쉬웠다. 

 

이 문제를 풀면서 조금이라도 집중력을 잃어버리면 무한루프에 너무 빠지는 나쁜 문제였다. 

 

정답 키워드를 찾아서 다행이다.