728x90
이번 문제는 조금 어려워보입니다.
암호테이블의 갯수가 26개이므로 알파벳에 대응하는 암호테이블로 보입니다
한번 나열해보면
다음과 같습니다.
알파벳과 대응되는 문자열을 찾아보면 q 와 g가 c 와 d로 대응 되는것 말고는 단서가 없습니다.
나머지 자리를 알 방법은 브루트포싱을 제외하면 딱히 없어보입니다.
이러면 남는 자리에 들어갈수있는 알파벳은 e,h,o,r,s,t 입니다.
3번째 자리와 7번째 자리가 같다는것을 고려해서 브루트포싱 알고리즘을 짜야합니다.
#include <stdio.h>
#define CHAR_COUNTA 6
int main()
{
char str[10] = "?????c?d?";
char chr[6] = { 'e','h','o','r','s','t' };
for (int i = 0; i < CHAR_COUNTA; i++) {
for (int j = 0; j < CHAR_COUNTA; j++) {
for (int k = 0; k < CHAR_COUNTA; k++) {
for (int l = 0; l < CHAR_COUNTA; l++) {
for (int m = 0; m < CHAR_COUNTA; m++) {
for (int n = 0; n < CHAR_COUNTA; n++) {
if (i == j || i == k || i == l || i == m || i == n || j == k || j == l || j == m || j == n || k == l || k == m || k == n || l == m || l == n || m == n)
continue;
str[0] = chr[i];
str[1] = chr[j];
str[2] = chr[k];
str[3] = chr[l];
str[4] = chr[m];
str[6] = chr[k];
str[8] = chr[n];
printf("%s\n", str);
}
}
}
}
}
}
}
일단 당장 제가 생각할수 있는 브루트포싱 알고리즘은 이정도입니다 ㅠㅠ
그런데 이렇게 최대한 조건을 간소화 시켜도 여전히 브루트포싱으로 나오는 문자열이 많아서
뭐가 정답인지 알기 힘들었습니다.
그런데 이 프로그램을 통해서 나온 문자열들을 보다보면
다음과 같이 뒤에 4글자가 코드라고 되어있는 문자열들이 심심치않게 눈에 띕니다.
그래서 저는 한번 이 뒤에 4자리가 code이고 그렇다면 3번째 자리도 o일것이므로
이걸 기반으로 코드를 다시 짜봐야겠다는 생각이 들었습니다.
만약 이게 맞다면 경우의수가 훨씬 줄어들어 판별하기 쉬울것이기 때문이지요.
그렇게 해서 나온 코드는 다음과 같습니다.
#include <stdio.h>
#define CHAR_COUNTA 4
int main()
{
char str[10] = "??o??code";
char chr[CHAR_COUNTA] = { 'h','r','s','t' };
for (int i = 0; i < CHAR_COUNTA; i++) {
for (int j = 0; j < CHAR_COUNTA; j++) {
for (int k = 0; k < CHAR_COUNTA; k++) {
for (int l = 0; l < CHAR_COUNTA; l++) {
if (i == j || i == k || i == l || j == k || j == l || k == l)
continue;
str[0] = chr[i];
str[1] = chr[j];
str[3] = chr[k];
str[4] = chr[l];
printf("%s\n", str);
}
}
}
}
}
이 프로그램을 실행시키면
다음과 같이 문자열의 경우의수가 확 줄어든다는것을 알수 있습니다.
이제 이 중에서 가장 의심스러운 문자열을 찾아보면
이 문자열이 가장 의심스럽 습니다.
그러므로 이 문자열이 정답입니다.
728x90
'워게임 > CodeEngn' 카테고리의 다른 글
[CodeEngn] Basic RCE L13 (0) | 2022.07.06 |
---|---|
[CodeEngn] Pro RCE L01 (0) | 2022.07.04 |
[CodeEngn] Crypto Analysis L01 (0) | 2022.07.03 |
[CodeEngn] Basic RCE L12 (0) | 2022.07.03 |
[CodeEngn] Basic RCE L11 (0) | 2022.07.03 |