proone-pack
Tool for creating Binary Archives and generating recombined executables.Overview
proone-pack compresses multiple executables for different architectures into a single Binary Archive, then generates recombined executables for each architecture. This enables Proone’s self-propagation across different platforms.Usage
Arguments
<outfile prefix>: Prefix for output files<path to dvault>: Path to DVault binary (from proone-mkdvault)[path to binary]: One or more executable binaries
Binary Naming Convention
Executables must follow the naming pattern:proone.linux.armv4tproone.linux.mipsexecutable.linux.i686
.*\.([a-z0-9_\-]+)\.([a-z0-9_\-]+)$
Output Files
The tool generates:-
Nybin format:
<prefix>.nybin- Can be used directly with
proone-htbtclient upbin --nybin - Contains DVault and Binary Archive
- No executable code, only data
- Can be used directly with
-
Recombined executables:
<prefix>.<os>.<arch>- Full executable for each input binary
- Includes ELF executable + DVault + Binary Archive
- Ready to run on target architecture
Example
output/proone.nybinoutput/proone.linux.armv4toutput/proone.linux.mipsoutput/proone.linux.i686
Binary Archive Format
The Binary Archive consists of:Nybin Format
Recombined Executable Format
Compression
All executables are compressed into a single zlib stream:- Executables read in order
- Compressed sequentially with zlib
- Single compressed stream in archive
- Decompressed on-demand during recombination
Compression Level
UsesPRNE_PACK_Z_LEVEL (defined in pack.h)
Binary Recombination Testing
WhenENABLE_TEST is set (compile-time):
- Generates all possible recombinations
- Verifies binary integrity
- Tests recursive recombination up to
TEST_DEPTH - Ensures data consistency
Supported Architectures
The tool supports all architectures defined in the protocol:- i686, x86_64
- armv4t, armv6, armv7, aarch64
- mips, mipsel, mips64
- powerpc
- m68k
- sh4
- sparc, sparc64
prne_arch_tostr() for the complete list.
Size Limits
- Maximum individual binary size: 16,777,215 bytes (24-bit size field)
- Maximum DVault size: 65,535 bytes (16-bit size field)
- Maximum number of binaries: Limited by OS/arch combinations
Exit Codes
| Code | Description |
|---|---|
| 0 | Success |
| 1 | Runtime error (I/O, compression, etc.) |
| 2 | Invalid arguments or configuration |
Error Handling
- Invalid file names: Skip with error message
- Unknown OS/arch: Skip with error message
- Duplicate binaries: Error and exit
- Empty files: Error and exit
- Files too large: Error and exit
Dependencies
- zlib (compression)
- DVault binary from proone-mkdvault
Integration
Typically used in build process:- Build executables for all target architectures
- Create DVault with proone-mkdvault
- Package with proone-pack
- Deploy generated files
Source
Location:src/proone-pack.c