BLOG main image
분류 전체보기 (224)
Reversing (13)
Pwnable (4)
Linux Kernel (3)
Crypto (2)
Wargames (68)
Programming (18)
Write Up (32)
Project (22)
Web (2)
My Life (52)
Memo (3)
etc (2)
발표자료 (1)
40,483 Visitors up to today!
Today 0 hit, Yesterday 13 hit
daisy rss
tistory 티스토리 가입하기!
2016.04.18 08:08


일어나서 첫 번째로 푼 문제이다. IDA로 까 보면 

스위프트로 짜여 있어서 좀 더럽다. 그래도 몇 번 보다 보니까 익숙해져서 풀 수 있었다. 디버깅 하면서 보니까 먼저 값을 입력받고, sub_403660함수에서 연산을 한다. 

이렇게 테이블이 있고, 연산을 해서 저 테이블이랑 비교를 하는 부분이 두 군데가 있다. 그런데 첫 번째 부분은 입력값이 쓰이지 않는 연산이라서 그냥 패치를 해서 넘겼고, 두 번째 연산에서 입력값이 쓰여서 이 부분만 분석했다. 

먼저 연산은 sub_403510 이 함수에 있는 것이 전부라고 해도 과언이 아니었다. 

보기가 좀 거슬리기 때문에 중요 부분만 뽑아서 다시 짜봤다. 

1
2
3
4
5
6
7
8
9
10
11
#include <stdio.h>
 
int main(void) {
    unsigned char table[34], prev_char = 0;
    char input[] = "PCTF{abcdefghijklmnopqrstuvwxyz0}";
    for (int i = 0; i < sizeof(input); i++) {
        table[i] = ((input[i] << (8 - (prev_char & 7))) | (input[i] >> (prev_char & 7))) & 0xff;
        prev_char = table[i];
        printf("0x%x, ", table[i]);
    }
}
cs

그리고 주어진 테이블을 이용해서 브루트포싱 소스를 짰다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <stdio.h>
 
int main(void) {
    unsigned char table[] = { 0x500x430x8A0x640xED0xA60xAB0x930xCC
        0xEB0xC20x9A0xFA0x6A0xAB0x930xCC0xEB0x6A0xBB0x62,
        0x330xD10xF50xC20x9A0xFA0x6A0xBB0x620x330xD10xD7 };
    int prev_char = 0, cha = 0;
    for (int i = 0; i < 33; i++) {
        for (int j = 0; j < 0x100; j++) {
            cha = ((j << (8 - (prev_char & 7))) | (j >> (prev_char & 7))) & 0xff;
            if (cha == table[i]) {
                printf("%c", j);
                prev_char = j;
                break;
            }
        }
    }
}
cs

실행하면 플래그가 나온다.


flag : PCTF{5ur3_a5_5ur3_5w1ft_a5_5w1ft}

'Write Up' 카테고리의 다른 글

2015 Christmas CTF vsnoted  (0) 2016.04.30
PlaidCTF 2016 quite quixotic quest - 300pt  (0) 2016.04.18
PlaidCTF 2016 quick - 175pt  (0) 2016.04.18
2016 CodeGate watermelon exploit  (1) 2016.04.01
2016 CodeGate bugbug exploit  (1) 2016.04.01
2016 CodeGate fl0ppy exploit  (1) 2016.04.01
Name
Password
Homepage
Secret