압축 해제를 하고 보니, ReadMe.txt가 있다 읽어보겠다.
ReversingKr KeygenMe
Find the Name when the Serial is 5B134977135E7D13
Serial이 특정 문자열일 때, Name을 찾아 달라고 한다.
먼저, Die에 넣어보았다.
패킹이 되어있지 않고, 32비트 프로그램이다.
파일을 실행시켜본다.
ReadMe에서 봤던 serial은 여기 부분을 말하는 것 같다. 디버깅을 시작해보겠다.
00401000 함수에서 문자열을 출력하고 입력 받는 구문을 발견하였다.
Name을 입력해주고 아래 구문으로 한줄씩 넘어가보면,
for문 loop안에 들어오게 되고 [esp+esi+C]안의 값을 가져오고 [esp+ebp+10]의 값을 가져온다.
여기 안에 있는 값들을 살펴보면,
[esp+esi+C] 안에는 0x10
[esp+ebp+10] 안에는 내가 입력한 값의 첫번째 값 이렇게 들어있다.
더 아래로 가면 내가 입력한 값의 첫번째 값과 0x10을 xor하고 이 값을 sub_401150 함수에서 호출하며 인자값으로 넣는다.
그리고 메모리를 보게되면
67이라는 16진수가 문자열로 메모리에 저장 되었다.
그리고 두번째 loop를 돌게 되면,
[esp+esi+C] 안에는 0x20
[esp+ebp+10] 안에는 내가 입력한 값의 두번째 값 이렇게 들어있다.
또 아래 구문에서 내가 입력한
값의 두번째 값과 0x20을 xor하여 메모리에 저장한다.
계속 이런식으로 확인해보면,
- 내가 입력한 값의 첫번째 값과 0x10을 xor하여 저장한다.
- 내가 입력한 값의 두번째 값과 0x20을 xor하여 저장한다.
- 내가 입력한 값의 세번째 값과 0x30을 xor하여 저장한다.
- 내가 입력한 값의 네번째 값과 0x10을 xor하여 저장한다.
여기서 중요한점은 0x10 ~ 0x30까지 xor을 하고 4번째 값부터는 다시 0x10으로 돌아와 xor을 한다는 점과 2자리 문자열로 저장한다는 점이다.
Name의 값을 가공하는 과정을 알아냈으니, 더 아래로 내려가본다.
시리얼을 입력하고 바로 아래 구문을 보게 되면,
내가 입력한 값의 첫번째 값을 특정 값과 xor 한 것을 가져와 serial과 비교하는 구문이 있다.
여기서 정리해볼 수 있다. 나온다.
입력한 값의 자리 값과 특정 패턴에 따른 수를 xor한 값은 16진수로 나오게 되고 2자리 문자열로 메모리에 저장된다.
- 내가 입력한 값의 1번째 값과 0x10을 xor하면 0x5B가 나온다.
- 내가 입력한 값의 2번째 값과 0x20을 xor하여 0x13이 나온다.
- 내가 입력한 값의 3번째 값과 0x30을 xor하여 0x49가 나온다.
- 내가 입력한 값의 4번째 값과 0x10을 xor하여 0x77이 나온다.
- 내가 입력한 값의 5번째 값과 0x20을 xor하여 0x13이 나온다
- 내가 입력한 값의 6번째 값과 0x30을 xor하여 0x5E가 나온다.
- 내가 입력한 값의 7번째 값과 0x10을 xor하여 0x7D가 나온다.
- 내가 입력한 값의 8번째 값과 0x20을 xor하여 0x13이 나온다.
name이 처음에 xor해서 나온 16진수를 문자열로 저장 했으니, 역산 할때는 16진수로 해주어야된다.
이를 토대로 코드를 짜보면,
#include <stdio.h>
int main() {
int serial[] = {0x5B, 0x13, 0x49, 0x77, 0x13, 0x5E, 0x7D, 0x13};
int value[3] = {0x10, 0x20, 0x30};
int count = 0;
for (int i = 0; i < sizeof(serial) / sizeof(int); i++) {
if(count == 2){
printf("%c", serial[i] ^ value[count]);
count = 0;
}
else{
printf("%c", serial[i] ^ value[count]);
count++;
}
}
return 0;
}
정답은 "K3yg3nm3"
'Reversing 문제 풀이 > Reversing.kr' 카테고리의 다른 글
Reversing.kr Music Player 4 풀이 (0) | 2022.05.13 |
---|---|
Reversing.kr Easy Unpack 3 풀이 (0) | 2022.03.31 |
Reversing.kr Easy Crack 1 풀이 (0) | 2022.03.29 |
최근댓글