본문 바로가기

CTF

[Tokyo Westerns 2017] Rev Rev Rev

[Tokyo Westerns 2017] Rev Rev Rev

첫번째 함수에서는 fgets로 받은 문자열의 enter값을 지워준다.

두번째 함수에서는 입력한 문자열을 거꾸로 뒤집어 저장한다.

세번째 함수에서는 뒤집은 문자열을 암호화한다.

네번째 함수에서는 각 암호화된 문자열에 비트연산 ~을 해주고 저장시킨 후 

해당 값이 s2와 같다면 성공문을 출력시킨다.

 

[Solve]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include "stdafx.h"
#include <stdio.h>
 
int main()
{
    int a[31] = { 0x41, 0x29, 0xD9, 0x65, 0xA1, 0xF1, 0xE1, 0xC9, 0x19, 0x09, 0x93, 0x13, 0xA1, 0x09, 0xB9, 0x49, 0xB9, 0x89, 0xDD, 0x61, 0x31, 0x69, 0xA1, 0xF1, 0x71, 0x21, 0x9D, 0xD5, 0x3D, 0x15, 0xD5 };
    for (int i = (sizeof(a)) / 4 - 1; i >= 0; i--)
    {
        for (int j = 0; j < 127; j++)
        {
            int v1 = 2 * (j & 0x55) | (j >> 1) & 0x55;
            int v2 = 4 * (v1 & 0x33) | (v1 >> 2) & 0x33;
            char tmp = 16 * v2 | (v2 >> 4);
            if (tmp == (char)(~a[i]))
            {
                printf("%c", j);
                break;
            }
        }
    }
    printf("\n");
    return 0; 
}
//TWCTF{qpzisyDnbmboz76oglxpzYdk}
cs


'CTF' 카테고리의 다른 글

[Nuit Du Hack 2017] Matriochka Step 2  (0) 2018.02.08
[Nuit Du Hack 2017] Matriochka Step 1  (0) 2018.02.07
[Samsung CTF 2017] Easyhaskell  (0) 2018.02.05
[Codegate 2018] BaskinRobins31  (0) 2018.02.05
[Codegate 2018] easy_serial  (2) 2018.02.05