資源簡介
Brainfuck是一種極小化的計算機語言,它是由Urban Müller在1993年創建的。由于fuck在英語中是臟話,這種語言有時被稱為brainf*ck或brainf**k,甚至被簡稱為BF。
在ctf比賽中,有時會碰到需要解brainfuck或ook的情況,一般會使用在線解碼網站:https://www.splitbrain.org/services/ook
當在不能接入外網的場景下解題,則需要一個離線腳本。故優化了github上的一個項目完成了該解碼腳本,支持brainfuck、ook以及short ook。

代碼片段和文件信息
#?-*-?coding:utf-8?-*-
import?sys
from?collections?import?deque
class?LoopError(Exception):
pass
class?OokParser(object):
def?__init__(self):
self.BEGIN?=?(‘!‘?‘?‘)
self.END?=?(‘?‘?‘!‘)
self.primitives?=?{(‘.‘?‘.‘):?‘inc‘
???(‘!‘?‘!‘):?‘dec‘
???(‘.‘?‘?‘):?‘right‘
???(‘?‘?‘.‘):?‘left‘
???(‘!‘?‘.‘):?‘write‘
???(‘.‘?‘!‘):?‘read‘}
???
def?parse(self?input_text):
items?=?input_text.lower().replace(‘ook‘‘‘).replace(‘?‘?‘‘).replace(‘\n‘‘‘).replace(‘\r‘‘‘)
for?i?in?range(0?len(items)?2):
x?=?(items[i]?items[i+1])
if?x?in?self.primitives?or?x?in?(self.BEGIN?self.END):
yield?x
class?BrainfuckParser(object):
def?__init__(self):
self.BEGIN?=?‘[‘
self.END?=?‘]‘
self.primitives?=?{‘+‘:?‘inc‘
???‘-‘:?‘dec‘
???‘>‘:?‘right‘
???‘<‘:?‘left‘
???‘.‘:?‘write‘
???‘‘:?‘read‘}
???
def?parse(self?input_text):
for?x?in?input_text:
if?x?in?self.primitives?or?x?in?(self.BEGIN?self.END):
yield?x
class?Interpreter(object):
MAX_NESTED_LOOPS?=?1000
def?__init__(self?ook_mode=True):
self.bf_parser?=?BrainfuckParser()
self.ook_parser?=?OokParser()
self.set_parser(ook_mode?and?self.ook_parser?or?self.bf_parser)
def?reset(self):
self.cells?=?deque([0])
self.index?=?0
self.input_buffer?=?[]
self.output_buffer?=?[]
self.open_loops?=?0
self.loop?=?[]
def?inc(self):
self.cells[self.index]?+=?1
def?dec(self):
self.cells[self.index]?-=?1
def?right(self):
self.index?+=?1
if?self.index?>=?len(self.cells):
self.cells.append(0)
def?left(self):
if?self.index?==?0:
self.cells.appendleft(0)
else:
self.index?-=?1
def?write(self):
self.output_buffer.append(self.cells[self.index])
def?read(self):
try:
self.cells[self.index]?=?int(raw_input(“Your?input:?“))
except?(TypeError?ValueError):
print?“Invalid?input!?Continuing?...“
def?as_ascii(self):
return?““.join([chr(c)?for?c?in?self.output_buffer])
def?set_parser(self?parser):
self.parser?=?parser
self.reset()
def?interpret_raw_text(self?text):
self.input_buffer.extend(self.parser.parse(text))
try:
self.interpret_items(self.input_buffer)
except?IndexError:
print?“?...?(incomplete)“
except?LoopError:
print?“LoopError?...?exiting“
sys.exit(1)
def?interpret_items(self?items):
for?item?in?items:
if?self.open_loops:
self.interpret_inside_loop(item)
else:
self.interpret_directly(item)
def?interpret_inside_loop(self?item):
if?item?==?self.parser.END:
self.open_loops?-=?1
if?self.open_loops?==?0:
while?self.cells[self.index]:
self.interpret_items(self.loop)
return
elif?item?==?self.parser.BEGIN:
if?self.open_loops? self.open_loops?+=?1
else:
raise?LoopError(“Nesting?maximum?(%s)?exceeded“?
%?self.MAX_NEST
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件????????390??2018-09-25?16:31??BrainFuck(Ook)\brainfuck.txt
?????文件??????11941??2018-09-25?16:56??BrainFuck(Ook)\example.png
?????文件???????5070??2018-09-25?16:53??BrainFuck(Ook)\ook.py
?????文件???????2280??2018-09-25?16:06??BrainFuck(Ook)\ook.txt
?????文件????????867??2018-09-25?15:20??BrainFuck(Ook)\shortOok.txt
?????目錄??????????0??2018-09-25?16:56??BrainFuck(Ook)
-----------?---------??----------?-----??----
????????????????20548????????????????????6
- 上一篇:各大銀行面試試題匯總一覽.rar
- 下一篇:IOT_one_net.rar
評論
共有 條評論