From e81fcfdbc0dfdb9f9fcfd25dc38b4b052e17aa5e Mon Sep 17 00:00:00 2001 From: Print3M <92022497+Print3M@users.noreply.github.com> Date: Sun, 2 Nov 2025 10:32:32 +0100 Subject: [PATCH] README cooked --- README.md | 58 ++++++++++++++++++---------------- _README.md | 65 -------------------------------------- _img/img-1.jpg | Bin 0 -> 73953 bytes epic/cmd/pic_compile.go | 1 + epic/logic/PICCompiler.go | 5 +++ epic/main.go | 1 - 6 files changed, 36 insertions(+), 94 deletions(-) delete mode 100644 _README.md create mode 100644 _img/img-1.jpg diff --git a/README.md b/README.md index cb90e71..7ec69aa 100644 --- a/README.md +++ b/README.md @@ -1,28 +1,28 @@ # EPIC -EPIC (*Extensible Position Independent Code*) ... +EPIC (*Extensible Position Independent Code*) – PIC shellcode development and building framework designed for developer experience, predictability, and modularity. *Write code, EPIC will take care of the rest!* -// TODO: IMG ze schematem działania +![EPIC flow chart](_img/img-1.jpg) -// TODO: Short description - what problem it solves. -// TODO: Features - -EPIC (Extensible Position Independent Code) – implant development and shellcode-building framework designed for developer experience, predictability, and modularity. - -// TODO: A stable and convenient tool for building your project. - -EPIC transforms complex shellcode engineering into a seamless process — building fully position-independent payloads with zero hidden magic, zero heap reliance, and maximal clarity. Whether you’re crafting stealth implants or high-level modular payloads, EPIC ensures your binaries remain elegant, efficient, and exact. +EPIC is a robust single-executable toolkit for the complete PIC shellcode development workflow — offering quick project initialization, compilation, and payload linking with a rich set of built‑in features. It makes building stealth modular implants effortless. - Built-in modularity – you choose what you want to include. - Built-in global context support – no memory permission changes! - Built-in dead-code elimination – the smallest payload on the market. -- Predictable PIC generation — no implicit syscalls, no unexpected code. +- Predictable PIC compilation — no implicit syscalls, no unexpected code. - Built-in minimal `libc` and `win32` written for PIC compatibility. -- Built-in mixing C and C++ support. +- Built-in C and C++ (and mixing) support. - More... ## Quick Start +Download EPIC from [release page](http://Test.pl). It's a single executable tool. + +Requirements: + +- Windows, Linux, or MacOS +- Latest MinGW-w64 tool-chain (`gcc`, `ld`, `objcopy`) + ```bash # 1. Create initial project structure mkdir project/ @@ -45,7 +45,7 @@ That's it! At this point, you can take the generated `payload.bin` and inject it epic loader payload.bin -o output/ ``` -The compiled loader.exe is ready to execute. If your payload works here, it will work everywhere. +The compiled `loader.exe` is ready to execute. If your payload works here, it will work everywhere. ## Documentation @@ -69,7 +69,8 @@ Compiles all source files from the project at `` and saves object files to Flags: -* `-o / --output ` [required] – Output path for compiled object files. +- `-o / --output ` [required] – Output path for compiled object files. +- `--strict` – Enable all compiler checks (`-Wall`, `-Wextra`, `-pedantic`). #### `pic-link ` @@ -81,8 +82,8 @@ Links core and selected modules from `` into a standalone PIC payload. The Flag: -* `-o / --output ` [required] – Output path for the payload. -* `-m / --modules ` – Comma-separated list of modules to link (named after their folders in `modules/`). +- `-o / --output ` [required] – Output path for the payload. +- `-m / --modules ` – Comma-separated list of modules to link (named after their folders in `modules/`). #### `loader ` @@ -94,7 +95,7 @@ Injects your payload from `` into a loader template and compiles it to a W Flags: -* `-o / --output ` [required] – Output path for the loader executable. +- `-o / --output ` [required] – Output path for the loader executable. #### `monolith ` @@ -104,18 +105,18 @@ Compiles your project into a standard non-PIC executable (called a "monolith" in Flags: -* `-o / --output ` [required] - Output path for the monolith executable. +- `-o / --output ` [required] - Output path for the monolith executable. #### Global flags The following optional flags can be used with any command: -* `--debug` – Enable verbose debug mode. -* `--mingw-w64-gcc ` – Specify path to MinGW-w64 GCC. -* `--mingw-w64-ld ` – Specify path to MinGW-w64 ld. -* `--mingw-w64-objcopy ` – Specify path to MinGW-w64 objcopy. -* `--no-banner` - Disable EPIC banner. -* `--no-color` - Disable colored output. +- `--debug` – Enable verbose debug mode. +- `--mingw-w64-gcc ` – Specify path to MinGW-w64 GCC. +- `--mingw-w64-ld ` – Specify path to MinGW-w64 ld. +- `--mingw-w64-objcopy ` – Specify path to MinGW-w64 objcopy. +- `--no-banner` - Disable EPIC banner. +- `--no-color` - Disable colored output. ### EPIC Coding Guide @@ -295,8 +296,9 @@ If nothing helps, you are cooked. #### EPIC Limitations -* Supported architecture: x86-64 only -* Supported languages: C and C++ +- Supported target OS: Windows +- Supported architecture: x86-64 +- Supported languages: C and C++ #### Module function doesn't execute @@ -366,5 +368,5 @@ objdump -D -b binary -m i386:x86-64 -M intel payload.bin ## Credits -* c-to-shellcode.py -* Stardust +- [Stardust by 5pider](https://github.com/Cracked5pider/Stardust) for inspiration. +- - [c-to-shellcode.py](https://github.com/Print3M/c-to-shellcode) – EPIC is basically a follow-up to my previous PoC. diff --git a/_README.md b/_README.md deleted file mode 100644 index f6ad1e9..0000000 --- a/_README.md +++ /dev/null @@ -1,65 +0,0 @@ -# EPIC — Extensible Position Independent Code Framework - -EPIC (Extensible Position Independent Code) – implant development and shellcode-building framework designed for developer experience, predictability, and modularity. - -EPIC transforms complex shellcode engineering into a seamless process — building fully position-independent payloads with zero hidden magic, zero heap reliance, and maximal clarity. Whether you’re crafting stealth implants or high-level modular payloads, EPIC ensures your binaries remain elegant, efficient, and exact. - -- Built-in modularity – you choose what you want to include. -- Built-in global context support – no memory permission changes! -- Built-in dead-code elimination – the smallest payload on the market. -- Predictable PIC generation — no implicit syscalls, no unexpected code. -- Built-in minimal `libc` and `win32` written for PIC compatibility. -- Built-in mixing C and C++ support. -- More... - -// - A stable and convenient tool for building your project. -TODO: wygodny i przewidywalny CI/CD - -## Interesting Observations - -I tried two approaches to linking functions: - -1. With `__attribute__((section(".func")))` on the every function in the code and the `*(.func)` in the linker script. - -2. With no attribute in code but with `-ffunction-sections` parameter during compilation and `--gc-sections` during linking. - -The first option creates smaller paylaod but doesn't provide dead function elimination. - -The second option creates a little bit larger payload but provides dead function elimination. - -Why does the second option create a little bit larger payload? I'm not sure but I have a feeling. In the second approach each function is placed in a separate section. This is the outcome of using `-ffunction-sections` parameter. Each section typically requires some alignment. If you have many small functions, you accumulate significant padding after each one. - -## Disassembly payload.bin - -```bash -objdump -D -b binary -m i386:x86-64 -M intel payload.bin -``` - -## Linker map - -It's possible to generate map of linked sections. Great tool for deep inspection of linker's work. Use `-Map=linker.map` parameter. This file shows which sections (section == function when used with `-ffunction-sections`) are discarded and which are linked into the final payload. It shows the layout of linked sections and their size. Great tool for debugging. - -## Dead code elimination doesn't work - -Dead code elimination doesn't work for linker output "binary". - -To hack this I use MinGW-w64 toolchain `gcc` with custom linker script (`ld`) to PE and then extracting PIC `.text` section using `objdump` to final `payload.bin` output. It works like a charm. This way the final payload is smaller then ever. - -## Stack alignment for Win API - -Mingw-w64 automatically handles stack alignment when function is defined with `WINAPI` attribute. - -## `main()` and `__main()` functions - -If you implement `main()` function no matter how hard I tried it's always treated special by GCC compiler. No matter how many compiler flags, function attributes and linker scripting I used there's always generated unnecessary call to `__main()` at the beginning of `main()`. It means you need to implement this stupid `__main()` somehow, otherwise there's an linker error. The reason for this is behaviour is unknonw and I found no way to disable it. - -Solution to this problem is using `main()` as entry point and implement dummy empty `__main() {}` function. It works, but honestly I wanted my code to be as clean as possible with no dummy functions! - -Second solution is not to use `main()` at all. Create a not-main function (e.g. `__main_pic`) and use it as a entry point. It works this way. - -## Troubleshooting - -1. Clean output/ directory. -2. Test monolith version (more reliable). -3. Check if you follow EPIC Guidebook. -4. Run `--debug`. diff --git a/_img/img-1.jpg b/_img/img-1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..300d126007fb2ed964007a6b912bdeb20eafcc84 GIT binary patch literal 73953 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 literal 0 HcmV?d00001 diff --git a/epic/cmd/pic_compile.go b/epic/cmd/pic_compile.go index 5fd6a38..98bdc1b 100644 --- a/epic/cmd/pic_compile.go +++ b/epic/cmd/pic_compile.go @@ -54,6 +54,7 @@ func init() { rootCmd.AddCommand(compileCmd) compileCmd.Flags().StringVarP(&pc.OutputPath, "output", "o", "", "output path (required)") + compileCmd.Flags().BoolVar(&pc.Strict, "strict", false, "enable all compiler checks (-Wall, -Wextra, -pedantic)") // Mark required flags if err := compileCmd.MarkFlagRequired("output"); err != nil { diff --git a/epic/logic/PICCompiler.go b/epic/logic/PICCompiler.go index b207888..43db916 100644 --- a/epic/logic/PICCompiler.go +++ b/epic/logic/PICCompiler.go @@ -12,6 +12,7 @@ import ( type PICCompiler struct { ProjectPath string OutputPath string + Strict bool } func (pc *PICCompiler) ValidateProjectPath() error { @@ -142,6 +143,10 @@ func (pc *PICCompiler) compileProjectDirectory(targetDir string) { params = append(params, "-std=c17") } + if pc.Strict { + params = append(params, "-Wall", "-Wextra", "-pedantic") + } + output := utils.MingwGcc(params...) if len(output) > 0 { fmt.Println(output) diff --git a/epic/main.go b/epic/main.go index 9b357da..81cbf87 100644 --- a/epic/main.go +++ b/epic/main.go @@ -6,7 +6,6 @@ import ( ) // TODO: -// - Add cool README // - Automatically obtain address of start and end of payload (in memory) // - Implement custom symbols for compilation