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 |