2023 코드게이트 암호학 문제이다.
문제 코드 안에 비교 구문에서 암호를 풀려고 하였다.
6230ee81ac9d7785a16c75b93a89de9cbb9cbb2ddabaaadd035378c36a44eeacb371322575b467a4a3382e3085da281731557dadd5210f21b75e1e9b7e426eb7 해당 문자열은 문제 코드에서 나온 사용자의 입력을 AES ECB 알고리즘으로 복호화 한 뒤에 디코딩하는 과정을 거친 값을 검증하는 문자열이다. EC8알고리즘은 블록들을 암호화 한 뒤에 불록들을 합치는 알고리즘이므로 16바이트씩 나눈 값을 암호화 알고리즘에 각각 돌려보았다.
h9AqkFSgmamhqLjK1+zgfp5eNjePI/UVRQsMsRymVcE=
+Mb9GybebuqtZ2L6nhK8OJ5eNjePI/UVRQsMsRymVcE=
yZrBYNRoPAD062zeFAU8GZ5eNjePI/UVRQsMsRymVcE=
2hZ2wW39kAPuIsSNAot9/p5eNjePI/UVRQsMsRymVcE=
qMjibj1cpH2pvXKbine1NJ5eNjePI/UVRQsMsRymVcE=
9EliMHh0jGUX5odzH3RhvJ5eNjePI/UVRQsMsRymVcE=
FZjCzh3Dv9Fakpc4CPcQ355eNjePI/UVRQsMsRymVcE=
z7gIrbGALTQX6Wrksq+xkp5eNjePI/UVRQsMsRymVcE=
그럼 다음과 같이 8개의 블록이 나온다. 이들을 각각 인코딩 시켜주었다.
87 D0 2A 90 54 A0 99 A9 A1 A8 B8 CA D7 EC E0 7E 9E 5E 36 37 8F 23 F5 15 45 0B 0C B1 1C A6 55 C1
F8 C6 FD 1B 26 DE 6E EA AD 67 62 FA 9E 12 BC 38 9E 5E 36 37 8F 23 F5 15 45 0B 0C B1 1C A6 55 C1
C9 9A C1 60 D4 68 3C 00 F4 EB 6C DE 14 05 3C 19 9E 5E 36 37 8F 23 F5 15 45 0B 0C B1 1C A6 55 C1
DA 16 76 C1 6D FD 90 03 EE 22 C4 8D 02 8B 7D FE 9E 5E 36 37 8F 23 F5 15 45 0B 0C B1 1C A6 55 C1
A8 C8 E2 6E 3D 5C A4 7D A9 BD 72 9B 8A 77 B5 34 9E 5E 36 37 8F 23 F5 15 45 0B 0C B1 1C A6 55 C1
F4 49 62 30 78 74 8C 65 17 E6 87 73 1F 74 61 BC 9E 5E 36 37 8F 23 F5 15 45 0B 0C B1 1C A6 55 C1
15 98 C2 CE 1D C3 BF D1 5A 92 97 38 08 F7 10 DF 9E 5E 36 37 8F 23 F5 15 45 0B 0C B1 1C A6 55 C1
CF B8 08 AD B1 80 2D 34 17 E9 6A E4 B2 AF B1 92 9E 5E 36 37 8F 23 F5 15 45 0B 0C B1 1C A6 55 C1
결과는 이렇게 나온다. ECB알고리즘은 각각의 블록을 패딩을 해주기 때문에 중복되는 문자열을 제거 해준다. 마지막에는 중복된 문자를 추가해주었다.
87 D0 2A 90 54 A0 99 A9 A1 A8 B8 CA D7 EC E0 7E
F8 C6 FD 1B 26 DE 6E EA AD 67 62 FA 9E 12 BC 38
C9 9A C1 60 D4 68 3C 00 F4 EB 6C DE 14 05 3C 19
DA 16 76 C1 6D FD 90 03 EE 22 C4 8D 02 8B 7D FE
A8 C8 E2 6E 3D 5C A4 7D A9 BD 72 9B 8A 77 B5 34
F4 49 62 30 78 74 8C 65 17 E6 87 73 1F 74 61 BC
15 98 C2 CE 1D C3 BF D1 5A 92 97 38 08 F7 10 DF
CF B8 08 AD B1 80 2D 34 17 E9 6A E4 B2 AF B1 92
9E 5E 36 37 8F 23 F5 15 45 0B 0C B1 1C A6 55 C1
이제 각각의 hex를 모두 더한 뒤에 base64 인코딩을 돌려주면
h9AqkFSgmamhqLjK1+zgfvjG/Rsm3m7qrWdi+p4SvDjJmsFg1Gg8APTrbN4UBTwZ2hZ2wW39kAPuIsSNAot9/qjI4m49XKR9qb1ym4p3tTT0SWIweHSMZRfmh3MfdGG8FZjCzh3Dv9Fakpc4CPcQ38+4CK2xgC00F+lq5LKvsZKeXjY3jyP1FUULDLEcplXB 가 나온다.
해당 문자열을 제출하면 flag값을 얻을 수 있다.
'CTF > 2023 Codegate Junior Division' 카테고리의 다른 글
I like Script - Misc (0) | 2023.06.26 |
---|---|
Librarian - Pwnable (0) | 2023.06.26 |
vspace - Reversing (0) | 2023.06.26 |