Skip to content

xincun/pe_to_shellcode

 
 

Repository files navigation

pe_to_shellcode

Build status GitHub release

Converts PE so that it can be then injected just like a normal shellcode.
(At the same time, the output file remains to be a valid PE).
Supports both 32 and 64 bit PEs

Objective:

The goal of this project is to provide a possibility to generate PE files that can be injected with minimal effort. It is inspired by Stephen Fewer's ReflectiveDLLInjection - but the difference is that with pe2shc you can add the reflective loading stub post-compilation. Also, the header of the PE file is modified in such a way, that you can start executing the injected buffer from the very beginning - just like you would do with a shellcode. It will automatically find the stub, and continue loading the full PE.

Clone:

Use recursive clone to get the repo together with all the submodules:

git clone --recursive https://github.com/hasherezade/pe_to_shellcode.git

How to use it:

  1. Use pe2shc.exe to convert a PE of your choice:
pe2shc.exe <path to your PE> [output path*]
* - optional

If the PE was successfuly converted, pe2shc will let you know where the output was saved:

[+] Saved to file: <converted file>

i.e.

[+] Saved to file: test_file.shc.exe
  1. Use runshc.exe to run the output file and check if the conversion went fine:
runshc.exe <converted file>
  1. If the file runs as the original PE, it confirms that the conversion was successful!
    Now you can use the converted PE just like you would use a shellcode: inject it to a target and execute from the beginning of the buffer. No additional PE loaders are required.
    At the same time, you can keep using the converted file as a regular PE.

Latest builds*:

*those builds are available for testing and they may be ahead of the official release:

  • pe2shc.exe - PE to shellcode converter
  • runshc32.exe - a utility to run/test 32-bit shellcode (loads and deploys)
  • runshc64.exe - a utility to run/test 64-bit shellcode (loads and deploys)

Releases

No releases published

Packages

No packages published

Languages

  • Assembly 72.8%
  • C++ 16.1%
  • CMake 10.5%
  • Other 0.6%