본문 바로가기

CTF

[reversing.kr] Easy Keygen 풀이

http://reversing.kr/index.php

 

Reversing.Kr

This site tests your ability to Cracking & Reverse Code Engineering. Now Challenge a problem for each environment. (Windows, Linux, .Net, Flash, Java, Python, Mobile..) Admin E-Mail: gogil @reversing.kr Notice 2014-12-12 New challenge 'CustomShell' was added. 2014-12-10 New challenge 'CRC2', 'Advent...

reversing.kr

Easy Keygen 풀이.

먼저 프로그램을 실행시켜보니 Name와 Serial값을 입력하는 프로그램이였다.

프로그램과 같이있던 메모장을 보니 Serial을 알려주고 이에 맞는 Name를 찾으라고하는걸보니

Name을 이용해서 Serial값을 만들어 낸다는것을 알수있다.

디버거를 이용해서 Name를 입력받는 곳으로 가보자.

진행할때는 시리얼값을 'ABCDEFG' 로 입력하였다.

Input Name: 라는 문자가 보이는데 이제 Name를 입력 받기전에

esp+10 ,+20 , +30 에다가 10,20,30 을 세팅하는 모습이 보이는데

이부분이 시리얼값을 만들어내는 키 같은 역활을한다.

이부분이 시리얼값을 만들어 내는 루팅과정인데

맨위에 cmp esi ,3 은 esi가 반복횟수를 저장해두고 3이 되었을경우 esi를 초기화하는 부분이다.

위의 부분에서 가장중요한 부분은

이 부분인데

movsx를 이용해서 ecx와 edx에 값을 가지고오는데

그값이

처음에 3개 세팅해놨던 10,20,30 중에 10 을가지고온것이고

내가입력한 시리얼값중 첫번째 값인 A를가지고온모습이다.

그후에 두개의 값을 xor연산을하는 모습이고

이 작업을 반복하는데

다음에는 20 , 그다음은 30 을가지고오고 이 반복횟수를 esi 에 기록해두었다가

위에서 보았던 cmp esi ,3 을 이용해서 3이된상황 즉 30 과 연산한상황에서

다시 esi를 0 으로 바꾸고 키를 만들때 처음 10 부터 다시시작한다.

그렇게 ABCEDFG 를 각각 10 , 20 , 30 과 xor 연산한 결과 시리얼값이다.

위에서 이 시리얼값을 이용해서 name 를 찾으라고했으니 반대로 동작시키면 원래의 name 나올것.

다시 xor 연산을해서 나온 name.

 

'CTF' 카테고리의 다른 글

[HackCTF/Web] Time  (0) 2019.06.17
reversing.kr / Easy Unpack 풀이  (0) 2019.06.17
[HackCTF/Web] 마법봉  (0) 2019.05.22
[HackCTF/Web] Login  (0) 2019.05.22
[HackCTF/Reversing] Strncmp  (0) 2019.05.22