Evasive shellcode loader that combines SSNs sorting and syscalls for AV/EDR evasion in Go and Go ASM
You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Go to file
f1zm0 afdc74a610
Merge pull request #3 from f1zm0/release-please--branches--main--components--actions-testing
1 month ago
.github ci: add ignored paths to release workflow 1 month ago
cmd chore: make sure cli flags are lowercase 1 month ago
internal/loader feat!: include direct syscall logic only with build constraint 1 month ago
pkg feat!: include direct syscall logic only with build constraint 1 month ago
scripts chore: change dir structure 5 months ago
.gitignore init 8 months ago
.golangci.yml ci: add github action for autorelease and golangci file 2 months ago
CHANGELOG.md chore: change commit category in changelog 1 month ago
LICENSE chore: added license 5 months ago
Makefile chore: clean targets and vars in Makefile 5 months ago
README.md docs: fixed typo in main readme 1 month ago
go.mod chore: replace acheron dependency with public version 1 month ago
go.sum chore: replace acheron dependency with public version 1 month ago


Made with Go Go Reference project license project status Twitter Follow


Hades is a proof of concept loader that combines several evasion technques with the aim of bypassing the defensive mechanisms commonly used by modern AV/EDRs.


The easiest way, is probably building the project on Linux using make.

git clone https://github.com/f1zm0/hades && cd hades

Then you can bring the executable to a x64 Windows host and run it with .\hades.exe [options].

PS > .\hades.exe -h

  '||'  '||'     |     '||''|.   '||''''|   .|'''.|
   ||    ||     |||     ||   ||   ||  .     ||..  '
   ||''''||    |  ||    ||    ||  ||''|      ''|||.
   ||    ||   .''''|.   ||    ||  ||       .     '||
  .||.  .||. .|.  .||. .||...|'  .||.....| |'....|'

          version: dev [11/01/23] :: @f1zm0

  hades -f <filepath> [-t selfthread|remotethread|queueuserapc]

  -f, --file <str>        shellcode file path (.bin)
  -t, --technique <str>   injection technique [selfthread, remotethread, queueuserapc]


Inject shellcode that spawms calc.exe with queueuserapc technique:

.\hades.exe -f calc.bin -t queueuserapc


User-mode hooking bypass with syscall RVA sorting (NtQueueApcThread hooked with frida-trace and custom handler)

NtQueueApcThread Frida interceptor

Instrumentation callback bypass with indirect syscalls (injected DLL is from syscall-detect by jackullrich)

syscall-detect bypass

Additional Notes

Direct syscall version

In the latest release, direct syscall capabilities have been replaced by indirect syscalls provided by acheron. If for some reason you want to use the previous version of the loader that used direct syscalls, you need to explicitly pass the direct_syscalls tag to the compiler, which will figure out what files needs to be included and excluded from the build.

GOOS=windows GOARCH=amd64 go build -ldflags "-s -w" -tags='direct_syscalls' -o dist/hades_directsys.exe cmd/hades/main.go


This project has been created for educational purposes only, to experiment with malware dev in Go, and learn more about the unsafe package and the weird Go Assembly syntax. Don't use it to on systems you don't own. The developer of this project is not responsible for any damage caused by the improper use of this tool.


Shoutout to the following people that shared their knowledge and code that inspired this tool:


This project is licensed under the GPLv3 License - see the LICENSE file for details