본문 바로가기

Reversing/Simples Creckme

Simples Crackme 7

Simples Crackme 7
 - Question

  · 'Name'에 맞는 Serial을 찾는 문제이다.

  · Name에 맞는 Serial을 넣으면 위와 같이 'Register'라는 Message를 출력하고 맞지 않는다면 아무런 Message도 출력하지 않는다.


 - Solve

  · 'Search for → All intermodular calls'를 통해 Program에 사용된 언어와 내부에서 사용된 함수를 본다.

  · vba로 시작되는 함수가 대부분이며 Visual Basic으로 만들어진 Program이라는 것을 판단할 수 있다.
  · 여러 번 다른 Name, Serial을 이용해보면 그때마다 일치하는 Serial이 다르다는 것을 알 수 있으며 Serial이 Name에 맞게 내부에서 생성됨을 유추할 수 있다.

  · 일단 성공 Routine과 실패 Routine으로 진행되기 위해서는 비교 함수를 이용해 진행되므로 비교함수로 보이는 'vbaVarCmpEq''vbaVarCMPNe'에 Break Point를 설정한다.

  · 비교 함수 윗부분에서 연산을 위해 문자열을 가져오는 'vbaStrMove' 함수에 모두 BP를 설정한다.

  · 실행을 하나하나 시켜보면 BP를 설정했던 첫 번째 'vbaStrMove' 바로 윗부분에서 반복구간을 확인할 수 있으며 'rtcAnsiVlaueBstr' 함수로 Name의 한 글자씩 가져와 0x35 Xor 연산을 진행해 PUSH 명령어로 Stack에 저장한다.

  · 두 번째 vbaStrMove BP 윗부분에서 위와 같이 반복되는 구간을 볼 수 있으며 한번 반복될 때마다 Stack Window부분에 Serial이 Unicode 16진수로 한 글자씩 생성해 이어 붙이는 구간을 볼 수 있다.
  · 정리
  ◦ Name과 Serial을 입력받는다.
  ◦ Name을 한 글자씩 불러와 0x35와 Xor 연산해 맞는 Serial을 생성한다.
  ◦ Serial을 생성 후 비교해 맞으면 'Registered!' Message를 출력하고 맞지 않으면 다시 Name과 Serial을 입력받는다.


 - Answer
  · Name : 아무 문자열이든 상관없다.
  · Serial : Name에 입력한 문자열의 문자 하나씩 Xor 연산을 해 입력한다.
  · Example
  ◦ Name : aaa
  ◦ Serial : 545454
 

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

Simples Crackme 9  (0) 2015.08.16
Simples Crackme 8  (0) 2015.08.16
Simples Crackme 6  (0) 2015.08.16
Simples Crackme 5  (0) 2015.08.16
Simples Crackme 4  (0) 2015.08.16