Phantom

Easy Keygen 본문

Pwnable/Reversing.kr

Easy Keygen

Ph4nt0m_ 2017. 11. 17. 16:27
반응형
ReversingKr KeygenMe
Find the Name when the Serial is 5B134977135E7D13

압축을 풀고 ReadMe.txt를 열면 저 문장이 나온다.
시리얼값은 찾은 듯 하고 이제 파일에 대한 분석을 해야겠다.


이번도 역시 C++로 짜여져 있다.

실행을 하면 다음과 같이 나온다.


맞지 않은 Name을 입력해서 그런지 Wrong이라는 메시지를 출력하고 프로그램은 종료 됐다.

이번도 역시 Wrong이라는 문자열을 추적해서 문제를 푸는 쪽으로 가봐야겠다.


역시나 분기문이 존재 했다. 입력 함수를 찾고 거기에 BP를 걸고 트레이싱을 한다.


이것이 XOR 루프인데 여기서 스트링을 XOR시켜버린다. 맨 아래부분은 문자열의 길이를 비교하고 JMP시키는 명령이다.

문자열의 길이는 루프 마지막부분의 CMP첫 비교시에 ECX가 8인것을 보아 길이는 8로 추측된다.

그렇다면 char[8]이 되는데, 이 루프는 다음과 같은 연산을 한다

이런식으로 10,20,30연속적으로 XOR연산을 한다.

그리고 두번째 루프.


두번째 루프전에 시리얼을 입력받고 비교하는 루프이다.
값이 다르다면 SBB EAX, EAX로 JMP하여 -1을 가지고 가버린다.

SBB명령어는 다음과 같은 연산을 한다.
Operand1 = Operand1 – (Operand2 + CF)

그렇게 비교를 하고 아까 맨위처럼 분기문에서 분기를 하여 JMP를 한다.



그럼 핵심은 첫번째 루프에 있다.
왜냐, 두번째 루프는 첫번째 루프의 결과로 돌아가기 때문에 그리고 어차피 시리얼값을 알기 때문에

첫번째 루프를 분석하면 될듯하다.


아까 말했듯이 이런 연산을 한다.

그렇게 해서 나온 값이 5B134977135E7D13 이 값이다.

값을 잘라보면
5B 13 49 77
13 5E 7D 13
이렇게 8개가 된다.

그렇다면 이렇게 할 수 있다.
0x5B ^ 0x10 = char[0]
0x13 ^ 0x20 = char[2]
....
0x13 ^ 0x20 = char[7]

이걸 코딩해보면



name값은 직접 찾아보시길 😃



이것은 main함수를 헥스레이한것인데 연산이 조금 더 복잡하게 보인다 허허..


반응형

'Pwnable > Reversing.kr' 카테고리의 다른 글

Music Player  (1) 2017.11.20
Easy_UnpackMe  (0) 2017.11.17
Easy_CrackMe  (0) 2017.11.17
Easy KeygenMe  (0) 2016.03.01
[Reversing.kr] – Easy CrackMe  (0) 2016.02.28
Comments