Easy keygen

Easy Keygen 문제를 풀이해보도록 하겠습니다😁

ReadMe.txt

문제를 다운받으니 문제의 프로그램과 ReadMe 파일이 있어서 ReadMe를 먼저 읽어봅니다!

 

Serial이 "5B134977135E7D13"인 Name을 찾으라고 하네요😛

Easy Keygen.exe

프로그램을 실행시켜보니 Name과 Serial을 입력하라고 나옵니다.

 

그럼 ReadMe의 Serial에 맞는 Name을 찾아야하네요! 찾아보도록 합시다😄

401000 함수

처음에 실행시키다 보면 401000으로 들어가는 함수를 찾을 수 있습니다!

Main 함수

들어가보니 "Input Name: "이라는 문자열을 찾을 수 있고 여길 분석하기 시작해야겠죠? 😋

암호화 키 10

처음에 ecx 레지스터에 [esp+esi+C]가 가리키는 곳의 값을 옮깁니다.

 

[esp+esi*1+C]는 스택에서 [0019FE04]라는 곳을 보고 있는데 해당 값이 10이라고 합니다😀

 

스택도 한번 보도록 합시다!

Stack

스택에서 살펴보니 10이 들어가있는 것을 확인할 수 있죠!

 

그런데 뒤에 20, 30의 값도 들어있는 것을 확인할 수 있습니다!

401083

그 다음 명령어에선 edx 레지스터에 [esp+ebp*1+10]의 값을 옮기는데

 

[esp+ebp*1+10]는 스택에서 [0019FE08]이라고 합니다.

 

제가 입력한 값 "test"의 "t"를 가리키는군요😀

Xor 연산

옮긴 이후 위의 두 값을 XOR 연산하고 있습니다!

 

그리고 이후 스택에 저장해두는 것을 확인하실 수 있으실 겁니다.

 

계속해서 살펴보도록 하겠습니다😀 

암호화 키 20

다시 돌아온 것을 확인할 수 있으며 암호화 루틴이라는 것을 알 수 있겠죠?😀

401083

그리고 "test"에서 다음의 값인 "e"를 가져옵니다.

Xor 연산

두 개의 값을 XOR 연산을 하고 저장하는 것을 또 보실 수 있으실 겁니다😁

암호화 키 30

이제 어느정도 30이 나올 거라 예상하고 보게 되겠죠?😀

401083

그리고 그 다음은 예상대로 "test"의 "s"가 나옵니다.

Xor 연산

그리고 XOR 연산을 한 후 저장하게 됩니다.

암호화 키 10

그럼 10, 20, 30 세 개의 숫자가 암호화 키라는 것을 알게 되었는데 4번째 문자부터는 어떻게 암호화하는지 봐야겠죠😀

 

살펴보니 4번째부터 다시 10의 값을 가져오는 것을 확인할 수 있습니다.

401083

그리고 예상대로 "test"의 마지막 문자인 "t"를 가져옵니다.

Xor 연산

예상대로 XOR 연산을 하고 저장하게 됩니다.

비교문

이제 암호화가 끝이 난 후 보니 "64454364"의 값이 생성이 된 것을 볼 수 있습니다😀

 

그리고 Serial 번호로 제가 입력한 값인 "5B134977135E7D13"과 비교를 하고 있네요!

 

첫 번째 분기점에서 첫글자와 비교 후 조건문이 참이 되지 않아 바로 끝나버립니다.

비교문 루틴

그래서 위의 영역이 비교문 루틴이라는 것을 알 수 있었고 정답을 어떻게 알아낼지 바로 생각이 나더군요😁

 

그럼 어떻게 정답을 알 수 있을까요?

 

암호화 루틴은 생각해보면 쉽게 알 수 있습니다.

 

"입력한 Name 값을 10, 20, 30 순서대로 XOR 연산한다"

 

그럼 주어진 시리얼 넘버를 10, 20, 30 순서대로 다시 XOR 연산을 해주면 답이 되지 않을까요😉

 

답이 길진 않으니 직접 일일이 하셔도 되고 Python으로 간단하게 코딩하셔셔 푸셔도 좋으실 겁니다!

 

그럼 이만 풀이를 마치겠습니다😆

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

Easy Unpack (Point : 100)  (0) 2020.10.07
Easy Crack (Point : 100)  (0) 2020.10.05