TU CTF
Crypto 10 - 1번
Crypto 문제는 연속된 문제
nc로 146.148.102.236 24069로 연결을 하면 문제가 나온다.
암호문에 해당하는 평문을 전송하면 되는데 한 번만 인증하면 되는 것이 아니라 50번을 해야 FLAG를 얻을 수 있다.
보면 처음에 Welcome ~ 이 나오고 level 1, the Bookstore 메시지가 뜬다.
asdf는 내가 기입한 문자이고 asdf를 입력하는 그에 해당하는 모스부호를 준다.
그리고 What is ~ 이후 모스부호를 주는데 이 모스부호에 해당하는 평문값을 넘겨주면 해당 라운드는 클리어이다.
예를 들어 -.. --- -. - ..-. --- .-. --. . - .- .. .-. -.-- -. 를 모스부호로 변환하면 DONT FORGET AIRYN 이 된다.
이 방식으로 50번을 인증하면
답을 얻을 수 있다.
문제를 해결하기 위해 만든 소스. decrypt는 모스부호를 평문으로 변환을 해 준다. 1:1 대응이므로 쉽게 알아낼 수 있다.
FLAG : TUCTF{i_wi11_n0t_5teal}
Crypto 10 - 2번
문제는 1번은 풀고 난 뒤에 이어진다.
보면 보내는 평문에 해당하는 암호문의 값은 일정하다. 모스부호가 아닌 특정한 테이블에 1:1 매칭이 되는 암호문이다.
z 0123456789, abcdefgh... 등을 보내 보낼 수 있는 아스키 값을 확인해서 테이블을 구성한다.
테이블을 알아내 평문을 보내주면 답을 얻을 수 있다.
문제를 풀기 위해 만든 소스. 1번에서 연결과 모스부호는 있기 때문에 생략한다.
res_table이 table에 1대1 대응을 하는 암호문 테이블이다. 이 또한 1대1 대응이므로 쉽게 구할 수 있다.
FLAG : TUCTF{c4n_s0me0ne_turn_a_1ight_0n}
Crypto 10 - 3번
이 문제 또한 1대1로 대응하는 암호문 테이블을 찾아내면 된다. 근데 암호문 테이블이 2개이다. 위에서 보면 똑같이
abcdefghijklmnopqrstuvwxy를 보냈는데 그 결과에 해당하는 암호문이 한 가지의 경우가 아니다. 따라서 모두 구해야 하는데
이 단계 까지에서는 많은 문자열코드를 사용하지 않으므로 abcdefghijklmnopqrstuvwxy를 보낸것의 응답을 온 암호문을
테이블로 이용하여 풀어도 충분히 이 라운드를 풀어낼 수 있다.
그렇게 구하면 답을 얻을 수 있다.
문제를 풀기 위한 소스. 역시 앞부분은 생략한다. split기능을 이용하여 처음 보낸 문자열에 해당하는 평문을 풀어낸다.
FLAG : TUCTF{5omething_is_b3tt3r_th4n_n0thing}
Crypto 10 - 4번
이제 슬슬 암호문이 달라진다. 보면 abcdefghijklmnopqrstuvwxy를 보내는데 그 결과는 계속 바뀐다.
하지만 자세히 보면 암호문의 순서는 일정하다. 결과를 말하면 테이블은 일정하다. 단 시작의 위치가 다르다는것.
즉 a가 B가되면 b는 C가 되고 a가 0이되면 b가 1이되는것이다. 1대1 대응에 시저암호를 섞은 것이라고 할 수 있다.
이 방법으로 문제를 풀면된다.
문제를 풀기 위해 만든 소스. 95를 더하고 빼 주는것은 테이블 범위를 넘어갔을 경우를 처리해 주기 위해서이다.
FLAG : TUCTF{7urn_th4t_fr0wn_up5ide_d0wn}
Crypto 10 - 5번
이번에도 이전 문제와 같지만 문자열의 범위에 특수기호까지 포함한다는 점이 조금 다르다.
다른것은 모두 같다.
TUCTF{gn0mes_4re_p3ople_t00}
Crypto 50 - 1번
여기부터는 문제의 배점이 50점으로 늘어난다.
근데 문제는 3번과 같다. 단 a~y 사이에 없는 값은 그냥 띄어쓰기로 대체해 주면 된다.
FLAG : TUCFT{mirr0r_mirr0r_0n_th3_w4ll}
Crypto 50 - 2번
이 문제는 123세자리로 나뉘어서 테이블이 구성된다.
즉, 1,4,7번이 같은 테이블, 2,5,8번이 같은 테이블, 3,5,9가 같은 테이블이다.
따라서 aaa를 보내 돌아오는 암호문 3자리를 가지고 각각의 테이블을 구성하여 풀어낸다.
FLAG : TUCTF{c4ll_m3_ishmae1}
Crypto 150
이 문제는 암호테이블같은것은 없고 보내는 패딩을 이용한 치환암호이다. 암호문 12, 18, 24등 6의 배수로 되어 있으며
만약 해당하는 평문이 이 숫자와 맞지 않으면 사이사이에 \x00을 넣어 패딩을 해 준다.
예를들어 bastian의 경우 길이를 보면 7이다. 패딩을 위해서 뒤에 5개의 \x00을 붙인다. 간편하게 0이라고 칭하겠다.
bastian00000. 이제 6으로 나누면 2이므로 반으로 나누어 두 문자열을 순서대로 섞는다.
bastia
n00000
-> bna0s0t0i0a
이를 반대로 풀어내면 답을 얻을 수 있다.
FLAG : TUCTF{it5_4ll_in_y0ur_mind}
'old' 카테고리의 다른 글
[고전암호] PlayFair 암호 (0) | 2016.06.21 |
---|---|
포포포포렌식 (0) | 2016.05.26 |
Wechall / php0817 (0) | 2016.04.10 |
Wechall / Get Sourced (0) | 2016.04.10 |
Wechall / Encodings I (0) | 2016.04.10 |