资源简介
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
相关资源
- IBM Rational Harmony Deskbook _基于模型的系
- 完整中文版Introduction to Lens Design Wit
- 案例实战信用卡欺诈检测数据集
- TensorFlow Machine Learning Cookbook+无码高清
- 利用dll的hook悄悄监视某进程键盘输入
- The Apache Ignite book PDF(正版购买的全网
- 招商策略_抱团启示录那些年我们一起
- VC删除IE缓存、COOKIE及记录
- nginx与zookeeper交互,同步数据,发送系
- 工资条分发工具
- hook任意api的函数.rar
- Netscaler中文配置手册.pdf
- 天锐绿盾客户端补丁-解决文件上鼠标
- 易语言超级HOOK
- 易语言封包截取源码易语言HOOKapi实现
- sip-4.19.zip
- CMake Cookbook.pdf
- zookeeper可视化工具
- 树莓派3b+学习使用教程
- 《黑客攻防技术宝典第2版系统实战篇
- outlook2010视频教程
- numpy 中文学习手册
- AdS和Chern-Simons引力的Newton-Hooke / Carr
- 桂林老兵 cookie 修改欺骗必备工具
- the cache memory book
- Direct3D Rendering Cookbook
- pytorch-1.4.0-py3.7_cpu_0.tar.bz2
- 机器学习实战 高清完整版PDF
- 《空间谱估计及应用》电子版
- CFA2020LevelI-SchweserNotesBook.pdf
评论
共有 条评论