[reversing.kr] Easy Keygen 풀이
- 리버싱/reversing.kr
- 2020. 3. 7. 01:34
reversing.kr Easy Keygen 풀이
"Easy Keygen.exe"를 실행시키면 아래와 같이 Name을 입력받고 Serial 값도 입력받는다. 그리고 이번 문제에는 README에 문제가 아예 설명되어 있는데 "Find the Name when the Serial is 5B134977135E7D13" 이다. Name을 사용해서 시리얼값을 생성하는데 역으로 시리얼 값을 주고 맞는 Name을 찾아내는 문제이다. 코드 작성이 필수일 것 같다.
먼저 IDA에서 "Correct!"와 같이 시리얼 생성 함수에서 사용될 것 같은 문자열을 찾은 후 해당 문자열을 호출하는 함수로 가보았다.
이런 시리얼 생성 알고리즘과 관련한 문제는 먼저 헥스레이로 전체적인 구조?를 파악한 후 세부 알고리즘은 어셈으로 하나하나 알아내는 방식으로 푸는 타입이라 먼저 헥스레이로 전체적인 구조를 봐보겠다. 일단 Name을 입력받은 후 name의 길이만큼 반복문을 반복하는데 내부에 sprintf로 Name을 사용해 무언가의 연산을 한 후 &v15에 저장해나가고 있다. 그리고 v15와 입력받은 시리얼 v11을 비교한다. 아래 빨간박스 친 부분이 시리얼을 생성하는 부분이기 때문에 해당 부분은 좀 더 상세히 실행시키면서 보기로 했다.
일단 esi는 3이 넘으면 0으로 초기화되는데 Name과 xor하는게 0x10, 0x20, 0x30 세개이기 때문이다. 이 세개를 계속 돌리면서 Name[i]와 xor연산을 한 후 sprintf로 결과값을 버퍼에 쓰게된다.
위 알고리즘을 토대로 파이썬 코드를 간단히 짜볼 수 있다. 0x10, 0x20, 0x30 은 3마다 순환시키고 0x00부터 0xff까지 루프를 돌면서 xor 했을 때 맞는 serial 값이 나오는 값을 찾아내는 코드이다.
코드를 실행시키면 한바이트씩 정답값이 나오게 된다.
'리버싱 > reversing.kr' 카테고리의 다른 글
[reversing.kr] ImagePrc 풀이 (0) | 2020.03.10 |
---|---|
[reversing.kr] Replace 풀이 (0) | 2020.03.09 |
[reversing.kr] Music Player 풀이 (0) | 2020.03.08 |
[reversing.kr] Easy Unpack 풀이 (0) | 2020.03.07 |
[reversing.kr] Easy Crack 풀이 (0) | 2020.03.06 |