[Reversing] 리버싱 핵심원리 [11]. abex' Crack Me 4 풀이

2020. 3. 15. 17:55보안/리버싱

728x90

내용 : abex' crack me 4를 분석하고 정답 messagebox를 출력한다.

 

1. 분석

 

 

실행시 보이는 창

 

Registered 버튼이 막혀있는 VisualBasic 형식의 파일이 하나 있다.

시리얼을 입력하는 창에 아무리 텍스트를 작성해봐도 활성화되지 않는다.

 

abex' crackme2 처럼 내부에서 시리얼을 생성을 하거나, 이미 내부에 저장된 시리얼과 비교후 Register 버튼이 열릴것으로 추측하였다.

 

필요한 API로는 strcmp가 있을것이다. (문자열을 비교하기 위해서)

 

더이상 할수 있는 동적분석이 없으므로 OllyDbg를 이용하여 분석한다.

 

2. OllyDbg 이용하기

 

 

code 영역 > Search for > All intermodular calls

 

프로그램 내에서 호출되는 모든 API 목록을 보기 위해 해당 항목으로 들어갔다.

 

 

 

 

 

BP 목록

 

 

 

예상했던대로 vbsStrCmp를 호출하는 부분이 존재했고, 이 부분에 BP를 걸어주고, [F9]를 이용하여 실행해주었다.

이후 1글자만 아래 그림처럼 활성화 되고, 다시 막히게 되는데 이를 통해 입력창에서 한글자씩 비교가 이루어 지고 있다고 추측할 수 있다.

 

 

한글자만 받고 다시 비활성화 됨.

 

 

 

 

 

 

 

풀이

1. 시리얼 코드 확인하고 그대로 사용하기

 

strcmp 호출 이후로 들어가보면, 스택과 ECX에 이상한 숫자가 하나 존재하는데 

 

위는 뭔지 모름,, 아래는 입력한 문자

 

 

 

 

 

 

 

 

아무리봐도 시리얼 코드로 보여 새 프로그램을 열고 위 숫자를 입력했더니

 

 

 

 

 

 

 

 

아래와 같이 Regisered 버튼이 활성화 된것을 볼 수 있다.

 

 

정답!

 

 

 

 

 

2. 비교하는 값 바꾸기

비교하는 값을 바꾸면 될 것이라 생각하고 Hex부분에서 값을 바꾸려 하였지만, 실패하였다.

시도 중 우연히 같은 것을 비교하여 strcmp를 호출하면 정답을 출력하는 부분으로 jmp 할것이라 예상했고, strcmp를 호출하는 함수 처음부터 분석을 시작하였다.

 

 

strcmp를 호출하는 함수의 스택프레임 부분

 

 

 

 

 

 

 

 

 

천천히 아래로 분석해나가다 보면, 내가 입력한 값을 EAX에, 비교할 값을 ECX에 집어넣는 것을 확인할 수 있다.

바로 아래에  스택에 EAX와 ECX값을 PUSH 하는 부분이 있고, 바로 아래에 비교 함수 실행이다.

 

 

 

 

 

 

 

즉 저 둘을 비교한다고 볼 수 있는데, 비교 하기 전 0040230C번지 주소를 PUSH EAX로 수정을 하면

같은것 2개를 비교하므로 리턴값은 무조건 참이 된다. 즉 정답 MsgBox를 출력하는 분기로 넘어가게 된다.

 

 

 

[F9]를 이용하여 결과를 바로 확인해보면..

 

 

 

 

정답이 출력되는것을 볼 수 있다!

 

728x90