package org.vizee.brainfuckvm;
public class BrainfuckVM {
private byte[] ds;
private byte[] cs;
private int[] es;
private int dp;
private void ds_resize(int size, boolean preserve)
{
byte[] backup = null;
if(preserve && ds != null)
backup = ds;
ds = new byte[size];
if(backup != null)
System.arraycopy(ds, 0, backup, 0, Math.min(backup.length, size));
return;
}
public int run()
{
if(cs == null)
return 1;
ds_resize(1024, false);
dp = 0;
for(int i = 0;i < cs.length;i++) {
switch(cs[i]) {
case 0x1: //+ | -
ds[dp] += es[i];
break;
case 0x2: //< | >
dp += es[i];
if(dp >= ds.length)
ds_resize(dp + 1024, true);
else if(dp < 0) {
ds = null;
return 0;
}
break;
case 0x4: //,
try {
ds[dp] = (byte)System.in.read();
} catch (Exception e) {
System.out.println(e.toString());
}
break;
case 0x6: //.
System.out.print((char)ds[dp]);
break;
case 0x8: //[
if(ds[dp] == 0)
i = es[i];
break;
case 0xa: //]
if(ds[dp] != 0)
i = es[i];
break;
}
}
ds = null;
return 0;
}
public int load(String code)
{
int length = 0;
char[] stream = code.toCharArray();
int count = 0;
for(int i = 0;i < stream.length;i++) {
switch(stream[i]) {
case '[':
count++;
case ']':
if(stream[i] == ']') {
if(count == 0)
return 0;
count--;
}
case ',':
case '.':
length++;
break;
case '+':
case '-':
case '<':
case '>':
int j;
for(j = i + 1;j < stream.length;j++)
if(stream[i] != stream[j])
break;
i = j - 1;
length++;
}
}
if(count == 0 && length > 0) {
cs = new byte[length];
es = new int[length];
int[] match = new int[length];
int current = 0;
count = 0;
for(int i = 0;i < stream.length;i++) {
switch(stream[i]) {
case '[':
cs[current] = 0x8;
match[count++] = current;
break;
case ']':
cs[current] = 0xa;
es[current] = match[--count];
es[es[current]] = current;
break;
case ',':
cs[current] = 0x4;
break;
case '.':
cs[current] = 0x6;
break;
case '+':
case '-':
case '<':
case '>':
int j;
for(j = i + 1;j < stream.length;j++)
if(stream[i] != stream[j])
break;
if(stream[i] == '<' || stream[i] == '>')
cs[current] = 0x2;
else
cs[current] = 0x1;
if(stream[i] == '<' || stream[i] == '-')
es[current] = i - j;
else
es[current] = j - i;
i = j - 1;
}
if(cs[current] != 0)
current++;
}
}
return length;
}
public BrainfuckVM()
{
cs = null;
ds = null;
es = null;
dp = 0;
}
}
相关推荐
2021“长城杯”_MISC_“你这flag保熟吗”_复现
直接解压“flag.rar”发现存在密码,而且4~6位密码爆破失败,说明密码的获取要从另外的两个PNG图片获取。 直接将图片都拿去binwalk分解一下(binwalk -e 1.png)、(binwalk -e 2.png) 分别得到一个“password.xls”文件以及一个“hint.txt” 单独看password.xls 看不懂,但是看hint.txt就比较明显,有base64解码,而且还有类似于加密后的信息“Vm0wd2QyUXlVWGxW”,但是直接拿去解码是得不到什...
fuck vim
/************************************************************************* > File Name: code/2015summer/0720/H.cpp > Author: 111qqz > Email: rkz2013@126.com > C...
Brainfuck VM Brainfuck解释器
Brainfuck解释器,以一个虚拟机的形式运行Brainfuck代码,完整支持Brainfuck标准语句(><+-。,[])。
VMProtect2.06学习
编译类型 否: FUCKVMP(FKVMP) 插件 ->start -> 搜索自定义注释 看到 retn 下断点 并暂时禁止 ALT+M, 看内存 数据段 内存地址 -> 在OD 数据窗口 搜索->发现全0 下断点 VittualProtectEx 经历n次 程序跑飞 来到n-1 次 发现数据窗口有数据了 把刚才的retn断...
arcanevm:完全同态加密Brainfuck虚拟机
ArcaneVM ArcaneVM是一种虚拟机,可以执行使用指令。 基本上,它是一个Brainfuck解释器,可以执行加密的Brainfuck代码。 ArcaneVM依靠库执行FHE。 加入Matrix 上的聊天 关于 完全同态加密(FHE)是一种相对较新的加密技术,它允许对加密数据进行计算。 这不仅使我们可以对输入进行加密,还可以对计算本身进行加密。 输出也会被加密,解密后会给出计算的明文结果。 对于不仅拥有敏感数据而且具有敏感计算的人来说,这是非常强大的。 由于该程序实际上对所计算的内容具有零上下文,因此它必须遍历该程序的每个可能分支。 最重要的是,使FHE成为可能的基础加密方案在计算上非常昂贵。 在ArcaneVM和Brainfuck的上下文中,这意味着程序具有的指令越多,并且正在使用的磁带越大,则程序变得越慢。 这是因为VM必须在每个周期都对每个可能的数据单元执行所有可
PYNQ-Z2 开发板从镜像烧录到 Jupyter 交互全流程指南
本文详细介绍了PYNQ-Z2开发板从镜像烧录到Jupyter交互的全流程指南,包括硬件解析、镜像烧录技巧、设备启动与网络配置、Jupyter Notebook深度使用以及实战案例分享。通过具体步骤和实用技巧,帮助开发者快速上手PYNQ-Z2开发板,实现高效的FPGA开发和智能家居控制应用。
Dollar Dayz (大数dp fuck!不是多组数据!!)
Dollar Dayz Time Limit: 1000ms Memory Limit: 65536KB 64-bit integer IO format: %lld Java class name: Main Prev Submit Status Statistics Discuss Next Farmer John goes to Dol
多传感器标定全栈系统学习教程
无论是激光雷达(Lidar)、毫米波雷达(Radar)、相机(Camera)还是惯导(IMU),传感器之间的精确标定直接决定了系统的可靠性与性能。本文将以系统化的视角,梳理多传感器标定的核心知识体系,并分享一套覆盖全栈技术的学习路径。Calibration)是实现点云与图像融合的前提,而雷达与车辆的标定(Radar2Car)则是精准速度估计的关键。:Lidar2Car、Camera2Car的快速标定流程,标定板布置规范。:从单传感器标定入手(如相机内参),逐步过渡到多传感器联合标定。
Python实现BrainFxxk虚拟机
Brainfuck是一种极小化的计算机语言,它是由Urban Müller在1993年创建的。由于fuck在英语中是脏话,这种语言有时被称为brainf*ck或brainf**k,甚至被简称为BF。👉Müller的目标是建立一种简单的、可以用最小的编译器来实现的、符合图灵完全思想的编程语言。这种语言由八种状态构成,为Amiga机器编写的编译器(第二版)只有240个字节大小!👉就象它的名字所暗示的,brainfuck程序很难读懂。尽管如此,brainfuck图灵机一样可以完成任何计算任务。
python毕设 基于Web的中药材信息查询系统程序+论文
***(程序+源码+数据库+调试部署+开发环境)论文文档1,文末可获取,系统界面在最后面。****
Win10右键新建菜单丢了记事本?别慌!5分钟教你用注册表找回来(附权限设置避坑指南)
本文详细指导如何通过注册表编辑器恢复Win10右键新建菜单中丢失的记事本选项,包括重建键值结构、配置ShellNew项及设置权限等关键步骤。特别提供权限避坑指南,确保修改持久有效,帮助用户快速解决这一常见但困扰的问题。
探索JIT技术:从Brainfuck虚拟机开始
想象一下,你可以在理解和掌握JIT(Just-In-Time)编译技术的过程中不感到畏惧。是的,这就是`Brainfuck JIT`虚拟机教程带给你的全新体验。该项目以Rust编程语言为工具,通过实现一个简单的 Brainfuck 解释器,让你逐步深入到JIT的世界。 教程作者深知JIT技术对于初学者的挑战,并通过将复杂的概念与一种极简的编程语言——Brainfuck 结合,打造出了一条易上手的...
Lumerical官方案例、FDTD时域有限差分法仿真学习(十三)——多模干涉耦合器(MMI)
计算通过 1×2 端口多模干涉 (MMI) 耦合器的宽带传输和光损耗。 使用设备 S 参数在 INTERCONNECT 中创建 MMI 的紧凑模型。 它还展示了如何使用 CML 编译器提取这些参数以生成紧凑模型。 一、概述 了解模拟工作流程和关键结果 低损耗光合路器和分路器是基于 Mach-Zehnder 的光调制器的基本组件,并且是集成电路的关键组成部分。通过在输入/输出波导处使用线性锥形确保输入/输出波导的模式与干涉区域之间的
自制BrainFuck解析器
自制BrainFuck解析器 相信你们能看懂代码的意思,因为的确很简单,唯一注意的是处理[]指令可以使用栈结构,因为[]指令正好符合栈的性质 #include <conio.h> #include <stdio.h> #include <string.h> #include <stack> #include <map> using n...
抖音直播参数逆向实战:手把手教你用Python获取ttwid和x-bogus(附完整代码)
本文深入解析抖音直播接口的反爬机制,重点剖析核心防护参数ttwid和x-bogus的生成原理与作用。通过Python实战,手把手教你逆向获取ttwid、webid等关键参数,并构建稳定的数据采集方案,为开发者提供企业级数据获取能力。
Geneformer实战指南:基于Hugging Face Transformers的基因序列分类模型解析
本文详细解析了基于Hugging Face Transformers的Geneformer模型在基因序列分类任务中的应用。通过介绍模型架构、数据处理流程和实战案例,帮助生物信息学研究者掌握这一前沿技术,实现高效的基因表达数据分析与分类。
BrainFuck 解释器(C语言实现)
码农的业余休闲活动就是去学习一门冷门的语言或者研究一项非主流的技术。BrainFuck 是一门小巧的编程语言,顾名思义,阅读这门语言的代码就像在强奸你的大脑一样。事实证明开发它的解释器比读懂它的 Hello World 要快。BrainFuck只有八条指令: 指令 含义 等价的C代码 > 指针加一 ++ptr;
CAPL控制程控电源
汽车电子测试过程中,除了实车测试,还有台架测试,在进行台架测试时,都需要通过电源来模拟汽车电瓶给ECU供电,如果要进一步进行比较高效的压力测试或自动化测试,就需要用到程控电源,所以本章主要介绍CAPL是如何来控制程控电源的。
BrainFuck 以及运用(idf)
由于这是第二次遇见了,所以在博客里分享一下,以后用的找着,话不多说,进入正题,百度之,Brainfuck是一种极小化的计算机语言,它是由Urban Müller在1993年创建的。由于fuck在英语中是脏话,这种语言有时被称为brainf*ck或brainf**k,甚至被简称为BF。它的主要设计思路是:用最小的概念实现一种“简单”的语言,BrainF**k 语言只有八种符号,所有的...
IDEA的使用指南
IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.
LinePhone3.2.7(android端最新版本) sip客户端
SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/
小作:brainfuck解释器
/* Brainfuck Virtual Machine * * Usage: * % cc bfvm.c -o bfvm -DNO_CONIO_H -DQUIET * % ./bfvm script.bf * * Author: yanh2001 */ #include #include #include #ifndef NO_CONIO_H # include int
蓝牙模块HM-10手册
蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。
CTF实战:从PNG图片到Brainfuck密码的完整破解流程
本文详细解析了一道经典的CTF杂项题目,完整展示了从PNG图片隐写分析、利用binwalk提取隐藏文件、解析希尔伯特曲线排列的Excel表格、进行多层Base64解码,到最终执行Brainfuck代码并破解Atbash密码的全流程。文章旨在帮助读者掌握CTF实战中信息隐藏、数据提取和密码破解的综合技能与思维模式。
Statistics and Machine Learning Toolbox
Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具
CTF实战:从PNG图片到Brainfuck密码的完整破解流程(附Python代码)
本文详细解析了一个典型的CTF杂项赛题破解流程,从PNG图片中提取隐藏数据,利用希尔伯特曲线重组Excel中的Base64字符串,最终通过多层解码和Atbash密码破解获得flag。文章提供了完整的Python代码,帮助读者掌握文件分析、隐写术和自动化脚本编写等核心技能。
02 Breakout VM
这里面有些东西我不知道,所以要写在前面。
CISCN 2021初赛 little evil(Ruby+解释性语言混淆+侧信道攻击)
[[ruby语言逆向]] 用Ruby packer打包的ruby程序 [侧信道爆破](侧信道爆破.md) [subprocess库pyhon的使用](subprocess库pyhon的使用.md) [VM逆向(虚拟机逆向 or 代码解释器逆向)](VM逆向(虚拟机逆向%20or%20代码解释器逆向).md) [解释性语言代码混淆](解释性语言代码混淆.md) 使用自己加密自己,运行时再自己解析自己 这个VM其实是[Brainfuck解释器](Brainfuck解释器.md)
IDF实验室:初探乾坤-Fuck your brain
地址: ctf.idf.cn/index.php?g=game&m=article&a=index&id=54 题目: Fuck your brain 这是什么,你能理解它吗? ++++++++++++[>++++>+++++>++++++>+++++++>++++++++>+++++++++>++++++++++>>>+++.---.>>>+++.>>++++++.>>>>----
2021 BugkuCTF “长城杯“ ——“你这flag保熟吗“ 详解
废话:第一次参加CTF比赛,啥也不会,去刷刷真题吧,刷到21年“长城杯”Misc题--“你这flag保熟吗”。下载解压,两张图片一个压缩包,解压要密码,像这种有压缩包要密码,还有图片或者其他文件的,直接不要去想暴力破解了。将图片分离得到一个passwor.xls和hint.txt。两个都打开了,看不出来啥,直接网上搜WP。好!搜来的题解看了,更加懵了,什么希尔伯特曲线,什么brainfuck(BF)密码,什么BF执行的栈,什么atbash密码。学了好久,记录一下。
2344



被折叠的 条评论
为什么被折叠?



