BINBLOOM(1)
πΈ BINBLOOM(1) β the firmware-finding bestie we all deserve πΈ
Okay so picture this: it's 15 Sep 2021, and the Unix gods dropped binbloom version 2.0 into the world, and honestly? Main character energy. This is the manual page, but make it a group chat. Buckle up, bestie π
β¨ NAME β¨
binbloom β literally here to find your firmware loading address and, if you're lucky, your UDS database too (if there even is one, iykyk) π
π¦ SYNOPSIS π¦
binbloom [-a arch] [-b address] [-d] [-e endianness] [-f functions-file]
[-t threads] [-v]
π DESCRIPTION π
So like, binbloom can figure out an unknown binary firmware loading address (or base address, same vibe) from its content. How? Heuristics plus the target architecture's characteristics β think 32-bit vs 64-bit and endianness. And if the endianness is a mystery? No worries, binbloom will try to determine it for you. Obsessed. π₯
And that's not even all β binbloom is also able to locate any Unified Diagnostic Services (UDS) database, which is generally used in automotive firmwares. But plot twist: it does this once the loading address has been found. So like, address first, UDS second. Periodt. π
π OPTIONS π
-a arch,--arch=archβ specify the target architecture. It must be32(for 32-bit architecture) or64(for 64-bit architecture). No in-between, bestie.-b address,--base=addressβ specify the base address (or loading address) to use. Use this option to enable the UDS database search β that's the unlock π-e endianness,--endian=endiannessβ specify the target endianness. Must belefor little-endian orbefor big-endian. Pick your fighter.-m alignment,--align=alignmentβ specify base address alignment. The default is0x1000, iconic default behavior honestly.-d,--deepβ enable deep search. This mode will consider each potential loading/base address without applying a first heuristic filter used in normal mode. Lowkey a big deal. This type of search takes longer to complete and requires much more computing power, and it's also recommended to use multiple threads (through the-t,--threadsoption) to speed up the search. Deep search said "I'm expensive, deal with it" π-f,--functionsβ specify an external file containing known function addresses in hex (one per line) that will be used bybinbloomin its base address guessing algorithm. Providing such a file may help finding the correct base address, depending on the architecture. A little hint file, a little cheat sheet, we love to see it π«Ά-t,--threadsβ specify a number of threads to use when searching for the base address. It is recommended to set this value to the number of cores minus 1 in order to get the best performances. Respect the math, bestie π§- [
-v] β enable verbose mode, andbinbloomwill display more information. Use this option many times to get more information displayed. Yes, many times. Stack that verbosity, no cap β¨
π EXAMPLES π
Here are some examples showing how to use binbloom in different cases. Vibe check each one π
binbloom -a 32 firmware.bin
binbloom will analyze firmware.bin considering a 32-bit architecture. binbloom will guess the endianness and then find out one or more possible base addresses. It's giving detective energy π
binbloom -a 32 -e le firmware.bin
Same as above, but in this example the endianness is set to little-endian. You already know, so you told it. Communication is key π
binbloom -a 32 -e le -d -t 4 firmware.bin
binbloom will perform a deep search considering a 32-bit little-endian architecture, and will use 4 threads to speed up this process. Deep search plus threads equals "we're going fast but thoroughly" π₯
binbloom -a 64 -f ./function.list firmware.bin
binbloom will parse firmware.bin to find points of interest but also use the provided file functions.list to guess the base address. Teamwork makes the dream work, even if the team is you and a text file πΈ
π BUGS π
No known bugs. Literally flawless behavior, we stan a bug-free icon π
π«Ά AUTHORS π«Ά
Guillaume Heilles, Damien Cauquil β the legends behind the whole thing. Thank them in your group chat π
And that's the whole manual, bestie. Source and version, for the record: this is the binbloom man page, version 2.0, dated 15 Sep 2021. Slay, go find those base addresses πβ¨π
π¦ where this page comes from
- nixos 26.05: binbloom 2.1
- nixpkgs unstable: binbloom 2.1
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms