Abex's crackme 4번 문제이다.

실행 파일을 켜 본 결과, 값을 넣는 창과 registered라는 버튼이 잇는데, 해당 부분이 활성화가 되지 않는다.

???

해당 프로그램에서는 별도의 단서를 얻을 방법이 없어 보여서, 디버깅을 수행해 보았다.

MSVBVM60

디버깅을 수행했는데, 어디서 많이 보던 형태이다. crackme #2와 같이, 비주얼 베이직 형태의 프로그램이다. 따라서 해당 프로그램도 지난번 문제처럼 이벤트 핸들러를 찾는 것이 관건이 될 것 같다.

스트링 탐색

우선 스트링을 기반으로 탐색을 수행해 보았다. 스트링을 탐색해 본 결과, 아래와 같은 스트링이 보이는데, 해당 스트링 부분이 정상적으로 프로그램을 실행시켰을 때 발생하는 메시지박스일 것으로 추측된다. 따라서 해당 부분으로 이동하고, 상단으로 이동해서 스택 프레임 부분을 통해 이벤트 핸들러를 찾아 주었다.

이벤트 핸들러 부분

해당 위치를 기반으로 분석을 진행해 보았는데, 프로그램의 실행 루틴이 해당 이벤트 핸들러 부분으로 돌아오지 않았다. 그 이유를 생각해 본 결과, 해당 이벤트 핸들러는 시리얼 넘버가 정답일 시 활성화되는 Registered 버튼이 클릭되었을 때 수행되는 이벤트 핸들러로 보인다. 따라서 해당 주소의 함수 부분을 호출하는 부분을 찾아 보았다.

JMP문 확인

Find reference 기능을 통해 00401E10 부분을 호출하는 부분을 찾을 수 있었다. 그러나 해당 부분을 찾아가 본 결과, 별다른 소득 없이 단순 점프문만 나열되어 있는 것을 볼 수 있었다.

다른 방법으로의 접근이 필요한 것 같았다. 그래서 클릭을 한 뒤에 나타나는 이벤트 핸들러가 아닌, 문자를 넣는 과정에서 꾸준한 비교 연산이 있어야 클릭이 활성화 되는 이벤트가 발생할 수 있을 것이라는 판단 하에, 스트링을 비교해주는 이벤트 핸들러 부분을 찾아보기로 했다. 그래서 모든 함수 호출들을 확인해 보았다.

StrCmp 확인

확인 결과 strcmp와 유사한 형태의 호출이 존재하는 것을 확인할 수 있었다. 그래서 해당 부분에 브레이크포인트를 주고, 프로그램을 실행시켜 보았다.

StrCmp 호출 코드 세그먼트
스택 부분

그 결과, 스트링을 비교하는 이벤트 핸들러를 찾을 수 있었고, 해당 부분에서 비교해주는 값의 스택을 확인해 보니 2031105라는 값을 확인할 수 있었다. 해당 값을 넣어 주니 Registered 버튼이 활성화되었고, 프로그램이 정상 실행되었다.

Success!

반응형

'Security > ISANG' 카테고리의 다른 글

[Reversing] abex's crackme #5  (0) 2021.03.29
[Reversing] abex's crackme #3  (0) 2021.03.29
[Reversing] abex's crackme #2  (0) 2021.03.29
[Reversing] abex's crackme #1  (0) 2021.03.28

+ Recent posts