MCPcopy Create free account
hub / github.com/RischardV/emoji-shellcoding

github.com/RischardV/emoji-shellcoding @main

Chat with this repo
repository ↗ · DeepWiki ↗ · + Follow
145 symbols 333 edges 22 files 12 documented · 8% updated 11mo ago★ 175

Browse by type

Functions 126 Types & classes 19
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

RISC-V: Emoji Shellcoding 🙂

By Hаdrien Ваrrаl and Georges-Axel Jaloyan

This work has been presented at WOOT'23 (paper) and DEFCON30 (slides)

Overview

This tool ⚒️ helps design RISC-V (both 32-bit and 64-bit) shellcodes capable of running arbitrary code, whose ASCII binary representation use only Unicode UTF-8 emojis 🤯.

It consists of an emoji unpacker. For any target shellcode (non-emoji), the tool will produce an emoji shellcode with the unpacker and the packed version of your shellcode. Run it on a RISC-V simulator/cpu and enjoy!

For a general introduction on RISC-V shellcoding, you may read the blog post by Thomas Karpiniec.

You can find our previous work on RISC-V alphanumeric shellcoding here: https://github.com/RischardV/riscv-alphanumeric-shellcoding.

Folder contents: - qemu: Full source code and prebuilt binary for the baremetal QEMU demo - qemu_short: Same as qemu, but a shorter version - esp32: Demos running on the Espressif ESP32-C3 board - hifiveu: Demos running on the HiFive-Unleashed board - payload: Source code of the payloads used - block: How we generated the available instructions - nopsled: The source code of our ⛔🛷 nopsled

Quick-try

Building the shellcodes requires a RISC-V toolchain. We only provide easy-to-test pre-built QEMU baremetal shellcodes.

The only prerequisite is having a RISC-V QEMU v6.0.0 or newer https://www.qemu.org/. On Ubuntu 22.04, you can install it using apt install qemu-system-misc.

Then: - cd emoji-shellcoding/paper_hello_world - cat qemu_miniclog_small.bin (optional, to print the shellcode. Open it in your favorite editor if your console does not support emojis) - ./launch_prebuilt use Ctrl+C to exit

You can modify launch_prebuilt to run qemu_miniclog_medium.bin or qemu_miniclog_large.bin instead.

Building && Testing

Start by cloning the repository:

git clone https://github.com/RischardV/emoji-shellcoding.git
cd emoji-shellcoding

Prerequisites:

On Ubuntu 22.04:

apt install build-essential gcc-riscv64-linux-gnu gcc-riscv64-unknown-elf qemu-system-misc m4

QEMU bare-metal shellcodes

  • Build the instructions lists (takes some time)
  • cd emoji-shellcoding/block
  • make
  • Build the shellcodes
  • cd emoji-shellcoding/qemu
  • make
  • Run the shellcodes
  • cd emoji-shellcoding/qemu
  • cat out/shellcode.bin (optional, to print the shellcode)
  • ./l use Ctrl+C to exit Expected results: The string "Hello, world!" should print on the screen.

Espressif ESP32-C3 shellcodes

Prerequisites: - An Espressif ESP32-C3 board: https://www.espressif.com/en/products/socs/esp32-c3 (esp32-c3-devkitm-1 or esp32-c3-devkitc-02 are easily available for <10$) - The ESP-IDF SDK: https://docs.espressif.com/projects/esp-idf/en/latest/esp32c3/get-started/index.html

  • Build the shellcodes
  • cd emoji-shellcoding/esp32
  • make -j

Running instructions are very similar to QEMU Linux shellcodes above. Refer to them.

HiFive Unleashed Linux shellcodes

Prerequisites: - A HiFive-Unleashed board: https://www.sifive.com/boards/hifive-unleashed (note: this board is not sold anymore)

  • Build the shellcodes
  • cd emoji-shellcoding/hifiveu
  • make -j

Running instructions are very similar to QEMU Linux shellcodes above. Refer to them.

License

This tool is released under Apache license. See LICENSE file.

Core symbols most depended-on inside this repo

Shape

Function 86
Method 40
Class 15
Enum 4

Languages

Python46%
C++41%
C13%

Modules by API surface

block/block.cpp26 symbols
qemu_short/fromto.cpp17 symbols
qemu/fromto.cpp17 symbols
qemu_short/unclog.py9 symbols
qemu/unclog.py9 symbols
hifiveu/unclog.py9 symbols
esp32/unclog.py9 symbols
block/genu14.py9 symbols
esp32/app/main/vulnerable.c8 symbols
hifiveu/vuln.c6 symbols
qemu_short/encode_stage2.py4 symbols
qemu/helpers/check.py4 symbols

For agents

$ claude mcp add emoji-shellcoding \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact

Ask about this repo answers extend the page