{"id":17383480,"url":"https://github.com/rischardv/emoji-shellcoding","last_synced_at":"2025-08-21T00:31:56.987Z","repository":{"id":56800400,"uuid":"520931956","full_name":"RischardV/emoji-shellcoding","owner":"RischardV","description":"🤩 Emoji shellcoding tools for RISC-V (32-bit and 64-bit) ","archived":false,"fork":false,"pushed_at":"2023-05-25T21:17:50.000Z","size":54,"stargazers_count":172,"open_issues_count":0,"forks_count":21,"subscribers_count":4,"default_branch":"main","last_synced_at":"2025-04-07T23:36:58.048Z","etag":null,"topics":["emoji","risc-v","shellcode"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/RischardV.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-08-03T15:17:44.000Z","updated_at":"2025-04-07T14:17:50.000Z","dependencies_parsed_at":"2024-12-19T17:10:24.379Z","dependency_job_id":"fab03e50-24d9-4b7d-866f-e2a99837de4a","html_url":"https://github.com/RischardV/emoji-shellcoding","commit_stats":{"total_commits":2,"total_committers":1,"mean_commits":2.0,"dds":0.0,"last_synced_commit":"420990cbdbb39495c28db6a1b4ac6c7dde6c74f7"},"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/RischardV/emoji-shellcoding","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RischardV%2Femoji-shellcoding","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RischardV%2Femoji-shellcoding/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RischardV%2Femoji-shellcoding/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RischardV%2Femoji-shellcoding/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/RischardV","download_url":"https://codeload.github.com/RischardV/emoji-shellcoding/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RischardV%2Femoji-shellcoding/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":271409441,"owners_count":24754715,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-08-20T02:00:09.606Z","response_time":69,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["emoji","risc-v","shellcode"],"created_at":"2024-10-16T07:42:55.073Z","updated_at":"2025-08-21T00:31:56.981Z","avatar_url":"https://github.com/RischardV.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# RISC-V: Emoji Shellcoding 🙂\n\n```\nBy Hаdrien Ваrrаl and Georges-Axel Jaloyan\n```\n\nThis work has been presented at\n [WOOT'23](https://wootconference.org) ([paper](https://wootconference.org/papers/woot23-paper5.pdf))\n and [DEFCON30](https://defcon.org/html/defcon-30/dc-30-index.html) ([slides](https://î.fr/defcon/DEF%20CON%2030%20-%20Hadrien%20Barral%20-%20Emoji%20Shellcoding:%20%F0%9F%9B%A0%EF%B8%8F,%20%F0%9F%A7%8C,%20and%20%F0%9F%A4%AF%20-%20Presentation.pdf))\n\n## Overview\n\nThis tool ⚒️ helps design RISC-V (both 32-bit and 64-bit) shellcodes capable of running arbitrary code, whose ASCII binary representation\nuse only [Unicode UTF-8](https://unicode.org/emoji/charts/full-emoji-list.html) emojis 🤯.\n\nIt consists of an emoji unpacker. For any target shellcode (non-emoji),\nthe tool will produce an emoji shellcode with the unpacker and the packed version of your shellcode.\nRun it on a RISC-V simulator/cpu and enjoy!\n\nFor a general introduction on RISC-V shellcoding, you may read the [blog post by Thomas Karpiniec](https://thomask.sdf.org/blog/2018/08/25/basic-shellcode-in-riscv-linux.html).\n\nYou can find our previous work on RISC-V alphanumeric shellcoding here:\n [https://github.com/RischardV/riscv-alphanumeric-shellcoding](https://github.com/RischardV/riscv-alphanumeric-shellcoding).\n\nFolder contents:\n- `qemu`: Full source code and prebuilt binary for the baremetal QEMU demo\n- `qemu_short`: Same as `qemu`, but a shorter version\n- `esp32`: Demos running on the Espressif ESP32-C3 board\n- `hifiveu`: Demos running on the HiFive-Unleashed board\n- `payload`: Source code of the payloads used\n- `block`: How we generated the available instructions\n- `nopsled`: The source code of our ⛔🛷 nopsled\n\n## Quick-try\n\nBuilding the shellcodes requires a RISC-V toolchain.\nWe only provide easy-to-test pre-built QEMU baremetal shellcodes.\n\nThe only prerequisite is having a RISC-V QEMU v6.0.0 or newer [https://www.qemu.org/](https://www.qemu.org/).\nOn Ubuntu 22.04, you can install it using `apt install qemu-system-misc`.\n\nThen:\n  - `cd emoji-shellcoding/paper_hello_world`\n  - `cat qemu_miniclog_small.bin`\n    (optional, to print the shellcode. Open it in your favorite editor if your console does not support emojis)\n  - `./launch_prebuilt`   use Ctrl+C to exit\n\nYou can modify `launch_prebuilt` to run `qemu_miniclog_medium.bin` or `qemu_miniclog_large.bin` instead.\n\n## Building \u0026\u0026 Testing\n\nStart by cloning the repository:\n```\ngit clone https://github.com/RischardV/emoji-shellcoding.git\ncd emoji-shellcoding\n```\n\n#### Prerequisites:\n\n- Python 3.10 or later [https://www.python.org/](https://www.python.org/)\n- RISC-V toolchain\n- RISC-V QEMU: install QEMU v6.0 or newer [https://www.qemu.org/](https://www.qemu.org/)\n- GNU m4\n\nOn Ubuntu 22.04:\n```\napt install build-essential gcc-riscv64-linux-gnu gcc-riscv64-unknown-elf qemu-system-misc m4\n```\n\n### QEMU bare-metal shellcodes\n\n- Build the instructions lists (takes some time)\n  - `cd emoji-shellcoding/block`\n  - `make`\n- Build the shellcodes\n  - `cd emoji-shellcoding/qemu`\n  - `make`\n- Run the shellcodes\n  - `cd emoji-shellcoding/qemu`\n  - `cat out/shellcode.bin` (optional, to print the shellcode)\n  - `./l`   use Ctrl+C to exit\nExpected results:\n  The string \"Hello, world!\" should print on the screen.\n\n### Espressif ESP32-C3 shellcodes\n\nPrerequisites:\n - An Espressif ESP32-C3 board: [https://www.espressif.com/en/products/socs/esp32-c3](https://www.espressif.com/en/products/socs/esp32-c3)\n   (esp32-c3-devkitm-1 or esp32-c3-devkitc-02 are easily available for \u003c10$)\n - The ESP-IDF SDK: [https://docs.espressif.com/projects/esp-idf/en/latest/esp32c3/get-started/index.html](https://docs.espressif.com/projects/esp-idf/en/latest/esp32c3/get-started/index.html)\n\n- Build the shellcodes\n  - `cd emoji-shellcoding/esp32`\n  - `make -j`\n\nRunning instructions are very similar to QEMU Linux shellcodes above. Refer to them.\n\n### HiFive Unleashed Linux shellcodes\n\nPrerequisites:\n - A HiFive-Unleashed board: [https://www.sifive.com/boards/hifive-unleashed](https://www.sifive.com/boards/hifive-unleashed)\n   (note: this board is not sold anymore)\n\n- Build the shellcodes\n  - `cd emoji-shellcoding/hifiveu`\n  - `make -j`\n\nRunning instructions are very similar to QEMU Linux shellcodes above. Refer to them.\n\n## License\n\nThis tool is released under Apache license. See `LICENSE` file.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frischardv%2Femoji-shellcoding","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frischardv%2Femoji-shellcoding","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frischardv%2Femoji-shellcoding/lists"}