old

TUCTF16 - Crypto

nopdata 2016. 5. 16. 13:08

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