문제에서 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

문제에서 Easy_CrackMe.exe 실행 파일을 준다.

파일을 실행하면 이렇게 되고 잘못된 값을 입력하게 되면


다음과 같은 오류창이 뜬다. Ollydbg를 키고 해당 실행 파일을 분석해보자~!~!


가장 먼저 프로그램에 사용되고 있는 문자열을 확인해 봤다.



Searh for -> All referenced text strings에 들어가서 문자열을 확인해보니까



Congratulation!!이런거나 아까 봤던 Incorrect Password 이런 문자열들이 보인다. 일단 Congratulation이 나오는 주소로 이동해보았다~!



난 이런 종류의 문제를 풀 때 일단 모든 비교문에 브레이크를 걸고 실행시켜 보는 편이다. 어차피 전체적으로 보기에는 헷갈려서 잘 보이지도 않고 하나씩 확인하는게 훨씬 보기 좋다. 이제 실행을 해보고 하나씩 확인해보자~!~!



일단 첫번째로 비교하는 부분에서 ESP+5와 61을 비교한다 아스키문자로 61은 a이니까 문자를 비교하는 부분일 것이다. 이제 ESP+5부분에 뭐가 있는지 확인해보자. 


ESP+5부분은 내가 입력한 문자열 중 두번째 문자가 위치하는 곳이다.


저 부분을 지나고 나면 바로 Incorrect Password가 뜨는 부분이 나온다.


=> 두번째 자리에는 a가 들어가야 한다!!

라는 것을 첫번째 비교문에서 확인할 수 있었다.

이제 프로그램을 재시작시키고 두번째 자리에 a를 넣고 디버깅을 해보자.



5y라는 문자열과 ECX를 인자로 받는 함수 하나를 호출한다. 엔터를 눌러서 이 함수 속으로 들어가봤다~!~!



함수 안에 들어가서 이번에서 CMP부분에 브레이크를 걸고 실행시켜따. AL과 EDI-1부분을 비교하는 것을 확인할 수 있다.

현재 AL에는 ESI-1의 주소가 들어가있다. 이제 이 부분에 뭐가 있는지 확인해 보자.



내가 bacdefg를 입력했으니까 EDI-1에는 문자열의 세번째 자리의 주소가 들어가 있는 것을 알 수 있고 ESI를 확인해보면

y가 들어있으니까 ESI-1은 5y를 가르키는 것을 확인할 수 있다. 이 부분이 지나가면 역시 Incorrect Password가 뜨고 프로그램이 종료된다.

=> 문자열의 세번째, 네번째 문자는 5y이다!! -> Oa5yOO... 여기까지 알아냄~!~!


이제 세번째 비교문을 확인하자.


일단 쭉보니까 R3versing이랑 어떤 문자열이랑 2바이트씩 잘라 한바이트씩 비교를 하는 것으로 보인다. DL이랑 BL을 비교하는데 BL에는 ESI 즉 R3vering의 첫 한바이트가 들어가있고 DL에는 EAX의 첫 한바이트 즉 ESP+10의 첫 한바이트가 들어가 있다. 뭔가 5y다음이 ESP+10인 것 같은데 그래도 일단 확인을 해보자! 



역시 다섯번째 문자부터 비교를 하는 것이다. 문자열이 끝날때 까지 검사를 하니까 문자열의 길이도 알 수 있었다.

=> 다섯번째 문자부터 R3versing이랑 비교함 -> Oa5yR3versing


이제 맨 첫글자만 남았다 마지막 비교문을 확인해보자~!~!~!


ESP+4부분과 45를 비교한다. 뭐 무조건 맨 첫글자겠지만 그래도 확인해보자.

역시 첫글자~!~!

이제 다 알아냈다!!

키는 Ea5yR3versing!!! 프로그램을 재시작 시키고 키를 넣어보면 Congraturation!!이 나온다.ㅎㅎ


성공~!~!~!~!~!

예~!~!~!

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

Easy Keygen  (0) 2019.02.24

+ Recent posts