본문 바로가기

기타/워게임

[Reversing.Kr] Easy Keygen

 

실행 파일 하나와 ReadMe가 주어진다. 실행 파일에서는 name과 serial을 받아서, 둘이 유효하지 않은 인증이라면 프로그램을 종료하고 있다. Serial이 5B134977135E7D13일 때 Name은 무엇인지 찾아서 매치시키면 결과값으로 key가 나올 것 같다.

 

우선 Search For -> All User modules에서 strings를 검색했다. 성공 문자열 출력인 Correct와 MessageBox를 호출하는 부분이 의심스러웠다. 아마 Correct 조건을 달성하면 messageBox로 key를 주지 않을까..? 하는 마음

 

wrong으로 점프하는 참거짓 분기점에서 제로 플래그를 바꿔서 Correct가 나오도록 흐름을 조정했으나 Correct라는 출력만 나올 뿐 메시지박스나 다른 key 값이 나오지는 않았다. 정말 맞춰진 serial에 대한 name값이 key인가...? 

 

어쨌든 keygen에는 규칙이 있으니 aaaaaaaa를 입력하여 어떤 패턴을 가지고 있는지 확인했다.  aaaaaaaa를 입력하면 7141517141517141이 나온다. 정확한 알고리즘 원리를 알 수는 없으나 3글자 단위로 반복되는 패턴인 것 같았다.

 

 

keygen loop를 도는 부분은 여기이다. 하나하나 뜯어보면서 keygen 원리를 파악하면 될듯?

  1. 들어온 Input Name의 길이만큼 반복하나, 작은 점프문이 있다.
    1. 이 점프문은 esi의 값이 3일 때만 무시할 수 있다.
    2. 진입할 시 esi의 값을 초기화한다.
    3. -> 이 상황으로 보아 keygen에서 esi값이 count 역할을 하고, 3번째 순서가 도는 것을 체크한다고 판단
  2. 루프에 진입할 때 EDX는 Input Name의 한 글자, ECX는 연산된 keygen 결과물이다.
    1. 연산결과인 ECX의 값은 스택에 값 형태로 한번, 문자열 주소 참조로 한번 올라간다.
    2. 000012 등, 값 형태로 올라간 것은 임시값이고, 진짜는 0019FE6C 주소에 저장된다.
  3. 연산 원리는 ECX xor EDX
    1. EDX에는 input Name이 순서대로 들어온다.
    2. 첫 ECX는 10이다.
    3. 그 다음부터 ECX가 만들어지는 원리를 잘 모르겠어서 이 부분에서 찾아봄 : ECX는 10, 20, 30이 번갈아서 들어온다.

따라서 각 글자가 10,20,30과 반복해서 XOR 했을 때 나오는 값이 5B134977135E7D13인 문자열을 찾으면 된다.

 

여기서 XOR의 특징을 이용해야 문제를 풀 수 있다.

XOR은 자기자신으로 XOR을 한번 더하게 되면 평문이 나오게 된다. 8글자의 key가 나왔으니(byte 단위로 XOR했기 때문에 16글자인 key의 글자수는 8) 1020301020301020을 5B134977135E7D13과 XOR 연산하게 되면 기본 Input Name이 나오게 되는 것이다.

 

https://xor.pw/#

 

XOR Calculator Online

The form calculates the bitwise exclusive or using the function gmp_xor. At the bit level, there are four possibilities, 0 ⊕ 0 = 0 0 ⊕ 1 = 1 1 ⊕ 0 = 1 1 ⊕ 1 = 0 Non-binary inputs are converted into their binary equivalents using gmp_init. View the

xor.pw

아스키로 변환하면 다음과 같다.

key : K3yg3nm3

 

해결~

'기타 > 워게임' 카테고리의 다른 글

[Dreamhack] rev-basic-1  (1) 2023.10.03
[Dreamhack] rev-basic-0  (0) 2023.10.03
[ctf-d] GrrCON 2015  (0) 2023.07.29
[Reversing.kr] Music Player  (0) 2023.07.19
[SuNiNaTaS] 30번  (0) 2023.07.18