Skip to content

Latest commit

 

History

History

Position

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Position

Problem

ReversingKr KeygenMe


Find the Name when the Serial is 76876-77776
This problem has several answers.

Password is ***p

Tools

  • ExeinfoPe
  • IDA 7.0

Explanation

  • ExeinfoPe로 해당 PE 파일을 열어보았다.
  • 다음과 같은 특징을 알 수 있다.
    • Windows GUI
    • Microsoft Visual C++
    • 32bit

  • IDA로 해당 PE 파일을 열어보았다.
  • Name, Serial과 관련된 문자열을 찾아보았다.
  • Input Name, Input Serial, Correct!, Wrong

  • Correct!, Wrong이 참조되는 함수 @print_genuine의 call graph를 그려보았다.
  • @judge_genuine 함수의 결과에 따라 설정될 문자열이 정해진다.

  • @judge_genuine 함수의 call graph 를 그려보았다.
  • 이를 요약하면 다음과 같다.
    1. 입력받은 Name의 유효성을 확인한다.
      • 길이가 4글자이다.
      • 영어 알파벳 소문자이다.
      • 4글자 모두 서로 다른 글자이다.
    2. 입력받은 Serial의 유효성을 확인한다.
      • 길이가 11글자이다.
      • 6번째 글자가 -이다.
      • 여기서 나머지 글자가 숫자인지 확인은 안하지만, 이후 과정을 보면 숫자여야 한다.
    3. 입력받은 Name을 이용하여 이에 맞는 Serial을 생성한다.
    4. 생성한 Serial이 입력받은 Serial과 일치하는지 확인한다.
      • 만약 일치한다면, 1을 리턴한다.
      • 만약 일치하지 않는다면, 0을 리턴한다.
  • 해당 함수의 로직을 python script로 구현해보았다.

  • Position.py
    • NameSerial의 유효성을 검증할 수 있다.
    • NameSerial 둘 중 하나만 주어졌을 때, 그에 맞는 나머지를 구할 수 있다.
  • 76876-77776에 맞는 Name을 구했을 때 여러가지 문자열이 나온다.
  • 이중 ***p에 맞는 문자열을 제출한다.