The Python Challenge – Level 21

해당 문제는 20번에서 받은 파일을 이용하여 푸는 문제 이다. "invader"를 거꾸로 하여 압축을 풀고 나면 package.pack 파일이 나오게 된다. 해당 파일을 Hex Editor로 열어 확인하여 보면 헤더가 [78 9C] 로 시작함을 알 수 있다.

구글링을 하여보니 zlib 관련 파일로 확인되었다. 따라서 zlib 라이브러리를 사용하여 압축을 해제한다. 해제하면 다시 zlib 관련 파일이 나오며 계속해서 안풀릴때 까지 풀다보면 gzip 파일이 나온다.

역시 gzip파일도 안풀릴때까지 풀면 어디상 안풀리는 파일이 나오게 되는데 해당 파일을 다시 Hex Editor로 열어 확인하여 보면 파일내용을 거꾸로 확인해보면 zlib 관련 파일인것을 확인할 수 있다.

그래서 다시 파일을 거꾸로 읽어드려 zlib 라이브러리를 사용하여 압축을 해제 한다. 최종 나오는 메세지는 LOG를 확인하다고 한다.

LOG? -_-

#!c:\python26\python.exe
import zlib, bz2, sys
def Format(filename):
    file = open(filename, 'rb')
    data = file.read()
    file.close()

    a = ord(data[0])
    b = ord(data[1])

    if a == 120 and b == 156:
    return 'zlib', ' '
    elif a == 66 and b == 90:
    return 'bz2', '#'
    elif a == 115:
    return 'exit', ' '
    else:
    output = open('package.pack', 'wb')
    output.write(data[::-1])
    return 'null', '\n'

def zlib_def(filename):
    file = open(filename, 'rb')
    data = file.read()
    output = open('package.pack', 'wb')
    output.write(zlib.decompress(data))
    file.close()
    output.close()

def bz2_def(filename):
    file = open(filename, 'rb')
    data = file.read()
    output = open('package.pack', 'wb')
    output.write(bz2.decompress(data))
    file.close()
    output.close()

last = ''
while 1:
    ret, final = Format('package.pack')
    last += final
    if ret == 'zlib':
        zlib_def('package.pack')
    elif ret == 'bz2':
        bz2_def('package.pack')
    elif ret == 'null':
        continue
    elif ret == 'exit':
    print last
    exit()

LOG에 대해 한참을 고민하다가 zlib, gzip 그리고 이도저도 아닌 파일에 대해 처리할 때 각각 다른 문자열을 찍도록 하여 출력하여 보니 아래와 같은 메세지가 나왔다.

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다