모두의 dream
Easy Keygen 본문
Contents
접기
Name과 Serial 값을 입력받고, 값이 틀리면 Wrong 문자열이 출력된다.
대충 흐름을 보니 내가 입력한 Name 에 따라 Serial 값이 바뀌게 되고, 이 문제는 Serial 값이 5B134977135E7D13 일때 Name 값을 구하는게 목적이다.
입력한 값들을 순서대로 저장되어 있는 0x10, 0x20, 0x30과 XOR 연산을 진행한다.
그리고 401150의 argument 로 그 값이 전달된다. (401150 함수에서 serial key가 생성된다.)
그래서 401150 함수 내부를 분석해봤는데 도저히 어셈만으로는 분석이 불가능했다.
그래서 롸업을 찾아보다가 알아챘는데 0x10, 0x20, 0x30 과 xor 연산한 값이 아래처럼 아스키 코드값으로 저장이 되고 있었다. (hello 입력, h(0x68) ^ 0x10 = 0x78)
이렇게 되면 Serial 값 5B 13 49 77 13 5E 7D 13 각각을 0x10, 0x20, 0x30으로 xor 연산 해주면 되겠다는 결론이 나왔다.
#include<stdio.h>
int main()
{
int arr[8] = {0x5B, 0x13, 0x49, 0x77, 0x13, 0x5E, 0x7D, 0x13};
int arr2[3] = {0x10, 0x20, 0x30};
int cnt = 0;
for(int i=0; i<8; i++)
{
if(cnt == 3)
cnt = 0;
arr[i] ^= arr2[cnt];
cnt++;
}
for(int i=0; i<8; i++)
printf("%c", arr[i]);
return 0;
}
IDA 로 확인해보니 sprintf 함수였다.
내가 입력한 값을 0x10, 0x20, 0x30 순서대로 xor을 해서 문자열 형태로 Buffer 라는 변수에 집어넣는 코드임을 확인했다.
'CTF·wargame > Reversing.kr' 카테고리의 다른 글
CSHOP (0) | 2022.03.21 |
---|---|
Music Player (0) | 2022.03.21 |
Easy Unpack (0) | 2022.03.20 |
Easy Crack (0) | 2022.03.20 |
Comments