4번은 지식이 부족해서인지 잘 모르겠다. 나중에 다시 풀어봐야겠다.
5번은 이상한 언어가 중간에 있고 실행시마다 바뀐다. 미션은 이 코드를 분석해서
그 분석한 결과값을 ?ans=의 GET방식으로 보내는게 목표이다.
이건 brainfuck이라는 언어이다. 이 부분을 읽어와서 해석하면 된다.
근데 구글에 brainfuck interpreter라고 쳐봐도 자바스크립트만 나와서 파이썬용으로 찾았다.
https://github.com/DoctorLai/PyUtils/blob/master/bf.py 여기에 어떤분이 친절하게 올려주셔서
가져다가 조금 수정해서 썼다.
import urllib2 def bf(src, left, right, data, idx): """ brainfuck interpreter src: source string left: start index right: ending index data: input data string idx: start-index of input data string """ retstr = '' if len(src) == 0: return if left < 0: left = 0 if left >= len(src): left = len(src) - 1 if right < 0: right = 0 if right >= len(src): right = len(src) - 1 # tuning machine has infinite array size # increase or decrease here accordingly arr = [0] * 30000 ptr = 0 i = left while i <= right: s = src[i] if s == '>': ptr += 1 # wrap if out of range if ptr >= len(arr): ptr = 0 elif s == '<': ptr -= 1 # wrap if out of range if ptr < 0: ptr = len(arr) - 1 elif s == '+': arr[ptr] += 1 elif s == '-': arr[ptr] -= 1 elif s == '.': retstr += chr(arr[ptr]) #원래 있던 출력 대신 retstr에 한글자 한글자 더해서 elif s == ',': if idx >= 0 and idx < len(data): arr[ptr] = ord(data[idx]) idx += 1 else: arr[ptr] = 0 # out of input elif s =='[': if arr[ptr] == 0: loop = 1 while loop > 0: i += 1 c = src[i] if c == '[': loop += 1 elif c == ']': loop -= 1 elif s == ']': loop = 1 while loop > 0: i -= 1 c = src[i] if c == '[': loop -= 1 elif c == ']': loop += 1 i -= 1 i += 1 return retstr #맨마지막에 다 끝나면 리턴함. if __name__ == "__main__": req = urllib2.Request('http://www.enigmagroup.org/missions/programming/5/') req.add_header('cookie','enigmafiedV4=내 쿠키') page = urllib2.urlopen(req).read() src = page[page.find('++'):page.find('.
')+1] #brainfuck 코드 부분을 가져왔다. brainfuck = bf(src, 0, len(src) - 1, "sdfsdf", 0) req = urllib2.Request('http://www.enigmagroup.org/missions/programming/5/?ans='+brainfuck) req.add_header('cookie','enigmafiedV4=내 쿠키') print urllib2.urlopen(req).read()
'Python > 2.7 simple coding(+ c++)' 카테고리의 다른 글
Enigmagroup missions/programming 6 (0) | 2014.11.09 |
---|---|
Enigmagroup missions/programming 4 (0) | 2014.11.09 |
Enigmagroup missions/programming 3 (0) | 2014.11.03 |
Enigmagroup missions/programming 2 (0) | 2014.11.03 |
Enigmagroup missions/programming 1 (0) | 2014.11.03 |