BST:一款功能强大的二进制字符串代码格式转换工具

关于BST

BST是一款功能强大的二进制字符串代码格式转换工具,该工具可以将二进制字符串转换为能够兼容不同语言源代码的各种格式,以满足各种安全开发领域中的渗透测试或漏洞利用开发场景。

功能介绍

1、将二进制文件转换并转储为二进制字符串格式的标准输出;

2、将纯十六进制输入字符串转换为十六进制转义版本;

3、支持生成字符串序列,用于检测缓冲区中的字符;

4、限制二进制字符串的宽度以提高漏洞利用代码的可读性;

5、使用不同的编程语言或脚本语言来设置二进制字符串的格式,例如C/C++、Python和PowerShell;

6、执行自动化可变代码块缩进,以方便代码的复制/粘贴;

依赖组件

1、POSIX C库;

2、C编译器:GCC、LLVM Clang;

3、GNU Make;

4、Git;

工具下载&配置

广大研究人员可以直接使用下列命令将该项目源码克隆至本地:

$ git clone https://github.com/e3prom/bst

然后切换到项目目录中,使用make命令完成项目代码构建,默认配置下BST将会安装在“/usr/local/bin”路径下:

$ cd bst

$ make

$ sudo make install

工具使用

下列命令可以查看工具的帮助信息:

$ bstrings --help

Usage: bstrings [OPTION]...

 Convert input to specified binary string format.

 

 At least one of the below options must be given:

    -D, --dump-file=FILE    恢复和转储文件元数据内容

    -x, --hex-escape        转义输入十六进制字符串

    -b, --gen-badchar       生成一个恶意序列字符串

 

 The below switches are optional:

    -f, --file=FILE            从文件读取十六进制输入

    -w, --width=BYTES       将二进制字符串按指定字节长度拆分

    -s, --syntax=LANG        使用指定编程语言语句输出变量

    -i, --indent=LENGTH      对给定的字符长度执行缩进

    -n, --var-name=VAR      指定字符串变量名(Verbose模式)

    -h, --help              显示工具帮助信息

       --interactive         进入交互式模式

       --verbose           启用Verbose输出

       --version            打印工具版本信息

 

 The below languages are supported (case-sensitive):

    C                       C语言

    python                  Python语言

    powershell              PowerShell自动化脚本语言

在下面的演示样例中,我们将使用BST来编译Shellcode,示例中使用Python语法格式和4个空格字符的代码缩进级别,并将Shellcode转储(-D)为十六进制转义(-x)二进制字符串的标准输出,字符长度为8字节:

$ bstrings --verbose -x -D lnx-execve-setreuid-x86_64 -w8 -i 4 --syntax=python

[*] Convert hexadecimal input to an escaped binary string.

[+] Binary string width is limited to 8 bytes.

[+] Output binary string using python language syntax.

[+] Indentation level set to 4 space character(s).

    shellcode =  ""

    shellcode += "\x31\xc0\x48\x89\xc7\x48\x89\xc6"

    shellcode += "\x48\x89\xc2\xb0\x71\x0f\x05\x31"

    shellcode += "\xc0\x50\x48\xbb\x2f\x62\x69\x6e"

    shellcode += "\x2f\x2f\x73\x68\x53\x48\x89\xe7"

    shellcode += "\x50\x48\x89\xe6\x57\x48\x89\xe2"

shellcode += "\xb0\x3b\x0f\x05"

我们还可以使用BST以我们熟悉的编程语言代码格式自动化输出恶意字符序列:

$ bstrings --verbose -b -w12 -i 4 --syntax=c -n badchar

[*] Generating bad character binary string.

[+] Binary string width is limited to 12 bytes.

    unsigned char badchar[] =

        "\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c"

        "\x0d\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18"

        "\x19\x1a\x1b\x1c\x1d\x1e\x1f\x20\x21\x22\x23\x24"

        "\x25\x26\x27\x28\x29\x2a\x2b\x2c\x2d\x2e\x2f\x30"

        "\x31\x32\x33\x34\x35\x36\x37\x38\x39\x3a\x3b\x3c"

        "\x3d\x3e\x3f\x40\x41\x42\x43\x44\x45\x46\x47\x48"

        "\x49\x4a\x4b\x4c\x4d\x4e\x4f\x50\x51\x52\x53\x54"

        "\x55\x56\x57\x58\x59\x5a\x5b\x5c\x5d\x5e\x5f\x60"

        "\x61\x62\x63\x64\x65\x66\x67\x68\x69\x6a\x6b\x6c"

        "\x6d\x6e\x6f\x70\x71\x72\x73\x74\x75\x76\x77\x78"

        "\x79\x7a\x7b\x7c\x7d\x7e\x7f\x80\x81\x82\x83\x84"

        "\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90"

        "\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c"

        "\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8"

        "\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4"

        "\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0"

        "\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc"

        "\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8"

        "\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0\xe1\xe2\xe3\xe4"

        "\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0"

        "\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc"

        "\xfd\xfe\xff"

许可证协议

本项目的开发与发布遵循GPL-2.0开源许可证协议。

项目地址

BST:【GitHub传送门】

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/538267.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

leaflet 显示地图加载的瓦片的行列号

背景: 在开发过程中,对接wmts服务的时候,调试参数过程中有时候需要直观看到当前地图加载的瓦片的行列号。 实现原理: 利用Leaflet的L.GridLayer图层,加载一个网格图层,重写其createTile方法,…

开源AI图像识别:支持文件批量识别快速对接数据库存储

随着数字化转型的不断深入,图像识别技术在各行各业中的应用越来越广泛。文件封识别作为图像识别技术的一个分支,能够有效地提高文件处理的自动化程度和准确性。本文将探讨文件封识别技术的原理、应用场景以及如何将识别后的内容批量对应数据库字段进行存…

Blast生态借贷协议Pac Finance陷“清算”风波,兄弟项目ParaSpace曾上演内斗

Blast生态协议又出事了。4月11日晚间,有用户发现借贷协议Pac Finance上出现了大量ezETH清算,涉及金额达2400 万美元。官方回应称,系一位智能合约工程师的操作导致Pac Finance发行清算阈值在没有事先通知团队的情况下被意外更改。 目前社区内…

dPET论文笔记

PBPK论文笔记 题目:Self-supervised Learning for Physiologically-Based Pharmacokinetic Modeling in Dynamic PET 摘要 动态正电子发射断层扫描成像 (dPET) 提供示踪剂的时间分辨图像。从 dPET 中提取的时间活动曲线 (TAC&a…

办公提效-截图录屏

使用感受:滚动截图,目前用着pixpin最方便,简单可控制,有点类似qq截图。faststone容易在长截图出错,显示重复,而share X截不了大模型聊天记录。 我的办公工作流-截图录屏:pixpin截图且识别、录屏gif格式,faststone录屏成mp4格式,截图提取文字技术为OCR文字识别,短截图…

C语言基础:回顾判断素数

什么是素数(也称质数)?和合数相对。 其特点是只能被 1 和它本身 整除,无法被其他整数整除。或者公因数只有它自己和1两个数的数 怎么求解素数呢?对于求解质数的方法很多,但是有一种专门求解素数的功能&am…

Harmony鸿蒙南向外设驱动开发-Camera

功能简介 OpenHarmony相机驱动框架模型对上实现相机HDI(Hardware Device Interface)接口,对下实现相机Pipeline模型,管理相机各个硬件设备。 该驱动框架模型内部分为三层,依次为HDI实现层、框架层和设备适配层。各层基…

python--对象序列化和反序列化以及with语句块的使用

1.对象序列化和反序列化 对象序列化:将对象这种抽象概念转化为可以传输存储的物理概念 对象反序列化:将磁盘或者网络间的物理数据转化为对应的编程语言的对象 对象持久化:将对象永久的存储下来 对相反持久化: 将磁盘上永久存储…

Spring启动流程和循环依赖

文章目录 概览对Spring的理解Spring启动流程Spring循环依赖与三级缓存 概览 Spring是一个轻量级的Java开源框架,为了解决企业应用开发的复杂性而创建的。Spring的核心是控制反转(IOC)和面向切面(AOP)。 简单来说&…

性能优化 - 你知道CSS有哪些优化方案吗

难度级别:中高级及以上 提问概率:70% CSS是前端开发工作中必不可少的技能之一,同时也是网页开发中必不可少的重要元素之一。但很多人所开发的项目本身对性能要求并不高,再加上项目周期紧张,久而久之,也就容易养成不考虑细节的习惯,觉得C…

从0开始创建单链表

前言 这次我来为大家讲解链表,首先我们来理解一下什么是单链表,我们可以将单链表想象成火车 每一节车厢装着货物和连接下一个车厢的链子,单链表也是如此,它是将一个又一个的数据封装到节点上,节点里不仅包含着数据&…

NzN的数据结构--二叉树part2

上一章我们介绍了二叉树入门的一些内容,本章我们就要正式开始学习二叉树的实现方法,先三连后看是好习惯!!! 目录 一、二叉树的顺序结构及实现 1. 二叉树的顺序结构 2. 堆的概念及结构 3. 堆的实现 3.1 堆的创建 …

90天玩转Python—10—基础知识篇:函数详解

90天玩转Python系列文章目录 90天玩转Python—01—基础知识篇:C站最全Python标准库总结 90天玩转Python--02--基础知识篇:初识Python与PyCharm 90天玩转Python—03—基础知识篇:Python和PyCharm(语言特点、学习方法、工具安装) 90天玩转Python—04—基础知识篇:Pytho…

循环单链表算法库

学习贺老师数据结构 数据结构之自建算法库——循环单链表_循环单链表 csdn-CSDN博客​​​​​​ 整理总结出的循环单链表算法库 v1.0 : 基本实现功能 v2.0(2024.4.6): 修复Delete_SpecificLocate_CyclicList()删除节点函数bug,添加验证删除节点是否超范围判断 目录 1.主要功能…

Blender2.83 下载地址及安装教程

Blender是一款开源的3D计算机图形软件,广泛应用于动画制作、游戏开发、建模、渲染等领域。它提供了一套强大的工具和功能,让用户能够进行三维建模、动画制作和视觉效果的创作。 Blender支持多种文件格式的导入和导出,使用户能够与其他软件进…

【Linux源码学习】(一)源码下载、解压说明

目录 一、Linux源码下载地址 二、使用7z解压 一、Linux源码下载地址 官网下载:The Linux Kernel Archives 我们可以到这个地址下载各种版本的压缩包:即上图对应的http网址。 Index of /pub/ 选择Linux 找内核代码 这里直接选择最新的6.x 然后往下翻&…

《猎灵online》游戏完整源码(源码+客户端+服务端+文档+工具),云盘下载

《猎灵》是一款由国内知名开发运营开发的大型3D魔幻网游,《猎灵》研发团队突破诸多瓶颈,首创“全自由无限制PK”,让玩家拒绝无意义等待,自由作战不受任何束缚,真正的实现想战就战,游戏创建了六界神魔乱斗的…

单调栈用法

文章目录 1. 单调栈1.1 理解单调栈(模板)1.2 每日温度1.3 子数组的最小值之和1.4 柱状图中最大的矩形1.5 最大矩形1.6 最大宽度坡1.7 去除重复字母 1. 单调栈 单调栈经典的用法: 对每个位置都求: 当前位置的左侧比当前位置的数…

UDP网络程序

上一章中&#xff0c;我们介绍了socket&#xff0c;以及TCP/UDP协议。这一章带大家实现几个UDP协议的网络服务。我们需要一个 服务端和一个客户端。 1.服务端实现 1.1socket函数 #include <sys/types.h> #include <sys/socket.h>int socket(int domain, in…

【JAVA基础篇教学】第六篇:Java异常处理

博主打算从0-1讲解下java基础教学&#xff0c;今天教学第五篇&#xff1a; Java异常处理。 异常处理是Java编程中重要的一部分&#xff0c;它允许开发人员在程序运行时检测和处理各种错误情况&#xff0c;以保证程序的稳定性和可靠性。在Java中&#xff0c;异常被表示为对象&am…