열어보면 문제와 텍스트파일이 주어져있다.
텍스트파일의 내용은 다음과 같다.
ReversingKr KeygenMe
Find the Name when the Serial is 76876-77776
This problem has several answers.
Password is ***p
시리얼이 저거일때의 이름을 찾으라고한다.
문제를 켜보면 시작하자마자 Wrong이 달려있으니 문자열 탐색으로 찾아보면
바로 Congraturation 과의 분기가 보이고
바로 위에 함수가 보이니 저 함수에서 어떤 검증을 하는것같다.
각 함수들별로 들어가서 관찰해보면 특정함수에서 내가 입력한 이름을 반환하는 것을 볼 수 있고
그때 내가 입력한 이름의 길이를 4와 비교하는것을 볼수있다.
처음 주어진 텍스트파일에서 이미 알려준정보이지만 ***p 4글자임을 알수있고
다음 분기를 보면
0x61과 내가입력한 글자를 비교후 ja
0x7a와 비교후 jb 분기가 있다.
즉 내가 입력한 글자들은 61보다 크고 7a보다 작아야 한다
그럼 a~z 사이의 소문자이면 통과가 된다.
그 다음 반복문에서는 입력한 글자들 중 중복이 있는지 확인하는 부분이 있다.
0x11b1841 부분부터는 시리얼에 관한 연산을 하는대
먼저 cmp [eax - c] 0x0b(11)
이부분은 입력한 시리얼의 길이를 확인하고
cmp ax, 2d(-)
시리얼의 중간에 대시바(-)가 6번째 자리에 있는지 확인한다.
시리얼을 확인하는작업을 마치면 내가입력한 글자를 꺼내와서 작업을 한다.
첫번째글자와 두번째글자를 각각 의 연산을 진행하는대
특정 비트만큼 쉬프트연산을 한 다음 그 비트가 1인지 0인지 검사를 한다
각 결과는 그렇다면 0, 1, 2 만 나오게 된다.
그 값에 6을 더해서 나온것이 시리얼 키의 자릿수들이다
그럼 6 은 두 값의 비트가 0이고
7은 둘중 하나가 1
8은 둘다 1이라는 표현이 되고
이에 맞춰서 적절한 아스키값을 찾아주면 된다.
뒤의 다섯자리는 앞자리와 마찬가지로 마지막 2글자 *p 라고 미리 제시해줬으므로 맞추기 훨씬더 쉬울것이다.
'prob > reversing.kr' 카테고리의 다른 글
[Reversing.kr] Direct3D_FPS (0) | 2015.11.11 |
---|---|
[Reversing.kr] imageprc (0) | 2015.11.05 |
[Reversing.kr] Replace (0) | 2015.11.02 |
댓글