문제에서 Easy Keygen.exe파일과 ReadMe.txt라는 텍스트파일을 준다.


ReversingKr KeygenMe



Find the Name when the Serial is 5B134977135E7D13


시리얼이 5B134977135E7D13일 때의 이름을 찾으라고 한다. 일단 실행파일을 실행시켜보자.



이렇게 아무 이름이나 넣고 문제에서 주어진 시리얼을 넣어주니까 바로 꺼져 버린다. 이제 올리디버거를 이용해서 시리얼에 맞는 이름을 찾아보자!!


먼저 올리디버거를 실행시키고 실행시키면



이부분에서 멈추면서 콘솔 창에 Input Name: 이라는 문자열이 뜨게 된다. 이름과 시리얼을 확인하는 함수가 Easy_Key인 것으로 보이니까 엔터를 눌러서 저 함수 안으로 들어가보자.


이제 이름을 입력받는 코드로 보이는 0x401059에 bp를 걸고 재실행을 시켜보자. 이름에는 ryuh를 넣어줬다.


그 후에 f8을 눌러서 한줄한줄 실행시키면서 코드를 분석해보자.


이름을 입력받은 후에 반복문에 들어가게 된다. 이 반복문은 name문자열의 길이만큼 반복하고 있다.



처음부분부터 보면



0x401083에서 edx에 입력한 이름문자열의 첫 문자 r을 넣어준다!


요렇게 들어간 것을 확인할 수 있다.

그 후에 ecx와 edx를 xor해줘서 ecx에 다시 저장한다.


여기서 ecx는 디버깅하면서 확인해보니까 10 20 30이 계속 반복되면서 적용된다는 것을 볼 수 있었다.



ecx값이 0x10^0x72값으로 업데이트 된것을 확인할 수 있다.

반복문이 끝난 다음에 ryuh이 각각 10, 20, 30, 10과 xor된 값이 합쳐져서 따로 저장되어 있는 것을 볼 수 있다.



여기까지 오게 되면


edi에 해당 값이 저장된다.


그 후에 시리얼값에 aaaa를 입력하고 계속 디버깅해보면


이렇게 비교문이 나온다! 시리얼과 xor을 거친 값을 한 글자씩 비교해주고 있다. 이제 지금까지 디버깅한 것을 토대로 이름에 ryuh를 넣고 시리얼에 62594578을 넣어보자.



Correct!가 뜬 것을 볼 수 있다.


이제 5B134977135E7D13 이 친구를 똑같이 연산해주면 name값이 나오겠지~!~!


0x5b^0x10 = 75 = K

0x13^0x20 = 51 = 3

0x49^0x30 = 121 = y

0x77^0x10 = 103 = g

0x13^0x20 = 51 = 3

0x5e^0x30 = 110 = n

0x7d^0x10 = 109 = m

0x13^0x20 = 51 = 3


이름은 K3yg3nm3!!



성공이다~!~!

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

Easy Crack  (0) 2018.12.31

+ Recent posts