-
Gaurdian 스터디 2주차 실습Life: research & education/Gaurdian: 2025. 4. 21. 21:53
준비물
- 1주차에 준비한 "리눅스" 컴퓨터에다 `pip install cryptography pwntools`
오늘 할 것
- 1주차 숙제였던 ROT128, ByteCaesar를 풀이합니다.
- 이론에서 암호학을 배우고 DoubleDES, likeb64를 풉니다.
다음주에 해올 것
#852 - "ROT128"
문제를 다운받아봅시다.
이런 형태의 rot128.py가 보입니다.
대충 flag.png를 암호화 한다고 합니다.
암호화는 0x80 만큼 비트를 미는 카이사르 암호 같습니다.
그럼 이거에 맞춰서 decode.py를 작성합니다. 128 만큼 값을 밀거나 당기면 됩니다.
실행하면 decode.png가 생겨납니다.
입력하면 문제가 풀립니다.
#1817 - "ByteCaesar"
앞선 ROT128과 거의 같은 유형의 문제입니다.
설명은 생략합니다.
#1118 - "Double DES"
만약 지금까지 "윈도우로 되는데? 하고 윈도우로 하고 있던 사람은 리눅스 킵시다. Cupher 때문에 리눅스 필요해요"
MitM 방식으로 해결합니다. 여기서 MitM은 "Man in the middle"이 아니라 "Meet in the middle"을 의미합니다.
코드를 다운로드 받습니다.
일단 Key가 두 개입니다. key1은 `Dream_XX`, key2는 `XXHacker` 같네요.
그리고 나서 아래와 같은 단계로 암호화를 합니다.
그리고 힌트를 줍니다.
자 그럼 생각해봅시다. 일단 4 byte 전수조사를 하면 경우의 수가 대략 2^32 = 40억개므로 고려하는 수가 아닙니다.
MitM을 사용하여 경우의 수는 2^17 = 12만개로 줄여봅시다.
제시해준 힌트를, 다음처럼 생각할 수 있습니다.
그러면, 일단 cipher1.encrypt에 대해 2 byte를 전수조사하고 cipher2.decrypt도 2 byte에 대해 전수조사한 다음, 일치하는 게 있는지 확인하면 되겠죠.
원시적으로는 heap을 써서 n log n 만에 구할 수 있고 딕셔너리를 써서 n 만에 할 수도 있습니다.
코드를 작성합시다. 15초 안에 풀어야 하므로 pwntool을 써서 자동화합니다.
실행하면, 문제가 풀립니다.
#1020 - "likeb64"
문제를 다운받습니다. 심플하게 target.txt 하나가 주어집니다.
그리고 다시 문를 봅니다. 음 문제 제목이 likeb64입니다. base64랑 비슷한 문제인가봅니다. base 64 인코딩에 관련해서는 이론 1주차를 참고합시다. 아니면 검색하던가.
hint를 봅니다.
문자가 정확히 32개입니다. 그럼 대충 base 32 처럼 인코딩한 문자열이겠구나를 지레짐작할 수 있습니다.
실제로 앞 세 문자 'IRE'을 인코딩해보면, I가 알파벳 9번째 문자, R이 알파벳 18번째 그리고 E가 알파벳 5번재 문자이므로 인코딩이 0100 0100 0100 100B ... 이 됩니다. 우리가 원하는 키 형식, DH ... = 44 48 XX ... 과 일치합니다. 이게 맞는 것 같습니다.
Python 코드를 짭니다. 구현 난의도 또한 0으로 수렴하니 GPT 써서 구현하면 됩니다.
실행하여 flag 값을 얻습니다. 복붙해서 문제를 해결합니다.
'Life: research & education > Gaurdian:' 카테고리의 다른 글
Gaurdian 스터디 3주차 실습 (0) 2025.05.02 Gaurdian 스터디 1주차 실습 (0) 2025.04.18