Abex's crackme 2번 문제이다.

crackme2.exe
0.02MB

실행시키면 다음과 같은 창이 뜬다. 디자인이 비주얼 베이직 형태인데, 실제로 확인해본 결과 베이직으로 만들어진 언어였다.

실행 화면

처음에 아무 글자나 넣어서 시도해 본 결과, 틀린 시리얼이라는 창이 뜬다. 이름과 시리얼의 관계 또는 이름과 시리얼 자체를 찾아내는 것이 문제일 것이라고 예측하고, 디버깅을 시작하였다.

틀린 단어??

디버거를 통해 실행시켜 보았는데, 상태가 약간 복잡한 감이 있었다. step over를 통해 실행시켜 본 결과, 2번째 행에서 바로 프로그램이 실행되면서 별도의 디버깅이 진행되지 않았다.

여기서 모든 실행이 끝난다.

그래서 해당 시스템 콜을 확인해 본 결과, 비주얼베이직에서 사용하는 api라고 한다. 해당 api는 ThuRTMain이라는 함수를 통해 메인 함수로 들어가고, 초기 세팅을 진행한 후 클릭에 따라 이벤트 기반으로 프로그램을 실행한다. 따라서 이벤트 핸들러 부분을 찾는게 필수적인데, Check 부분의 이벤트를 찾기 위해 "Nope, this serial is wrong"이라는 스트링을 기반으로 탐색을 진행했다.

String 위치

 find string을 통해 해당 위치를 찾아본 결과, 00403476 부분에 해당 스트링이 존재했고, 해당 위치를 기반으로 위쪽으로 쭉 올라가 본 결과 함수가 시작하는 부분인 스택 프레임(PUSH EBP, MOV EBP ESP) 부분을 찾을 수 있었다. 해당 부분을 이벤트 핸들러라고 판단하였고, 이후 분석을 진행하였다.

스택 프레임

쭉 분석을 진행한 결과 vbaVarTstEq라는 시스템 콜을 확인할 수 있었다. 해당 시스템 콜을 이용해서 나온 결과를 test연산한 뒤 flag 값을 저장해 두고, JE 연산을 수행하는 것을 확인할 수 있다. JE로 점프할 시 KEY가 틀렸다는 값 부분으로 점프하게 된다. 따라서, 해당 위치에서 점프를 수행하지 않도록 만들어 주는 방법이 존재한다.

vbaVarTstEq 부분

그러나 필자는 해당 부분의 EAX, EDX 영역의 값을 확인해서 어떤 값을 서로 비교하는지 확인해 보는 방법으로 시리얼 넘버를 찾아보았다.

스택에서 EAX, EDX의 주소

그 결과 AECDD2D9라는 값을 확인할 수 있었고, 해당 값이 곧 시리얼이었다.

시리얼 값이 생성되는 원리는 추후 추가 분석을 통해 수행해 볼 예정이다. 일단은 이정도로 클리어!

반응형

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

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

+ Recent posts