old

Hack-me / Simon Says (베이컨 암호)

nopdata 2016. 7. 22. 02:13

Simon says

다 풀었지만 에러가 나서 오랫동안 고생한 문제이다.


베이컨암호는 위와같이 알파벳 자체에 의미를 부여하지 않고 알파벳의 크기에 의미를 부여하는 암호방식이다.

풀기 위해서는 같은 암호표가 필요한데 일반적으로 A는 aaaaa, B는 aaaab, C는 aaaaba.. 이런식으로 하나씩 증가시켜가며 5자리씩을 구분해 만든다.


이 문제의 첫 부분인데 보면 s는 작은문자 그리고 뒤에 OMEN은 큰문자이다. 이렇게 5문자를 보면 abbbb로 할 수 있다.(a를 작은 문자, b를 큰 문자로 했을 경우)


http://prosoft.tistory.com/8


베이컨 암호의 일반적인 풀이이다. 보면 abbbb는 Q이다. 위 암호표를 보고 풀어내게 되면


이와같이 나온다. 보면 QATTYPSDIT.. 이렇게 시작을 한다. 보면 PASSWORDIS와 형식이 같다.

제공된 암호표는 I와 J를, U와 V를 함께 묶었다. 하지만 여기서 문제를 풀기 위해서는 하나씩 미뤄서 각각 나눠야한다.

그렇게 해서 나온 암호표는 아래와 같다.


각각 5는 a를 의미하고 7은 b를 의미한다. 이렇게 바꾼 이유는 제공되는 문제의 문자열이 엄청 길다. 일일히 하나씩 바꾸기도 좀 힘들고 해서 클립보드에 복사를 하고 문제를 풀기로 했다. 소스를 보면


폰트 사이즈로 나눌 수 있고, 불필요한 문자는 친절하게 #0000ff로 다른색을 나타낸다. 따라서 나는 이 기준으로 나누어 문제를 풀기로 했다.


data='복사해서 넣은 위 소스'

data=data.split('font size = ') //앞에 폰트 크기만 남기기 위해서 나누는 기준

문제는 이렇게 해서 넣으면 문제를 풀때 PASSWORDIS하고 일정부분에서 자꾸 값이 나오지 않는다. 아직 정확한 원인을 찾지는 못했지만 아마도 클립보드에 저장되는 크기의 제한때문에 일정부분 누락이 되는듯 싶다. 그래서 문제를 풀려면 위 소스를 파일로 저장하고 읽어오는 방식을 사용해야 한다.


1. 파일을 읽어온다(소스가 들어있는)

2. 문자열에서 필요한 문자 크기만 남긴다

3. 남긴 문자크기를 5개씩 묶는다.

4. 묶은 5자리를 베이컨 암호표와 비교하여 바꾼다.


이렇게 하면 된다.

PASSWORDISCONTAININGSEPARATEDLETTERHQJJLHIRUJBHGZQEGUGTJCHQIQJSBVSJZSITYEUVTUIEQTTMYCDKDJURDYEIEZAZEZEJCKKZENCIJZWMBBVBUIRCECMQNMSOMSEBFFMCGREEGAQQNEIBCBGIGWJHGJCPASSWORDISCONTAININGSEPARATEDLETTERHQJJLHIRUJBHGZQEGUGTJCHQIQJSBVSJZSITYEUVTUIEQTTMYCDKDJURDYEIEZAZEZEJCKKZENCIJZWMBBVBUIRCECMQNMSOMSEBFFMCGREEGAQQNEIBCBGIGWJHGJCPASSWORDISCONTAININGSEPARATEDLETTERHQJJLHIRUJBHGZQEGUGTJCHQIQJSBVSJZSITYEUVTUIEQTTMYCDKDJURDYEIEZAZEZEJCKKZENCIJZWMBBVBUIRCECMQNMSOMSEBFFMCGREEGAQQNEIBCBGIGWJHGJC

결과로 나온 값인데

PASSWORDISCONTAININGSEPARATEDLETTERHQJJLHIRUJBHGZQEGUGTJCHQIQJSBVSJZSITYEUVTUIEQTTMYCDKDJURDYEIEZAZEZEJCKKZENCIJZWMBBVBUIRCECMQNMSOMSEBFFMCGREEGAQQNEIBCBGIGWJHGJC가 세번 반복된다.


문제의 답을 인증하기 위해서는 PASSWORDIS뒤에 전부 다넣으면 안되고 CONTAININGSEPARATEDLETTER까지만 넣어야 한다.


Hack-me Answer : CONTAININGSEPARATEDLETTER