资源简介
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.MAX_NESTED_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
相关资源
- Pythonamp;课堂amp;笔记(高淇amp;400;集第
- Python中Numpy库最新教程
-
AN_BLE-SDKDH-C1_Teli
nk BLE SDK DeveloperHan - 用python编写的移动彩信的发送程序
- Python全栈学习笔记面向对象大作业:
- python实现的ftp自动上传、下载脚本
- HOOK小工具(进程、窗口、全局)
- QQCOOKIES状态维护、防掉线
- HOOK 记录和模拟 Keyboard Mouse
- 通用注入工具无驱版(HOOK注入、远程
- Diskhook(模拟硬盘序列号)
- Python版的A*寻路算法
- 基于Filter-Hook Driver的个人防火墙
- IronPython IDE
- Vulkan Cookbook 无水印转化版pdf
- QT酷炫界面开发指南《QmlBook》
- Outlook联系人导出为Vcard格式工具
- HP ProBook S系列商务笔记本电脑
- HP ProBook B系列商务笔记本电脑
- HP ProBook 5330m 超轻薄笔记本电脑
- HP ProBook 4230s 商务笔记本电脑
- 硬盘串号模拟diskhook
- Macbook air superdrive win10 x64驱动
- diskhook模拟硬盘物理序列号
- 完美解决苹果MacBook无法对NTFS格式的
- Delphi XE10 Seattle移动开发指南完整版
- pip-10.0.1.tar.gz
- HP EliteBook 8460p 商务笔记本电脑
- 惠普ProBook Elitebook BIOS密码重置工具
- Data Science from Scratch 2nd Edition
评论
共有 条评论