About BST
BST serves as a comprehensive utility for converting binary string code into various formats compatible with different programming languages. This tool transforms binary strings into source code representations suitable for security research, penetration testing, and exploit development scenarios.
Feature Overview
Transform binary files into binary string format for standard output dumping;
Convert raw hexadecimal input strings into escaped hexadecimal versions;
Generate character detection sequences for buffer analysis;
Control binary string width to enhance exploit code readability;
Format binary strings using multiple programming languages including C/C++, Python, and PowerShell;
Apply automated code block indentation for seamless copy/paste operations;
Required Dependencies
POSIX C library;
C compiler: GCC or LLVM Clang;
GNU Make;
Git;
Installation Process
Clone the repository to your local system using the following command:
$ git clone https://github.com/e3prom/bst
Navigate to the project directory and build the code using make. By default, BST will be installed to the /usr/local/bin path:
$ cd bst
$ make
$ sudo make install
Usage Examples
Display help information with the following command:
$ 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 Restore and dump file metadata content
-x, --hex-escape Escape input hexadecimal string
-b, --gen-badchar Generate malicious sequence string
The below switches are optional:
-f, --file=FILE Read hexadecimal input from file
-w, --width=BYTES Split binary string at specified byte length
-s, --syntax=LANG Output variable using specified programming language
-i, --indent=LENGTH Perform indentation for given character length
-n, --var-name=VAR Specify string variable name (Verbose mode)
-h, --help Display tool help information
--interactive Enter interactive mode
--verbose Enable Verbose output
--version Print tool version information
The below languages are supported (case-sensitive):
C C language
python Python language
powershell PowerShell automation script language
In the following demonstration, we'll use BST to compile shellcode with Python syntax formatting and 4-space character indentation. The shellcode will be dumped (-D) as hex-escaped (-x) binary string output with 8-byte width:
$ 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 can also automatically generate malicious character sequences in familiar programming lagnuage formats:
$ bstrings --verbose -b -w12 -i 4 --syntax=c -n badchars
[*] Generating bad character binary string.
[+] Binary string width is limited to 12 bytes.
unsigned char badchars[] =
"\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"
License Agreement
This project is developed and distributed under the GPL-2.0 open source license agreement.