본문 바로가기
prob/reversing.kr

[Reversing.kr] Position

by Melpin 2015. 11. 5.
문제가 압축파일로 되어있는대

열어보면 문제와 텍스트파일이 주어져있다.

텍스트파일의 내용은 다음과 같다.

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

댓글