Join files to 1 by 1 command!
- ✅ Features
- 📦 Requirements
- 📥 Installation
- ☢️ Usage
- 🤔 Notes about .DLL joining (IMPORTANT)
- ✳️ Some examples
- 🆘 Issue contributing
- 📁 Join any executable (that can execute OS): .exe, .vbs, .bat, .js, etc. (and linux executables)
- ⚙️ Join scripts (only Linux) -
.sh
,.py
- ✅ Works on any platform
- 🔐 Joined files is encrypted by
AES256-GCM
- 👤 Can elevate to admin privileges (optional) (only for Windows)
- 🌆 Custom icon (optional) (only for Windows)
- 🤏🏿 Small size when compiled
- 🗂 GZIP comperssion
- 📜 Message box on run (optional)
- 📵 Anti-VM, Anti-Debug functional (optional)
- 📛 Anti-Sandboxie (optional)
- 💎 Can run commands when run (optional)
- ⚙️ Can add files to autorun (optional)
Join any executables for any platform. Stub of joiner is written on Rust, that allows to compile this to any platform. Joiner have cross platform structure, that allows to use it on Windows, Linux, Android and other platforms, that Rust compiler supports.
For first you need:
- 🔧 Rust toolchain installed on (In development used (and recommended) cargo 1.66.0)
- 🐍 Python 3.10 and above (In development used Python 3.11)
- 📑 Files, that you want to join (In development used .vbs, .bat, .exe files. Note, that .vbs, .bat and etc. files can't run on Linux)
Just download latest release from releases
at right menu.
If you have GIT CLI installed on, you can copy repository via command:
Any platform
$ git clone https://github.com/ftdot/rjoiner
Warning
The author(s) of this software are NOT responsible for its use by other users.
By using this tool, you agree that only you responsible for its use and your actions.
usage: rjoiner.py [-h] [-v] [--copyright] [--license] [-i ICON] [-a] [-t TARGET] [-d] [-V] -f FILE [--no-banner] [-M] [-m MESSAGE] [-T TITLE]
[-I MBOX_ICON_TYPE] [-b] [--anti-vm] [--anti-debug] [--anti-sandboxie] [-c COMMAND]
options:
-h, --help show this help message and exit
-v, --version Show version
--copyright Show copyright
--license Show license
-i ICON, --icon ICON Path to icon (only .ico) (available only for windows!)
-a, --admin Enables request to admin execution level (available only for windows!)
-t TARGET, --target TARGET
Specify a target to cargo (list installed targets: rustup target list --installed) (can be multiple)
-d, --debug Enables debug mode (by default, compiles in release mode) (prevents to temp/ directory deletion, enables console on windows releases)
-V, --verbose Enables verbose mode (prints exceptions, current steps)
-f FILE, --file FILE Path to the file(s) to join (can be multiple) (start filename with "!" to autorun it)
--no-banner Disables RJoiner banner
-M, --msgbox Shows messagebox (you need also provide -m, -T argument)
-m MESSAGE, --message MESSAGE
Message to show at messagebox
-T TITLE, --title TITLE
Title to show at messagebox
-I MBOX_ICON_TYPE, --mbox-icon-type MBOX_ICON_TYPE
Set icon type of messagebox (available: error, info. By default: error)
-b, --msgbox-before Shows messagebox before executing joined programs (by default, messagebox will be showed after executing joined programs)
--anti-vm Enables Anti-VM (only x86)
--anti-debug Enables Anti-Debug (available only for Linux builds!) (only x86)
--anti-sandboxie Enables Anti-Sandboxie (only Windows)
-c COMMAND, --command COMMAND
Commands to execute when runned (by default is doesn't run any. Can be multiple)
To join any files, you must provide -f
flag(s) with path(es) to file(s).
Linux
$ python3 rjoiner.py -f example1 -f example2 -f example3
Windows
$ python rjoiner.py -f example1 -f example2 -f example3
It will generate output in directory out
.
Note
You can provide flag
-f
(files) as many as you want. But at least there should be at least one file here. You can add 1 or 5 and even 1000.
Note
Icon to the file can only be added on windows builds. Yes, you can build windows binary with icon from linux system, but add icon to linux binaries you cannot.
To add icon, you must provide path to the icon by flag -i
.
Linux
$ python3 rjoiner.py -f example1 -f example2.sh -f example3.py -i icon.ico
Windows
$ python rjoiner.py -f example1.exe -f example2.vbs -f example3.bat -i icon.ico
Note
Icon to the file can only be added on windows builds. Yes, you can build windows binary with icon from linux system, but add icon to linux binaries you cannot.
To set requirement to admin rights, you must provide flag -a
.
Let add icon and admin rights requirement to binary.
Linux
$ python3 rjoiner.py -f file1.exe -f file2.exe -a -i icon.ico
Windows
$ python rjoiner.py -f file1.exe -f file2.exe -a -i icon.ico
To join .DLL
files you must known, that every joined dll file must have function EntryPoint()
(without any arguments).
Example of that .DLL
on C++:
#include <windows.h>
extern "C" __declspec(dllexport)
DWORD WINAPI EntryPoint(LPVOID lpParam) {
MessageBox(NULL, "Hello world!", "Hello World!", NULL);
return 0;
}
extern "C" __declspec(dllexport)
BOOL APIENTRY DllMain(HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved) {
switch (ul_reason_for_call) {
case DLL_PROCESS_ATTACH:
CreateThread(NULL, NULL, EntryPoint, NULL, NULL, NULL);
break;
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}
If you want the technical details, every dlls runs by it command:
$ rundll32.exe <Path To DLL>,EntryPoint
Example with the messagebox, .exe and .vbs files
python rjoiner.py -i icon.ico -f Clicker.exe -f calc.vbs -M -m "Buffer overflow at 0x001ac1faff" -T "Runtime error" -t x86_64-pc-windows-msvc
Example with the linux executables, scripts and python script
python3 rjoiner.py -f mousepad -f escape_docker.sh -f create_user.py -f shutdown_sys.sh -t x86_64-unknown-linux-gnu
Example with autorun of calc.vbs + messagebox with
"
character
python rjoiner.py -i icon.ico -f Clicker.exe -f !calc.vbs -M -m "Buffer overflow at \"0x001ac1faff\"" -T "Runtime error"
Example with icon, anti-vm, anti-sandboxie and many files (including files with the same names) and with messagebox. Used in tests
python rjoiner.py -i icon.ico -f Clicker.exe -f calc.vbs -f test/calc.vbs -f test/Clicker.exe -f FileDate.exe -M -m "BufferOverflow error at 0x00a8c1faff" -T "Rust runtime error" --anti-vm --anti-sandboxie -t x86_64-pc-windows-msvc
Example with many arguments. Used in tests
python rjoiner.py -i icon.ico -f Clicker.exe -f calc.vbs -f test/calc.vbs -f test/Clicker.exe -f FileDate.exe -M -m "BufferOverflow error at 0x00a8c1faff" -T "Rust runtime error" --anti-vm --anti-sandboxie -c calc.exe -c cmd.exe --no-temp-del -d -V --yes-console -t x86_64-pc-windows-msvc
If you have any issue with the joiner at build stage, you must do these steps:
- Provide your cargo version
- Provide your system on that you try to build executable
- Run joiner with
-V
flag (verbose) and provide it output
If you have any issue at runtime stage, you must do these steps:
- Provide your cargo version
- Provide your system(s) on that you build and run joiner
- Run joiner with
-V
(verbose) and-d
(debug) flags and provide it output - Execute output file (joined files) in the console and provide it output
- Provide file names and extension (only it name and extension, doesn't attach files!)
If you want provide a idea to this project, just do these steps:
- Introduce your idea
- Add
feature request
label and wait
If you want contribute to the code (PR) do these steps:
- Write the main idea of the PR
- Write a changelog
There is tags, just ignore it
merge exe files, join exe files, executables joiner, rjoiner, rusty joiner, joiner on rust, rust programming language, merge executables, exe joiner, join vbs and executables, merge vbs and executables, merge scripts, merge python files, merge linux scripts, js files joiner, easy joiner, easy merge, compile two files in one, merge two files, commands macros, linux files merge, merge linux executables, ftdot