상세 컨텐츠

본문 제목

[HackCTF-Reversing#2] Reversing Me - 100 points

Reversing/HackCTF

by bing_su 2021. 1. 2. 00:21

본문

반응형
SMALL

HackCTF reversing에서 두 번째 문제는 Reversing Me이다.

 

문제를 처음 보게 되면 코드가 주어져 있다. 이 코드를 해석해 문제를 풀어야 하는 것 같다

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <stdio.h>
#include <string.h>
 
int main() {
    int i;
    char *serial = "H`cjCUFzhdy^stcbers^D1_x0t_jn1w^r2vdrre^3o9hndes1o9>}";
    char enter[54];
    printf("키를 입력하시게 : ");
    scanf("%s", enter);
    if (strlen(enter) == strlen(serial)) {
        for (i = 0; i < strlen(serial) && (enter[i] ^ (i % 2)) == serial[i]; i++);
        if (i - 1 == strlen(enter))
            printf("정답일세!\n");
    }
    else
        printf("그건 아닐세...\n");
        exit(0);
    
}
 

우리가 주목해서 봐야 할 부분은 for 문이다.

입력받은 enter 문자열에서 각 배열 인덱스 값을 2로 나눈 나머지(0 또는 1)와 XOR 연산해 serial 배열과 비교하는 것을 볼 수 있다. XOR 연산은 배타적 특성을 가지기 때문에 이를 통해 flag를 유추할 수 있다. 따라서 serial 값을 알아내 우리가 원하는 flag를 출력하는 코드를 작성해 보자.

1
2
3
4
5
6
7
8
9
#include <stdio.h>
#include <string.h>
 
void main() {
    char* serial = "H`cjCUFzhdy^stcbers^D1_x0t_jn1w^r2vdrre^3o9hndes1o9>}";
    printf("Flag is ");
    for (int i = 0; i < strlen(serial); i++)
        printf("%c", serial[i] ^ (i % 2));
}
 

이 코드를 통해 플래그를 알아낼 수 있고, 인증하면 된다.

반응형
LIST

관련글 더보기

댓글 영역