# bin2src > **bin2src** is a simple command line that converts a binary file to an array of bytes, assigned to a variable in a source file of another language; therefore you can embed it into your program. Currently supported output languages: * C * C (shellcode) * Pascal * Python * Rust ## Overview **bin2src** reads a binary file (e.g. jpg, wav, mp3, etc.) and generates a source file with the binary data embeded into it as a byte array and assigned to a variable. It is useful if you don't want to distribute a binary file together with your application and let users have direct access to it. With **bin2src** you can embed the data inside the final executable and use it through the variable stored in memory. Keep in mind that it is always possible for an "advanced" user to extract the data, either from the executable or from a memory dump. ## Usage
bin2src < -l LANG | --out-lang LANG > [ OPTIONS ] < FILE >

LANG and FILE are required.

Options:

        -l, --out-language LANG         specify the language, where LANG={c|cshell|pascal|python|rust}

        -d, --out-dir PATH              specify where to output source(s) file(s);
                                        if not specified, generate in current directory

        -f, --out-file OUTFILE          specify the output file(s) name (* without extension *);
                                        if not specified, output file(s) will have the same name
                                        of input file (without extra dots).

        -h, --hex                       output bytes in hexadecimal (for C shellcode this flag has
                                        diferent behaviors. See the Github site for more information)

Currently supported languages:

  - C
  - C for shellcode
  - Pascal
  - Python
  - Rust	
## Some Examples Suppose you have an image `myimage.jpg` that you want to embed into your executable:

**Example 1:** ``` bin2src --out-language pascal --out-dir "X:\My Projects\project01" --out-file image01 myimage.jpg ``` Windows paths with spaces need quotation marks This command will create the file `...\image01.pas` with the data defined using decimal format: `[210, 0, ...]`.

**Example 2:** ``` bin2src -l c -d "X:\My Projects\project02" -f image01 -h myimage.jpg ``` This command will create the files, but with binary data in hexadecimal format: `[0x10, 0xfa, ...]`: * `...\image01.h` * `...\image01.c`
**Example 3:** ``` bin2src --out-language python myimage.jpg ``` This command will create the file `myimage.py` at the current directory.

Check other examples at [examples directory][3] for some practical uses of bin2src. ## Atention * Beware of the **file size** that you will embed in your code!!! Ensure that it is accepted by your O.S., compiler, language standards, memory at runtime, etc. * If the input file name has more dots, in addition to the dot that splits the name and the extension, without the `--out-file` or `-f` command line option the output file name will be the first name before the first dot. Example: `abc.def.ghi.x` => `abc.y` * The option `--hex` or `-h` for C shellcode output works differently. Without this flag, it will define the data type as `unsigned char` bytes, otherwise with the hexadecimal flag, it will embed the bytes as a string type (`char *`). * To embed the generated C shellcode using string format, make sure that the binary data doesn't contains null bytes ("\x00") or don't use string functions from stdlib, like `strlen`. This may break your code and could raise exceptions (e.g. access violations, etc.). * All of the tests were made with Windows 10 Pro (2004), and to execute the alpha release maybe you have to install the latest [MSVC runtime][4]. Even though, it should works well on other platforms. * There are a lot of things to organize and improvements to do. Suggestions are always welcome. ## License Developed by Alexandre Gomiero de Oliveira under the [MIT License][1]. Any code generated by **bin2src** are under [MIT License][2]. Please, contact me if you need another license type. [1]: ./LICENSE [2]: ./LICENSE-GENERATED [3]: ./examples [4]: https://support.microsoft.com/en-us/help/2977003/the-latest-supported-visual-c-downloads [5]: ./TODO.md