본문 바로가기

Reversing/Simples Creckme

Simples Crackme 11

Simples Crackme 11
 - Question

  · 알맞은 Serial을 찾는 문제이다.

  · 성공 시 첫 번째 Message 출력 후 두 번째 Message를 출력하지만 실패 시 첫 번째 Message와 Serial을 넣는 빈칸에 'Mal Cracker!!!'라는 문자열이 나타난다.

 

 - Solve

  · 'Search for → All intermoduler calls'를 통해 Process 내에서 사용된 함수를 확인해보면 vba 즉, Visual Basic으로 만들어진 Program이라는 것을 알 수 있다.

  · Process가 Serial을 인식하기 위해서는 비교 함수(vbaStrCmp)를 사용하며 Serial이 생성되는 지점도 비교 함수 위에 존재할 것으로 예상되기 때문에 비교 함수에 BP를 설정해준다.
  · BP를 설정하고 실행을 해보면 Visual Basic은 간접 참조형식으로 먼저 Serial을 입력받는 것을 확인할 수 있다.

  · vbaStrCmp가 실행되기 직전에 두 문자열의 주소 값을 함수의 인자 값으로 사용하기위해 PUSH 명령어로 넣기 직전을 확인해보면 첫 번째로 EAX에 주소 값을 복사하는 것(MOV EAX, DWORD PTR SS:[EBP-9C])을 봤을 때 입력한 문자열의 주소가 저장되는 것을 확인할 수 있다.
  · 따라서 두 번째로 ECX에 주소 값을 복사하는 것(MOV EAX, DWORD PTR SS:[EBP-98])은 비교할 문자열의 주소라는 것을 유추할 수 있다.
  · 여러 번 실행시켜보면 문자열이 저장되는 주소 값이 새로 실행할 때마다 바뀌는 것을 확인할 수 있다.

  · Serial은 한 글자씩 이어 붙여질 것으로 예상되기 때문에 문자를 이어붙이는 함수(vbaVarCat) 모두에 BP를 지정해 확인해본다.

  · vbaVarCat을 지날 때마다 Stack Window를 확인해보면 한 글자씩 이어 붙여지지는 않지만 Serial이 이어 붙여서 생성되어 Stack에 저장되는 모습을 볼 수 있으며 vbaStrCmp가 실행되기 직전에 입력한 Serial과 비교할 Serial이 Stack에 저장되는 것을 볼 수 있다.
  · 최종적으로 확인해보면 '677345'가 Serial이라는 것을 확인할 수 있다.

 

 - Answer
  · Serial : 677345

 

'Reversing > Simples Creckme' 카테고리의 다른 글

Simples Crackme 13  (0) 2015.08.16
Simples Crackme 12  (0) 2015.08.16
Simples Crackme 10  (0) 2015.08.16
Simples Crackme 9  (0) 2015.08.16
Simples Crackme 8  (0) 2015.08.16