GreenHouse论文复现
考虑复现一下该工作 环境 Ubuntu 20.04 docker Docker环境使用清华源安装docker即可设置docker build时的代理: 1docker build -t greenhouse --network host . 修改Dockerfile内容: 1234567FROM m.daocloud.io/docker.io/library/ubuntu:20.04ENV ALL_PROXY="http://127.0.0.1:7890"...# 注释掉该行,因为仓库里没有该文件# COPY ubuntu.tar /ubuntu.tar... Docker Build进行编译,发现卡死在选择时区界面: Dockerfile开头添加以下内容: 12345RUN export DEBIAN_FRONTEND=noninteractive \ && apt-get update \ && apt-get install -y tzdata \ && ln -fs...
GreenHouse论文笔记
论文概述论文题目:Greenhouse: Single-Service Rehosting of Linux-Based Firmware Binaries in User-Space...
V8 数据结构
记录下V8的数据结构。 ArrayBuffer用于表示通用的原始二进制数据缓冲区。其为字节数组(bytearray)。不能直接操作ArrayBuffer内容,而是要通过类型化数组对象或DataView对象来操作,它们会将缓冲区中的数据表示为特定的格式,并通过这些格式来读写缓冲区内容。 创建ArrayBuffer123// 创建8字节缓冲区,并使用Int32Array视图引用const buffer = new ArrayBuffer(8);const view = new Int32Array(buffer); 操作ArrayBuffer要操作ArrayBuffer内容,需要使用视图对象。视图对象不存储任何数据,它只是对ArrayBuffer中字节的解释。例如Uint8Array将每个字节视为独立的数字。 123456let buffer = new ArrayBuffer(16);let view = new Uint32Array(buffer);view[0] = 123456;for(let num of view) { console.log(num);...
Client V8学习
V8 V8-ignition指令 V8内存回收机制 Code-caching V8 Hole V8指针压缩 V8 数据结构
V8 Code Caching
概述v8使用JIT执行JavaScript代码,因此在执行前需要解析并编译,由于每次执行前都需要做此操作的话开销过大,引入code cache来优化(version >= 4.2)。script 第一次执行后,会保存其cache data。下一次v8编译相同script时(不同的v8实例也可以使用)则会使用cache data。一个早期版本的code cache功能api测试用例:testcase当v8编译一个script脚本后,可以通过添加v8::ScriptCompiler::kProduceCodeCache选项来生成相应的cache data用于后续的编译。如果编译成功,则会将cache data添加到source object并且可以通过调用v8::ScriptCompiler::Source::GetCacheData获取。 注:v8::ScriptCompiler::kProduceCodeCache被废弃,新api:v8::ScriptCompiler::GetCodeCache 在后续的编译中,先前生成的cache...
GoogleCTF 2022 d8 Write Up
有一位大佬分享了当时的wp思路,网上似乎没找到中文版的wp,在此做翻译记录和学习。 概览题目目录文件: 12345678910base ❯ tree -L 1.├── build.Dockerfile├── challenge├── launcher.py├── Makefile.txt├── snapshot_blob.bin└── v8.patch0 directories, 6 files 根据v8.patch文件可知定义了/srv/challenge/runner.cc文件作为题目。 12345-DEFINE_BOOL(wasm_write_protect_code_memory, true,+DEFINE_BOOL(wasm_write_protect_code_memory, false, "write protect code memory on the wasm native heap with mprotect") 主要逻辑为challenge二进制程序接收用户输入(大小不超过65536)binary...
V8-Hole漏洞
对于V8 Hole相关内容的学习V8 Map对象的分析可以看这篇搬运:V8-Map对象 V8源码分析在v8中,JSMap的内存布局如下: Map:每个对象会有的,包含对象属性的shape; FixedArray Length:整个OrderdHashMap的大小 elements:存在的entry的数量 deleteds:删除的entry数量 buckets:buckets数量考虑如下代码:12345678910111213141516171819var map = new Map(); %DebugPrint(map); readline(); map.set(1, 1); map.set(2, 1); map.set(3, 1); map.set(4, 1); %DebugPrint(map); readline(); map.delete(3); %DebugPrint(map); readline(); map.set(5, 1); %DebugPrint(map); ...
V8 Map对象学习
学习一下V8的Map对象,以下基本为对参考链接的文章的翻译转载。 引入ECMAScript 2015,也被成为ES6,引入了很多内置类型,例如Map、Set、WeakMap、WeakSet。他们是对标准JS库的扩展并在其他库,应用以及Node.js Core中广泛使用。今天我们关注于Map类型并且尝试去理解V8中的该类型实现细节,同时做一些总结。规范并没有规定用于实现Map类型的精确算法,而是为可能的实现以及预期的性能特征提供了一些建议: Map object must be implemented using either hash tables or other mechanisms that, on average, provide access times that are sublinear on the number of elements in the collection. The data structures used in this Map objects specification is only intended to describe the...
LibAFL论文笔记
论文概述本文提出一个新的工具LibAFL,旨在将AFL工具模块化,方便后续各项工作以及改进的集成。 看论文似乎AFL++也提供了高度配置化的模糊测试框架,但是不够通用 拟解决问题 正交性质的工作难以整合集成; 论文个体贡献难以评估:因为无法判断是基于的工具的优势还是创新算法的优势 难以比较不同工作; 论文贡献提出LibAFL,基于Rust实现的模糊测试框架。LibAFL包含了一系列的库可以用于定制化fuzzer。几个特性: 易于扩展; 按现在的fuzzer组成部分划分 Rust编写 实现了大量的模糊测试算法,特性以及插桩选项 背景关于fuzzing的定义: Therefore, we believe it is more appropriate today to think of fuzzing as a family of testing techniques, which repeatedly provide machine-generated inputs to a target system with the aim of finding inputs that...
honggfuzz学习笔记
Honggfuzz特性 多进程-多线程; pesistent fuzzing mode:fuzz api时,在同一进程中输入新的数据。可以显著提升模糊测试效率 crash track记录完整准确 使用底层(eg:ptrace)接口监视进程状态。可以检测到被劫持、忽视的信号 支持多种基于硬件指令级以及软件层的覆盖率测量方式;同时支持qemu mode的黑盒测试。 persistent fuzzing mode:长期存活的进程重复调用fuzz接口 lets you fuzz your target persistently between two addresses - without forking for every fuzzing attempt. TODO:使用 参考链接 honggfuzz
.jpg)
.jpg)
.jpg)
.jpg)
.jpg)
.jpg)
.jpg)
.jpg)
.jpg)
.jpg)
.jpg)