GV

GeezerVison

The World Wide Web, restored to 800 pixels of glory.

Home|About|Gaming cabinet|Archives|How it works|Starter sites

On this site

  • Sign in
  • ActionsCI/CD and automation
  • CodespacesCloud development environments
  • All Features
  • Documentation
  • Training
  • Certifications
  • Build with Copilot
  • Customize Copilot
  • Integrations
  • Trending repos
  • GitHub Sponsors
  • Developer articles
  • Enterprises

This view

  • Original page
  • New address

GeezerVison is showing github.com — GitHub - ixty/xarch_shellcode: Cross Architecture Shellcode in C

BranchesTags
Open more actions menu

Latest commit

 

History

2 Commits
2 Commits

Folders and files

NameName
Last commit message
Last commit date
stage0
stage0
 
 
stage1
stage1
 
 
stage2
stage2
 
 
tools
tools
 
 
README.md
README.md
 
 
build.py
build.py
 
 
xarch_binsh
xarch_binsh
 
 

Repository files navigation

Cross Arch Shellcode Compiler

2016 - ixty

Information

This program allows to build portable, architecture independant shellcode from C code. It currently supports the following architectures:

  • x86
  • x86_64
  • arm
  • arm_64

It works by:

  • compiling the same C code for each architecture
  • linking it to arch specific syscall implementation
  • using a polyglot dispatching shellcode

The final layout of the output binary is: [ DISPATCHER ] [ X86 BLOCK ] [ X86_64 BLOCK ] [ ARM BLOCK ] [ ARM_64 BLOCK ]

The dispatcher is in stage0 Open stage0/README for information on how it works

Each arch specific block has the following layout:

[ LOADER    ]
[ RELOC NUM ]
[ RELOC 0   ]
[ RELOC 1   ]
    ...
[ RELOC N   ]
[ START OFF ]
[ CODE      ]

Open stage1/README for information on loaders

The final payload code is the stage2. Open stage2/README for information on the payload

Dependencies

  • python2.7
  • nasm
  • gcc
  • pyelftools (pip install pyelftools)
  • qemu-user-static
  • qemu-utils
  • arm chroot with gcc
  • arm64 chroot with gcc

Assuming you use debian:

# apt-get install gcc nasm python2.7 python-pip
# apt-get install qemu qemu-user-static qemu-utils binfmt-support debootstrap
# qemu-debootstrap --arch=arm64 jessie /opt/arm64/ http://ftp.debian.org/debian
# qemu-debootstrap --arch=armhf jessie /opt/armhfxx/ http://ftp.debian.org/debian

# chroot /opt/arm64
# apt-get install gcc
# exit

# chroot /opt/armhf
# apt-get install gcc
# exit

Running & testing

$ ./build.py

If everything goes well, it creates ./ouput which is the portable multi-arch shellcode.

To test that everything works, use the provided 'sc' utility:

On the local x86_64 machine
user@x86_64-box   $ ./sc_86     ./output
user@x86_64-box   $ ./sc_x86_64 ./output
... And in the chroots for arm/arm64
user@armhf-chroot $ ./sc_arm    ./output
user@arm64-chroot $ ./sc_arm_64 ./output

Credits

Thanks to feliam

https://github.com/feliam/mkShellcode

http://blog.binamuse.com/2013/01/about-shellcodes-in-c.html

The x86 / x86_64 loader code is taken from this project and the shellcode extraction technique is based upon his work aswell.

About

Cross Architecture Shellcode in C

Resources

Readme
Activity

Stars

212 stars

Watchers

10 watching

Forks

40 forks
Report repository

Releases

Packages

Contributors

Languages

You are visitor 01402503 — GeezerVison does not store the pages you look up.
Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required.