# Table of Contents - [AxScript | Adaptix Framework](#axscript-adaptix-framework) - [Welcome | Adaptix Framework](#welcome-adaptix-framework) - [ChangeLog and Updates | Adaptix Framework](#changelog-and-updates-adaptix-framework) - [Listeners and Agents | Adaptix Framework](#listeners-and-agents-adaptix-framework) - [Getting Starting | Adaptix Framework](#getting-starting-adaptix-framework) - [Agent Browsers | Adaptix Framework](#agent-browsers-adaptix-framework) - [Blogs | Adaptix Framework](#blogs-adaptix-framework) - [Data management | Adaptix Framework](#data-management-adaptix-framework) - [BOF and Extensions | Adaptix Framework](#bof-and-extensions-adaptix-framework) - [Linking Agents | Adaptix Framework](#linking-agents-adaptix-framework) - [User Interface | Adaptix Framework](#user-interface-adaptix-framework) - [Listeners | Adaptix Framework](#listeners-adaptix-framework) - [Tunnels and Forwarding | Adaptix Framework](#tunnels-and-forwarding-adaptix-framework) - [Agents | Adaptix Framework](#agents-adaptix-framework) - [How to execute AxScript | Adaptix Framework](#how-to-execute-axscript-adaptix-framework) - [Introduction | Adaptix Framework](#introduction-adaptix-framework) - [Teamserver Interface | Adaptix Framework](#teamserver-interface-adaptix-framework) - [Extenders | Adaptix Framework](#extenders-adaptix-framework) - [AxSelector type | Adaptix Framework](#axselector-type-adaptix-framework) - [AxEvent type | Adaptix Framework](#axevent-type-adaptix-framework) - [AxMenu type | Adaptix Framework](#axmenu-type-adaptix-framework) - [AxCommand type | Adaptix Framework](#axcommand-type-adaptix-framework) - [v0.1 -> v0.2 | Adaptix Framework](#v0-1-v0-2-adaptix-framework) - [v0.2 -> v0.3 | Adaptix Framework](#v0-2-v0-3-adaptix-framework) - [v0.4 -> v0.5 | Adaptix Framework](#v0-4-v0-5-adaptix-framework) - [v0.6 -> v0.7 | Adaptix Framework](#v0-6-v0-7-adaptix-framework) - [Gopher BOFs | Adaptix Framework](#gopher-bofs-adaptix-framework) - [Version 0.1 -> 1.0 | Adaptix Framework](#version-0-1-1-0-adaptix-framework) - [Process Browser | Adaptix Framework](#process-browser-adaptix-framework) - [Beacon DNS | Adaptix Framework](#beacon-dns-adaptix-framework) - [Screenshots Manager | Adaptix Framework](#screenshots-manager-adaptix-framework) - [Beacon TCP | Adaptix Framework](#beacon-tcp-adaptix-framework) - [v1.1 -> v1.2 | Adaptix Framework](#v1-1-v1-2-adaptix-framework) - [Downloads Manager | Adaptix Framework](#downloads-manager-adaptix-framework) - [Starting | Adaptix Framework](#starting-adaptix-framework) - [File Browser | Adaptix Framework](#file-browser-adaptix-framework) - [Targets Manager | Adaptix Framework](#targets-manager-adaptix-framework) - [Gopher | Adaptix Framework](#gopher-adaptix-framework) - [Gopher TCP | Adaptix Framework](#gopher-tcp-adaptix-framework) - [Credentials Manager | Adaptix Framework](#credentials-manager-adaptix-framework) - [Installation Server | Adaptix Framework](#installation-server-adaptix-framework) - [Beacon SMB | Adaptix Framework](#beacon-smb-adaptix-framework) - [Remote Terminal / Shell | Adaptix Framework](#remote-terminal-shell-adaptix-framework) - [Tasks manager | Adaptix Framework](#tasks-manager-adaptix-framework) - [Beacon HTTP | Adaptix Framework](#beacon-http-adaptix-framework) - [Installation Client | Adaptix Framework](#installation-client-adaptix-framework) - [Register new extenders | Adaptix Framework](#register-new-extenders-adaptix-framework) - [v0.7 -> v0.8 | Adaptix Framework](#v0-7-v0-8-adaptix-framework) - [v0.5 -> v0.6 | Adaptix Framework](#v0-5-v0-6-adaptix-framework) - [Beacon BOFs | Adaptix Framework](#beacon-bofs-adaptix-framework) - [v0.3 -> v0.4 | Adaptix Framework](#v0-3-v0-4-adaptix-framework) - [v0.9 -> v0.10 | Adaptix Framework](#v0-9-v0-10-adaptix-framework) - [v1.0 -> v1.1 | Adaptix Framework](#v1-0-v1-1-adaptix-framework) - [Listener extender | Adaptix Framework](#listener-extender-adaptix-framework) - [Beacon | Adaptix Framework](#beacon-adaptix-framework) - [v0.8 -> v0.9 | Adaptix Framework](#v0-8-v0-9-adaptix-framework) - [v0.10 -> v0.11 | Adaptix Framework](#v0-10-v0-11-adaptix-framework) - [Internal listener | Adaptix Framework](#internal-listener-adaptix-framework) - [Terminals | Adaptix Framework](#terminals-adaptix-framework) - [Agent plugin | Adaptix Framework](#agent-plugin-adaptix-framework) - [Service Extender | Adaptix Framework](#service-extender-adaptix-framework) - [Tunnels | Adaptix Framework](#tunnels-adaptix-framework) - [Commands and Hooks | Adaptix Framework](#commands-and-hooks-adaptix-framework) - [Version 1.0 | Adaptix Framework](#version-1-0-adaptix-framework) - [AxFunction | Adaptix Framework](#axfunction-adaptix-framework) - [Events and Hooks | Adaptix Framework](#events-and-hooks-adaptix-framework) - [AxForm type | Adaptix Framework](#axform-type-adaptix-framework) - [Web API | Adaptix Framework](#web-api-adaptix-framework) - [TS API | Adaptix Framework](#ts-api-adaptix-framework) --- # AxScript | Adaptix Framework AxScript is the scripting language built into AdaptixC2, version 0.7, and later. AxScript allows you to modify and extend the AdaptixClient to your needs. AxScript was designed with inspiration from Agressor Script, the scripting language behind Cobalt Strike. [How to execute AxScriptchevron-right](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/how-to-execute-axscript) [Introductionchevron-right](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/introduction) [AxFunctionchevron-right](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction) [AxCommand typechevron-right](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axcommand-type) [AxForm typechevron-right](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type) [AxSelector typechevron-right](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axselector-type) [AxEvent typechevron-right](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axevent-type) [AxMenu typechevron-right](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axmenu-type) [PreviousGopher BOFschevron-left](https://adaptix-framework.gitbook.io/adaptix-framework/extenders/agents/gopher/gopher-bofs) [NextHow to execute AxScriptchevron-right](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/how-to-execute-axscript) Last updated 3 months ago --- # Welcome | Adaptix Framework AdaptixC2 is ​​an extensible post-exploitation and adversarial emulation framework made for penetration testers. The Adaptix Server is written in Golang and to allow operator flexibility. The GUI Client is written in C++ QT, allowing it to be used on Linux, Windows, and MacOS operating systems. ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FYEOzDBDWeUK6Nme5lgoR%252FScreenshot_20260114_212634.png%3Falt%3Dmedia%26token%3Da3864c4f-107c-4454-b07a-9a60ca026de9&width=768&dpr=3&quality=100&sign=dd78580d&sv=2) [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework#features) Features ---------------------------------------------------------------------------------------- * Server/Client Architecture for Multiplayer Support * Cross-platform GUI client * Fully encrypted communications * Listener and Agents as Plugin (Extender) * Task and Jobs storage * Files and Process browsers * Credentials, Targets and Screenshots Managers * Socks4 / Socks5 / Socks5 Auth support * Local and Reverse port forwarding support * BOF support * Linking Agents and Sessions Graph * Agents Health Checker * Agents KillDate and WorkingTime control * Windows/Linux/MacOs agents support * Remote Terminal / Shell * AxScript Engine [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework#agents) Current Extenders ----------------------------------------------------------------------------------------------- * HTTP/S Beacon Listener * SMB Beacon Listener * TCP Beacon Listener * DNS/DoH Beacon Listener * Beacon Agent * TCP/mTLS Gopher Listener * Gopher Agent [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework#agents-1) Extension-Kit --------------------------------------------------------------------------------------------- Official [Extension-Kitarrow-up-right](https://github.com/Adaptix-Framework/Extension-Kit) on GitHub ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FyRPFnlkvGJr2UEE1uzA2%252FScreenshot_20260129_233929.png%3Falt%3Dmedia%26token%3D61c90128-20f4-4756-80f4-24e7122c7c10&width=768&dpr=3&quality=100&sign=f15a166a&sv=2) ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FnAVr0nfGpuQkiSYSPQvU%252FScreenshot_20260129_233944.png%3Falt%3Dmedia%26token%3Dd98dfda1-1607-45ba-9a92-deb420293335&width=768&dpr=3&quality=100&sign=7c1d6ea&sv=2) ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252Fxxn9BnUfG0byuRamOy4y%252FScreenshot_20260129_233957.png%3Falt%3Dmedia%26token%3D053c7d47-39af-433b-a2d2-87a1b8dec7bb&width=768&dpr=3&quality=100&sign=f1581010&sv=2) [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework#contact) Contact -------------------------------------------------------------------------------------- * X: [https://x.com/hacker\_ralfarrow-up-right](https://x.com/hacker_ralf) * GitHub: [https://github.com/Adaptix-Frameworkarrow-up-right](https://github.com/Adaptix-Framework) * Discord: [https://discord.gg/pGYRTwDsTbarrow-up-right](https://discord.gg/pGYRTwDsTb) * Telegram: [https://t.me/AdaptixFrameworkarrow-up-right](https://t.me/AdaptixFramework) Last updated 2 months ago --- # ChangeLog and Updates | Adaptix Framework [Version 0.1 -> 1.0chevron-right](https://adaptix-framework.gitbook.io/adaptix-framework/changelog-and-updates/version-0.1-greater-than-1.0) [v1.0 -> v1.1chevron-right](https://adaptix-framework.gitbook.io/adaptix-framework/changelog-and-updates/v1.0-greater-than-v1.1) [v1.1 -> v1.2chevron-right](https://adaptix-framework.gitbook.io/adaptix-framework/changelog-and-updates/v1.1-greater-than-v1.2) [PreviousBlogschevron-left](https://adaptix-framework.gitbook.io/adaptix-framework/blogs) [NextVersion 0.1 -> 1.0chevron-right](https://adaptix-framework.gitbook.io/adaptix-framework/changelog-and-updates/version-0.1-greater-than-1.0) Last updated 1 month ago --- # Listeners and Agents | Adaptix Framework Listeners are managed through the context menu of the listener tables. ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FfxjTiGQIOHmnwjHrrkgq%252FScreenshot_20250828_113711.png%3Falt%3Dmedia%26token%3D10e4b9b6-a795-49bf-9739-fcc82fe9dcd1&width=768&dpr=3&quality=100&sign=db867217&sv=2) The parameters in the dialog boxes for the listener and agents are created dynamically, depending on the corresponding Extender. ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252F7ovnWdetsYVCKQr6gDVV%252FScreenshot_20251229_210045.png%3Falt%3Dmedia%26token%3D5105cc54-b487-4a47-a2e2-3c00a46d8050&width=768&dpr=3&quality=100&sign=94a8b26c&sv=2) ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252F6me328Tdl8nAHzwA1MO4%252FScreenshot_20251229_210235.png%3Falt%3Dmedia%26token%3Dedec5ecd-f7ef-495f-9f70-60995d45088f&width=768&dpr=3&quality=100&sign=4a47493f&sv=2) ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FBuoesOh1dDefY05Vs0KJ%252FScreenshot_20250727_225007.png%3Falt%3Dmedia%26token%3D6172074b-5ca3-4bd4-9724-845ac407f071&width=300&dpr=3&quality=100&sign=810dc299&sv=2) Load the configuration from a JSON file ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252F0cFH2RlUJP67HQf9TNol%252FScreenshot_20250727_225015.png%3Falt%3Dmedia%26token%3D90e0c360-a9f8-4560-96d7-8fa2f28df302&width=300&dpr=3&quality=100&sign=e442a8af&sv=2) Save the current configuration specified in the form to a JSON file [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/adaptix-c2/listeners-and-agents#default-listeners-and-agents) Default Listeners and agents ---------------------------------------------------------------------------------------------------------------------------------------------------------------- [Listenerschevron-right](https://adaptix-framework.gitbook.io/adaptix-framework/extenders/listeners) [Agentschevron-right](https://adaptix-framework.gitbook.io/adaptix-framework/extenders/agents) [PreviousUser Interfacechevron-left](https://adaptix-framework.gitbook.io/adaptix-framework/adaptix-c2/user-interface) [NextAgent Browserschevron-right](https://adaptix-framework.gitbook.io/adaptix-framework/adaptix-c2/agent-browsers) Last updated 3 months ago --- # Getting Starting | Adaptix Framework The Adaptix server is installed only on UNIX systems. The following operating systems have been tested for Adaptix Client compatibility: * Ubuntu 25.04 * Debian 11 * Arch 2025.02.01 * Kali Linux 2024.4 * Windows 10 / 11 * MacOS Sonoma [Installation Serverchevron-right](https://adaptix-framework.gitbook.io/adaptix-framework/adaptix-c2/getting-starting/installation-server) [Startingchevron-right](https://adaptix-framework.gitbook.io/adaptix-framework/adaptix-c2/getting-starting/starting) Last updated 1 month ago --- # Agent Browsers | Adaptix Framework Agent browsers can be selected via the agent context menu in the sessions table. ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FMgQXCwASShKluBwKWi5Z%252FScreenshot_20250624_001128.png%3Falt%3Dmedia%26token%3D36802f56-044f-46d1-8c48-10ca6d9a5a5b&width=768&dpr=3&quality=100&sign=9cd68602&sv=2) [File Browserchevron-right](https://adaptix-framework.gitbook.io/adaptix-framework/adaptix-c2/agent-browsers/file-browser) [Process Browserchevron-right](https://adaptix-framework.gitbook.io/adaptix-framework/adaptix-c2/agent-browsers/process-browser) [Remote Terminal / Shellchevron-right](https://adaptix-framework.gitbook.io/adaptix-framework/adaptix-c2/agent-browsers/remote-terminal-shell) Last updated 10 months ago --- # Blogs | Adaptix Framework 1. [Не Cobalt Strike и не Brute Ratel: почему злоумышленники выбрали AdaptixC2 и как его обнаружитьarrow-up-right](https://habr.com/ru/companies/angarasecurity/articles/962088/) 2. [Lessons from Perlyite(Building a custom Adaptix agent)arrow-up-right](https://p0142.github.io/posts/lamperlv1/) 3. [Lamperl pt 2(Adding new functions)arrow-up-right](https://p0142.github.io/posts/lamperlpt2/) 4. [Lamperl pt 3 (Uploads, Downloads, Job Control)arrow-up-right](https://p0142.github.io/posts/lamperlpt3/) ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/blogs#getting-started-with-adaptixc2-in-2026) Getting Started with AdaptixC2 in 2026 Last updated 1 month ago --- # Data management | Adaptix Framework [Tasks managerchevron-right](https://adaptix-framework.gitbook.io/adaptix-framework/adaptix-c2/data-management/tasks-manager) [Downloads Managerchevron-right](https://adaptix-framework.gitbook.io/adaptix-framework/adaptix-c2/data-management/downloads-manager) [Targets Managerchevron-right](https://adaptix-framework.gitbook.io/adaptix-framework/adaptix-c2/data-management/targets-manager) [Credentials Managerchevron-right](https://adaptix-framework.gitbook.io/adaptix-framework/adaptix-c2/data-management/credentials-manager) [Screenshots Managerchevron-right](https://adaptix-framework.gitbook.io/adaptix-framework/adaptix-c2/data-management/screenshots-manager) Last updated 7 months ago --- # BOF and Extensions | Adaptix Framework circle-info Official extensions: [https://github.com/Adaptix-Framework/Extension-Kitarrow-up-right](https://github.com/Adaptix-Framework/Extension-Kit) [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/adaptix-c2/bof-and-extensions#beacon-object-files) Beacon Object Files -------------------------------------------------------------------------------------------------------------------------------------------- BOF is just a block of position-independent code that receives pointers to some Beacon internal APIs. BOFs are single-file C programs that call Win32 APIs and limited [Beacon APIsarrow-up-right](https://hstechdocs.helpsystems.com/manuals/cobaltstrike/current/userguide/content/topics/beacon-object-files_bof-c-api.htm) . AdaptixC2 expects that your BOFs are single-threaded programs that run for a short period of time. BOFs will block other agent tasks and functionality from executing. BOFs execute inside of your agent. If a BOF crashes, you will lose access. Write your BOFs carefully. ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/adaptix-c2/bof-and-extensions#description-of-bof-for-agents) Description of BOF for agents [Beacon BOFschevron-right](https://adaptix-framework.gitbook.io/adaptix-framework/extenders/agents/beacon/beacon-bofs) [Gopher BOFschevron-right](https://adaptix-framework.gitbook.io/adaptix-framework/extenders/agents/gopher/gopher-bofs) [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/adaptix-c2/bof-and-extensions#extensions) Extensions -------------------------------------------------------------------------------------------------------------------------- [How to execute AxScriptchevron-right](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/how-to-execute-axscript) ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FPVXLw0sNpy9JDkze8fti%252FScreenshot_20250724_194751.png%3Falt%3Dmedia%26token%3De164eeab-6183-4695-8145-d74a92fe22dc&width=768&dpr=3&quality=100&sign=fde902e0&sv=2) The extension file is an AxScript that must start with a global definition of the metadata variable that has the following properties: . * `name` - extension name, * `description` - extension description * `store` - determines whether the extension should be stored in the database (default: `true`). Typically, extensions register new commands to call already registered commands. An example of defining a `shell` command that calls the command `ps run -o ...`. [See more details here](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axcommand-type) . [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/adaptix-c2/bof-and-extensions#axscript-and-bofs) AxScript and BOFs ---------------------------------------------------------------------------------------------------------------------------------------- You'll likely want to use AxScript to run your finalized BOF implementations within AdaptixC2. A BOF is a good place to implement a lateral movement technique, an escalation of privilege tool, or a new reconnaissance capability. Each agent has its own command to execute BOF. For example, for a beacon agent it is `execute bof`. Here is a script to run a `screenshot_bof` BOF: First, the script gets the `note` and `pid` values. The next step is to pack our arguments. The [bof\_pack](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#bof_pack) function packs arguments in a way that is compatible with Beacon's internal data parser API. This script uses [execute\_alias](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axcommand-type/commands-and-hooks#execute_alias) to run BOF with its arguments. [PreviousScreenshots Managerchevron-left](https://adaptix-framework.gitbook.io/adaptix-framework/adaptix-c2/data-management/screenshots-manager) [NextTunnels and Forwardingchevron-right](https://adaptix-framework.gitbook.io/adaptix-framework/adaptix-c2/tunnels-and-forwarding) Last updated 1 month ago * [Beacon Object Files](https://adaptix-framework.gitbook.io/adaptix-framework/adaptix-c2/bof-and-extensions#beacon-object-files) * [Description of BOF for agents](https://adaptix-framework.gitbook.io/adaptix-framework/adaptix-c2/bof-and-extensions#description-of-bof-for-agents) * [Extensions](https://adaptix-framework.gitbook.io/adaptix-framework/adaptix-c2/bof-and-extensions#extensions) * [AxScript and BOFs](https://adaptix-framework.gitbook.io/adaptix-framework/adaptix-c2/bof-and-extensions#axscript-and-bofs) Copy var metadata = { name: "Elevation-BOF", description: "BOFs for context elevation", store: true }; // AxScript code // ... Copy let cmd_shell = ax.create_command("shell", "Execute command via cmd.exe", "shell whoami /all"); cmd_shell.addArgString("cmd_params", true); cmd_shell.setPreHook(function (id, cmdline, parsed_json, ...parsed_lines) { let new_cmd = "ps run -o C:\\Windows\\System32\\cmd.exe /c " + parsed_json["cmd_params"]; ax.execute_alias(id, cmdline, new_cmd); }); Copy var cmd_screenshot = ax.create_command("screenshot_bof", "Alternative screenshot capability that does not do fork n run by @codex_tf2", "screenshot -n screen1 -p 812"); cmd_screenshot.addArgFlagString("-n", "note", "Screenshot caption", "ScreenshotBOF"); cmd_screenshot.addArgFlagInt("-p", "pid", "PID of the application whose window screenshot will be taken. If 0, then a full-screen screenshot", 0); cmd_screenshot.setPreHook(function (id, cmdline, parsed_json, ...parsed_lines) { let note = parsed_json["note"]; let pid = parsed_json["pid"]; let bof_params = ax.bof_pack("cstr,int", [note, pid]); let bof_path = ax.script_dir() + "_bin/Screenshot." + ax.arch(id) + ".o"; ax.execute_alias(id, cmdline, `execute bof ${bof_path} ${bof_params}`, "Task: Screenshot BOF"); }); --- # Linking Agents | Adaptix Framework AdaptixC2 supports agent chains (linking agents). These linked agents receive their commands and send their output through the parent agent in their chain. This type of chaining is useful to control which sessions egress a network and to emulate a disciplined actor who restricts their communication paths inside of a network to something plausible. For a linked agent, the External field will contain the parent agent ID and link name instead of the external IP address. Registered but not currently linked agents are marked as Unlink. ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FmraoZhutN4PFCLXEOa0p%252FScreenshot_20251229_211625.png%3Falt%3Dmedia%26token%3Dd8460751-69fe-4b24-a40d-21fe09b5d641&width=768&dpr=3&quality=100&sign=cf8ce333&sv=2) ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252F4UcuHLAYzlHdPXwjYMln%252FScreenshot_20251229_211531.png%3Falt%3Dmedia%26token%3D5a057e63-b9eb-4d08-95c2-73ca7bc7aabc&width=768&dpr=3&quality=100&sign=cdd7c9d5&sv=2) ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/adaptix-c2/linking-agents#agents-that-support-the-linking-function) Agents that support the linking function: Agent Internal listener Protocol [Beacon](https://adaptix-framework.gitbook.io/adaptix-framework/extenders/agents/beacon) [Beacon SMB](https://adaptix-framework.gitbook.io/adaptix-framework/extenders/listeners/beacon-smb) SMB [Beacon](https://adaptix-framework.gitbook.io/adaptix-framework/extenders/agents/beacon) [Beacon TCP](https://adaptix-framework.gitbook.io/adaptix-framework/extenders/listeners/beacon-tcp) TCP [PreviousTunnels and Forwardingchevron-left](https://adaptix-framework.gitbook.io/adaptix-framework/adaptix-c2/tunnels-and-forwarding) [NextListenerschevron-right](https://adaptix-framework.gitbook.io/adaptix-framework/extenders/listeners) Last updated 3 months ago --- # User Interface | Adaptix Framework The AdaptixClient user interface is divided into two main parts. The Session Table, Session Graph, and Tasks Manager widgets are initially docked in the upper part. The lower part contains tabs for each function you interact with. ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FOKYspOwQrc2jrNGCby4E%252FScreenshot_20251229_204430.png%3Falt%3Dmedia%26token%3Da7a3f02d-8018-4f6d-a965-d239b52f2fd0&width=768&dpr=3&quality=100&sign=a25e0015&sv=2) Each widget can be moved around in its Dock, grouped into Tabs, or undocked as a separate window. ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252F1B6aWVVxDmiuEB3XrMrQ%252FScreenshot_20250927_213254.png%3Falt%3Dmedia%26token%3Dab0f5423-8d11-4bb3-97bd-c4eff8e478c1&width=768&dpr=3&quality=100&sign=7ebff42c&sv=2) [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/adaptix-c2/user-interface#main-menu) Main menu -------------------------------------------------------------------------------------------------------------------- ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/adaptix-c2/user-interface#id-1.-projects) 1\. Projects Project Management Menu. Close Project will disconnect the current project from the C2 server and close the project area. New Project will open a new login window. ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FMFJKKU2Jis2nhzs1w7JE%252FScreenshot_20260128_223927.png%3Falt%3Dmedia%26token%3Dc48b9f74-9135-43df-bdc3-a5b30596f5bf&width=768&dpr=3&quality=100&sign=47c41da5&sv=2) After authorization, a new project tab will appear in the bottom panel of the client. When you click on the folder icon, the project directory will open in the system explorer. ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FiJB8Ue10clycWX2i41FQ%252FScreenshot_20260128_224000.png%3Falt%3Dmedia%26token%3D59668aa3-671e-4499-b52f-c5d007bfec0e&width=768&dpr=3&quality=100&sign=bce5ed09&sv=2) The **Subscriptions** menu allows you to synchronize data that was not received during authorization. ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FJ3eTFeoLVfhYhkaKXJHH%252FScreenshot_20260129_105826.png%3Falt%3Dmedia%26token%3D12f30229-2c57-4ea1-b66d-f4de01ac6338&width=768&dpr=3&quality=100&sign=c1afd861&sv=2) ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/adaptix-c2/user-interface#id-2.-extender) 2\. Extender Opens the extensions window for the client. More information about extensions [here](https://adaptix-framework.gitbook.io/adaptix-framework/adaptix-c2/bof-and-extensions) . ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/adaptix-c2/user-interface#id-3.-settings) 3\. Settings Opens the client settings window. Main Settings Sessions Table Tasks table Blinking tabs Basic client settings: theme, fonts, session graph version and buffer size for [RemoteTerminal](https://adaptix-framework.gitbook.io/adaptix-framework/adaptix-c2/agent-browsers/remote-terminal-shell) . ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252F1dAbxjbN17tzJsv0hR8N%252F%25D0%25A1%25D0%25BD%25D0%25B8%25D0%25BC%25D0%25BE%25D0%25BA%2520%25D1%258D%25D0%25BA%25D1%2580%25D0%25B0%25D0%25BD%25D0%25B0_20260228_212853.png%3Falt%3Dmedia%26token%3Daa8dcfad-ea89-46f2-bc87-f6e47ff8a8aa&width=768&dpr=3&quality=100&sign=26833921&sv=2) Agent Console block allows you to set the default buffer size, as well as the console time display modes, line feeds, and auto-scroll to the last output. Allows you to select which fields will be displayed in the [Sessions Table.](https://adaptix-framework.gitbook.io/adaptix-framework/adaptix-c2/user-interface#session-table) This section enables the HealthCheck feature and sets the agent monitoring time. ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FcjBDU0E24ZW5hSonMOGb%252FScreenshot_20251229_205008.png%3Falt%3Dmedia%26token%3Db6e75f6e-4f2c-4e71-b98a-872018a5e249&width=768&dpr=3&quality=100&sign=eff079dc&sv=2) Allows you to select which fields will be displayed in the [TasksTable](https://adaptix-framework.gitbook.io/adaptix-framework/adaptix-c2/data-management/tasks-manager) . ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FyepsoDBkH4a0kFlbZrxg%252FScreenshot_20251229_205012.png%3Falt%3Dmedia%26token%3D57c774f2-0329-4728-ad92-5cc9f06c139b&width=768&dpr=3&quality=100&sign=71670069&sv=2) This section allows you to select the docks that will highlight content changes. ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FI7h41A2M4d9M8LRy0HDd%252FScreenshot_20251229_205016.png%3Falt%3Dmedia%26token%3D866cc293-3531-41f1-9ee3-e53b0b01d92f&width=768&dpr=3&quality=100&sign=ed532182&sv=2) [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/adaptix-c2/user-interface#toolbar) Toolbar ---------------------------------------------------------------------------------------------------------------- The toolbar at the top of AdaptixClient offers quick access to common Adaptix functions. ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FGWlE0HNEOLkcgM7IVtOe%252FScreenshot_20260128_224100.png%3Falt%3Dmedia%26token%3D5a39da20-0658-4ccd-a127-84898ec43963&width=300&dpr=3&quality=100&sign=3e0e6640&sv=2) View Logs tab ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252F63CU90b5BXigGvqltM9D%252FScreenshot_20260128_224107.png%3Falt%3Dmedia%26token%3D0ae92226-5a5a-4471-9ef8-60e36cb2afb9&width=300&dpr=3&quality=100&sign=2c584106&sv=2) Manage listeners. Generate agents ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FgIpn1CSoUnQjuz7MzsNk%252FScreenshot_20260128_224115.png%3Falt%3Dmedia%26token%3D7f423edb-612b-483e-82d0-ee3854866a93&width=300&dpr=3&quality=100&sign=3cc561fa&sv=2) Extender Docks list ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FdupDa2OLPLZP7AW6s427%252FScreenshot_20260128_224122.png%3Falt%3Dmedia%26token%3D1e5c88b2-51a0-41c5-ae52-94c0f57a0a11&width=300&dpr=3&quality=100&sign=3f210d7d&sv=2) View Sessions table ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252Ff0oAoXSsOwpZqYEXLEb1%252FScreenshot_20260128_224135.png%3Falt%3Dmedia%26token%3Da3a011e4-a18a-4ce0-9841-8a2e8999b586&width=300&dpr=3&quality=100&sign=e0b4a2f1&sv=2) View Sessions graph ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FmLKVtFD5dVuYm4GqetVO%252FScreenshot_20260128_224151.png%3Falt%3Dmedia%26token%3D097b94ec-6345-419c-b98e-91bc12885d66&width=300&dpr=3&quality=100&sign=c9c87ed5&sv=2) Manage Tasks and Jobs ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252Fqs494kM6symP7ok9VGlv%252FScreenshot_20260128_224201.png%3Falt%3Dmedia%26token%3D1ba0d7de-e4f3-4e24-95ba-a7ca5c3dfc58&width=300&dpr=3&quality=100&sign=cf4b172a&sv=2) Team chat ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FbeZHKZHIgHzPTUlYdYak%252FScreenshot_20260128_224210.png%3Falt%3Dmedia%26token%3Db0e9696d-1084-4f6f-b837-169ede2f3793&width=300&dpr=3&quality=100&sign=8f2caa4d&sv=2) Manage Tunnels ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FuWKgtRN4G2ZVO7freZmC%252FScreenshot_20260128_224223.png%3Falt%3Dmedia%26token%3Dc5be6a1d-9717-417c-973e-770ac01a01ec&width=300&dpr=3&quality=100&sign=e5185b0b&sv=2) Manage Downloads ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252F4ugJ93LpCJRd0krlheRf%252FScreenshot_20260128_224227.png%3Falt%3Dmedia%26token%3D071f2263-cc97-4196-962a-085cafc10820&width=300&dpr=3&quality=100&sign=78bc5f67&sv=2) Manage Targets ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FMLHPSQHNLPdzLO7uXDgN%252FScreenshot_20260128_224234.png%3Falt%3Dmedia%26token%3D71da13cf-e89a-4e85-b286-a3ba1ace95e7&width=300&dpr=3&quality=100&sign=4720dc3f&sv=2) Manage Credentials ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FtkiWWt487NMmcnfXYykQ%252FScreenshot_20260128_224243.png%3Falt%3Dmedia%26token%3D9a8d0054-d45e-465e-80c2-9eeb667cdf1e&width=300&dpr=3&quality=100&sign=49f378e1&sv=2) Manage Screenshot ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FVRaDz613xmV1IqMouM6k%252F16.png%3Falt%3Dmedia%26token%3D6ea1c308-40c7-428e-8767-b582cc60e2d7&width=300&dpr=3&quality=100&sign=3792b088&sv=2) -> ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FfoT3dEOsKZVd88REUgSI%252F17.png%3Falt%3Dmedia%26token%3D93a74d94-f1cf-4dc0-9ad8-2ce26637925b&width=300&dpr=3&quality=100&sign=3016f2d7&sv=2) Update JWT / Reconnect to Server [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/adaptix-c2/user-interface#session-table) Session Table ---------------------------------------------------------------------------------------------------------------------------- The session table shows which agents have registered with the AdaptixServer. The User field displays the access token used. The session table has agent markings: _Terminated_, _Inactive_, _Unlink_, _No response_. The operator can mark an agent as _Inactive_ or _Active_, and also select the color of the entry or the entire line. The time for marking an agent as _No Response_ is set in the session table settings. ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252Fs3BewxSFOD9B4ghXUUkq%252FScreenshot_20250427_121831.png%3Falt%3Dmedia%26token%3Dbe718d6a-3e04-4fe3-aeb3-b6eb04e2cb9a&width=768&dpr=3&quality=100&sign=3a196218&sv=2) Hovering over the Sleep field will show the current KillDate and WorkTime settings (if set). During non-working hours, the agent will be marked as "No worktime". ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252Fq6dnkHPxhUf2rNh1NSyi%252FScreenshot_20250427_222916.png%3Falt%3Dmedia%26token%3Ddbab4ac0-e514-4156-a4d6-5d88615330f3&width=768&dpr=3&quality=100&sign=7ace57f6&sv=2) ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FM8r3q0I9enlktuGSnD2F%252FScreenshot_20250427_223011.png%3Falt%3Dmedia%26token%3De17455c7-334a-423c-9dba-29643ce8cf44&width=768&dpr=3&quality=100&sign=1e1e6a52&sv=2) Double-clicking on an agent line will open the agent console. Agents are managed via the context menu of the session table. ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FkMK2ih6Wg71etkxGjnPH%252FScreenshot_20251229_223630.png%3Falt%3Dmedia%26token%3Db261a66f-a641-45a8-9240-4c59dbf89ace&width=768&dpr=3&quality=100&sign=6c0cc1c2&sv=2) ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252F7i7EeAq3n3KI7HbAVyJO%252FScreenshot_20251229_223652.png%3Falt%3Dmedia%26token%3D91e1dbcb-c613-4f19-afad-265398a1560b&width=768&dpr=3&quality=100&sign=a0b4cc94&sv=2) ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FXar1ptvPW9UWNdnPjgkm%252FScreenshot_20251229_223703.png%3Falt%3Dmedia%26token%3Dd8dac536-b57d-4001-b205-4473d6ab1547&width=768&dpr=3&quality=100&sign=1eccf8c7&sv=2) When deleting an agent from the server via the "Remove from server" menu item through the session table menu, you now need to confirm the action. ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FcUNPLxBx40Z1nanVhSKe%252FScreenshot_20250327_163020.png%3Falt%3Dmedia%26token%3Df218c96d-088c-46ba-807f-124fcec26656&width=768&dpr=3&quality=100&sign=c28ea2b7&sv=2) "**Set data**" allows you to manually set session data. ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FfXQJQJ3gvWJ8xH773i0B%252FScreenshot_20251229_223727.png%3Falt%3Dmedia%26token%3Dace6080a-464f-4251-82b3-f5addf696756&width=768&dpr=3&quality=100&sign=27926da9&sv=2) [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/adaptix-c2/user-interface#search-and-filter) Search and filter ------------------------------------------------------------------------------------------------------------------------------------ All tables support searching and filtering data. To display the search and filter bar, use the keyboard shortcut `Ctrl+F`. ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252Fdv3VHgomg9rz3Jwhl4re%252FScreenshot_20251229_224113.png%3Falt%3Dmedia%26token%3D3e505db3-928a-49ae-ac01-d41cc0bf89d5&width=768&dpr=3&quality=100&sign=89c6833b&sv=2) The search field supports groupings and conditions: * `()` - group * `^()` - not * `|` - or * `&` - and. If **auto** check is active, searching and filtering are performed online whenever the filter is changed. If **auto** check is disabled, searching and filtering are performed only by pressing Enter. [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/adaptix-c2/user-interface#sessions-graph) Sessions Graph ------------------------------------------------------------------------------------------------------------------------------ Without a visual representation, it’s difficult to track and understand chains of 4 or 5 linked agents. That’s where the Sessions Graph comes in handy. The session graph shows the agent chains in a natural way. Each agent session has a computer icon that indicates its operating system and privilege level. If the icon is red, the agent is running in a privileged process. A gray icon indicates that the agent is currently checked (possibly inactive). The firewall icon represents the egress point of your agent. Each line contains the name of the listener responsible for processing agent data. A **dashed green line** indicates the use of "external" listeners. A **solid yellow line** connecting one agent session to another represents a link between two agent ("internal" listener). These lines contain the listener name and the link name (e.g. `p0`). ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252F51vghvWxFWRiZG4nKbTQ%252FScreenshot_20251229_211531.png%3Falt%3Dmedia%26token%3Dc436e448-6ee4-44a8-b8b3-021eadd4c5ad&width=768&dpr=3&quality=100&sign=73d013f6&sv=2) Agents are managed via the context menu of the session table. ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252F05hAFg4FLB36jjgFE5T5%252FScreenshot_20251229_224834.png%3Falt%3Dmedia%26token%3D0b3da2bb-0737-4fda-9bab-6439467e9190&width=768&dpr=3&quality=100&sign=72c1df51&sv=2) ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FCF1bFA9sqz3RgKhCw1nG%252FScreenshot_20251229_224844.png%3Falt%3Dmedia%26token%3Dfc609c1b-d178-4420-8a0f-ebd8597f0dbf&width=768&dpr=3&quality=100&sign=630dc515&sv=2) If a network tunnel is running through the agent, this will be shown in the graph. * TunS - teamserver-side * TunC - client-side ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FqMw3IC2f8bnnVrmi0WbZ%252FScreenshot_20251229_225406.png%3Falt%3Dmedia%26token%3Db91ca2e3-ed80-4e09-86e7-0c0c7711f311&width=768&dpr=3&quality=100&sign=12e4ec01&sv=2) [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/adaptix-c2/user-interface#agents-console) Agents console ------------------------------------------------------------------------------------------------------------------------------ The agent console looks like this. Each command includes the operator name, task ID, and agent type. ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252Fb5BEaXQNuR6zGpsQoi6m%252F20.png%3Falt%3Dmedia%26token%3D362d02c6-1858-440e-92b4-fa94abe6e16f&width=768&dpr=3&quality=100&sign=5f41deef&sv=2) The console keeps a history of entered commands, as well as autocompletion of commands. The console supports auto-completion of local paths by pressing the `Tab` key, and `Ctrl+Tab` will open a file selection window. The console has its own menu with many settings. ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FoAIfJtQTbL2ZLy8tFsYM%252FScreenshot_20250624_002120.png%3Falt%3Dmedia%26token%3D58775a7b-a57e-402d-b2b0-110d789bc5be&width=768&dpr=3&quality=100&sign=ed751219&sv=2) You can disable the display of time in the console in the application settings. The console supports escaping quotes and slashes. An expression within the first quotation marks will be interpreted as a string for the console. If quotation marks need to be passed to a command, they must be escaped. An example of running mimikatz is below. ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FRqT0DaVTszlNqQzyifrO%252FScreenshot_20251116_115807.png%3Falt%3Dmedia%26token%3D31c14803-ed01-4878-b364-37df6bb02771&width=768&dpr=3&quality=100&sign=d85b8ed8&sv=2) [PreviousStartingchevron-left](https://adaptix-framework.gitbook.io/adaptix-framework/adaptix-c2/getting-starting/starting) [NextListeners and Agentschevron-right](https://adaptix-framework.gitbook.io/adaptix-framework/adaptix-c2/listeners-and-agents) Last updated 1 month ago * [Main menu](https://adaptix-framework.gitbook.io/adaptix-framework/adaptix-c2/user-interface#main-menu) * [1\. Projects](https://adaptix-framework.gitbook.io/adaptix-framework/adaptix-c2/user-interface#id-1.-projects) * [2\. Extender](https://adaptix-framework.gitbook.io/adaptix-framework/adaptix-c2/user-interface#id-2.-extender) * [3\. Settings](https://adaptix-framework.gitbook.io/adaptix-framework/adaptix-c2/user-interface#id-3.-settings) * [Toolbar](https://adaptix-framework.gitbook.io/adaptix-framework/adaptix-c2/user-interface#toolbar) * [Session Table](https://adaptix-framework.gitbook.io/adaptix-framework/adaptix-c2/user-interface#session-table) * [Search and filter](https://adaptix-framework.gitbook.io/adaptix-framework/adaptix-c2/user-interface#search-and-filter) * [Sessions Graph](https://adaptix-framework.gitbook.io/adaptix-framework/adaptix-c2/user-interface#sessions-graph) * [Agents console](https://adaptix-framework.gitbook.io/adaptix-framework/adaptix-c2/user-interface#agents-console) --- # Listeners | Adaptix Framework Listener Type Agents [Beacon HTTP](https://adaptix-framework.gitbook.io/adaptix-framework/extenders/listeners/beacon-http) external beacon [Beacon DNS](https://adaptix-framework.gitbook.io/adaptix-framework/extenders/listeners/beacon-dns) external beacon [Beacon SMB](https://adaptix-framework.gitbook.io/adaptix-framework/extenders/listeners/beacon-smb) internal beacon [Beacon TCP](https://adaptix-framework.gitbook.io/adaptix-framework/extenders/listeners/beacon-tcp) internal beacon [Gopher TCP](https://adaptix-framework.gitbook.io/adaptix-framework/extenders/listeners/gopher-tcp) external gopher Last updated 2 months ago --- # Tunnels and Forwarding | Adaptix Framework AdaptixC2 provides the ability to use several pivot options. For each of these options, you need to make sure that yours agent supports a specific feature and is in interactive mode (sleep 0). By default, the agent is not put into interactive mode. ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/adaptix-c2/tunnels-and-forwarding#create-tunnels) Create tunnels Create a tunnel using the **Create Tunnel** context menu of the session table or graph if the agent supports one of the tunnel types. ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252F5VdviQJ77N9wsHjJ5Lu9%252FScreenshot_20250727_223330.png%3Falt%3Dmedia%26token%3Dde6e74b0-088d-4390-9f15-3cc70a640caa&width=768&dpr=3&quality=100&sign=e75e72a3&sv=2) AdaptixC2 supports the following types of network tunnels: * SOCKS4 * SOCKS5 (with/out Auth) TCP/UDP (IPv4, DNS, **not IPv6**) * Local TCP Port Forwarding * Reverse TCP Port Forwarding Socks5 Socks4 Local port Forwarding Reverse port Forwarding ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252F00sBqyr0gR0UcSEtm4nG%252FScreenshot_20250528_133227.png%3Falt%3Dmedia%26token%3D1632792c-fa25-4769-8a92-6cb0d11123d0&width=768&dpr=3&quality=100&sign=38eb333a&sv=2) ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FoABv8Y0s6moHLyi5WRtJ%252FScreenshot_20250528_133233.png%3Falt%3Dmedia%26token%3D8aaef832-b913-4032-a3d7-f51377705bdc&width=768&dpr=3&quality=100&sign=e1984f36&sv=2) ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FbrMqNKvY9lE8zaJLwMxK%252FScreenshot_20250528_133238.png%3Falt%3Dmedia%26token%3D669d0d01-86e9-4892-abd1-88264559f9f1&width=768&dpr=3&quality=100&sign=4c2815c0&sv=2) ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FuKv7Mfx6GbvlEGazcqGl%252FScreenshot_20250528_133244.png%3Falt%3Dmedia%26token%3Defd69026-a64b-4ab0-949b-f59903ea9d3b&width=768&dpr=3&quality=100&sign=d3b6eac2&sv=2) AdaptixC2 allows you to build tunnels not only through the C2 teamserver (route: `-> C2 -> agent -> target`), but also through AdaptixClient. ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252Fj7vglFRkjQUSwJ3m0YXW%252FScreenshot_20250528_133325.png%3Falt%3Dmedia%26token%3D07de4f87-03a5-46d5-a21a-dd51a18fb1a5&width=768&dpr=3&quality=100&sign=9e10796d&sv=2) In this case, the port is opened on the client and the traffic is directed along the path: `-> Client -> C2 -> agent -> target`. ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/adaptix-c2/tunnels-and-forwarding#tunnel-manager) Tunnel manager Created tunnels are managed via the tunnel manager. ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FI1tAvuvvA6imHhl4jz8l%252FScreenshot_20250225_001926.png%3Falt%3Dmedia%26token%3De9befa7b-7b83-4448-bb67-51de1efff2bc&width=768&dpr=3&quality=100&sign=d6a3a0d7&sv=2) The context menu of the Tunnels Table allows you to set information about the tunnel and stop the tunnel. ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252F2IrfdNH65KfvHiFIceFI%252FScreenshot_20250225_001938.png%3Falt%3Dmedia%26token%3D7afa1c9e-6c7c-4ab9-baa7-33c1934c436e&width=768&dpr=3&quality=100&sign=590068f9&sv=2) circle-info Management of tunnels running through a client is available only to the user through whose client the tunnel is running ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/adaptix-c2/tunnels-and-forwarding#pivots-support) Pivots support Agent Socks4 Socks5 Socks5 UDP Local fwd Reverse fwd [Beacon](https://adaptix-framework.gitbook.io/adaptix-framework/extenders/agents/beacon) + + + + + [Gopher](https://adaptix-framework.gitbook.io/adaptix-framework/extenders/agents/gopher) + [PreviousBOF and Extensionschevron-left](https://adaptix-framework.gitbook.io/adaptix-framework/adaptix-c2/bof-and-extensions) [NextLinking Agentschevron-right](https://adaptix-framework.gitbook.io/adaptix-framework/adaptix-c2/linking-agents) Last updated 8 months ago * [Create tunnels](https://adaptix-framework.gitbook.io/adaptix-framework/adaptix-c2/tunnels-and-forwarding#create-tunnels) * [Tunnel manager](https://adaptix-framework.gitbook.io/adaptix-framework/adaptix-c2/tunnels-and-forwarding#tunnel-manager) * [Pivots support](https://adaptix-framework.gitbook.io/adaptix-framework/adaptix-c2/tunnels-and-forwarding#pivots-support) --- # Agents | Adaptix Framework Agent Listeners Options Os [Beacon](https://adaptix-framework.gitbook.io/adaptix-framework/extenders/agents/beacon) [Beacon HTTP](https://adaptix-framework.gitbook.io/adaptix-framework/extenders/listeners/beacon-http) [Beacon SMB](https://adaptix-framework.gitbook.io/adaptix-framework/extenders/listeners/beacon-smb) [Beacon TCP](https://adaptix-framework.gitbook.io/adaptix-framework/extenders/listeners/beacon-tcp) [Beacon DNS](https://adaptix-framework.gitbook.io/adaptix-framework/extenders/listeners/beacon-dns) Downloads File Browser Process Browser Socks proxy Port forwarding Agents link Remote Shell BOF Windows [Gopher](https://adaptix-framework.gitbook.io/adaptix-framework/extenders/agents/gopher) [Gopher TCP](https://adaptix-framework.gitbook.io/adaptix-framework/extenders/listeners/gopher-tcp) Downloads File Browser Process Browser Screenshot Socks proxy Remote Terminal BOF (for Windows) Windows Linux MacOs [PreviousGopher TCPchevron-left](https://adaptix-framework.gitbook.io/adaptix-framework/extenders/listeners/gopher-tcp) [NextBeaconchevron-right](https://adaptix-framework.gitbook.io/adaptix-framework/extenders/agents/beacon) Last updated 2 months ago --- # How to execute AxScript | Adaptix Framework [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/how-to-execute-axscript#server-axscipt-option) Server axscipt option --------------------------------------------------------------------------------------------------------------------------------------------------------------- The list of scripts must be specified in the server profile. [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/how-to-execute-axscript#client-axscript-manager) Client AxScript Manager ------------------------------------------------------------------------------------------------------------------------------------------------------------------- To permanent load a script, go to **AxScript -> Script Manager** and select **Load new** from the context menu. ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252Fw8Kbldn0OgYSwYfFCxb3%252FScreenshot_20250724_193520.png%3Falt%3Dmedia%26token%3Dd37644ea-b2a3-4410-9094-9b483c8fb6db&width=768&dpr=3&quality=100&sign=eb8eb112&sv=2) ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FPVXLw0sNpy9JDkze8fti%252FScreenshot_20250724_194751.png%3Falt%3Dmedia%26token%3De164eeab-6183-4695-8145-d74a92fe22dc&width=768&dpr=3&quality=100&sign=fde902e0&sv=2) If your script fails to load, an error and tracelog will appear in the AxScript Console. [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/how-to-execute-axscript#client-axscript-console) Client AxScript Console ------------------------------------------------------------------------------------------------------------------------------------------------------------------- For testing scripts and programming, Adaptix Client provides AxScript Console. ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FZBNHcKIGXJGOrekJU2F8%252FScreenshot_20250724_193625.png%3Falt%3Dmedia%26token%3De7bedba9-4c03-4060-a1ce-3d65afce51bf&width=768&dpr=3&quality=100&sign=eb6e5f07&sv=2) AxScript displays output using `ax.log` functions. ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252F03v27mcp9z6pVekQdCYB%252FScreenshot_20250724_195224.png%3Falt%3Dmedia%26token%3D3df64696-292f-4f5c-b7f5-b2c739c5b09a&width=768&dpr=3&quality=100&sign=7823c75c&sv=2) [PreviousAxScriptchevron-left](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript) [NextIntroductionchevron-right](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/introduction) Last updated 1 month ago * [Server axscipt option](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/how-to-execute-axscript#server-axscipt-option) * [Client AxScript Manager](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/how-to-execute-axscript#client-axscript-manager) * [Client AxScript Console](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/how-to-execute-axscript#client-axscript-console) --- # Introduction | Adaptix Framework AxScript is built on top of the JavaScript engine from Qt's JSEngine framework. AxScript shares the same syntax as JavaScript: * variable definition and basic operations Copy let a = 5 + 23; // let - block environment if (a > 12) { var b = 12; // var - global (func) environment } ax.log(b) // print: 12 * Basic String operations Copy // Create let str1 = "Hello"; let str2 = 'World'; let str3 = `Hello ${str2}`; // Hello World // Operations "Hello" + " " + "World" // "Hello World" "Hello".length // 5 "Hello"[1] // "e" "Hello".includes("ell") // true "Hello".replace("llo", "y") // "Hey" "a,b,c".split(",") // ["a", "b", "c"] "Hello".slice(1, 3) // "el" "Hello".toUpperCase() // "HELLO" // ... And other string JS operations * Basic Array operations * Basic Map/Object operations * Function Declaration * Functions and parameters * You can interrupt the execution of a function or script and pass the error to the underlying client using `throw`. * Regular Expressions This is a small and incomplete example of what AxScript can do. For more information, see the Javascript reference. [PreviousHow to execute AxScriptchevron-left](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/how-to-execute-axscript) [NextAxFunctionchevron-right](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction) Last updated 9 months ago Copy // Create let arr1 = [1, 2, 3]; let arr2 = new Array(1, 2, 3); let arr3 = ["a", 42, true, { name: "John" }]; // Operations arr1.length // 3 arr1[1] // 20 arr1.push(10) // 4 (arr1: [1, 2, 3, 10]) arr1.pop() // 3 (arr1: [1, 2]) arr1.unshift(10) // 4 [10, 1, 2, 3] arr1.shift() // 1 (arr1: [2, 3]) arr1.concat([4, 5]) // [1, 2, 3, 4, 5] arr1.indexOf(2) // 1 arr1.includes(2) // true arr1.filter(x => x > 1) // [2, 3] arr1.map(x => x * 2) // [2, 4, 6] [3, 1, 2].sort() // [1, 2, 3] [1, 2, 3].reverse() // [3, 2, 1] [1, 2, 3, 4].slice(1, 3) // [2, 3] arr1.splice(1, 1, 99) // [2] (arr1: [1, 99, 3]) // ... And other array JS operations Copy // Create let obj1 = { name: "Alice", age: 25 }; let obj2 = new Object(); obj2.key = "value"; // Operations obj1.name // "Alice" obj1["name"] // "Alice" obj1.city = "Tokyo" // { name: "Alice", age: 25, city: "Tokyo" } delete obj1.age // { name: "Alice" } "name" in obj1 // true Object.keys(obj1) // ["name", "age"] Object.values(obj1) // ["Alice", 25] let newObj = { ...obj1 } // copy of Object.assign({}, obj1, { city: "Tokyo" }) // {name: "Alice", age: 25, city: "Tokyo"} // ... And other object JS operations Copy // Classic function greet(name) { return `Hello, ${name}!`; } ax.log(greet("Alice")); // "Hello, Alice!" // Expression const greet = function(name) { return `Hello, ${name}!`; }; ax.log(greet("Bob")); // "Hello, Bob!" // Arrow const greet = (name) => `Hello, ${name}!`; ax.log(greet("Charlie")); // "Hello, Charlie!" Copy // Default function greet(name = "Guest") { return `Hello, ${name}!`; } ax.log(greet()); // "Hello, Guest!" // Undefined number of arguments function greet(greeting, ...names) { return `${greeting}, ${names.join(", ")}!`; } ax.log(greet("Hello", "Alice", "Bob", "Charlie")); // "Hello, Alice, Bob, Charlie!" // Arguments via object function greet({ name, age }) { return `${name} is ${age} years old.`; } ax.log(greet({ name: "Alice", age: 25 })); // "Alice is 25 years old." Copy throw new Error("error text"); Copy /\d+/.test("123"); // true "abcdef".match(/abc/); // abc "hello123".replace(/\d+/, ""); // hello "one, two, three".split(/\s*,\s*/); // ["one", "two", "three"] let regex = /hello/gi; "Hello HELLO hello".match(regex); // ["Hello", "HELLO", "hello"] let result = "2025-07-24".match(/(\d{4})-(\d{2})-(\d{2})/); result[1]; // 2025 result[2]; // 07 result[3]; // 24 --- # Teamserver Interface | Adaptix Framework Documentation for the `Teamserver` interface used in plugins (extenders) for interacting with the Adaptix C2 server. [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface#architecture) Architecture --------------------------------------------------------------------------------------------------------------------------------- ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface#general-diagram) General Diagram ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FDO762DUx34zMgUD4zjkn%252F01.png%3Falt%3Dmedia%26token%3Db477cdc7-a248-40d9-8f42-d5ed3de79784&width=768&dpr=3&quality=100&sign=250b893b&sv=2) ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface#teamserver-components) Teamserver Components Component File Description **TsConnector** `connector.go` HTTP/WebSocket server (gin-gonic), routing **MessageBroker** `mgr_broker.go` WebSocket client management, broadcast **TaskManager** `mgr_task.go` Task queue, task type handlers **TunnelManager** `mgr_tunnel.go` SOCKS/PortFwd tunnels, channels, buffer pool **EventManager** `eventing/` Pre/Post hooks, async events **DBMS** `database/` SQLite, WAL mode, persistent storage **Extender** `extender/` .so plugin loading, interface registration **ScriptManager** `axscript/` Server-side AxScript engine, hooks and commands ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface#extender-types) Extender Types Type Description Interface **Listener** Accepts connections from agents, establishes protocol `PluginListener` **Agent** Agent logic: generation, parsing, commands `PluginAgent` **Service** Service plugins: notifications, integrations `PluginService` * * * [PreviousAxMenu typechevron-left](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axmenu-type) [NextWeb APIchevron-right](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/web-api) Last updated 1 month ago * [Architecture](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface#architecture) * [General Diagram](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface#general-diagram) * [Teamserver Components](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface#teamserver-components) * [Extender Types](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface#extender-types) Copy ┌──────────────────────────────────────────────────────────────────────────────────────┐ │ ADAPTIX SERVER │ ├──────────────────────────────────────────────────────────────────────────────────────┤ │ │ │ ┌────────────────────────────────────────────────────────────────────────────────┐ │ │ │ TEAMSERVER CORE │ │ │ ├────────────────────────────────────────────────────────────────────────────────┤ │ │ │ │ │ │ │ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ │ │ │ │ │ TsConnector │ │ MessageBroker │ │ EventManager │ │ │ │ │ │ (HTTP/WS API) │────>│ (WebSocket) │ │ (Pre/Post) │ │ │ │ │ │ gin-gonic │ │ broadcast │ │ Hooks │ │ │ │ │ └────────┬────────┘ └────────┬────────┘ └────────┬────────┘ │ │ │ │ │ │ │ │ │ │ │ V V V │ │ │ │ ┌────────────────────────────────────────────────────────────────────────┐ │ │ │ │ │ TEAMSERVER INTERFACE │ │ │ │ │ │ │ │ │ │ │ │ TsAgent* TsTask* TsTunnel* TsTerminal* TsListener* │ │ │ │ │ │ TsDownload* TsScreenshot* TsTarget* TsCredential* TsEndpoint* │ │ │ │ │ │ TsEventHook* TsExtenderData* TsClientGui* TsPivot* TsService* │ │ │ │ │ │ TsAxScript* │ │ │ │ │ │ │ │ │ │ │ └────────────────────────────────────────────────────────────────────────┘ │ │ │ │ │ │ │ │ │ │ │ V V V │ │ │ │ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ │ │ │ │ │ TaskManager │ │ TunnelManager │ │ DBMS │ │ │ │ │ │ │ │ │ │ (SQLite) │ │ │ │ │ │ - Task Queue │ │ - Tunnels Map │ │ │ │ │ │ │ │ - Job Handler │ │ - Channels Map │ │ - Listeners │ │ │ │ │ │ - Tunnel Task │ │ - Buffer Pool │ │ - Agents │ │ │ │ │ │ - Browser Task │ │ - Stats │ │ - Tasks │ │ │ │ │ └─────────────────┘ └─────────────────┘ │ - Downloads │ │ │ │ │ │ - Screenshots │ │ │ │ │ ┌─────────────────┐ │ - Credentials │ │ │ │ │ │ ScriptManager │ │ - Targets │ │ │ │ │ │ (AxScript) │ │ - Console │ │ │ │ │ │ - Server hooks │ │ - Chat │ │ │ │ │ │ - Commands │ └─────────────────┘ │ │ │ │ └─────────────────┘ │ │ │ │ │ │ │ └────────────────────────────────────────────────────────────────────────────────┘ │ │ │ │ │ V │ │ ┌────────────────────────────────────────────────────────────────────────────────┐ │ │ │ EXTENDER MANAGER │ │ │ ├────────────────────────────────────────────────────────────────────────────────┤ │ │ │ │ │ │ │ LoadPlugins() ───┬──> LoadPluginListener() ──> PluginListener Interface │ │ │ │ ├──> LoadPluginAgent() ──> PluginAgent Interface │ │ │ │ └──> LoadPluginService() ──> PluginService Interface │ │ │ │ │ │ │ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ │ │ │ │ .so │ │ config │ │ .axs │ │ │ │ │ │ plugin │ │ .yaml │ │ UI file │ │ │ │ │ └─────────────┘ └─────────────┘ └─────────────┘ │ │ │ │ │ │ │ └────────────────────────────────────────────────────────────────────────────────┘ │ │ │ │ │ V │ │ ┌────────────────────────────────────────────────────────────────────────────────┐ │ │ │ IN-MEMORY DATA STORES │ │ │ ├────────────────────────────────────────────────────────────────────────────────┤ │ │ │ │ │ │ │ ┌───────────┐ ┌───────────┐ ┌───────────┐ ┌───────────┐ ┌───────────┐ │ │ │ │ │ Agents │ │ Listeners │ │ Downloads │ │ Terminals │ │ Pivots │ │ │ │ │ │ (Map) │ │ (Map) │ │ (Map) │ │ (Map) │ │ (Slice) │ │ │ │ │ └───────────┘ └───────────┘ └───────────┘ └───────────┘ └───────────┘ │ │ │ │ │ │ │ │ ┌───────────┐ ┌───────────┐ │ │ │ │ │ Builders │ │ OTPs │ │ │ │ │ │ (Map) │ │ (Map) │ │ │ │ │ └───────────┘ └───────────┘ │ │ │ │ │ │ │ └────────────────────────────────────────────────────────────────────────────────┘ │ │ │ └──────────────────────────────────────────────────────────────────────────────────────┘ --- # Extenders | Adaptix Framework Guide for developing extenders for AdaptixC2: Listener, Agent, and Service Extender. ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FDUpgTg2r2taOKRyvEXOn%252FScreenshot_20260120_215032.png%3Falt%3Dmedia%26token%3Dfbf37ffa-a31b-4797-aec7-6325a9fd8f5d&width=768&dpr=3&quality=100&sign=23bccc33&sv=2) Copy ┌─────────────────────────────────────────────────────────────────────────────────┐ │ ADAPTIX SERVER │ ├─────────────────────────────────────────────────────────────────────────────────┤ │ │ │ ┌───────────────────────────────────────────────────────────────────────────┐ │ │ │ EXTENDER MANAGER │ │ │ ├───────────────────────────────────────────────────────────────────────────┤ │ │ │ │ │ │ │ LoadPlugins() ───┬──> LoadPluginListener() ──> PluginListener Interface │ │ │ │ ├──> LoadPluginAgent() ──> PluginAgent Interface │ │ │ │ └──> LoadPluginService() ──> PluginService Interface │ │ │ │ │ │ │ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ │ │ │ │ config │ │ plugin │ │ .axs │ │ │ │ │ │ .yaml │ │ .so │ │ UI file │ │ │ │ │ └─────────────┘ └─────────────┘ └─────────────┘ │ │ │ │ │ │ │ │ │ V │ │ │ │ InitPlugin(ts, moduleDir, ...) │ │ │ │ │ │ │ │ │ ┌────────────────────────────┼───────────────────────────────────────┐ │ │ │ │ │ │ │ │ │ │ │ ┌─────────────────┐ ┌────────────────┐ ┌───────────────────┐ │ │ │ │ │ │ │Listener Extender│ │ Agent Extender │ │ Service Extender │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ PluginListener │ │ PluginAgent │ │ PluginService │ │ │ │ │ │ │ └─────────────────┘ └────────────────┘ └───────────────────┘ │ │ │ │ │ └────────────────────────────────────────────────────────────────────┘ │ │ │ │ │ │ │ └───────────────────────────────────────────────────────────────────────────┘ │ │ │ │ ┌───────────────────────────────────────────────────────────────────────────┐ │ │ │ EVENT MANAGER │ │ │ ├───────────────────────────────────────────────────────────────────────────┤ │ │ │ │ │ │ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ │ │ │ │ Pre Hooks │──────>│ Action │──────>│ Post Hooks │ │ │ │ │ └─────────────┘ └─────────────┘ └─────────────┘ │ │ │ │ │ │ │ │ TsEventHookRegister(event, phase, priority, handler) │ │ │ │ │ │ │ └───────────────────────────────────────────────────────────────────────────┘ │ │ │ └─────────────────────────────────────────────────────────────────────────────────┘ #### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/extenders#plugin-types) Plugin Types Type Description Interface Config Type **Listener** Accepts connections from agents `PluginListener` `listener` **Agent** Agent logic: generation, parsing, commands `PluginAgent` `agent` **Service** Service plugins: notifications, integrations `PluginService` `service` [PreviousEvents and Hookschevron-left](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/events-and-hooks) [NextRegister new extenderschevron-right](https://adaptix-framework.gitbook.io/adaptix-framework/development/extenders/register-new-extenders) Last updated 3 months ago --- # AxSelector type | Adaptix Framework Selector is a UI element for selecting Adaptix data. [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axselector-type#selectorfile) SelectorFile ------------------------------------------------------------------------------------------------------------------------------------- The `selector_file` element contains a file path input field and a button to invoke a file selection dialog. If the `selector_file` is placed in a `container`, the file contents will be base64 encoded when generating the JSON. ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FXfD5LMJqET4TYh1Q4lLy%252FScreenshot_20251226_150625.png%3Falt%3Dmedia%26token%3D25e32e69-6124-40c6-8ab6-d8a1b59d79cb&width=768&dpr=3&quality=100&sign=6bd15d3c&sv=2) `element create_selector_file()` - Constructs a `selector_file` element contains a file path input field and a button to invoke a file selection dialog. #### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axselector-type#methods) **Methods:** 1 #### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axselector-type#setplaceholder) setPlaceholder This method sets the textline placeholder text, text. chevron-rightExample[hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axselector-type#example) ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FDUFRYzRywzRE2Nr9mdBV%252FScreenshot_20250726_130408.png%3Falt%3Dmedia%26token%3D1ec9b84a-9c8c-4439-ac3d-11a3d42ebbe2&width=768&dpr=3&quality=100&sign=1366a688&sv=2) * * * [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axselector-type#selectoragents) SelectorAgents ----------------------------------------------------------------------------------------------------------------------------------------- The `selector_agents` is a dialog window with the Sessions table and a search field. The columns that the table should have can be specified when creating `selector_agents`. ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FStTUsJn8k7jEbjX9gI3f%252FScreenshot_20250828_133543.png%3Falt%3Dmedia%26token%3Dce186d3a-59dd-4739-b413-156f649cec53&width=768&dpr=3&quality=100&sign=53f8c3e4&sv=2) `dialog create_selector_agents(string headers)` - Creates a `selector_agents` dialog with the specified `headers`. Possible columns are: _id_, _type_, _listener_, _external\_ip_, _internal\_ip_, _domain_, _computer_, _username_, _process_, _pid_, _tid_, _os_, _tags_. #### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axselector-type#methods-1) Methods: 1 #### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axselector-type#setsize) setSize This method sets the size for the window. 2 #### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axselector-type#close) close Close window. 3 #### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axselector-type#exec) exec Shows the dialog as a modal dialog, blocking until the user closes it. If the window is closed by pressing the _Choose_ button, the method will return an array of AGENT structures. If the window is closed otherwise, an empty array will be returned. chevron-rightExample[hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axselector-type#example-1) ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FXT43eMcpztN27qM5mCSU%252FScreenshot_20250828_133322.png%3Falt%3Dmedia%26token%3D75438a52-bae1-4e95-9799-0abdba570149&width=768&dpr=3&quality=100&sign=5a5a0fc6&sv=2) * * * [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axselector-type#selectorcredentials) SelectorCredentials --------------------------------------------------------------------------------------------------------------------------------------------------- The `selector_credentials` is a dialog window with the _Credentials Manager_ table and a search field. The columns that the table should have can be specified when creating `selector_credentials`. ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252Fx6QpgUO6fbcCDWCgj9FR%252FScreenshot_20250726_130856.png%3Falt%3Dmedia%26token%3Ddacf6679-7e45-4b50-bb1d-1d98cab9529d&width=768&dpr=3&quality=100&sign=97fe109b&sv=2) `dialog create_selector_credentials(string headers)` - Creates a `selector_credentials` dialog with the specified `headers`. Possible columns are: _username_, _password_, _realm_, _type_, _tag_, _date_, _storage_, _agent\_id_, _host_. #### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axselector-type#methods-2) Methods: 1 #### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axselector-type#setsize-1) setSize This method sets the size for the window. 2 #### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axselector-type#close-1) close Close window. 3 #### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axselector-type#exec-1) exec Shows the dialog as a modal dialog, blocking until the user closes it. If the window is closed by pressing the _Choose_ button, the method will return an array of CRED structures. If the window is closed otherwise, an empty array will be returned. chevron-rightExample[hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axselector-type#example-2) ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FpXD9ERTIe9opHxFeU4vx%252FScreenshot_20250726_132943.png%3Falt%3Dmedia%26token%3D9d4d7eaa-e779-4434-b83a-cf3e4b0e1262&width=768&dpr=3&quality=100&sign=8dcf629&sv=2) * * * [PreviousAxForm typechevron-left](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type) [NextAxEvent typechevron-right](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axevent-type) Last updated 3 months ago * [SelectorFile](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axselector-type#selectorfile) * [SelectorAgents](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axselector-type#selectoragents) * [SelectorCredentials](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axselector-type#selectorcredentials) Copy void selector_file::setPlaceholder(string text); Copy let selector = form.create_selector_file(); let btn = form.create_button("Dump"); let tl1 = form.create_textmulti(); let container = form.create_container(); container.put("content", selector); form.connect(btn, "clicked", function(){ tl1.setText(container.toJson()); }); let layout = form.create_vlayout(); layout.addWidget(selector); layout.addWidget(tl1); layout.addWidget(btn); let dialog = form.create_dialog(""); dialog.setSize(400, 200); dialog.setLayout(layout); dialog.exec(); Copy void create_selector_agents::setSize(int w, int h) Copy void create_selector_agents::close(); Copy map(string,any)[] create_selector_agents::exec(); Copy // AGENT STRUCTURE: string agent["id"] string agent["type"] string agent["listener"] string agent["external_ip"] string agent["internal_ip"] string agent["domain"] string agent["computer"] string agent["username"] string agent["impersonated"] string agent["process"] string agent["pid"] string agent["tid"] string agent["tags"] string agent["os"] Copy let agents_selector = form.create_selector_agents(["id", "type", "computer", "username", "process", "pid", "tags"]); agents_selector.setSize(1000, 400); let agent_label = form.create_label("Agent:"); let agent_text = form.create_textline(); let select_button = form.create_button("..."); let computer_label = form.create_label("Computer:"); let computer_text = form.create_textline(); let username_label = form.create_label("Username:"); let username_text = form.create_textline(); form.connect(select_button, "clicked", function(){ let agents = agents_selector.exec(); if (agents.length > 0) { let agent = agents[0]; agent_text.setText(agent["id"]); computer_text.setText(agent["computer"]); username_text.setText(agent["username"]); } }); let layout = form.create_gridlayout(); layout.addWidget(agent_label, 0, 0, 1, 1); layout.addWidget(agent_text, 0, 1, 1, 1); layout.addWidget(select_button, 0, 2, 1, 1); layout.addWidget(computer_label, 1, 0, 1, 1); layout.addWidget(computer_text, 1, 1, 1, 1); layout.addWidget(username_label, 2, 0, 1, 1); layout.addWidget(username_text, 2, 1, 1, 1); let dialog = form.create_dialog("Agents info"); dialog.setSize(400, 300); dialog.setLayout(layout); dialog.exec(); Copy void create_selector_credentials::setSize(int w, int h) Copy void create_selector_credentials::close(); Copy map(string,any)[] create_selector_credentials::exec(); Copy // CRED STRUCTURE: string cred["username"] string cred["password"] string cred["realm"] string cred["type"] string cred["tag"] string cred["date"] string cred["storage"] string cred["agent_id"] string cred["host"] string cred["id"] Copy let creds_selector = form.create_selector_credentials(["username", "password", "realm", "tag"]); creds_selector.setSize(800, 400); let username_label = form.create_label("Username:"); let username_text = form.create_textline(); let select_button = form.create_button("..."); let password_label = form.create_label("Password:"); let password_text = form.create_textline(); let realm_label = form.create_label("Realm:"); let realm_text = form.create_textline(); form.connect(select_button, "clicked", function(){ let cred_list = creds_selector.exec(); if (cred_list.length > 0) { let cred = cred_list[0]; username_text.setText(cred["username"]); password_text.setText(cred["password"]); realm_text.setText(cred["realm"]); } }); let layout = form.create_gridlayout(); layout.addWidget(username_label, 0, 0, 1, 1); layout.addWidget(username_text, 0, 1, 1, 1); layout.addWidget(select_button, 0, 2, 1, 1); layout.addWidget(password_label, 1, 0, 1, 1); layout.addWidget(password_text, 1, 1, 1, 1); layout.addWidget(realm_label, 2, 0, 1, 1); layout.addWidget(realm_text, 2, 1, 1, 1); let dialog = form.create_dialog(""); dialog.setSize(400, 300); dialog.setLayout(layout); dialog.exec(); --- # AxEvent type | Adaptix Framework AdaptixClient generates events for various situations. To register a handler for a specific event, there are functions from the `event` namespace. Several handlers can be connected to one event. To assign a `handler` to a specific event use the function Copy void event.on_EVENT_TYPE(handler(){}, string[] agents, string[] os = [], string[] listeners = [], string event_id = ""); * `handler` - a handler that will be triggered when the event occurs. * `agents` - an array of strings containing the names of agents for which the event will be triggered. Available options are "beacon", "gopher", etc. * `os` - an array of strings with the names of the operating systems for which the event will be triggered. The following options are available: "windows", "linux", "macos". If an empty array `[]` is specified, the command group will be registered for all operating systems. * `listeners` - An array of strings with the names of registered listeners for which the event will be triggered. The following options are available: "BeaconHTTP", "BeaconSMB", etc. If an empty array \[\] is specified, the command group will be registered for all listeners. * `event_id` - id for `handler` You can remove a handler that has an id set. Copy void event.remove(string event_id); * * * [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axevent-type#on_new_agent) on\_new\_agent ------------------------------------------------------------------------------------------------------------------------------------ This event occurs every time a new agent registers. Copy void event.on_new_agent(handler(){}, string[] agents, string[] os = [], string[] listeners = [], string event_id = ""); This event must have a `handler` assigned in the following format. Copy function handler(string id); * `id` - agent ID **Example** * * * [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axevent-type#on_filebrowser_disks) on\_filebrowser\_disks ---------------------------------------------------------------------------------------------------------------------------------------------------- This event occurs when the user clicks the Disks button in the File Browser. This event must have a `handler` assigned in the following format. * `id` - agent ID **Example** * * * [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axevent-type#on_filebrowser_list) on\_filebrowser\_list -------------------------------------------------------------------------------------------------------------------------------------------------- This event occurs whenever the user requests a list of files in the File Browser. This event must have a `handler` assigned in the following format. * `id` - agent ID * `path` - current path in File Browser * * * [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axevent-type#on_filebrowser_upload) on\_filebrowser\_upload ------------------------------------------------------------------------------------------------------------------------------------------------------ This event occurs whenever the user requests a list of processes in the Process Browser. This event must have a `handler` assigned in the following format. * `id` - agent ID * `path` - current path in File Browser * `filepath` - path to the local file to upload **Example** * * * [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axevent-type#on_processbrowser_list) on\_processbrowser\_list -------------------------------------------------------------------------------------------------------------------------------------------------------- This event occurs when a user uploads a file in a File Browser. This event must have a `handler` assigned in the following format. * `id` - agent ID **Example** * * * [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axevent-type#on_disconnect) on\_disconnect ------------------------------------------------------------------------------------------------------------------------------------- This event occurs when a client disconnects from the server. This event must have a `handler` assigned in the following format. **Example** * * * [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axevent-type#on_ready) on\_ready --------------------------------------------------------------------------------------------------------------------------- This event occurs when the client has finished synchronizing with the server. This event must have a `handler` assigned in the following format. **Example** * * * [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axevent-type#on_interval) on\_interval --------------------------------------------------------------------------------------------------------------------------------- The `handler` will be executed every `n` seconds. The method returns the ID with which the event was registered. This event must have a `handler` assigned in the following format. **Example** * * * [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axevent-type#on_timeout) on\_timeout ------------------------------------------------------------------------------------------------------------------------------- The `handler` will be executed once in `n` seconds. The method returns the ID with which the event was registered. This event must have a `handler` assigned in the following format. **Example** * * * [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axevent-type#list) list ------------------------------------------------------------------------------------------------------------------ The method returns a list of IDs of all registered handlers. **Example** ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252Fl86X7ThcW0tO2nwBySWs%252FScreenshot_20250828_124408.png%3Falt%3Dmedia%26token%3Daed9d9a6-6615-4482-9234-5b45eab6b439&width=768&dpr=3&quality=100&sign=a3c41f7a&sv=2) * * * [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axevent-type#remove) remove ---------------------------------------------------------------------------------------------------------------------- The method removes handler for the event whose ID is provided. **Example** ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FAESRlMWxykJZ6RSpSVz0%252FScreenshot_20250828_125336.png%3Falt%3Dmedia%26token%3D4c4285b1-2da4-41aa-954c-97f581eedf7c&width=768&dpr=3&quality=100&sign=9ceaa862&sv=2) * * * [PreviousAxSelector typechevron-left](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axselector-type) [NextAxMenu typechevron-right](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axmenu-type) Last updated 7 months ago * [on\_new\_agent](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axevent-type#on_new_agent) * [on\_filebrowser\_disks](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axevent-type#on_filebrowser_disks) * [on\_filebrowser\_list](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axevent-type#on_filebrowser_list) * [on\_filebrowser\_upload](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axevent-type#on_filebrowser_upload) * [on\_processbrowser\_list](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axevent-type#on_processbrowser_list) * [on\_disconnect](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axevent-type#on_disconnect) * [on\_ready](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axevent-type#on_ready) * [on\_interval](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axevent-type#on_interval) * [on\_timeout](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axevent-type#on_timeout) * [list](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axevent-type#list) * [remove](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axevent-type#remove) Copy var event_ag = function(id) { ax.show_message("New agent", id); } event.on_new_agent(event_ag, ["beacon", "gopher"]); Copy void event.on_filebrowser_disks(handler(){}, string[] agents, string[] os = [], string[] listeners = [], string event_id = ""); Copy function handler(string id); Copy var event_disks_action = function(id) { ax.execute_browser(id, "disks"); } event.on_filebrowser_disks(event_disks_action, ["beacon"]); Copy void event.on_filebrowser_list(handler(){}, string[] agents, string[] os = [], string[] listeners = [], string event_id = ""); Copy function handler(string id, string path); Copy var event_files_action = function(id, path) { ax.execute_browser(id, "ls " + path); } event.on_filebrowser_list(event_files_action, ["beacon"]); Copy void event.on_processbrowser_list(handler(){}, string[] agents, string[] os = [], string[] listeners = [], string event_id = ""); Copy function handler(string id, string path, string filepath ); Copy var event_upload_action = function(id, path, filepath) { let filename = ax.file_basename(filepath); ax.execute_browser(id, "upload " + filepath + " " + path + filename); } event.on_filebrowser_upload(event_upload_action, ["beacon"]); Copy void event.on_filebrowser_upload(handler(){}, string[] agents, string[] os = [], string[] listeners = [], string event_id = ""); Copy function handler(string id); Copy var event_process_action = function(id) { ax.execute_browser(id, "ps list"); } event.on_processbrowser_list(event_process_action, ["beacon"]); Copy void event.on_disconnect(handler(){}, string event_id = ""); Copy function handler(); Copy var event_disc = function() { ax.show_message("Event", "Client disconnected!"); } event.on_disconnect(event_disc); Copy void event.on_ready(handler(){}, string event_id = ""); Copy function handler(); Copy var event_ready = function() { ax.show_message("Event", "Client connected!"); } event.on_ready(event_ready); Copy string on_interval(handler(){}, int n, string event_id = ""); Copy function handler(); Copy var event_timer = function() { ax.show_message("Timeout", "5 seconds out"); } event.on_interval(event_timer, 5); Copy string on_timeout(handler(){}, int n, string event_id = ""); Copy function handler(); Copy var event_timer = function() { ax.show_message("Timeout", "5 seconds out"); } event.on_timeout(event_timer, 5); Copy string list(); Copy string remove(string event_id); --- # AxMenu type | Adaptix Framework AxScripts can also complement the AdaptixClient menu structure. The `menu` namespace allows you to create a menu structure with actions and separators. [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axmenu-type#axitem) AxItem --------------------------------------------------------------------------------------------------------------------- `AxItem create_menu(string text)` - Create a submenu item in the context menu. This item can contain a submenu, an action, or a separator. `AxItem create_separator()` - Create a separator. `AxItem create_action(string text, handler(){})` - Creates an action that the `handler` will execute when this menu item is selected. To add an `AxItem` object to any use the function. Copy void menu.add_MENU_TYPE(AxItem item, string[] agents, string[] os = [], string[] listeners = []); * `item` - AxItem object * `agents` - an array of strings containing the names of agents for which the menu item will be displayed. Available options are "beacon", "gopher", etc. * `os` - an array of strings with the names of the operating systems for which the menu item will be displayed. The following options are available: "windows", "linux", "macos". If an empty array `[]` is specified, the command group will be registered for all operating systems. * `listeners` - An array of strings with the names of registered listeners for which the menu item will be displayed. The following options are available: "BeaconHTTP", "BeaconSMB", etc. If an empty array \[\] is specified, the command group will be registered for all listeners. * * * [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axmenu-type#main-menu) Main Menu --------------------------------------------------------------------------------------------------------------------------- * `menu.add_main` - Add `menu` to the _Main_ menu. * `menu.add_main_project` - Add `item` to the _Main_ menu Projects. * `menu.add_main_axscript` - Add `item` to the _Main_ menu Ax Script. * `menu.add_main_settings` - Add `item` to the _Main_ menu Settings. For these menu items, the action must have a `handler` in the following format. **Example** This code adds a _Sub 1_ action to the _Main_ menu Projects, which show message. * * * [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axmenu-type#sessions-table-and-graph-menu) Sessions Table and Graph menu ------------------------------------------------------------------------------------------------------------------------------------------------------------------- * `menu.add_session_main` - Adds `item` to the context menu after the _Access_ item. * `menu.add_session_agent` - Adds an `item` as a submenu to the _Agent_ menu. * `menu.add_session_browser` - Adds an `item` as a submenu to the _Browsers_ menu. * `menu.add_session_access` - Adds an `item` as a submenu to the _Access_ menu. For these context menu items, the action must have a `handler` in the following format. * `ids` - array of selected agent ids **Example** This code adds a _Process Browser_ action to the _Browser_ menu, which opens Process Browser for all selected sessions. * * * [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axmenu-type#file-browser-menu) File Browser menu ------------------------------------------------------------------------------------------------------------------------------------------- * `menu.add_filebrowser` - Adds `item` to the context menu For these context menu items, the action must have a `handler` in the following format. * `files` - array of selected files **Example** This code adds a _Download_ action to the File Browser context menu, which executes a command to download a file. * * * [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axmenu-type#process-browser-menu) Process Browser menu ------------------------------------------------------------------------------------------------------------------------------------------------- * `menu.add_processbrowser` - Adds `item` to the context menu For these context menu items, the action must have a `handler` in the following format. * `processes` - array of selected processes **Example** This code adds a "_Steal Token_" action to the Process Browser context menu that performs the `token steal` BOF. * * * [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axmenu-type#downloads-table-menu) Downloads Table menu ------------------------------------------------------------------------------------------------------------------------------------------------- * `menu.add_downloads_running` - Adds an `item` to the context menu if the file is in the download stage. * `menu.add_downloads_finished` - Adds an `item` to the context menu if the file is already downloaded. For these context menu items, the action must have a `handler` in the following format. * `files` - array of selected downloads **Example** This code adds the actions _Pause, Resume_, _Cancel_ and a `separator` to the context menu of the Downloads Table. * * * [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axmenu-type#task-manager-menu) Task Manager menu ------------------------------------------------------------------------------------------------------------------------------------------- * `menu.add_tasks` - Adds an `item` to the context menu for all tasks. * `menu.add_tasks_job` - Adds an `item` to the context menu if the task is of type JOB and is in the running state. For these context menu items, the action must have a `handler` in the following format. * `tasks` - array of selected tasks **Example** This code adds the action _Stop job_ to the context menu of the Tasks Manager. * * * [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axmenu-type#targets-manager-menu) Targets Manager menu ------------------------------------------------------------------------------------------------------------------------------------------------- Adds an `item` to a specific `position` (top, center, bottom) in the context menu for all targets. For these context menu items, the action must have a `handler` in the following format. * `ids` - list of selected targets ids **Example** This code adds the action _Stop job_ to the context menu of the Tasks Manager. * * * [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axmenu-type#credentials-manager-menu) Credentials Manager menu --------------------------------------------------------------------------------------------------------------------------------------------------------- Adds an `item` to the context menu for all creds. For these context menu items, the action must have a `handler` in the following format. * `ids` - list of selected creds ids **Example** This code adds the action _Stop job_ to the context menu of the Tasks Manager. * * * [PreviousAxEvent typechevron-left](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axevent-type) [NextTeamserver Interfacechevron-right](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface) Last updated 3 months ago * [AxItem](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axmenu-type#axitem) * [Main Menu](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axmenu-type#main-menu) * [Sessions Table and Graph menu](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axmenu-type#sessions-table-and-graph-menu) * [File Browser menu](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axmenu-type#file-browser-menu) * [Process Browser menu](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axmenu-type#process-browser-menu) * [Downloads Table menu](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axmenu-type#downloads-table-menu) * [Task Manager menu](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axmenu-type#task-manager-menu) * [Targets Manager menu](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axmenu-type#targets-manager-menu) * [Credentials Manager menu](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axmenu-type#credentials-manager-menu) Copy function handler() Copy let act = menu.create_action("Sub 1", function() { ax.show_message("TEST", "New project submenu"); }); menu.add_main_projects(act); Copy function handler(string[] ids) Copy let process_browser_action = menu.create_action("Process Browser", function(value) { value.forEach(v => ax.open_browser_process(v)) }); menu.add_session_browser(process_browser_action, ["beacon"]) Copy function handler(FILE_INFO[] files) Copy // FILE_INFO STRUCTURE: string file["agent_id"] // agent ID string file["path"] // file directory string file["name"] // filename string file["type"] // type: "file" or "dir" Copy let download_action = menu.create_action("Download", function(files_list) { files_list.forEach((file) => { if(file.type == "file") { ax.execute_command(file.agent_id, "download " + file.path + file.name); } }); }); menu.add_filebrowser(download_action, ["beacon"]) Copy function handler(PROC_INFO[] processes) Copy // PROC_INFO STRUCTURE: string proc["agent_id"] // agent ID string proc["pid"] string proc["ppid"] string proc["arch"] // if unix, then empty string proc["session_id"] // if unix, then TTY string proc["context"] string proc["process"] Copy let token_steal_action = menu.create_action("Steal token", function(process_list) { if (process_list.length > 0 ) { let proc = process_list[0]; ax.execute_command(proc.agent_id, "token steal " + proc.pid); } }); menu.add_processbrowser(token_steal_action, ["beacon", "gopher"], ["windows"]); Copy function handler(DOWNLOAD[] files) Copy // DOWNLOAD STRUCTURE: string file["agent_id"] string file["file_id"] string file["path"] string file["state"] // "finished", "running" or "stopped" Copy let download_stop_action = menu.create_action("Pause", function(files_list) { files_list.forEach( file => ax.execute_command(file.agent_id, "exfil stop " + file.file_id) ) }); let download_start_action = menu.create_action("Resume", function(files_list) { files_list.forEach( file => ax.execute_command(file.agent_id, "exfil start " + file.file_id) ) }); let download_separator1 = menu.create_separator() let download_cancel_action = menu.create_action("Cancel", function(files_list) { files_list.forEach( file => ax.execute_command(file.agent_id, "exfil cancel " + file.file_id) ) }); menu.add_downloads_running(download_stop_action, ["beacon"]) menu.add_downloads_running(download_start_action, ["beacon"]) menu.add_downloads_running(download_separator1, ["beacon"]) menu.add_downloads_running(download_cancel_action, ["beacon"]) Copy function handler(TASK[] tasks) Copy // TASK STRUCTURE: string file["agent_id"] string file["task_id"] string file["state"] // "Hosted", "Running", "Success", "Error" or "Canceled" string file["type"] // "TASK", "JOB", "TUNNEL" or "unknown" Copy let job_stop_action = menu.create_action("Stop job", function(tasks_list) { tasks_list.forEach((task) => { if(task.type == "JOB" && task.state == "Running") { ax.execute_command(task.agent_id, "jobs kill " + task.task_id); } }); }); menu.add_tasks_job(job_stop_action, ["beacon"]) Copy void menu.add_targets(menu_item* item, string pos); Copy function handler(string[] ids) Copy let t_action = menu.create_action("Jump to ...", function(targets_id) { let targets = ax.targets() targets_id.forEach((id) => { let addr = targets[id].address; ax.show_message("Target", addr); } }); menu.add_targets(t_action, "top"); Copy void menu.add_targets(menu_item* item); Copy function handler(string[] ids) Copy let c_action = menu.create_action("Jump to ...", function(creds_id) { let creds = ax.credentials() creds_id.forEach((id) => { let passwd = creds[id].password; ax.show_message("Password", passwd); } }); menu.add_credentials(c_action); --- # AxCommand type | Adaptix Framework [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axcommand-type#command) Command -------------------------------------------------------------------------------------------------------------------------- The `ax.create_command` function creates an **AxCommand** object that will be converted into a command for AdaptixC2 agents. Copy AxCommand ax.create_command(string name, string description, string example = "", string message = ""); * `name` - сonsole command name. * `description` - description of the command. * `example` - example of command input. * `message` - the message that will be displayed in the agent console when the command is sent. chevron-rightExample[hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axcommand-type#example) This code creates the `pwd` command. Copy ax.create_command("pwd", "Print current working directory", "pwd", "Task: print working directory"); ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FmXPnf2jxvvyYSqB5wwRS%252FScreenshot_20250724_223206.png%3Falt%3Dmedia%26token%3Dc20a952a-208d-4818-a883-8a85021b1249&width=768&dpr=3&quality=100&sign=70c53797&sv=2) * * * [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axcommand-type#arguments) Arguments ------------------------------------------------------------------------------------------------------------------------------ The **AxCommand** object has methods for adding arguments to a command. ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axcommand-type#bool) bool The `addArgBool` method adds a flag argument to the command, which can have two values: `true` (if the flag is specified) and `false` (if the flag is not specified). * `flag` - command's flag name * `description` - description of the arguments. * `value` - default value. chevron-rightExample[hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axcommand-type#example-1) This code creates the `potato-dcom` command with the bool `--token` arguments. ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252Fulrz0kar3GdaMgvELk1T%252FScreenshot_20250724_225212.png%3Falt%3Dmedia%26token%3D5b4b60b3-636c-418f-b377-aa8e6a261854&width=768&dpr=3&quality=100&sign=afbf2c5b&sv=2) ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axcommand-type#int) int The `addArgInt` method adds a numeric argument to the command. The `addArgFlagInt` method adds a numeric argument to the command, which must be specified after the flag. * `flag` - command's flag name * `name` - command argument's name. * `required` - if `true`, then the argument must be specified in the command * `description` - description of the arguments. * `value` - default value. chevron-rightExample[hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axcommand-type#example-2) This code creates the `kill` command with the int `pid` arguments. ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FxYvOOVryo02w4uL5gfvG%252FScreenshot_20250724_230340.png%3Falt%3Dmedia%26token%3D37b2ec57-c2d5-4bca-b0bc-e1eff291b56d&width=768&dpr=3&quality=100&sign=1e82fbd7&sv=2) ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axcommand-type#string) string The `addArgString` method adds a string argument to the command. The `addArgFlagString` method adds a string argument to the command, which must be specified after the flag. * `flag` - command's flag name * `name` - command argument's name. * `required` - if `true`, then the argument must be specified in the command * `description` - description of the arguments. * `value` - default value. chevron-rightExample[hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axcommand-type#example-3) This code creates the `cp` command with the two string `src` and `dst` arguments. ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FsVEExOEK9LnfPzybPxjG%252FScreenshot_20250724_231302.png%3Falt%3Dmedia%26token%3D92cd92d0-93a8-4ff3-9f7c-f9ed615d50a9&width=768&dpr=3&quality=100&sign=515ccac1&sv=2) ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axcommand-type#file) file The `addArgFile` method adds a file type argument to the command. The `addArgFlagString` method adds a file type argument to the command, which must be specified after the flag. The file-type argument is the path to the file that will be read and sent to the server in base64. * `flag` - command's flag name * `name` - command argument's name. * `required` - if `true`, then the argument must be specified in the command * `description` - description of the arguments. chevron-rightExample[hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axcommand-type#example-4) This code creates the `upload` command with the file-type `local_file` and the string `remote_path` arguments . ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FxJJHvwQsw9QhDpA5neWv%252FScreenshot_20250724_232127.png%3Falt%3Dmedia%26token%3D7f0bf4e9-3de4-42db-9943-397f9c1cb71b&width=768&dpr=3&quality=100&sign=a361faf8&sv=2) * * * [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axcommand-type#subcommand) SubCommand -------------------------------------------------------------------------------------------------------------------------------- The **AxCommand** object has an `addSubCommands` method for adding subcommands to a command. * `subcommands` - array of AxCommand objects chevron-rightExample[hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axcommand-type#example-5) This code creates the `smb` and `tcp` commands, then creates the `link` command and adds `smb` and `tcp` as subcommands. ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FUDUaAeWdlExXWOCcJopX%252FScreenshot_20250724_233324.png%3Falt%3Dmedia%26token%3Dbd614377-9f8b-4720-9274-cd6c4900b456&width=768&dpr=3&quality=100&sign=9f8efc9f&sv=2) * * * [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axcommand-type#prehook) PreHook -------------------------------------------------------------------------------------------------------------------------- See [here](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axcommand-type/commands-and-hooks#prehook) . * * * [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axcommand-type#registering-commands) Registering commands ---------------------------------------------------------------------------------------------------------------------------------------------------- In order for the created commands to be used in the agent console, they must be combined into command groups using the `create_commands_group` function, and then the group must be registered using the `register_commands_group` function. * `name` - command group name * `commands` - array of AxCommand objects * `group` - AxCommandsGroup object * `agents` - an array of strings of agent names for which the command group will be available. The following options are available: "beacon", "gopher", etc. * `os` - an array of strings with the names of the operating systems for which the command group will be available. The following options are available: "windows", "linux", "macos". If an empty array `[]` is specified, the command group will be registered for all operating systems. * `listeners` - An array of strings with the names of registered listeners for which the command group will be available. The following options are available: "BeaconHTTP", "BeaconSMB", etc. If an empty array \[\] is specified, the command group will be registered for all listeners. chevron-rightExample[hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axcommand-type#example-6) The following code creates three commands `uptime`, `useridletime` and `whoami`. It then combines them into a group `Test-Register-Group` and registers it for `beacon` and `gopher` agents, but only running on `Windows` OS. ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252Fbke7ouDD7M7D2EpGKjbO%252FScreenshot_20250725_112915.png%3Falt%3Dmedia%26token%3Dd72cc68a-9421-4bdf-918a-f0f6f2c2443d&width=768&dpr=3&quality=100&sign=f12e9c73&sv=2) [PreviousAxFunctionchevron-left](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction) [NextCommands and Hookschevron-right](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axcommand-type/commands-and-hooks) Last updated 3 months ago * [Command](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axcommand-type#command) * [Arguments](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axcommand-type#arguments) * [bool](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axcommand-type#bool) * [int](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axcommand-type#int) * [string](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axcommand-type#string) * [file](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axcommand-type#file) * [SubCommand](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axcommand-type#subcommand) * [PreHook](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axcommand-type#prehook) * [Registering commands](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axcommand-type#registering-commands) Copy addArgBool(string flag, string description = ""); // or addArgBool(string flag, string description, bool value); Copy var cmd_dcom_potato = ax.create_command("potato-dcom", "DCOMPotato - get SYSTEM via SeImpersonate privileges.", "potato-dcom --run C:\\Windows\\System32\\cmd.exe /c whoami /all"); cmd_dcom_potato.addArgBool( "--token", "Elevate the current agent to SYSTEM context"); ... Copy addArgInt(string name, bool required, string description = ""); // or addArgInt(string name, string description, int value); addArgFlagInt(string flag, string name, bool required, string description = ""); // or addArgFlagInt(string flag, string name, string description, int value); Copy let cmd_kill = ax.create_command("kill", "Kill a process with a given PID", "kill 7865", "Task: kill process"); cmd_kill.addArgInt("pid", true); Copy addArgString(string name, bool required, string description = ""); // or addArgString(string name, string description, string value); addArgFlagString(string flag, string name, bool required, string description = ""); // or addArgFlagString(string flag, string name, string description, string value); Copy let cmd_cp = ax.create_command("cp", "Copy file", "cp src.txt dst.txt", "Task: copy file"); cmd_cp.addArgString("src", true); cmd_cp.addArgString("dst", true); Copy addArgFile(string name, bool required, string description = ""); // or addArgFlagFile(string flag, string name, bool required, string description = ""); Copy let cmd_upload = ax.create_command("upload", "Upload a file", "upload /tmp/file.txt C:\\Temp\\file.txt", "Task: upload file"); cmd_upload.addArgFile("local_file", true); cmd_upload.addArgString("remote_path", false); Copy addSubCommands(AxCommand[] subcommands) Copy let _cmd_link_smb = ax.create_command("smb", "Connect to an SMB agent and re-establish control of it", "link smb 192.168.1.2 pipe_a1b2", "Task: Connect to an SMB agent"); _cmd_link_smb.addArgString("target", true); _cmd_link_smb.addArgString("pipename", true); let _cmd_link_tcp = ax.create_command("tcp", "Connect to an TCP agent and re-establish control of it", "link tcp 192.168.1.2 8888", "Task: Connect to an TCP agent"); _cmd_link_tcp.addArgString("target", true); _cmd_link_tcp.addArgInt("port", true); let cmd_link = ax.create_command("link", "Connect to an pivot agents"); cmd_link.addSubCommands([_cmd_link_smb, _cmd_link_tcp]); Copy AxCommandsGroup ax.create_commands_group(string name, AxCommand[] commands); Copy ax.register_commands_group(AxCommandsGroup group, string[] agents, string[] os, string[] listeners); Copy var cmd_uptime = ax.create_command("uptime", "List system boot time and how long it has been running", "uptime"); cmd_uptime.setPreHook(function (id, cmdline, parsed_json, ...parsed_lines) { let bof_path = ax.script_dir() + "_bin/uptime." + ax.arch(id) + ".o"; ax.execute_alias(id, cmdline, `execute bof ${bof_path}`, "BOF implementation: uptime"); }); var cmd_useridletime = ax.create_command("useridletime", "Shows how long the user as been idle, displayed in seconds, minutes, hours and days", "useridletime"); cmd_useridletime.setPreHook(function (id, cmdline, parsed_json, ...parsed_lines) { let bof_path = ax.script_dir() + "_bin/useridletime." + ax.arch(id) + ".o"; ax.execute_alias(id, cmdline, `execute bof ${bof_path}`, "BOF implementation: useridletime"); }); var cmd_whoami = ax.create_command("whoami", "List whoami /all, hours and days", "whoami"); cmd_whoami.setPreHook(function (id, cmdline, parsed_json, ...parsed_lines) { let bof_path = ax.script_dir() + "_bin/whoami." + ax.arch(id) + ".o"; ax.execute_alias(id, cmdline, `execute bof ${bof_path}`, "BOF implementation: whoami /all"); }); var group_test = ax.create_commands_group("Test-Register-Group", [cmd_uptime, cmd_useridletime, cmd_whoami]); ax.register_commands_group(group_test, ["beacon", "gopher"], ["windows"], []); --- # v0.1 -> v0.2 | Adaptix Framework ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FmNVXcQ5NX8BGBiBIK5MO%252F0.2%2520Update.png%3Falt%3Dmedia%26token%3D679ca34d-dde7-47c0-a636-142395e929f5&width=768&dpr=3&quality=100&sign=ed0bcd0&sv=2) **AdaptixC2** * AdaptixC2 adds interface support for working with Socks4 and Socks5 proxy server versions (with support for authentication, TCP/UDP, IPv4 and DNS, but not IPv6). [More...](https://adaptix-framework.gitbook.io/adaptix-framework/adaptix-c2/tunnels-and-forwarding) * AdaptixC2 adds interface support for working with Local and Reverse TCP port forwarding. [More...](https://adaptix-framework.gitbook.io/adaptix-framework/adaptix-c2/tunnels-and-forwarding) * AdaptixC2 improves server-client interaction; * AdaptixC2 extenders are specified in the server profile, not through a separate file. [More...](https://adaptix-framework.gitbook.io/adaptix-framework/adaptix-c2/getting-starting/starting#adaptixserver) * The AdaptixServer profile now has the ability to customize the server's response to illegitimate request. [More...](https://adaptix-framework.gitbook.io/adaptix-framework/adaptix-c2/getting-starting/starting#adaptixserver) * Computer field added to TasksTable in AdaptixClient; * User field added to DownloadsTable in AdaptixClient; * Changed the Logs panel of AdaptixClient; * Added the ability to connect one client to multiple servers. [More...](https://adaptix-framework.gitbook.io/adaptix-framework/adaptix-c2/user-interface#id-1.-projects) * Light theme added to AdaptixClient; * In AdaptixClient after agent generation a window with the path to the saved file has been added; * The listener creation and agent generation dialogs now have the option to save the current configuration to a file and load it from a file; * In AdaptixClient, the Ctrl+A (Select All) keyboard shortcut now works in all tables; * In AdaptixClient, the Ctrl+L (Clear Console) keyboard shortcut now works in the agent console; * In AdaptixClient, when navigating through the command history, the command entered before navigating through the history is now cached; * AdaptixClient now has the ability to customize the interface. You can select a theme and font settings, customize the time display format in the agent console, and select fields that will not be displayed in the SessionsTable; * In AdaptixClient, the Commander class responsible for parsing arguments has been fixed; * A guide on how to create a Windows client has been added to the documentation. [More...](https://adaptix-framework.gitbook.io/adaptix-framework/adaptix-c2/getting-starting/installation-server#windows-1) **Agent Beacon:** * The Beacon agent supports Socks4 and Socks5 proxy servers (with support for authentication, TCP/UDP, IPv4 and DNS, but not IPv6); * The Beacon agent support for working with Local and Reverse TCP port forwarding; * Added BOF API: BeaconUseToken, BeaconRevertToken; * AgentExteneder now validates data received from the agent; * Fixed agent termination function. Agent correctly informs about termination; * Fixed a bug in the agent: if the server was unavailable, the agent cached the server as unavailable and did not contact it anymore. **Extension-Kit:** * Add [Kerbeus-BOFarrow-up-right](https://github.com/Adaptix-Framework/Extension-Kit/tree/main/Kerbeus-BOF) * Add [Aliasesarrow-up-right](https://github.com/Adaptix-Framework/Extension-Kit/tree/main/Aliases) Last updated 1 year ago --- # v0.2 -> v0.3 | Adaptix Framework circle-info If you previously used **AdaptixClient**, delete the `~/.adaptix/storage.db` file. [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/changelog-and-updates/version-0.1-greater-than-1.0/v0.2-greater-than-v0.3#adaptixc2) AdaptixC2 -------------------------------------------------------------------------------------------------------------------------------------------------------------------- **New:** * The session table now has agent markings: Terminated, Inactive, Unlink, No response. The operator can mark an agent as Inactive or Active, and also select the color of the entry or the entire line. The time for marking an agent as No Response is set in the session table settings. The User field now displays the access token used. Icons have appeared in the OS field. ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252F09Uh2sMREfzMBsGO5ucG%252FScreenshot_20250327_162107.png%3Falt%3Dmedia%26token%3D394074b9-82d4-4229-946b-96684f0f4fd3&width=768&dpr=3&quality=100&sign=c6bb3549&sv=2) * Session graph added to AdaptixClient. The server implements interfaces for "internal" listeners (eg SMB listener). ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FuvESFwkQgqk4vTWOFK4H%252FScreenshot_20250327_162134.png%3Falt%3Dmedia%26token%3D09824ae7-9694-422e-9409-813ff1248bb1&width=768&dpr=3&quality=100&sign=9afe611f&sv=2) * When deleting an agent from the server via the "Remove from server" menu item through the session table menu, you now need to confirm the action. ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252Fm4HOeysZ5Q29ZHNzI03H%252FScreenshot_20250327_163010.png%3Falt%3Dmedia%26token%3Ddf5440fb-2643-4b10-8248-3efdb7bca5e1&width=768&dpr=3&quality=100&sign=99d4392b&sv=2) ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FjhmfYZcmkq0NlfQQi95l%252FScreenshot_20250327_163020.png%3Falt%3Dmedia%26token%3D06c4f660-7ceb-4e32-9697-77838f9421f7&width=768&dpr=3&quality=100&sign=345285d7&sv=2) * Added the User field to TasksTable. Also, all tasks now have one of the statuses: Hosted, Running, Completed. Reworked server interfaces for working with TaskData and console output, added a new task type - TYPE\_PROXY\_DATA. Extension developers received a more flexible task management mechanism. ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FjIVYOFSlhVY1UhdY1U6t%252FScreenshot_20250327_162859.png%3Falt%3Dmedia%26token%3Dd27781cd-6cc9-4b0b-bcb0-24b2d96bf239&width=768&dpr=3&quality=100&sign=2fcc953d&sv=2) * Added search panels to SessionsTable and TaskTable. To activate the panel, use the `Ctrl+F` key combination in the table. ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FNb1Rnfhet3IabmKLozwo%252FScreenshot_20250327_144957.png%3Falt%3Dmedia%26token%3D14297206-fd44-49d6-9866-953f8b31e19c&width=768&dpr=3&quality=100&sign=b7376ff&sv=2) ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FvWysdSgH8yFlj2vDCqsD%252FScreenshot_20250327_145553.png%3Falt%3Dmedia%26token%3D488b23a2-e76b-4588-be28-f9c469cb7a8e&width=768&dpr=3&quality=100&sign=5d61e22&sv=2) * Now, when synchronizing with the server, tasks in TasksTable will be sorted by creation time, and not by agent ID * Now when synchronizing with the server, agents in SessionsTable will be synchronized by creation time, and not by agent ID * Arguments in `help` are now displayed in formatted form. * Changed the appearance of the listener and agent creation windows (the load and save buttons have been moved to the top) * An interface for handling agent shutdown has been added to the server. * Golang packages updated from go-1.22 to go-1.23 * Added docker build (by [ArchiMoebiusarrow-up-right](https://github.com/ArchiMoebius) ) **Fix:** * Fixed a bug in the client with packing BYTES for translation to BOF (by [ArturLukianovarrow-up-right](https://github.com/ArturLukianov) ) * Fixed a client bug where information was being written to the wrong field in DownloadsTable (by [uxbugarrow-up-right](https://github.com/uxbug) ) * Now when you close the main client window, all open windows are closed and the application exits * The main menu now works correctly in KDE panel widgets * Compliter in the agent console no longer requires additional confirmation if the text was entered manually. Duplication for commands with subcommands has been removed * On the server, situations have been fixed where the information of the last loaded module overwrote the information of previously loaded modules [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/changelog-and-updates/version-0.1-greater-than-1.0/v0.2-greater-than-v0.3#agent-beacon) Agent Beacon -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- **New:** * Added SMB communication channel * Added `rev2self`, `getuid`, `link`, and `unlink` commands * Sensitive strings are hidden in the agent * The service name is no longer present inside DLL, EXE, and Shellcode type agents * Added BOF API: `BeaconIsAdmin` * Added Chinese language support for coders (by [HongLuDianXuearrow-up-right](https://github.com/HongLuDianXue) ) **Fix:** * Fixed memory accumulation in `ProcessDownloadTasks` (by [M1ndoarrow-up-right](https://github.com/M1ndo) ) * Fixed memory leaks, no more accumulation of allocated memory * The ls command now displays the correct last modification time of files * Now when creating a listener, the value of the `Port Callback` field is validated [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/changelog-and-updates/version-0.1-greater-than-1.0/v0.2-greater-than-v0.3#extension-kit) Extension-Kit ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- **New BOFs:** * LateralMovement-BOF: `psexec` (by [ArturLukianovarrow-up-right](https://github.com/ArturLukianov) ) * SAR-BOF: `quser` (by [B1oodyPhoenixarrow-up-right](https://github.com/B1oodyPhoenix) ) * SAL-BOF: `arp`, `cacls`, `dir`, `env`, `ipconfig`, `listdns`, `netstat`, `nslookup`, `routerprint`, `uptime`, `useridletime`, `whoami` (by [B1oodyPhoenixarrow-up-right](https://github.com/B1oodyPhoenix) ) * LateralMovement-BOF: `token_make` и `token_steal` * Elevation-BOF: `getsystem_token` * Injection-BOF: `inject-sec` [Previousv0.1 -> v0.2chevron-left](https://adaptix-framework.gitbook.io/adaptix-framework/changelog-and-updates/version-0.1-greater-than-1.0/v0.1-greater-than-v0.2) [Nextv0.3 -> v0.4chevron-right](https://adaptix-framework.gitbook.io/adaptix-framework/changelog-and-updates/version-0.1-greater-than-1.0/v0.3-greater-than-v0.4) Last updated 11 months ago * [AdaptixC2](https://adaptix-framework.gitbook.io/adaptix-framework/changelog-and-updates/version-0.1-greater-than-1.0/v0.2-greater-than-v0.3#adaptixc2) * [Agent Beacon](https://adaptix-framework.gitbook.io/adaptix-framework/changelog-and-updates/version-0.1-greater-than-1.0/v0.2-greater-than-v0.3#agent-beacon) * [Extension-Kit](https://adaptix-framework.gitbook.io/adaptix-framework/changelog-and-updates/version-0.1-greater-than-1.0/v0.2-greater-than-v0.3#extension-kit) --- # v0.4 -> v0.5 | Adaptix Framework [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/changelog-and-updates/version-0.1-greater-than-1.0/v0.4-greater-than-v0.5#adaptixc2) AdaptixC2 -------------------------------------------------------------------------------------------------------------------------------------------------------------------- **New:** * AdaptixClient now features a **RemoteTerminal** — a fully interactive console ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FLM5q0IM8mPs1iaXRFVNC%252FScreenshot_20250528_181244.png%3Falt%3Dmedia%26token%3D2c6b673c-8482-464b-bd47-744f2ae30218&width=768&dpr=3&quality=100&sign=71a65365&sv=2) * Tunnels can now be created from the **context menu** of the session table or the graph. It is now possible to build tunnels via AdaptixClient (**clienside**), not just through Teamserver. The tunnel mechanism has been reworked to correctly handle SSL frame formation. Information about whether a specific type of tunnel is supported by the agent is included in the tunnel configuration ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252F00sBqyr0gR0UcSEtm4nG%252FScreenshot_20250528_133227.png%3Falt%3Dmedia%26token%3D1632792c-fa25-4769-8a92-6cb0d11123d0&width=768&dpr=3&quality=100&sign=38eb333a&sv=2) * Command parameters can now have an empty default value * Screenshot zoom is now limited to values between x0.3 and x4.0 * Columns in the TasksTable have been updated. Active tunnels are now marked as **Running** instead of **Hosted** * A [**Blogs**](https://adaptix-framework.gitbook.io/adaptix-framework/blogs) section with public materials about AdaptixC2 has been added to the documentation. **Fix:** * New methods are now used for newer versions of Qt libraries instead of deprecated ones * Indentation in tables no longer relies on QtDelegate — it is now fully implemented using QSS styles. This resolves the issue of colored spaces appearing in some tables * Fixed an issue where the client window could shrink on startup [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/changelog-and-updates/version-0.1-greater-than-1.0/v0.4-greater-than-v0.5#agent-beacon) Agent Beacon -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- **New:** * Add Custom BOF API `AxAddScreenshot` **Fix:** * Fixed the header value processing mechanism in the **BeaconHTTP** listener: [Pull Request #53arrow-up-right](https://github.com/Adaptix-Framework/AdaptixC2/pull/53) (by [D4rthMaulCoparrow-up-right](https://github.com/D4rthMaulCop) ) [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/changelog-and-updates/version-0.1-greater-than-1.0/v0.4-greater-than-v0.5#agent-gopher) Agent Gopher -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- **New:** * Added Windows support ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FIpv0YM6m7prdaTjxcEG0%252FScreenshot_20250528_181011.png%3Falt%3Dmedia%26token%3D80727a31-87c1-4553-b83d-5bd2a4fe868f&width=768&dpr=3&quality=100&sign=f44e8330&sv=2) * Support for multithreaded parallel SOCKS5 tunnels has been implemented. * Added **Cancel** function to the Downloads Storage * Added **Exit** option to the context menu in the session table and the graph * **FilesBrowser** now supports both file **download** and **upload** **Fix:** * Symbolic links are now recognized, and **FilesBrowser** correctly displays them as either files or directories * File downloads were previously very slow due to a chunk size of only 10 bytes. The default chunk size for downloads is now 1 MB [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/changelog-and-updates/version-0.1-greater-than-1.0/v0.4-greater-than-v0.5#extension-kit) Extension-Kit ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- **New BOFs:** * Postex-BOF: `screenshot_bof` [Previousv0.3 -> v0.4chevron-left](https://adaptix-framework.gitbook.io/adaptix-framework/changelog-and-updates/version-0.1-greater-than-1.0/v0.3-greater-than-v0.4) [Nextv0.5 -> v0.6chevron-right](https://adaptix-framework.gitbook.io/adaptix-framework/changelog-and-updates/version-0.1-greater-than-1.0/v0.5-greater-than-v0.6) Last updated 10 months ago * [AdaptixC2](https://adaptix-framework.gitbook.io/adaptix-framework/changelog-and-updates/version-0.1-greater-than-1.0/v0.4-greater-than-v0.5#adaptixc2) * [Agent Beacon](https://adaptix-framework.gitbook.io/adaptix-framework/changelog-and-updates/version-0.1-greater-than-1.0/v0.4-greater-than-v0.5#agent-beacon) * [Agent Gopher](https://adaptix-framework.gitbook.io/adaptix-framework/changelog-and-updates/version-0.1-greater-than-1.0/v0.4-greater-than-v0.5#agent-gopher) * [Extension-Kit](https://adaptix-framework.gitbook.io/adaptix-framework/changelog-and-updates/version-0.1-greater-than-1.0/v0.4-greater-than-v0.5#extension-kit) --- # v0.6 -> v0.7 | Adaptix Framework circle-exclamation Extension-Kit extensions need to be reinstalled [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/changelog-and-updates/version-0.1-greater-than-1.0/v0.6-greater-than-v0.7#adaptixc2) AdaptixC2 -------------------------------------------------------------------------------------------------------------------------------------------------------------------- **New:** * **Added Credential Manager** ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FID2mES4X6UgMzL9ONbkS%252FScreenshot_20250728_181635.png%3Falt%3Dmedia%26token%3D61057243-e551-4475-b1b4-8aa734803ca3&width=768&dpr=3&quality=100&sign=a75449a4&sv=2) * Implemented the **AxScript scripting engine**. Added **AxScript Console** for testing AX scripts and displaying error information from user scripts. ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FzMyDGyMYJNLQR6HXnY7N%252FScreenshot_20250728_185414.png%3Falt%3Dmedia%26token%3D17a21b0b-55b8-4391-92dd-87f1d3f76cba&width=768&dpr=3&quality=100&sign=b5769b70&sv=2) * The **menu in the Sessions table and Sessions graph** is now generated using AxScript. The **FileBrowser menu** is now generated using AxScript. The **DownloadsManager menu** is now generated using AxScript. * Registration of **'listener'** and **'agent'** extenders is now done through AxScript. The extender model has been significantly simplified. * It is now possible to set the **127.0.0.1** address for the Teamserver. * Help output in the client is now formatted. **Fix:** * Fixed multithreading issues when working with tunnels. * Dockerfile updated to the required Go version. [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/changelog-and-updates/version-0.1-greater-than-1.0/v0.6-greater-than-v0.7#agent-beacon) Agent Beacon -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- **New:** * Added detection of **Windows Server 2025** (by [Xre0uSarrow-up-right](https://github.com/Xre0uS) ). * Added additional validation for data received from the server (by [Xre0uSarrow-up-right](https://github.com/Xre0uS) ). * Implemented Beacon DLL execution via **rundll32** (by [**0xShkk**arrow-up-right](https://github.com/0xShkk) ). * Rewritten the **BOF loader** implementation. * The agent no longer determines the **impersonation token**. * Added **Execute** and **Remove** menu items in FileBrowser. **Fix:** * Fixed a potential agent hang during connection failure (by [Xre0uSarrow-up-right](https://github.com/Xre0uS) ). * Listener: fixed **X-Forwarded-For** header check function (by [Xre0uSarrow-up-right](https://github.com/Xre0uS) ). * Fixed **BeaconFormatAlloc** function, which could cause Beacon to crash (by [_undefo_arrow-up-right](https://github.com/undefo) ). * The `ps run` command now correctly passes arguments to the application. [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/changelog-and-updates/version-0.1-greater-than-1.0/v0.6-greater-than-v0.7#agent-gopher) Agent Gopher -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- **New:** * Added **BOF support** for Windows (by [_undefo_arrow-up-right](https://github.com/undefo) ). ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252F8Eq2ZvspeOivIebQZeBj%252FScreenshot_20250728_184800.png%3Falt%3Dmedia%26token%3D5ec7e5a6-b556-43a8-8ce6-b3fe73354c43&width=768&dpr=3&quality=100&sign=8d45e896&sv=2) * The process list is now displayed as a **tree**. ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FwC71AXf7cVh6ivqZtdkh%252FScreenshot_20250728_184927.png%3Falt%3Dmedia%26token%3D147211e7-781b-40c9-8de0-c6b71f6cb86c&width=768&dpr=3&quality=100&sign=940d3df7&sv=2) * Updated the `run` command: now requires specifying the target program directly, rather than running through `cmd.exe` or `/bin/sh`. * Added `rev2self` command. [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/changelog-and-updates/version-0.1-greater-than-1.0/v0.6-greater-than-v0.7#extension-kit) Extension-Kit ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- * Added BOF **No-Consolation** ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FbLLXa0MnBhCqDDqDngzN%252FScreenshot_20250728_184900.png%3Falt%3Dmedia%26token%3Dadb2d6ff-7213-4241-965d-9487f65a6e44&width=768&dpr=3&quality=100&sign=87dc1128&sv=2) * Added BOF **nanodump** ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252F1nfMuqq8fk2AJDW3EWO5%252FScreenshot_20250728_184912.png%3Falt%3Dmedia%26token%3D693c9b84-1814-4f08-8b32-e74a872ae03b&width=768&dpr=3&quality=100&sign=5640c90e&sv=2) * Added BOF **potato-dcom** ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FeRepOLWfedc92UxLACKB%252FScreenshot_20250728_184848.png%3Falt%3Dmedia%26token%3Dd69ee8e3-8717-445a-abb5-73e1efc3fe50&width=768&dpr=3&quality=100&sign=5db8aff&sv=2) * Fixed BOF **askcreds** * Updated BOFs: `token_make`, `token_steal`, and `getsystem_token` (impersonation will now be added to the Sessions table). * Added **Hashdump**, **Screenshot**, and **Get System** menu items to the **Access** menu for both the **Sessions Table** and **Sessions Graph**. ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FivYUtHUhtMNlkgnjlc6q%252FScreenshot_20250728_184734.png%3Falt%3Dmedia%26token%3D57fb5855-d393-4456-88e6-8ef6cb87a04f&width=768&dpr=3&quality=100&sign=fb1b0a56&sv=2) [Previousv0.5 -> v0.6chevron-left](https://adaptix-framework.gitbook.io/adaptix-framework/changelog-and-updates/version-0.1-greater-than-1.0/v0.5-greater-than-v0.6) [Nextv0.7 -> v0.8chevron-right](https://adaptix-framework.gitbook.io/adaptix-framework/changelog-and-updates/version-0.1-greater-than-1.0/v0.7-greater-than-v0.8) Last updated 8 months ago * [AdaptixC2](https://adaptix-framework.gitbook.io/adaptix-framework/changelog-and-updates/version-0.1-greater-than-1.0/v0.6-greater-than-v0.7#adaptixc2) * [Agent Beacon](https://adaptix-framework.gitbook.io/adaptix-framework/changelog-and-updates/version-0.1-greater-than-1.0/v0.6-greater-than-v0.7#agent-beacon) * [Agent Gopher](https://adaptix-framework.gitbook.io/adaptix-framework/changelog-and-updates/version-0.1-greater-than-1.0/v0.6-greater-than-v0.7#agent-gopher) * [Extension-Kit](https://adaptix-framework.gitbook.io/adaptix-framework/changelog-and-updates/version-0.1-greater-than-1.0/v0.6-greater-than-v0.7#extension-kit) --- # Gopher BOFs | Adaptix Framework **AX BOF APIs:** Copy void AxAddScreenshot(char* note, char* data, int len); void AxDownloadMemory(char* filename, char* data, int len); **Beacon currently supports the following BOF APIs:** Copy // Data Parser API char* BeaconDataExtract (datap * parser, int * size) int BeaconDataInt (datap * parser) int BeaconDataLength (datap * parser) void BeaconDataParse (datap * parser, char * buffer, int size) short BeaconDataShort (datap * parser) // Output API void BeaconPrintf (int type, char * fmt, ...) void BeaconOutput (int type, char * data, int len) // Format API void BeaconFormatAlloc (formatp * obj, int maxsz) void BeaconFormatAppend (formatp * obj, char * data, int len) void BeaconFormatFree (formatp * obj) void BeaconFormatInt (formatp * obj, int val) void BeaconFormatPrintf (formatp * obj, char * fmt, ...) void BeaconFormatReset (formatp * obj) char* BeaconFormatToString (formatp * obj, int * size) // Internal APIs BOOL BeaconUseToken (HANDLE token) void BeaconRevertToken () BOOL BeaconIsAdmin () BOOL toWideChar (char * src, wchar_t * dst, int max) BOOL BeaconAddValue (const char * key, void * ptr); void* BeaconGetValue (const char * key); BOOL BeaconRemoveValue (const char * key); **Unsupported BOF APIs:** [PreviousGopherchevron-left](https://adaptix-framework.gitbook.io/adaptix-framework/extenders/agents/gopher) [NextAxScriptchevron-right](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript) Last updated 6 months ago Copy void BeaconDataPtr(datap * parser, int size) void BeaconGetSpawnTo (BOOL x86, char * buffer, int length) BOOL BeaconSpawnTemporaryProcess (BOOL x86, BOOL ignoreToken, STARTUPINFO * sInfo, PROCESS_INFORMATION * pInfo) void BeaconInjectProcess (HANDLE hProc, int pid, char * payload, int payload_len, int payload_offset, char * arg, int arg_len) void BeaconInjectTemporaryProcess (PROCESS_INFORMATION * pInfo, char * payload, int payload_len, int payload_offset, char * arg, int arg_len) void BeaconCleanupProcess (PROCESS_INFORMATION * pInfo) PDATA_STORE_OBJECT BeaconDataStoreGetItem (size_t index) void BeaconDataStoreProtectItem (size_t index) void BeaconDataStoreUnprotectItem (size_t index) size_t BeaconDataStoreMaxEntries () void BeaconInformation (BEACON_INFO * info); char* BeaconGetCustomUserData () BOOL BeaconGetSyscallInformation(PBEACON_SYSCALLS info, BOOL resolveIfNotInitialized) LPVOID BeaconVirtualAlloc(LPVOID lpAddress, SIZE_T dwSize, DWORD flAllocationType, DWORD flProtect); LPVOID BeaconVirtualAllocEx(HANDLE processHandle, LPVOID lpAddress, SIZE_T dwSize, DWORD flAllocationType, DWORD flProtect); BOOL BeaconVirtualProtect(LPVOID lpAddress, SIZE_T dwSize, DWORD flNewProtect, PDWORD lpflOldProtect); BOOL BeaconVirtualProtectEx(HANDLE processHandle, LPVOID lpAddress, SIZE_T dwSize, DWORD flNewProtect, PDWORD lpflOldProtect); BOOL BeaconVirtualFree(LPVOID lpAddress, SIZE_T dwSize, DWORD dwFreeType); BOOL BeaconGetThreadContext(HANDLE threadHandle, PCONTEXT threadContext); BOOL BeaconSetThreadContext(HANDLE threadHandle, PCONTEXT threadContext); DWORD BeaconResumeThread(HANDLE threadHandle); HANDLE BeaconOpenProcess(DWORD desiredAccess, BOOL inheritHandle, DWORD processId); HANDLE BeaconOpenThread(DWORD desiredAccess, BOOL inheritHandle, DWORD threadId); BOOL BeaconCloseHandle(HANDLE object); BOOL BeaconUnmapViewOfFile(LPCVOID baseAddress); SIZE_T BeaconVirtualQuery(LPCVOID address, PMEMORY_BASIC_INFORMATION buffer, SIZE_T length); BOOL BeaconDuplicateHandle(HANDLE hSourceProcessHandle, HANDLE hSourceHandle, HANDLE hTargetProcessHandle, LPHANDLE lpTargetHandle, DWORD dwDesiredAccess, BOOL bInheritHandle, DWORD dwOptions); BOOL BeaconReadProcessMemory(HANDLE hProcess, LPCVOID lpBaseAddress, LPVOID lpBuffer, SIZE_T nSize, SIZE_T *lpNumberOfBytesRead); BOOL BeaconWriteProcessMemory(HANDLE hProcess, LPVOID lpBaseAddress, LPCVOID lpBuffer, SIZE_T nSize, SIZE_T *lpNumberOfBytesWritten); VOID BeaconDisableBeaconGate(); VOID BeaconEnableBeaconGate(); --- # Version 0.1 -> 1.0 | Adaptix Framework [v0.1 -> v0.2chevron-right](https://adaptix-framework.gitbook.io/adaptix-framework/changelog-and-updates/version-0.1-greater-than-1.0/v0.1-greater-than-v0.2) [v0.2 -> v0.3chevron-right](https://adaptix-framework.gitbook.io/adaptix-framework/changelog-and-updates/version-0.1-greater-than-1.0/v0.2-greater-than-v0.3) [v0.3 -> v0.4chevron-right](https://adaptix-framework.gitbook.io/adaptix-framework/changelog-and-updates/version-0.1-greater-than-1.0/v0.3-greater-than-v0.4) [v0.4 -> v0.5chevron-right](https://adaptix-framework.gitbook.io/adaptix-framework/changelog-and-updates/version-0.1-greater-than-1.0/v0.4-greater-than-v0.5) [v0.5 -> v0.6chevron-right](https://adaptix-framework.gitbook.io/adaptix-framework/changelog-and-updates/version-0.1-greater-than-1.0/v0.5-greater-than-v0.6) [v0.6 -> v0.7chevron-right](https://adaptix-framework.gitbook.io/adaptix-framework/changelog-and-updates/version-0.1-greater-than-1.0/v0.6-greater-than-v0.7) [v0.7 -> v0.8chevron-right](https://adaptix-framework.gitbook.io/adaptix-framework/changelog-and-updates/version-0.1-greater-than-1.0/v0.7-greater-than-v0.8) [v0.8 -> v0.9chevron-right](https://adaptix-framework.gitbook.io/adaptix-framework/changelog-and-updates/version-0.1-greater-than-1.0/v0.8-greater-than-v0.9) [v0.9 -> v0.10chevron-right](https://adaptix-framework.gitbook.io/adaptix-framework/changelog-and-updates/version-0.1-greater-than-1.0/v0.9-greater-than-v0.10) [v0.10 -> v0.11chevron-right](https://adaptix-framework.gitbook.io/adaptix-framework/changelog-and-updates/version-0.1-greater-than-1.0/v0.10-greater-than-v0.11) [Version 1.0chevron-right](https://adaptix-framework.gitbook.io/adaptix-framework/changelog-and-updates/version-0.1-greater-than-1.0/version-1.0) [PreviousChangeLog and Updateschevron-left](https://adaptix-framework.gitbook.io/adaptix-framework/changelog-and-updates) [Nextv0.1 -> v0.2chevron-right](https://adaptix-framework.gitbook.io/adaptix-framework/changelog-and-updates/version-0.1-greater-than-1.0/v0.1-greater-than-v0.2) Last updated 2 months ago --- # Process Browser | Adaptix Framework The Process Browser displays information about processes. When the Process Browser is launched, **no requests are made to the server**. To send a request to the server, you must click the Refresh button ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FwaspTq83XEWIT06VALQu%252F40.png%3Falt%3Dmedia%26token%3D3343f776-f79c-40a7-beea-dd4db5448f1c&width=300&dpr=3&quality=100&sign=1e42f943&sv=2). The Process Browser on the left displays the processes in a tree view. The table on the right displays detailed information about the processes. The current process running the agent is displayed in red. Windows Unix ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FwaeMfB6yipzBwiLdpcJd%252F41.png%3Falt%3Dmedia%26token%3D0d8549cc-4cee-4892-adf3-dfd09d57be26&width=768&dpr=3&quality=100&sign=a812f9c0&sv=2) ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252F3DLZZPemqW27QULUxDdY%252FScreenshot_20250427_123332.png%3Falt%3Dmedia%26token%3Df02f6753-3c37-434a-8c56-a28706005dc6&width=768&dpr=3&quality=100&sign=d011aac3&sv=2) The "Wait" status indicates that the request is currently being processed. The "Ok" status displays the date and time of the response. Wait ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FNgRJ5ZJGq7rogodRhkME%252F42.png%3Falt%3Dmedia%26token%3D5337b2cb-95ca-43f8-b176-8fdf8606585a&width=300&dpr=3&quality=100&sign=5d1bc11c&sv=2) Ok ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252Fm4fnP0DGgBKM80XUVzBF%252F43.png%3Falt%3Dmedia%26token%3Da552190a-0f5a-444a-8e58-5da7129e26d0&width=300&dpr=3&quality=100&sign=2c1a6228&sv=2) File Browser allows you to filter processes by a substring from any column. ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FJiPsD4hcekv79NbB7ykN%252F44.png%3Falt%3Dmedia%26token%3D000f9dc3-8a6b-4434-ab13-7ccba6e89264&width=768&dpr=3&quality=100&sign=9d082616&sv=2) From the context menu of the process table you can copy the PID of the selected process. ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FZMztJ1rtAwAHqM0cGJtZ%252F45.png%3Falt%3Dmedia%26token%3D6a9d6bba-14c7-4bbe-a264-a757077ac699&width=768&dpr=3&quality=100&sign=ff0e9dae&sv=2) [PreviousFile Browserchevron-left](https://adaptix-framework.gitbook.io/adaptix-framework/adaptix-c2/agent-browsers/file-browser) [NextRemote Terminal / Shellchevron-right](https://adaptix-framework.gitbook.io/adaptix-framework/adaptix-c2/agent-browsers/remote-terminal-shell) Last updated 11 months ago --- # Beacon DNS | Adaptix Framework Beacon supports DNS and DoH listeners. DNS/DoH mode is specified during agent generation. ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252F35JmMn76klLoEq2if5Fd%252FScreenshot_20260129_112043.png%3Falt%3Dmedia%26token%3D9e9b158f-e35e-4b03-b080-0ab3eaf9a558&width=768&dpr=3&quality=100&sign=d09f7066&sv=2) [PreviousBeacon HTTPchevron-left](https://adaptix-framework.gitbook.io/adaptix-framework/extenders/listeners/beacon-http) [NextBeacon SMBchevron-right](https://adaptix-framework.gitbook.io/adaptix-framework/extenders/listeners/beacon-smb) Last updated 2 months ago --- # Screenshots Manager | Adaptix Framework The Screenshots tab displays all your saved screenshots. ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252F5A8v85iW9eLojkLvTl9l%252FScreenshot_20250427_214233.png%3Falt%3Dmedia%26token%3Db10cd5f6-1ea4-4c8f-8eb2-5cb5e7ab7879&width=768&dpr=3&quality=100&sign=429e903c&sv=2) The context menu provides the ability to add a note to the screenshot, download the image, or delete it from the database. ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252F0NDyhkTXDp2opK2M9ZUn%252FScreenshot_20250427_214754.png%3Falt%3Dmedia%26token%3D13a17e4c-dd90-4656-9623-febe553f5d82&width=768&dpr=3&quality=100&sign=afa8b1cf&sv=2) Zoom screenshot: + Mouse wheel [PreviousCredentials Managerchevron-left](https://adaptix-framework.gitbook.io/adaptix-framework/adaptix-c2/data-management/credentials-manager) [NextBOF and Extensionschevron-right](https://adaptix-framework.gitbook.io/adaptix-framework/adaptix-c2/bof-and-extensions) Last updated 11 months ago --- # Beacon TCP | Adaptix Framework The "Beacon TCP" uses a TCP socket to communicate through a parent Beacon agent. This peer-to- peer communication works with Beacons on the same host and across the network. ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252Ff5nVv18cufTfNQHH13Ws%252FScreenshot_20251229_201048.png%3Falt%3Dmedia%26token%3Dc4210137-9956-4f03-8b12-1aa89c4c06fe&width=768&dpr=3&quality=100&sign=687fb0f0&sv=2) * **Bind port —** Default TCP Beacon listen port * **Prepend data —** Prepend header to TCP Beacon messages * **Enctyption key —** Communication channel encryption key [PreviousBeacon SMBchevron-left](https://adaptix-framework.gitbook.io/adaptix-framework/extenders/listeners/beacon-smb) [NextGopher TCPchevron-right](https://adaptix-framework.gitbook.io/adaptix-framework/extenders/listeners/gopher-tcp) Last updated 3 months ago --- # v1.1 -> v1.2 | Adaptix Framework circle-info Contributors to the GitHub update include: [Hesti4arrow-up-right](https://github.com/Hesti4) , [Sakura529arrow-up-right](https://github.com/Sakura529) , [LongWayHomiearrow-up-right](https://github.com/LongWayHomie) , [BlackMeerkatarrow-up-right](https://github.com/BlackMeerkat) , [sagiolarrow-up-right](https://github.com/sagiol) , [shashinmaarrow-up-right](https://github.com/shashinma) [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/changelog-and-updates/v1.1-greater-than-v1.2#adaptixc2) AdaptixC2 --------------------------------------------------------------------------------------------------------------------------------------- circle-exclamation Building the client now requires QT > 6.8.0. If your Linux system uses a different version by default, use Docker to build the AppImage file. **New:** * Added static AppImage client build to Docker. Windows builds are now performed using a batch script via MSYS2. * AxScript now has a full server implementation. Scripts can be loaded via a profile file. * The server no longer stores data in memory. All data processing is performed directly in the database. * Web socket authentication is now performed only via OTP tokens. * QSS themes are no longer used, and most old fonts have been removed from the client application. To ensure a consistent appearance across all systems, screen resolutions, zoom levels, and other settings, QLementine styles have been selected. The default font is now JetBrains Mono, and for the terminal, Hack. * You can now specify a custom application style and a console style in the settings. * The ability to notify about events in Slack, Telegram, and WebHook has been removed from TeamServer. * The method for transferring files and data (more than 3 MB) from the client to the server has been updated and optimized. * New WEB API: `/screen/image`, `/agent/command/raw`. **Fix:** * Now the listener is saved even if its start was unsuccessful. * * * [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/changelog-and-updates/v1.1-greater-than-v1.2#beacon) Beacon --------------------------------------------------------------------------------------------------------------------------------- **New:** * Implemented Async BOF function. * The `ps run` command now supports the `-i` flag, a new process will be started with the current session token. * Multiple URIs, User-Agents, and Host Headers with rotation: the HTTP beacon now supports configuring multiple values for URIs, User-Agents, and Host Headers (by [Hesti4arrow-up-right](https://github.com/Hesti4) ) * Rotation modes (sequential / random): a new "Rotation Mode" option in the agent build config lets operators choose between round-robin (sequential) and randomized rotation for all rotating fields (servers, URIs, UAs, Host Headers) (by [Hesti4arrow-up-right](https://github.com/Hesti4) ) * Active round-robin for servers: server rotation now happens on every callback (not only on failure), distributing traffic across all configured C2 addresses (by [Hesti4arrow-up-right](https://github.com/Hesti4) ) * Add IAT Hiding support (by [Hesti4arrow-up-right](https://github.com/Hesti4) ) **Fix:** * Fix infinite recursion issue in GetSymbolAddress when handling API Set DLLs (by [Sakura529arrow-up-right](https://github.com/Sakura529) ) * * * [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/changelog-and-updates/v1.1-greater-than-v1.2#gopher) Gopher --------------------------------------------------------------------------------------------------------------------------------- **New:** * Implemented Async BOF function * Implement C-style printf specifiers and BeaconFormat API suite **Fix:** * Prevent GC from collecting DataExtract buffers * * * [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/changelog-and-updates/v1.1-greater-than-v1.2#extension-kit) Extension-Kit ----------------------------------------------------------------------------------------------------------------------------------------------- **New:** * Add docker compose for building (by [shashinmaarrow-up-right](https://github.com/shashinma) ) * Add procfreeze-bof (by [Sakura529arrow-up-right](https://github.com/Sakura529) ) * SQL-BOF: Adding SQL Server authentication support (by [LongWayHomiearrow-up-right](https://github.com/LongWayHomie) ) * Add explicit credential support WinRM BOF (by [BlackMeerkatarrow-up-right](https://github.com/BlackMeerkat) ) * Add SAL-BOFs: privcheck all, privcheck modautorun, privcheck modsvc, privcheck pshistory, privcheck uacstatus * Kerberus-BOF asktgt now has /service options * Kerberus-BOF asktgs now has /dmsa and /enterprise options * Kerberus-BOF s4u now has /targetdomain, /targetdc, and /impersonateddomain options * Added Extrated LAPS password to credentials manager (by [sagiolarrow-up-right](https://github.com/sagiol) ) * `execute-assembly` `sauroneye` `askcreds` `smartscan` now has a `--async` option for use as an asynchronous BOF [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/changelog-and-updates/v1.1-greater-than-v1.2#templates-extender) templates-extender --------------------------------------------------------------------------------------------------------------------------------------------------------- * Changed TS API: [Previousv1.0 -> v1.1chevron-left](https://adaptix-framework.gitbook.io/adaptix-framework/changelog-and-updates/v1.0-greater-than-v1.1) [NextGetting Startingchevron-right](https://adaptix-framework.gitbook.io/adaptix-framework/adaptix-c2/getting-starting) Last updated 1 month ago * [AdaptixC2](https://adaptix-framework.gitbook.io/adaptix-framework/changelog-and-updates/v1.1-greater-than-v1.2#adaptixc2) * [Beacon](https://adaptix-framework.gitbook.io/adaptix-framework/changelog-and-updates/v1.1-greater-than-v1.2#beacon) * [Gopher](https://adaptix-framework.gitbook.io/adaptix-framework/changelog-and-updates/v1.1-greater-than-v1.2#gopher) * [Extension-Kit](https://adaptix-framework.gitbook.io/adaptix-framework/changelog-and-updates/v1.1-greater-than-v1.2#extension-kit) * [templates-extender](https://adaptix-framework.gitbook.io/adaptix-framework/changelog-and-updates/v1.1-greater-than-v1.2#templates-extender) Copy TsDownloadAdd(agentId string, fileId string, fileName string, fileSize int) error ---> TsDownloadAdd(agentId string, fileId string, fileName string, fileSize int64) error --- # Downloads Manager | Adaptix Framework The Downloads Tab displays all current or completed downloads. ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FjsCu2HeSe8EhWLG0UkN3%252F52.png%3Falt%3Dmedia%26token%3D07070220-6b6e-4d7a-b63b-018b2ce66112&width=768&dpr=3&quality=100&sign=f67f7bf4&sv=2) The context menu provides options to cancel the download, as well as stop and resume the download. ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FtQx7xgyIr2UAahiYhSXu%252F53.png%3Falt%3Dmedia%26token%3Daed1de7b-3ee0-4def-ab95-5b003fe0473e&width=768&dpr=3&quality=100&sign=8eeb84b0&sv=2) The downloaded files are stored on AdaptixServer. To copy a file from the server to the client system, select it and click "Sync file to client". Adaptix will then download the selected files to the folder on your system that you selected in the dialog box. ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FOweMGJb9UjfGuV5V9uGO%252F54.png%3Falt%3Dmedia%26token%3De04fda7a-0a98-483d-9a47-e924d2ef1e44&width=768&dpr=3&quality=100&sign=311fd2ac&sv=2) [PreviousTasks managerchevron-left](https://adaptix-framework.gitbook.io/adaptix-framework/adaptix-c2/data-management/tasks-manager) [NextTargets Managerchevron-right](https://adaptix-framework.gitbook.io/adaptix-framework/adaptix-c2/data-management/targets-manager) Last updated 1 year ago --- # Starting | Adaptix Framework [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/adaptix-c2/getting-starting/starting#adaptixserver) AdaptixServer --------------------------------------------------------------------------------------------------------------------------------------- The necessary parameters for starting the AdaptixServer can be passed via command line parameters or via a configuration file. ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FFVyygaIfLH5Nxjp7Xhku%252F%25D0%25A1%25D0%25BD%25D0%25B8%25D0%25BC%25D0%25BE%25D0%25BA%2520%25D1%258D%25D0%25BA%25D1%2580%25D0%25B0%25D0%25BD%25D0%25B0_20260228_212214.png%3Falt%3Dmedia%26token%3D52417844-8b02-424a-a6e3-c12e4a3b0763&width=768&dpr=3&quality=100&sign=732aec10&sv=2) The configuration file is specified in the `-profile` parameter and must contain a profile in YAML format. **Teamserver**: * **port** - port for client connection * **endpoint** - URN for connecting clients * **password** - authenticator for clients * **only\_password** — If `true`, only password authentication is used for any login (Cobalt Strike mode). If `false`, authentication is used with strictly defined logins and passwords. * **cert** and **key** - SSL Certificate and Key for web server * **extender** - array of strings-paths to go-plugins * **axscripts -** array of strings-paths to AX Scripts * **access\_token\_live\_hours** & **refresh\_token\_live\_hours** - The validity period of the JWT token that the client receives after authorization. **ServerResponse:** * error.status - web server response code in case of an illegitimate request * error.headers - web server HTTP Headers * error.page - the path to the file whose contents will be returned in the web server's response * http - HTTP server settings * tls - HTTP server cipher settings To run adaptixserver you need an SSL certificate. You can generate your own using the ssl\_gen script. After starting AdaptixServer, a `data` directory will be created next to the server executable file. The server database file and all other files will be created in the `data` directory. ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FYIWWiuqFtfDkrB69gGAW%252FScreenshot_20260129_110737.png%3Falt%3Dmedia%26token%3D67432801-2f80-4bd3-94ad-6d90d6df783b&width=768&dpr=3&quality=100&sign=4c97d915&sv=2) [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/adaptix-c2/getting-starting/starting#adaptixclient) AdaptixClient --------------------------------------------------------------------------------------------------------------------------------------- After the AdaptixClient is launched, a directory named `.adaptix` will be created in the user's home directory. The AdaptixClient database file will be saved in the `.adaptix` directory. In the authorization form, you must specify the profile data, user nickname (any nick), and the name of the local project. ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252F9hdgkGqMp24rMLbvgPDn%252FScreenshot_20260129_105731.png%3Falt%3Dmedia%26token%3D0caee325-eadd-4398-b671-a9598b91b938&width=768&dpr=3&quality=100&sign=1bf6c89f&sv=2) When authorizing, you can select which data will be synchronized with the server. ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FEZNwKxARcKh73m1SLfIR%252FScreenshot_20260129_105805.png%3Falt%3Dmedia%26token%3D21f1f91f-1a97-4743-8b61-1046714316d3&width=768&dpr=3&quality=100&sign=fcec7e0c&sv=2) After synchronizing data with the server, the main AdaptixClient window will be available. ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FOKYspOwQrc2jrNGCby4E%252FScreenshot_20251229_204430.png%3Falt%3Dmedia%26token%3Da7a3f02d-8018-4f6d-a965-d239b52f2fd0&width=768&dpr=3&quality=100&sign=a25e0015&sv=2) [PreviousInstallation Clientchevron-left](https://adaptix-framework.gitbook.io/adaptix-framework/adaptix-c2/getting-starting/installation-client) [NextUser Interfacechevron-right](https://adaptix-framework.gitbook.io/adaptix-framework/adaptix-c2/user-interface) Last updated 1 month ago * [AdaptixServer](https://adaptix-framework.gitbook.io/adaptix-framework/adaptix-c2/getting-starting/starting#adaptixserver) * [AdaptixClient](https://adaptix-framework.gitbook.io/adaptix-framework/adaptix-c2/getting-starting/starting#adaptixclient) Copy Teamserver: interface: "0.0.0.0" port: 4321 endpoint: "/endpoint" password: "pass" only_password: true operators: operator1: "pass1" operator2: "pass2" cert: "server.rsa.crt" key: "server.rsa.key" extenders: - "extenders/beacon_listener_http/config.yaml" - "extenders/beacon_listener_smb/config.yaml" - "extenders/beacon_listener_tcp/config.yaml" - "extenders/beacon_listener_dns/config.yaml" - "extenders/beacon_agent/config.yaml" - "extenders/gopher_listener_tcp/config.yaml" - "extenders/gopher_agent/config.yaml" axscripts: # - "Extension-Kit/extension-kit.axs" access_token_live_hours: 12 refresh_token_live_hours: 168 HttpServer: error: status: 404 headers: Content-Type: "text/html; charset=UTF-8" Server: "AdaptixC2" Adaptix-Version: "v1.2" page: "404page.html" http: max_header_bytes: 8192 read_header_timeout_sec: 0 read_timeout_sec: 0 write_timeout_sec: 0 idle_timeout_sec: 0 request_timeout_sec: 300 request_timeout_message: "504 Gateway Timeout" disable_keep_alives: false enable_http2: true tls: min_version: "TLS1.2" max_version: "TLS1.3" prefer_server_cipher_suites: false cipher_suites: - "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256" - "TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384" - "TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256" - "TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384" - "TLS_RSA_WITH_AES_128_GCM_SHA256" - "TLS_RSA_WITH_AES_256_GCM_SHA384" Copy openssl req -x509 -nodes -newkey rsa:2048 -keyout server.rsa.key -out server.rsa.crt -days 3650 Copy ./adaptixserver -profile profile.yaml --- # File Browser | Adaptix Framework File Browser is an opportunity to explore the files on a compromised system. The left-hand side of the file browser is a tree which organizes the known drives and folders into one view. The right-hand side of the file browser shows the contents of the current folder. ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252Fri5Gmw65rVtvIOv5gfch%252F25.png%3Falt%3Dmedia%26token%3D8d1ba232-0b19-4874-bce8-84220c78a31c&width=768&dpr=3&quality=100&sign=ff569264&sv=2) When you launch the File Browser, **no request is made to the server**. If the path is empty, you can click the "Refresh" button ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252F4YdqCaD4hDCPRAqsir1J%252F26.png%3Falt%3Dmedia%26token%3Db9d24dab-701f-4bba-850f-9de0040b9a78&width=300&dpr=3&quality=100&sign=12c16499&sv=2), after which the contents of the working directory will be requested. Another option: specify the desired directory in the path field and click the "Go to" button ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252F6x2zTGNu0RskJV7BhPw1%252F27.png%3Falt%3Dmedia%26token%3Dc236c80d-ca6a-4234-9127-191e004c33d2&width=300&dpr=3&quality=100&sign=21d672c9&sv=2). Windows Unix ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252Fpj2mle4HbU3ElTO4oRYw%252F28.png%3Falt%3Dmedia%26token%3D206f6bb0-b495-4bbd-acf4-833c1fc75057&width=768&dpr=3&quality=100&sign=3b5a4be0&sv=2) ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FzcXxHRAypMZqKX65vUnI%252FScreenshot_20250427_123146.png%3Falt%3Dmedia%26token%3D790e0d55-a0c9-4588-b92f-dc790f8f9961&width=768&dpr=3&quality=100&sign=c1161d7e&sv=2) After each request, File Browser caches the contents of the requested directory. An open folder ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252F9PCFB2ESjKci5yOFlqLv%252F29.png%3Falt%3Dmedia%26token%3Dcaff5d49-c772-4555-b3c8-efd4d1b1044c&width=300&dpr=3&quality=100&sign=9041f2b0&sv=2) (as opposed to a closed folder ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FzJ9UMZNlqA0mAQR8gowf%252F30.png%3Falt%3Dmedia%26token%3Dad3084e6-cfe2-4924-a6ad-4c703d47c017&width=300&dpr=3&quality=100&sign=630992db&sv=2)) indicates that the folder's contents have been cached. You can navigate to cached folders without creating a new file listing request. Click "Refresh" to refresh the contents of the current folder. Double-clicking on a directory in the table or directory tree will cause the browser to navigate to that directory. To go up a level, click the folder button ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252Foylq2ykL1DPz7e9y1ACr%252F34.png%3Falt%3Dmedia%26token%3D87daa456-a81f-4b19-a54e-ba1cf511b415&width=300&dpr=3&quality=100&sign=6cc425b5&sv=2) next to the file path. Along with the directory contents, its status is also cached. The "wait" status indicates that the request is currently being processed. The "Ok" status displays the date and time the response was cached. The "Error" status contains additional information about the cause of the error. Wait ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FEJc1v5H5DWzP76RTCREI%252F31.png%3Falt%3Dmedia%26token%3D069b054e-53e5-4531-ac7f-0c58d8c871ed&width=300&dpr=3&quality=100&sign=55c71f7f&sv=2) Ok ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FC4PuOkTAO2zaJHI9z8V9%252F32.png%3Falt%3Dmedia%26token%3D8507c6d7-19bb-4e97-bef9-7a44b223f4dc&width=300&dpr=3&quality=100&sign=6f16373e&sv=2) Error ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FyRzwtfVHo43vRtroes8A%252F33.png%3Falt%3Dmedia%26token%3D76435941-6522-4cc0-b395-c412e47fe33a&width=300&dpr=3&quality=100&sign=d95f5855&sv=2) To upload a file to the current directory, you can use the "Upload" button ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252Fp3aahwCRl4lA0Sh8gxda%252F35.png%3Falt%3Dmedia%26token%3D28b0f719-7003-4749-a683-6c99fec29211&width=300&dpr=3&quality=100&sign=2091b3f2&sv=2). To download a file from the host, you can use the command from the context menu. ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FotSTpeZrcKVb4OZewFQZ%252F36.png%3Falt%3Dmedia%26token%3Dd70af61c-f8dd-40dd-ba66-6abdddad9560&width=768&dpr=3&quality=100&sign=2cf74f69&sv=2) To see which drives are available, press "Disks" button ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252Fd0BuMBWpjOiY4hUiQ4Pc%252F37.png%3Falt%3Dmedia%26token%3D5bc2fc29-bb96-4e01-aa46-b18688f9ac0e&width=300&dpr=3&quality=100&sign=8ac4e2c&sv=2). ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252Fu9L83ONUaD1CpFqFSnbr%252F38.png%3Falt%3Dmedia%26token%3Da685e5c7-d4a9-488b-a197-1522ad8b7aeb&width=768&dpr=3&quality=100&sign=efc2369d&sv=2) The file browser supports working not only with local disks, but also with network shared directories. ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FHTB4Tc2CB4cxFZgLqRox%252F39.png%3Falt%3Dmedia%26token%3D6654867f-82ce-481c-9588-f5ea9376b2fa&width=768&dpr=3&quality=100&sign=c58d2713&sv=2) [PreviousAgent Browserschevron-left](https://adaptix-framework.gitbook.io/adaptix-framework/adaptix-c2/agent-browsers) [NextProcess Browserchevron-right](https://adaptix-framework.gitbook.io/adaptix-framework/adaptix-c2/agent-browsers/process-browser) Last updated 11 months ago --- # Targets Manager | Adaptix Framework The Targets Tab displays all stored targets. ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FzyrOTuQ86LUZxmAl6GeE%252FScreenshot_20250828_132020.png%3Falt%3Dmedia%26token%3D6de63a92-962c-456d-8a44-c4a5513ad412&width=768&dpr=3&quality=100&sign=8adf1f9b&sv=2) The context menu provides the ability to create a new item, edit or delete an existing one. ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FWqZlcBgebOc0zK6MONGo%252FScreenshot_20251229_210923.png%3Falt%3Dmedia%26token%3D176bc535-e2fa-43c5-9041-ade570211563&width=768&dpr=3&quality=100&sign=e424739f&sv=2) ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FjgYkCokspkOVAHuqzfMt%252FScreenshot_20250828_132442.png%3Falt%3Dmedia%26token%3D4f83dd25-3a02-4297-9939-19f3f9393227&width=768&dpr=3&quality=100&sign=54727248&sv=2) The **Export** menu allows you to export targets in a specific format: ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FQwAylLpLzAUUVWYAlRln%252FScreenshot_20250828_132458.png%3Falt%3Dmedia%26token%3De63f4a21-a7c6-487a-95ea-70012372358b&width=768&dpr=3&quality=100&sign=d4675fad&sv=2) `%computer%` - will be replaced by computer from targets `%domain%` - will be replaced by domain from targets `%address%` - will be replaced by `address` from targets [PreviousDownloads Managerchevron-left](https://adaptix-framework.gitbook.io/adaptix-framework/adaptix-c2/data-management/downloads-manager) [NextCredentials Managerchevron-right](https://adaptix-framework.gitbook.io/adaptix-framework/adaptix-c2/data-management/credentials-manager) Last updated 3 months ago --- # Gopher | Adaptix Framework triangle-exclamation This version of the Gopher agent is not designed for AV or EDR evasion and is therefore not OPSEC compliant. Gopher is primarily intended to test and demonstrate the capabilities of AdaptixC2. However, the Gopher agent can be easily extended and modified, making it compatible with various AV evasion methods. [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/extenders/agents/gopher#configuration) Configuration -------------------------------------------------------------------------------------------------------------------------- ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252F4YzYFL2gSY9SOIzkqXT1%252FScreenshot_20260128_230718.png%3Falt%3Dmedia%26token%3Daf02dd93-f384-483e-ae38-6f1baece814f&width=768&dpr=3&quality=100&sign=a9a2c9b5&sv=2) Gopher can work with several listeners at once, changing them if the current transport is unavailable. Gopher currently **supports Windows, Linux and MacOS**. The Gopher can be generated **for amd64 and arm64** architectures. [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/extenders/agents/gopher#commands) Commands ---------------------------------------------------------------------------------------------------------------- Gopher currently supports the following commands. ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FXCLqdNoKcTHTQOZQoKA5%252FScreenshot_20250427_215852.png%3Falt%3Dmedia%26token%3D5bce04f8-b6c4-4ca0-9f22-ca1f05aafb91&width=768&dpr=3&quality=100&sign=e6a9db8e&sv=2) The **download** and **run** commands create a new parallel connection. The **job kill** command can stop the download or execution of a command/script. [PreviousBeacon BOFschevron-left](https://adaptix-framework.gitbook.io/adaptix-framework/extenders/agents/beacon/beacon-bofs) [NextGopher BOFschevron-right](https://adaptix-framework.gitbook.io/adaptix-framework/extenders/agents/gopher/gopher-bofs) Last updated 2 months ago * [Configuration](https://adaptix-framework.gitbook.io/adaptix-framework/extenders/agents/gopher#configuration) * [Commands](https://adaptix-framework.gitbook.io/adaptix-framework/extenders/agents/gopher#commands) --- # Gopher TCP | Adaptix Framework "Gopher TCP" listener starts a tcp/mtls server and registers a "gopher" agent. ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252F2IrY86OwaVR4E00FITxS%252FScreenshot_20251229_201056.png%3Falt%3Dmedia%26token%3D24bc34d0-599b-4fa7-ad9a-e48acbb4c809&width=768&dpr=3&quality=100&sign=608e766e&sv=2) Parameter Description **Host & port (Bind)** **Required.** The interface address and port to which your TCP Gopher server will bind. **Callback addresses** **Required.** List of address:port to which the agent will send requests. Current server rotation strategy: round-robin. **Timeout (sec)** The time to wait between connections in the event of a connection failure or interruption **TCP banner** Data that the server will send when any client connects to the port **Error answer** Server response if agent is not registered **Encryption key** Communication channel encryption key **Use mTLS** If set, use mTLS. Certificates and keys are not generated on the server **How to Generate Certificates and Keys for mTLS** [PreviousBeacon TCPchevron-left](https://adaptix-framework.gitbook.io/adaptix-framework/extenders/listeners/beacon-tcp) [NextAgentschevron-right](https://adaptix-framework.gitbook.io/adaptix-framework/extenders/agents) Last updated 3 months ago Copy # CA cert openssl genrsa -out ca.key 2048 openssl req -x509 -new -nodes -key ca.key -sha256 -days 3650 -out ca.crt -subj "/CN=Test CA" # server cert and key openssl genrsa -out server.key 2048 openssl req -new -key server.key -out server.csr -subj "/CN=localhost" openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt -days 365 -sha256 # client cert and key openssl genrsa -out client.key 2048 openssl req -new -key client.key -out client.csr -subj "/CN=client" openssl x509 -req -in client.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out client.crt -days 365 -sha256 --- # Credentials Manager | Adaptix Framework The Credentials Tab displays all stored credentials. ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FtXdtuzqWadRQS8fCzrrb%252FScreenshot_20250728_181635.png%3Falt%3Dmedia%26token%3D71cfc370-5b23-42ac-9802-843090558f17&width=768&dpr=3&quality=100&sign=6cc2efc6&sv=2) The context menu provides the ability to create a new item, edit or delete an existing one. ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FA7u0c2uukkOYoa5hzoWi%252FScreenshot_20251229_211127.png%3Falt%3Dmedia%26token%3D3b45ccbe-3317-4c00-ab36-625b71c74534&width=768&dpr=3&quality=100&sign=acc1cbcc&sv=2) ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FalaJ3khdC3SIm1PEEmPW%252FScreenshot_20250728_181702.png%3Falt%3Dmedia%26token%3D838a326f-866a-49ed-b4ff-1f70ee0bd3da&width=768&dpr=3&quality=100&sign=25669e57&sv=2) The **Export** menu allows you to export credentials in a specific format: ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252F7ddgkeGneUw6RkjPlZAU%252FScreenshot_20251229_211144.png%3Falt%3Dmedia%26token%3D22a2f1e8-b823-45b2-8d14-4bb38d44cb39&width=768&dpr=3&quality=100&sign=b894354f&sv=2) `%realm%` - will be replaced by realm from credentials `%username%` - will be replaced by username from credentials `%password%` - will be replaced by password from credentials [PreviousTargets Managerchevron-left](https://adaptix-framework.gitbook.io/adaptix-framework/adaptix-c2/data-management/targets-manager) [NextScreenshots Managerchevron-right](https://adaptix-framework.gitbook.io/adaptix-framework/adaptix-c2/data-management/screenshots-manager) Last updated 3 months ago --- # Installation Server | Adaptix Framework The [source code arrow-up-right](https://github.com/Adaptix-Framework/AdaptixC2) of AdaptixС2 is available on github. The `main` branch is a stable version and does not contain the latest changes. Copy git clone https://github.com/Adaptix-Framework/AdaptixC2.git cd AdaptixC2 [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/adaptix-c2/getting-starting/installation-server#preinstall) Preinstall -------------------------------------------------------------------------------------------------------------------------------------------- circle-info Adaptix teamserver is designed to run on a Linux server. To build extenders you need updated Mingw. Advice on building server and extenders (**tested**): using Ubuntu 24, Debian 12, or Dockerfile. To build Server and Extenders, you need to install additional dependencies. Please note that _golang 1.25.4_ is required to compile and run AdaptixServer (and special [patched golangarrow-up-right](https://github.com/Adaptix-Framework/go-win7) for win7 gopher agent). Auto Manual For Linux, you can use a specially prepared script that will install and configure the necessary packages for both the server and client parts. Link — [pre\_install\_linux\_all.sharrow-up-right](https://raw.githubusercontent.com/Adaptix-Framework/AdaptixC2/refs/heads/main/pre_install_linux_all.sh) ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252F73hLkX7874aTss7jqiOv%252FScreenshot_20251230_174450.png%3Falt%3Dmedia%26token%3D4a3e60c2-bd38-497a-a8af-1c0a6de79c47&width=768&dpr=3&quality=100&sign=603a207c&sv=2) Copy sudo apt install mingw-w64 make gcc g++ g++-mingw-w64 wget https://go.dev/dl/go1.25.4.linux-amd64.tar.gz -O /tmp/go1.25.4.linux-amd64.tar.gz sudo rm -rf /usr/local/go /usr/local/bin/go sudo tar -C /usr/local -xzf /tmp/go1.25.4.linux-amd64.tar.gz sudo ln -s /usr/local/go/bin/go /usr/local/bin/go # for windows 7 support by gopher agent git clone https://github.com/Adaptix-Framework/go-win7 /tmp/go-win7 sudo mv /tmp/go-win7 /usr/lib/ [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/adaptix-c2/getting-starting/installation-server#build-on-server) Build on Server ------------------------------------------------------------------------------------------------------------------------------------------------------ AdaptixServer and Extenders (goplugins) must be built **with the same version of the golang** package. ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252F0gMlauK6viAZlXKwLcR7%252FScreenshot_20251127_005035.png%3Falt%3Dmedia%26token%3Da6c6e954-763f-4c89-a706-a273da77044f&width=768&dpr=3&quality=100&sign=c37725d5&sv=2) All compiled files will be located in the dist directory. ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FAMFZtrgFlrJ5dfdsrPEC%252FScreenshot_20251127_005109.png%3Falt%3Dmedia%26token%3D304eaf5e-2cce-4f5d-a8d1-dbc0a879b4a8&width=768&dpr=3&quality=100&sign=8641d80e&sv=2) [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/adaptix-c2/getting-starting/installation-server#build-in-docker) Build in Docker ------------------------------------------------------------------------------------------------------------------------------------------------------ The compiled files will be located in the `AdaptixServer/server-dist` directory. Profile Description `make docker-build-server` Build server only `make docker-build-extenders` Build extenders only `make docker-build-ext` Build server and extenders together `make docker-up` Server runtime container Added Docker cleanup targets for better build artifact management: * `docker-clean`: Remove Docker containers and images (builders only) * Removes containers and images for `build-server`, `build-extenders`, and `build-server-ext` profiles * Preserves runtime container * `docker-clean-all`: Remove all Docker artifacts (containers, images, volumes, networks) * Removes all build profiles including runtime * Cleans build output directories (`AdaptixServer/server-dist`) * Complete cleanup for fresh rebuilds [PreviousGetting Startingchevron-left](https://adaptix-framework.gitbook.io/adaptix-framework/adaptix-c2/getting-starting) [NextInstallation Clientchevron-right](https://adaptix-framework.gitbook.io/adaptix-framework/adaptix-c2/getting-starting/installation-client) Last updated 1 month ago * [Preinstall](https://adaptix-framework.gitbook.io/adaptix-framework/adaptix-c2/getting-starting/installation-server#preinstall) * [Build on Server](https://adaptix-framework.gitbook.io/adaptix-framework/adaptix-c2/getting-starting/installation-server#build-on-server) * [Build in Docker](https://adaptix-framework.gitbook.io/adaptix-framework/adaptix-c2/getting-starting/installation-server#build-in-docker) Copy make server-ext --- # Beacon SMB | Adaptix Framework "Beacon SMB" is an internal listener used to communicate with the "Beacon" agent over SMB named pipes. ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252F95YKiQ7KxEUMFdPqu82i%252FScreenshot_20251229_201042.png%3Falt%3Dmedia%26token%3D8541145f-f3ea-4b4d-bd92-f04359d1b45c&width=768&dpr=3&quality=100&sign=a034a02&sv=2) [PreviousBeacon DNSchevron-left](https://adaptix-framework.gitbook.io/adaptix-framework/extenders/listeners/beacon-dns) [NextBeacon TCPchevron-right](https://adaptix-framework.gitbook.io/adaptix-framework/extenders/listeners/beacon-tcp) Last updated 3 months ago --- # Remote Terminal / Shell | Adaptix Framework [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/adaptix-c2/agent-browsers/remote-terminal-shell#remote-terminal) Remote Terminal ------------------------------------------------------------------------------------------------------------------------------------------------------ The **Remote Terminal** allows you to launch an application or command shell in fully interactive mode. For each operating system, you can either select an appropriate shell from a predefined list or specify one manually. Linux Windows MacOS ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FJCMXEJM4cjCekf3Ia88d%252FScreenshot_20250528_175638.png%3Falt%3Dmedia%26token%3D00bb7aa8-b67e-474a-9397-cabfcebb461d&width=768&dpr=3&quality=100&sign=59e7652d&sv=2) ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FTWSVQwZXrp9NUbATBtpQ%252FScreenshot_20250528_181244.png%3Falt%3Dmedia%26token%3Dcf79f40d-493b-477f-a5d0-e5787e58cd7a&width=768&dpr=3&quality=100&sign=5797ae0e&sv=2) ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FQ6LWTClCAK54095piEtv%252FScreenshot_20250528_175324.png%3Falt%3Dmedia%26token%3D1f35365b-31a8-4ddf-b702-1e6de0242079&width=768&dpr=3&quality=100&sign=4493e87d&sv=2) Each tab allows you to run multiple terminals in one session. ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252Fo64OEfMJDml4Nq5Sc3EK%252FScreenshot_20251229_220225.png%3Falt%3Dmedia%26token%3D3b1999ae-ff17-462e-9ff3-9e8e70105be4&width=768&dpr=3&quality=100&sign=8abb1253&sv=2) ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FCy5yrvbnECj2n0FgkbjJ%252FScreenshot_20251229_220230.png%3Falt%3Dmedia%26token%3D69aff621-5472-4064-a00e-fe2583dba5d3&width=768&dpr=3&quality=100&sign=4cae70b5&sv=2) To start the terminal, click the ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FTxlokXLaxiMh5nEDq1KC%252FScreenshot_20250528_183641.png%3Falt%3Dmedia%26token%3Dbaaf102b-7333-44bd-a78a-8ffeb70c558c&width=300&dpr=3&quality=100&sign=e8212f52&sv=2) button; to stop it, click the ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FUDZ2SlrbnIcu0ZweDn8G%252FScreenshot_20250528_183657.png%3Falt%3Dmedia%26token%3D13ce53b1-c09a-4f5c-a3da-642fa72df855&width=300&dpr=3&quality=100&sign=93b3d2a3&sv=2) button. The terminal includes support for **copy**, **paste**, **clear**, **find** and change console buffer size functions. By default, the console buffer only stores 10,000 lines. ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FlS5TxUtxHPXiWeTenoAu%252FScreenshot_20251229_220325.png%3Falt%3Dmedia%26token%3Daa34117c-1ee1-42df-89b9-2aa1e00da86e&width=768&dpr=3&quality=100&sign=dd757234&sv=2) **Save task to Task Manager** allows you to save the selected command and text in the manager. ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FJsiyUfcf8R8YuyStMiB1%252FScreenshot_20251229_220506.png%3Falt%3Dmedia%26token%3D989ba3c3-a263-4619-9e6d-d891a9782e74&width=768&dpr=3&quality=100&sign=de2c7c65&sv=2) ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FXOHJbyrgnR3KQYc7argv%252FScreenshot_20251229_220531.png%3Falt%3Dmedia%26token%3D5a5d9e14-79c2-4aec-96c3-78541ceed6c6&width=768&dpr=3&quality=100&sign=3f043d7f&sv=2) You can specify a corresponding **keytab** for the terminal. ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252F7tiEYujE2ikmIM5D4IpK%252FScreenshot_20250528_183907.png%3Falt%3Dmedia%26token%3D0d406ce7-eedd-474b-9333-19f9aab520c4&width=768&dpr=3&quality=100&sign=208207fb&sv=2) [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/adaptix-c2/agent-browsers/remote-terminal-shell#remote-shell) Remote Shell ------------------------------------------------------------------------------------------------------------------------------------------------ The Remote Shell feature allows you to run applications or command shells in pseudo shell mode. For each operating system, you can either select the appropriate shell from a predefined list or specify it manually. Some shells, such as cmd.exe in echo mode, can duplicate input and output. To eliminate this duplication, use **smart mode**. ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FtUwKjJvXemqTyUmd2Cyx%252FScreenshot_20251229_223421.png%3Falt%3Dmedia%26token%3Dc25fc712-b5e1-44b5-bfd4-ba96c3f4eaa6&width=768&dpr=3&quality=100&sign=636e14dc&sv=2) ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FJUYvEnZ2UvTWu7bJk727%252FScreenshot_20251229_223401.png%3Falt%3Dmedia%26token%3D57392be4-5675-4a2f-b318-c96ffe94a362&width=768&dpr=3&quality=100&sign=43ce6ed4&sv=2) [PreviousProcess Browserchevron-left](https://adaptix-framework.gitbook.io/adaptix-framework/adaptix-c2/agent-browsers/process-browser) [NextData managementchevron-right](https://adaptix-framework.gitbook.io/adaptix-framework/adaptix-c2/data-management) Last updated 3 months ago * [Remote Terminal](https://adaptix-framework.gitbook.io/adaptix-framework/adaptix-c2/agent-browsers/remote-terminal-shell#remote-terminal) * [Remote Shell](https://adaptix-framework.gitbook.io/adaptix-framework/adaptix-c2/agent-browsers/remote-terminal-shell#remote-shell) --- # Tasks manager | Adaptix Framework A task can be of two types: * TASK — a fast task, executed in a single-threaded mode, delaying all other agent functions. * JOB — a task executed in the background. As a rule, such a task is executed longer in a separate thread or process. BOF can also be executed. * TUNNEL — a task indicating the start or stop of network tunnels. AdaptixС2 registers and saves in the database all tasks ever completed. The task table displays the task type, the operator who started the task, the time of task execution, its status and a short answer. ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252Fvu9QyBBmzUMWDS9Z33Me%252FScreenshot_20250224_214344.png%3Falt%3Dmedia%26token%3D7f967d38-0a6f-4d7a-8835-05e58baaeb3d&width=768&dpr=3&quality=100&sign=d12b7fa9&sv=2) The output of a specific command is displayed in the Task Output console when you select a task in the Tasks table. ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FY274AqSPwxyrnI70KcjB%252F47.png%3Falt%3Dmedia%26token%3D6d86285a-6a4c-4d51-93b9-96ddf57eb8e4&width=768&dpr=3&quality=100&sign=3b3a5a8e&sv=2) To activate the search bar, you must use the key combination `Ctrl+F` in the task table. ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FygkfKzB879POlsDinORP%252FScreenshot_20251229_212104.png%3Falt%3Dmedia%26token%3D389bf1c9-f90d-4e64-8273-f7e51c24d346&width=768&dpr=3&quality=100&sign=20ebb484&sv=2) The Tasks table has the ability to filter tasks by individual agents. ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FoFe469S3bmNcqKMTr1CA%252FScreenshot_20251229_212117.png%3Falt%3Dmedia%26token%3Da27293e2-de73-44e1-9e95-4966bdb81d4c&width=768&dpr=3&quality=100&sign=afaa60e1&sv=2) Tasks can be filtered by status. For example, you can filter only cancelled tasks or only those that are in progress (convenient for Jobs). ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FpJwuZtN8gUHH7bVRRrNf%252FScreenshot_20251229_212141.png%3Falt%3Dmedia%26token%3D052f78d5-d4eb-497b-a15f-8524a843680f&width=768&dpr=3&quality=100&sign=5330e453&sv=2) The Task table has the ability to filter by a substring in a command or by the result of its execution. ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FxtM9Uv5k2qqijhG0rpEO%252FScreenshot_20251229_212223.png%3Falt%3Dmedia%26token%3D55a90322-3307-4474-a1f5-7d4ddacc4c7f&width=768&dpr=3&quality=100&sign=d6d64e60&sv=2) The context menu provides options to terminate the currently running task, as well as delete tasks from the database. In addition, you can quickly copy the task ID or console command and immediately go to the console of the selected agent. ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FI6ToSqMoyz6U6S2gp779%252F51.png%3Falt%3Dmedia%26token%3D2caaed35-2f9f-432c-9366-031bf850fd93&width=768&dpr=3&quality=100&sign=13f425d3&sv=2) [PreviousData managementchevron-left](https://adaptix-framework.gitbook.io/adaptix-framework/adaptix-c2/data-management) [NextDownloads Managerchevron-right](https://adaptix-framework.gitbook.io/adaptix-framework/adaptix-c2/data-management/downloads-manager) Last updated 3 months ago --- # Beacon HTTP | Adaptix Framework "Beacon HTTP" listener starts a web server and registers a "beacon" agent. ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FVBwxuloLwUmWRvwZ31rd%252F%25D0%25A1%25D0%25BD%25D0%25B8%25D0%25BC%25D0%25BE%25D0%25BA%2520%25D1%258D%25D0%25BA%25D1%2580%25D0%25B0%25D0%25BD%25D0%25B0_20260228_213713.png%3Falt%3Dmedia%26token%3Dab058a4e-9d12-4889-8836-a170dcf7122f&width=768&dpr=3&quality=100&sign=3378155c&sv=2) [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/extenders/listeners/beacon-http#beacon-http-parameters) Beacon HTTP parameters ---------------------------------------------------------------------------------------------------------------------------------------------------- Main settings HTTP Headers Page Error Page Payload ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FxFSatVezavlv0Gu3NbbS%252F%25D0%25A1%25D0%25BD%25D0%25B8%25D0%25BC%25D0%25BE%25D0%25BA%2520%25D1%258D%25D0%25BA%25D1%2580%25D0%25B0%25D0%25BD%25D0%25B0_20260228_213727.png%3Falt%3Dmedia%26token%3De52a9ee3-c066-4c0d-9e8e-7d627c449815&width=768&dpr=3&quality=100&sign=41360699&sv=2) Parameter Description **Host & port (Bind)** **Required.** The interface address and port to which your HTTP Beacon web server will bind. **Callback addresses** **Required.** List of address:port to which the agent will send requests. Current server rotation strategy: round-robin. **Method** The HTTP method that the agent will use to transmit data to the server and receive commands **URI** **Required.** The HTTP endpoint to which the agent sends the request. **User-Agent** **Required.** User-Agent for HTTP requests **Heartbeat Header** **Required.** The HTTP header in which the agent will transmit registration information **Encryption key** **Required.** Communication channel encryption key **Use SSL** If set, use HTTPS. If the SSL certificate and key are not specified, the server will generate them itself. ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FTdiadVyDhGtfKXnUBqxE%252F%25D0%25A1%25D0%25BD%25D0%25B8%25D0%25BC%25D0%25BE%25D0%25BA%2520%25D1%258D%25D0%25BA%25D1%2580%25D0%25B0%25D0%25BD%25D0%25B0_20260228_213730.png%3Falt%3Dmedia%26token%3D24c5c6d5-98f2-4c8b-b033-dbb160512145&width=768&dpr=3&quality=100&sign=103193ba&sv=2) Parameter Description **Trust X-Forwarded-For** This option decides if listener uses the X-Forwarded-For HTTP header to determine the remote address of a request. _Use this option if your AdaptixServer is behind an HTTP redirector_ **Host Header** Host header for HTTP requests Request Headers HTTP headers that the agent will use when sending the request Server Headers HTTP headers that will be in the server's response. ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FLX6CPrEf1DxqCRqyufUB%252F%25D0%25A1%25D0%25BD%25D0%25B8%25D0%25BC%25D0%25BE%25D0%25BA%2520%25D1%258D%25D0%25BA%25D1%2580%25D0%25B0%25D0%25BD%25D0%25B0_20260228_213734.png%3Falt%3Dmedia%26token%3Da9377252-007f-445c-9a88-5d3d4973265a&width=768&dpr=3&quality=100&sign=56c7d856&sv=2) **Page Error** \- the HTTP server's response to any request that is not from an agent. ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FhC9LJs245QVZ2hEvuBcS%252F%25D0%25A1%25D0%25BD%25D0%25B8%25D0%25BC%25D0%25BE%25D0%25BA%2520%25D1%258D%25D0%25BA%25D1%2580%25D0%25B0%25D0%25BD%25D0%25B0_20260228_213736.png%3Falt%3Dmedia%26token%3Da93393a8-8fde-4b1f-96ae-2604b74fbe83&width=768&dpr=3&quality=100&sign=dc64c6cb&sv=2) **Page Payload** - Server response to agent request. `<<>>` will be replaced with data for the agent. [PreviousListenerschevron-left](https://adaptix-framework.gitbook.io/adaptix-framework/extenders/listeners) [NextBeacon DNSchevron-right](https://adaptix-framework.gitbook.io/adaptix-framework/extenders/listeners/beacon-dns) Last updated 1 month ago --- # Installation Client | Adaptix Framework The [source code arrow-up-right](https://github.com/Adaptix-Framework/AdaptixC2) of AdaptixС2 is available on github. The `main` branch is a stable version and does not contain the latest changes. Copy git clone https://github.com/Adaptix-Framework/AdaptixC2.git cd AdaptixC2 * * * [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/adaptix-c2/getting-starting/installation-client#linux) Linux ---------------------------------------------------------------------------------------------------------------------------------- circle-info Requires **QT > 6.8.0**, otherwise use docker. ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/adaptix-c2/getting-starting/installation-client#preinstall) Preinstall To build Client, you need to install additional dependencies Auto Manual For Linux (no Arch), you can use a specially prepared script that will install and configure the necessary packages for both the server and client parts. ([pre\_install\_linux\_all.sharrow-up-right](https://raw.githubusercontent.com/Adaptix-Framework/AdaptixC2/refs/heads/main/pre_install_linux_all.sh) ) ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FdI5lYBqGTLcNVOHoQDTD%252FScreenshot_20251230_175836.png%3Falt%3Dmedia%26token%3D3798d7dd-a995-41c0-8a4b-f8e58ee42c71&width=768&dpr=3&quality=100&sign=adf0d8a&sv=2) **Debian** Copy sudo apt install gcc g++ build-essential make cmake mingw-w64 g++-mingw-w64 libssl-dev qt6-base-dev qt6-base-private-dev libxkbcommon-dev qt6-websockets-dev qt6-declarative-dev qt6-svg-dev **Arch** Copy sudo pacman -S --needed make cmake openssl libxkbcommon qt6-base qt6-websockets qt6-declarative ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/adaptix-c2/getting-starting/installation-client#build-on-host) Build on Host The AdaptixClient is compiled from the cmake configuration. For fast builds in multithreaded mode, use `make client-fast`. AdaptixClient file will be located in the dist directory. ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/adaptix-c2/getting-starting/installation-client#build-in-docker) Build in Docker The compiled static AppImage will be located in the `AdaptixClient/client-dist` directory. * * * [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/adaptix-c2/getting-starting/installation-client#macos) MacOS ---------------------------------------------------------------------------------------------------------------------------------- To build Client, you need to install additional dependencies. You need use [Brewarrow-up-right](https://brew.sh/) . The AdaptixClient is compiled from the cmake configuration. For fast builds in multithreaded mode, use `make client-fast`. * * * [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/adaptix-c2/getting-starting/installation-client#windows) Windows -------------------------------------------------------------------------------------------------------------------------------------- ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/adaptix-c2/getting-starting/installation-client#preinstall-1) Preinstall Install MSYS2 from [githubarrow-up-right](https://github.com/msys2/msys2-installer/releases/tag/nightly-x86_64) to `C:\msys64`. ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FXgR4rk2jHoOFwfhXqsAf%252F%25D0%25A1%25D0%25BD%25D0%25B8%25D0%25BC%25D0%25BE%25D0%25BA%2520%25D1%258D%25D0%25BA%25D1%2580%25D0%25B0%25D0%25BD%25D0%25B0_20260226_221043.png%3Falt%3Dmedia%26token%3D84b5bfd4-8180-4943-9402-14877cc0fa80&width=768&dpr=3&quality=100&sign=b2924ca2&sv=2) ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FtsIxFbwsvdBPOLbmHVXj%252F%25D0%25A1%25D0%25BD%25D0%25B8%25D0%25BC%25D0%25BE%25D0%25BA%2520%25D1%258D%25D0%25BA%25D1%2580%25D0%25B0%25D0%25BD%25D0%25B0_20260226_221104.png%3Falt%3Dmedia%26token%3De710755e-175c-43c4-aa78-e1713c195482&width=768&dpr=3&quality=100&sign=fc1883ba&sv=2) Run `C:\msys64\ucrt64.exe` and install QT modules. ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252F1yiLS3Uafdu4OSC98pCs%252F%25D0%25A1%25D0%25BD%25D0%25B8%25D0%25BC%25D0%25BE%25D0%25BA%2520%25D1%258D%25D0%25BA%25D1%2580%25D0%25B0%25D0%25BD%25D0%25B0_20260226_221849.png%3Falt%3Dmedia%26token%3D1c7ac528-2ba2-4fc7-83f9-feda43f2f18d&width=768&dpr=3&quality=100&sign=9e18ede4&sv=2) ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/adaptix-c2/getting-starting/installation-client#build) Build AdaptixClient is compiled from a CMake configuration. For a quick build, run the [BAT filearrow-up-right](https://raw.githubusercontent.com/Adaptix-Framework/AdaptixC2/refs/heads/main/AdaptixClient/build.bat) . AdaptixClient.exe file will be located in the `AdaptixClient\dist` directory. The directory with the application and dependencies can be transferred to any computer. [PreviousInstallation Serverchevron-left](https://adaptix-framework.gitbook.io/adaptix-framework/adaptix-c2/getting-starting/installation-server) [NextStartingchevron-right](https://adaptix-framework.gitbook.io/adaptix-framework/adaptix-c2/getting-starting/starting) Last updated 1 month ago * [Linux](https://adaptix-framework.gitbook.io/adaptix-framework/adaptix-c2/getting-starting/installation-client#linux) * [Preinstall](https://adaptix-framework.gitbook.io/adaptix-framework/adaptix-c2/getting-starting/installation-client#preinstall) * [Build on Host](https://adaptix-framework.gitbook.io/adaptix-framework/adaptix-c2/getting-starting/installation-client#build-on-host) * [Build in Docker](https://adaptix-framework.gitbook.io/adaptix-framework/adaptix-c2/getting-starting/installation-client#build-in-docker) * [MacOS](https://adaptix-framework.gitbook.io/adaptix-framework/adaptix-c2/getting-starting/installation-client#macos) * [Windows](https://adaptix-framework.gitbook.io/adaptix-framework/adaptix-c2/getting-starting/installation-client#windows) * [Preinstall](https://adaptix-framework.gitbook.io/adaptix-framework/adaptix-c2/getting-starting/installation-client#preinstall-1) * [Build](https://adaptix-framework.gitbook.io/adaptix-framework/adaptix-c2/getting-starting/installation-client#build) Copy make client Copy make docker-build-client Copy brew install make cmake openssl qt@6 Copy make client Copy pacman -Syu pacman -S base-devel mingw-w64-x86_64-toolchain mingw-w64-x86_64-cmake mingw-w64-x86_64-qt6 --- # Register new extenders | Adaptix Framework Templates for developing your own Extenders agents and listeners are located in [THISarrow-up-right](https://github.com/Adaptix-Framework/templates-extender) repository. Since Extenders uses goplugin technology, the core framework package versions and all extenders must be the same. Go Workspace technology is used to easily manage large numbers of extenders. All actions are performed in the `AdaptixServer` directory. 1. Move your extenders in the `AdaptixServer/extenders` directory and add them to the workspace. Copy go work use extenders/new_listener_extender go work use extenders/new_agent_extender go work use extenders/new_service_extender 1. Sync Go Workspace Copy go work sync 1. Build the extenders and specify the path to the `config.yaml` in the server profile. Copy make extenders * * * Last updated 3 months ago --- # v0.7 -> v0.8 | Adaptix Framework [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/changelog-and-updates/version-0.1-greater-than-1.0/v0.7-greater-than-v0.8#adaptixc2) AdaptixC2 -------------------------------------------------------------------------------------------------------------------------------------------------------------------- **New:** * Added Targets Manager ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FzyrOTuQ86LUZxmAl6GeE%252FScreenshot_20250828_132020.png%3Falt%3Dmedia%26token%3D6de63a92-962c-456d-8a44-c4a5513ad412&width=768&dpr=3&quality=100&sign=8adf1f9b&sv=2) * Redesigned Listeners table and Listener creation dialogs ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FfxjTiGQIOHmnwjHrrkgq%252FScreenshot_20250828_113711.png%3Falt%3Dmedia%26token%3D10e4b9b6-a795-49bf-9739-fcc82fe9dcd1&width=768&dpr=3&quality=100&sign=db867217&sv=2) * Reworked task and tunnel queue mechanism. * AxScript new functions: [ids](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#ids) , [isactive](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#isactive) , [format\_size](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#format_size) , [targets\_add](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#targets_add) , [targets\_add\_list](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#targets_add_list) , [credentials\_add\_list](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#credentials_add_list) , [prompt\_confirm](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#prompt_confirm) . Also added [get\_commands](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#get_commands) , [validate\_command](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#validate_command) , [file\_write\_text](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#file_write_text) (by [shantanu561993arrow-up-right](https://github.com/shantanu561993) ) * AxScript new selector: [selector\_agents](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axselector-type#selectoragents) * AxScript new menu: [add\_targets](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axmenu-type#targets-manager-menu) , [add\_credentials](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axmenu-type#credentials-manager-menu) * AxScript new data models: [downloads](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#downloads) , [screenshots](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#screenshots) , [tunnels](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#tunnels) , [targets](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#targets) * AxScript new events: [on\_ready](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axevent-type#on_ready) , [on\_disconnect](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axevent-type#on_disconnect) , [list](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axevent-type#on_list) , [remove](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axevent-type#on_remove) . * AxScript: added [timers](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axevent-type#on_timeout) and [intervals](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axevent-type#on_interval) (by [shantanu561993arrow-up-right](https://github.com/shantanu561993) ) * Client: added new custom theme _Fallout3_ and font **VT323** (by [Steve0roarrow-up-right](https://github.com/Steve0ro) ) * Credentials Manager: * added ability to set a tag. * added ability to add or remove a list of credentials in a single request. * Telegram Callback: Now supports events for adding new credentials to Credentials Manager and for file download completion from remote host. **Fix:** * Fixed unintended task termination in AxScript hook handler. * Fixed premature connection closure during Reverse Port Forwarding **(**NTLM Relay now works correctly) (by [T1ernoarrow-up-right](https://github.com/T1erno) ) [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/changelog-and-updates/version-0.1-greater-than-1.0/v0.7-greater-than-v0.8#beacon) Beacon -------------------------------------------------------------------------------------------------------------------------------------------------------------- **New:** * Added ProxyDLL generation for sideloading (by [3v4Si0Narrow-up-right](https://github.com/3v4Si0N) ) **Fix:** * Fixed bug in `getuid` command (by [overflow0verturearrow-up-right](https://github.com/overflow0verture) ) [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/changelog-and-updates/version-0.1-greater-than-1.0/v0.7-greater-than-v0.8#gopher) Gopher -------------------------------------------------------------------------------------------------------------------------------------------------------------- **Fix:** * Fixed an issue where the macOS agent could fail to generate (by [L0nm4rarrow-up-right](https://github.com/L0nm4r) ) * Fixed `jobTerminal` zombie processes (by [yutianqaqarrow-up-right](https://github.com/yutianqaq) ) [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/changelog-and-updates/version-0.1-greater-than-1.0/v0.7-greater-than-v0.8#extension-kit) Extension-Kit ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- **New:** * `ldapq computers` command now uses BOF Ldapsearch to obtain the list of domain computers and populates Targets Manager via AxScript handler. * Added `Jump to` menu in Targets Table. **Fix:** * Conditional `redirect_std_out_err_for_mingw` for UCRT in **No-Consolation** BOF (by [T1ernoarrow-up-right](https://github.com/T1erno) ) [Previousv0.6 -> v0.7chevron-left](https://adaptix-framework.gitbook.io/adaptix-framework/changelog-and-updates/version-0.1-greater-than-1.0/v0.6-greater-than-v0.7) [Nextv0.8 -> v0.9chevron-right](https://adaptix-framework.gitbook.io/adaptix-framework/changelog-and-updates/version-0.1-greater-than-1.0/v0.8-greater-than-v0.9) Last updated 7 months ago * [AdaptixC2](https://adaptix-framework.gitbook.io/adaptix-framework/changelog-and-updates/version-0.1-greater-than-1.0/v0.7-greater-than-v0.8#adaptixc2) * [Beacon](https://adaptix-framework.gitbook.io/adaptix-framework/changelog-and-updates/version-0.1-greater-than-1.0/v0.7-greater-than-v0.8#beacon) * [Gopher](https://adaptix-framework.gitbook.io/adaptix-framework/changelog-and-updates/version-0.1-greater-than-1.0/v0.7-greater-than-v0.8#gopher) * [Extension-Kit](https://adaptix-framework.gitbook.io/adaptix-framework/changelog-and-updates/version-0.1-greater-than-1.0/v0.7-greater-than-v0.8#extension-kit) --- # v0.5 -> v0.6 | Adaptix Framework circle-exclamation Go version has been updated from 1.23.1 to 1.24.4, so **a full installation** [**following the guide**](https://adaptix-framework.gitbook.io/adaptix-framework/adaptix-c2/getting-starting/installation-server#preinstall) **is required**. [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/changelog-and-updates/version-0.1-greater-than-1.0/v0.5-greater-than-v0.6#adaptixc2) AdaptixC2 -------------------------------------------------------------------------------------------------------------------------------------------------------------------- **New:** * **Agent Console – Path Autocompletion & File Selection Dialog.** Local file path autocompletion is now available in the agent console via the `Tab` key. Pressing `Ctrl+Tab` opens a **file selection dialog** for browsing the file system. * **Context Menu Enhancements (Agent Console & Logs Panel).** A context menu has been added to both the agent console and the Logs panel, allowing you to configure _AutoScroll_, _NoWrap_, and change the _console buffer size_ (limiting the number of lines). Default values for AutoScroll, NoWrap, and buffer size can be configured in Main Settings. * Search functionality (`Ctrl+F`) has been added to the agent console and the Logs panel. * Command history in the agent console is now restored upon synchronization with the server, even after client reconnection. Full history is available through the “Show History” context menu. Double-clicking a command in Show History inserts it into the input field. ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FmkXmVRntMsnYHXx47vEg%252FScreenshot_20250624_002427.png%3Falt%3Dmedia%26token%3Debb605d4-039a-41d0-a980-733173b37fc4&width=768&dpr=3&quality=100&sign=586fb52a&sv=2) * In **RemoteTerminal**, buffer size (line count) can now be configured via the context menu. The default value can be set in Main Settings. * **EventCallback** to Telegram BOT. More... * **New UI Theme and Font Support**. A new _Dracula_ theme has been added to AdaptixClient. It can be selected in client settings. Font support for _DejaVu Sans Mono_ and _Hack_ has been extended. New fonts _Space Mono_ and _Anonymous Pro_ have been added. ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FFVk2xQleAQU3cbypmkoH%252FScreenshot_20250624_002057.png%3Falt%3Dmedia%26token%3Da0568e8f-9793-4f38-bf6e-b56f352450f5&width=768&dpr=3&quality=100&sign=a90d1c99&sv=2) * The columns _Domain_, _Computer_, and _User_ in SessionsTable can now be resized manually. * **Enhanced Session Table Menu.** The session table menu has been redesigned. It is now possible to execute a command on multiple agents via the **'Agent' → 'Execute command'** menu. Console content can be permanently deleted via **'Agent' → 'Remove console data'**, while all tasks remain in TasksManager. * An additional graph version has been added (by [mil4nearrow-up-right](https://github.com/mil4ne) ). You can select which version to use in client settings. Version 1 Verison 2 ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252Fqon6CsftqH2HhGo8ZsH6%252FScreenshot_20250624_000616.png%3Falt%3Dmedia%26token%3D413e973a-c30f-437d-951c-019aadc8551c&width=768&dpr=3&quality=100&sign=83375a08&sv=2) ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FEP1Ej9opE50ur4sfi1oJ%252FScreenshot_20250624_000636.png%3Falt%3Dmedia%26token%3Dd6cb25e2-6045-4928-8373-1e32eba188d8&width=768&dpr=3&quality=100&sign=c8b9414c&sv=2) * All settings are now applied in real time and no longer require a client restart. * **One-Time Password (OTP) Token System**. An OTP token system has been added for one-time access to objects. The endpoint `/otp/get` accepts the object type and its identifier (e.g. type: download, id: FileId). With the received token, you can access the `/download/sync/otp` endpoint and download a file once without authentication on the team server. Tasks larger than 5 MB are now uploaded as files using OTP. [More...](https://adaptix-framework.gitbook.io/adaptix-framework/adaptix-c2/data-management/downloads-manager) * Synchronization of large files from DownloadsTable has been implemented. Files are uploaded through the client in a separate thread. A new window shows synchronization status and speed. You can also obtain an OTP and download the file via Curl or Wget. [More...](https://adaptix-framework.gitbook.io/adaptix-framework/adaptix-c2/data-management/downloads-manager) ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FzhMZODwqDae5SC0ApjWw%252FScreenshot_20250624_000922.png%3Falt%3Dmedia%26token%3D28a54e42-eb7f-442c-9abe-ec224ac815e6&width=768&dpr=3&quality=100&sign=8ef7c75e&sv=2) * When restoring agents from the database, the client log now shows the date and time the agent was created. * The C2 endpoint may now contain the "." character. * Project structure has been refactored. Client build time has been reduced by approximately 50%. * Server has been updated from Go 1.23.1 to Go 1.24.4. **Fix:** * Fixed an [issuearrow-up-right](https://github.com/Adaptix-Framework/AdaptixC2/issues/82) with incorrect task data validation. The client would terminate when executing a sequence of commands involving `file upload` and Beacon `agent termination`. * Fixed an issue with caching unsynchronized tasks. These tasks are no longer stored in server memory unless they are JOBs. * When copying Cmdline from TasksBrowser, an incorrect column value was copied. Now dynamic column indices are used. * Fixed color inconsistencies in the agent console when pasting previously copied data. The agent console no longer uses HTML for text formatting. * Fixed padding in UI styles. Buttons and input fields now have equal height. [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/changelog-and-updates/version-0.1-greater-than-1.0/v0.5-greater-than-v0.6#agent-beacon) Agent Beacon -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- **New:** * In the BeaconSMB listener, pipe names can now contain "." characters. * The `ps list` command now displays processes as a tree structure. ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FpWFpGOZwzsgJDfHK1YEQ%252FScreenshot_20250624_002639.png%3Falt%3Dmedia%26token%3D6daf2674-5655-444c-a10a-c0f812f4adfe&width=768&dpr=3&quality=100&sign=572b34a5&sv=2) [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/changelog-and-updates/version-0.1-greater-than-1.0/v0.5-greater-than-v0.6#agent-gopher) Agent Gopher -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- **New:** * The `shell` and `run` commands now support various encodings. * Executing `shell` and `run` commands no longer opens a visible console window (by [yinselarrow-up-right](https://github.com/yinsel) ) * Added support for legacy Windows systems, including Windows 7 and Windows Server 2003 (by [yinselarrow-up-right](https://github.com/yinsel) ). [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/changelog-and-updates/version-0.1-greater-than-1.0/v0.5-greater-than-v0.6#extension-kit) Extension-Kit ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- **New BOFs:** * Postex-BOF: `firewallrule add` (by [B1oodyPhoenixarrow-up-right](https://github.com/B1oodyPhoenix) ) * Process-BOF: `process conn` (by [B1oodyPhoenixarrow-up-right](https://github.com/B1oodyPhoenix) ) * Creds-BOF: `hashdump` (by [ArturLukianovarrow-up-right](https://github.com/ArturLukianov) ) [Previousv0.4 -> v0.5chevron-left](https://adaptix-framework.gitbook.io/adaptix-framework/changelog-and-updates/version-0.1-greater-than-1.0/v0.4-greater-than-v0.5) [Nextv0.6 -> v0.7chevron-right](https://adaptix-framework.gitbook.io/adaptix-framework/changelog-and-updates/version-0.1-greater-than-1.0/v0.6-greater-than-v0.7) Last updated 10 months ago * [AdaptixC2](https://adaptix-framework.gitbook.io/adaptix-framework/changelog-and-updates/version-0.1-greater-than-1.0/v0.5-greater-than-v0.6#adaptixc2) * [Agent Beacon](https://adaptix-framework.gitbook.io/adaptix-framework/changelog-and-updates/version-0.1-greater-than-1.0/v0.5-greater-than-v0.6#agent-beacon) * [Agent Gopher](https://adaptix-framework.gitbook.io/adaptix-framework/changelog-and-updates/version-0.1-greater-than-1.0/v0.5-greater-than-v0.6#agent-gopher) * [Extension-Kit](https://adaptix-framework.gitbook.io/adaptix-framework/changelog-and-updates/version-0.1-greater-than-1.0/v0.5-greater-than-v0.6#extension-kit) --- # Beacon BOFs | Adaptix Framework **AX BOF APIs:** Copy void AxAddScreenshot(char* note, char* data, int len); void AxDownloadMemory(char* filename, char* data, int len); **Beacon currently supports the following BOF APIs:** Copy // Data Parser API char* BeaconDataExtract (datap * parser, int * size) int BeaconDataInt (datap * parser) int BeaconDataLength (datap * parser) void BeaconDataParse (datap * parser, char * buffer, int size) short BeaconDataShort (datap * parser) // Output API void BeaconPrintf (int type, char * fmt, ...) void BeaconOutput (int type, char * data, int len) // Format API void BeaconFormatAlloc (formatp * obj, int maxsz) void BeaconFormatAppend (formatp * obj, char * data, int len) void BeaconFormatFree (formatp * obj) void BeaconFormatInt (formatp * obj, int val) void BeaconFormatPrintf (formatp * obj, char * fmt, ...) void BeaconFormatReset (formatp * obj) char* BeaconFormatToString (formatp * obj, int * size) // Internal APIs BOOL BeaconUseToken (HANDLE token) void BeaconRevertToken () BOOL BeaconIsAdmIn () BOOL toWideChar (char * src, wchar_t * dst, int max) BOOL BeaconAddValue (const char * key, void * ptr); void * BeaconGetValue (const char * key); BOOL BeaconRemoveValue (const char * key); **Unsupported BOF APIs:** [PreviousBeaconchevron-left](https://adaptix-framework.gitbook.io/adaptix-framework/extenders/agents/beacon) [NextGopherchevron-right](https://adaptix-framework.gitbook.io/adaptix-framework/extenders/agents/gopher) Last updated 6 months ago Copy void BeaconDataPtr(datap * parser, int size) void BeaconGetSpawnTo (BOOL x86, char * buffer, int length) BOOL BeaconSpawnTemporaryProcess (BOOL x86, BOOL ignoreToken, STARTUPINFO * sInfo, PROCESS_INFORMATION * pInfo) void BeaconInjectProcess (HANDLE hProc, int pid, char * payload, int payload_len, int payload_offset, char * arg, int arg_len) void BeaconInjectTemporaryProcess (PROCESS_INFORMATION * pInfo, char * payload, int payload_len, int payload_offset, char * arg, int arg_len) void BeaconCleanupProcess (PROCESS_INFORMATION * pInfo) PDATA_STORE_OBJECT BeaconDataStoreGetItem (size_t index) void BeaconDataStoreProtectItem (size_t index) void BeaconDataStoreUnprotectItem (size_t index) size_t BeaconDataStoreMaxEntries () void BeaconInformation (BEACON_INFO * info); char* BeaconGetCustomUserData () BOOL BeaconGetSyscallInformation(PBEACON_SYSCALLS info, BOOL resolveIfNotInitialized) LPVOID BeaconVirtualAlloc(LPVOID lpAddress, SIZE_T dwSize, DWORD flAllocationType, DWORD flProtect); LPVOID BeaconVirtualAllocEx(HANDLE processHandle, LPVOID lpAddress, SIZE_T dwSize, DWORD flAllocationType, DWORD flProtect); BOOL BeaconVirtualProtect(LPVOID lpAddress, SIZE_T dwSize, DWORD flNewProtect, PDWORD lpflOldProtect); BOOL BeaconVirtualProtectEx(HANDLE processHandle, LPVOID lpAddress, SIZE_T dwSize, DWORD flNewProtect, PDWORD lpflOldProtect); BOOL BeaconVirtualFree(LPVOID lpAddress, SIZE_T dwSize, DWORD dwFreeType); BOOL BeaconGetThreadContext(HANDLE threadHandle, PCONTEXT threadContext); BOOL BeaconSetThreadContext(HANDLE threadHandle, PCONTEXT threadContext); DWORD BeaconResumeThread(HANDLE threadHandle); HANDLE BeaconOpenProcess(DWORD desiredAccess, BOOL inheritHandle, DWORD processId); HANDLE BeaconOpenThread(DWORD desiredAccess, BOOL inheritHandle, DWORD threadId); BOOL BeaconCloseHandle(HANDLE object); BOOL BeaconUnmapViewOfFile(LPCVOID baseAddress); SIZE_T BeaconVirtualQuery(LPCVOID address, PMEMORY_BASIC_INFORMATION buffer, SIZE_T length); BOOL BeaconDuplicateHandle(HANDLE hSourceProcessHandle, HANDLE hSourceHandle, HANDLE hTargetProcessHandle, LPHANDLE lpTargetHandle, DWORD dwDesiredAccess, BOOL bInheritHandle, DWORD dwOptions); BOOL BeaconReadProcessMemory(HANDLE hProcess, LPCVOID lpBaseAddress, LPVOID lpBuffer, SIZE_T nSize, SIZE_T *lpNumberOfBytesRead); BOOL BeaconWriteProcessMemory(HANDLE hProcess, LPVOID lpBaseAddress, LPCVOID lpBuffer, SIZE_T nSize, SIZE_T *lpNumberOfBytesWritten); VOID BeaconDisableBeaconGate(); VOID BeaconEnableBeaconGate(); --- # v0.3 -> v0.4 | Adaptix Framework [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/changelog-and-updates/version-0.1-greater-than-1.0/v0.3-greater-than-v0.4#adaptixc2) AdaptixC2 -------------------------------------------------------------------------------------------------------------------------------------------------------------------- **New:** * Added control over **WorkingTime** and **KillDate** parameters for agents. Added new agent marks "**Disconnect**" and "**No worktime**". ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FM8r3q0I9enlktuGSnD2F%252FScreenshot_20250427_223011.png%3Falt%3Dmedia%26token%3De17455c7-334a-423c-9dba-29643ce8cf44&width=768&dpr=3&quality=100&sign=1e1e6a52&sv=2) * Added screenshot storage. ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FL4ZZEFOnOkESNxeE7FdZ%252FScreenshot_20250427_214233.png%3Falt%3Dmedia%26token%3D59350efe-0a44-462e-b6b3-f8b65e89691c&width=768&dpr=3&quality=100&sign=f3b161bf&sv=2) * Unix support added to **ProcessBrowser** and **FilesBrowser**. ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252F7n72Cnx4q2lpewi9AOML%252FScreenshot_20250427_123146.png%3Falt%3Dmedia%26token%3Dafa804fb-abd9-436a-9e5d-7251019570de&width=768&dpr=3&quality=100&sign=366fddfd&sv=2) ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FrdGg0MYM1wfPQE3EDSMg%252FScreenshot_20250427_123332.png%3Falt%3Dmedia%26token%3D15c82b18-79f6-4c88-8c17-00054d8ee7d6&width=768&dpr=3&quality=100&sign=bdd4a6d6&sv=2) * **SessionsGraph** now displays the agent type and process PID instead of the process name. ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FBefZEtp0IGKTaFlWtSO9%252FScreenshot_20250427_230905.png%3Falt%3Dmedia%26token%3D97f98e40-c038-499c-b706-7cee4a229206&width=768&dpr=3&quality=100&sign=3beb5b7&sv=2) * New form of agent generation. The mechanisms for registering listeners and agents have been completely changed. ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FFrwpaSbFIu7gv8PoyLei%252FScreenshot_20250427_130106.png%3Falt%3Dmedia%26token%3D40d62ea5-52f4-4d72-800a-62ca8457e1be&width=768&dpr=3&quality=100&sign=5e9076a3&sv=2) * The listeners table has been reworked. ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FdQwWexgecuhfOuQctjGR%252FScreenshot_20250427_122049.png%3Falt%3Dmedia%26token%3D7e56bc0d-93aa-4626-8e6e-876ed81a2094&width=768&dpr=3&quality=100&sign=a89e0226&sv=2) * Added "**vspacer**", "**hspacer**", "**time\_input**", "**date\_input**" elements to WidgetBuilder. More details * For extensions, the functions `$RAND(len, charmap)`, `$HASH(algorithm, len, data)`, `$MAP(map, key)` are implemented. [More details](https://adaptix-framework.gitbook.io/adaptix-framework/adaptix-c2/bof-and-extensions#id-1.-command) * Completely new mechanism for connecting extenders. Now all information about the extender is contained in a single JSON configuration file. All common structures are now loaded from the [axc2arrow-up-right](https://github.com/Adaptix-Framework/axc2) package. Server operation has become much faster. More variability in developing agents for different listeners and operating systems. * Added formatting to the downloads, processes and files tables. **Fix:** * Fixed message in agent console. Previously there were extra characters `.` when there was no domain. * Fixed display of sleep time * Fixed incorrect escaping of quotes when entering an agent console command. [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/changelog-and-updates/version-0.1-greater-than-1.0/v0.3-greater-than-v0.4#new-gopher-agent) NEW GOPHER AGENT ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- * Added a new synchronous gopher agent that supports Linux and MacOS systems. * A TCP/mTLS listener has been added to the agent. * This agent currently has limited functionality. ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252F4DkUUqW1sZYm3Wp5riGu%252FScreenshot_20250427_215852.png%3Falt%3Dmedia%26token%3Dd5124b97-99ad-437a-ae0a-134efd3b7e76&width=768&dpr=3&quality=100&sign=5eb0131e&sv=2) [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/changelog-and-updates/version-0.1-greater-than-1.0/v0.3-greater-than-v0.4#agent-beacon) Agent Beacon -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- **New:** * Added TCP internal communication channel * Added **WorkingTime** and **KillDate** functions * The listener creation form and agent profile have been changed. Now each Callback Server has its own port. * Added BOF API: `BeaconAddValue`, `BeaconGetValue`, `BeaconRemoveValue`. **Fix:** * Fixed the function of determining the file modification date. * The DLL agent supports launching via rundll32 (by [melnicekarrow-up-right](https://github.com/melnicek) ). [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/changelog-and-updates/version-0.1-greater-than-1.0/v0.3-greater-than-v0.4#extension-kit) Extension-Kit ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- **New BOFs:** * Creds-BOF: `askcreds` (by [5P34Rarrow-up-right](https://github.com/5P34R) ), `autologon`, `credman` (by [j88001arrow-up-right](https://github.com/j88001) ) * AD-BOF: `ldapsearch` (by [B1oodyPhoenixarrow-up-right](https://github.com/B1oodyPhoenix) ) * Injection-BOF: `inject-cfg` * Elevation-BOF: `uac_regshellcmd`, `uac_sspi` (by [j88001arrow-up-right](https://github.com/j88001) ) * Execution-BOF: `execute-assembly` (by [j88001arrow-up-right](https://github.com/j88001) ) * SAL-BOF: `privcheck` (by [j88001arrow-up-right](https://github.com/j88001) ) [Previousv0.2 -> v0.3chevron-left](https://adaptix-framework.gitbook.io/adaptix-framework/changelog-and-updates/version-0.1-greater-than-1.0/v0.2-greater-than-v0.3) [Nextv0.4 -> v0.5chevron-right](https://adaptix-framework.gitbook.io/adaptix-framework/changelog-and-updates/version-0.1-greater-than-1.0/v0.4-greater-than-v0.5) Last updated 11 months ago * [AdaptixC2](https://adaptix-framework.gitbook.io/adaptix-framework/changelog-and-updates/version-0.1-greater-than-1.0/v0.3-greater-than-v0.4#adaptixc2) * [NEW GOPHER AGENT](https://adaptix-framework.gitbook.io/adaptix-framework/changelog-and-updates/version-0.1-greater-than-1.0/v0.3-greater-than-v0.4#new-gopher-agent) * [Agent Beacon](https://adaptix-framework.gitbook.io/adaptix-framework/changelog-and-updates/version-0.1-greater-than-1.0/v0.3-greater-than-v0.4#agent-beacon) * [Extension-Kit](https://adaptix-framework.gitbook.io/adaptix-framework/changelog-and-updates/version-0.1-greater-than-1.0/v0.3-greater-than-v0.4#extension-kit) --- # v0.9 -> v0.10 | Adaptix Framework [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/changelog-and-updates/version-0.1-greater-than-1.0/v0.9-greater-than-v0.10#adaptixc2) AdaptixC2 --------------------------------------------------------------------------------------------------------------------------------------------------------------------- **New:** * **Sessions Table data model updated.** Eliminates small per-second UI stutters when many sessions are present. * **Tasks Manager data model updated.** Server synchronization is now orders of magnitude faster; loading, searching and filtering saved tasks complete in sub-second time. * **Credentials Manager data model updated.** Server sync and local data operations (read/filter) are dramatically faster. * **Targets Manager data model updated.** Synchronization and data handling significantly accelerated. * **Last column behavior changed:** if an agent has not checked in for more than 24 hours, the **Last** column shows the timestamp of the agent’s last check-in. * **Non-blocking server API calls:** API requests no longer block the main UI thread (by [newBBnewarrow-up-right](https://github.com/newBBnew) ) * **Cloudflare Tunnels support** added (by [newBBnewarrow-up-right](https://github.com/newBBnew) ) * **TLS 1.2–1.3** support added (by [newBBnewarrow-up-right](https://github.com/newBBnew) ) * **Client–server log sync optimized** using batch processing to improve throughput and reduce overhead (by [lsr00terarrow-up-right](https://github.com/lsr00ter) ) **Fix:** * **Tunnel handling fix:** a regression in the previous release broke task processing, which caused tunnels via linked agents to fail and made tunnels through external listeners unstable. This is now fixed. [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/changelog-and-updates/version-0.1-greater-than-1.0/v0.9-greater-than-v0.10#beacon) Beacon --------------------------------------------------------------------------------------------------------------------------------------------------------------- **New:** * Service messages during BOF execution are no longer spammed; the console now logs only BOF start/end events and error messages. [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/changelog-and-updates/version-0.1-greater-than-1.0/v0.9-greater-than-v0.10#extension-kit) Extension-Kit ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- **New:** * `smartscan` added to SAR-BOF (by [newBBnewarrow-up-right](https://github.com/newBBnew) ) ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FKwm6AnTrN7aNDf5xxDwM%252FScreenshot_20251029_221222.png%3Falt%3Dmedia%26token%3Dc2b7ecb5-6b55-430e-a6c2-bfaedb1817db&width=768&dpr=3&quality=100&sign=fe9f045&sv=2) * `taskhound` added to SAR-BOF (by [1r0BITarrow-up-right](https://github.com/1r0BIT) ) ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252Fd2xFherdVlVtCAwwSpJr%252FScreenshot_20251029_221035.png%3Falt%3Dmedia%26token%3Dbc112d8f-7510-4ec3-879d-6ff07eb90954&width=768&dpr=3&quality=100&sign=ea20cf0&sv=2) * `adwssearch` added to AD-BOF ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FApjuKhSJEbEnZt7J652W%252FScreenshot_20251029_222104.png%3Falt%3Dmedia%26token%3D04da03d9-3d85-4ffb-a255-4a78a555f18e&width=768&dpr=3&quality=100&sign=ea228e27&sv=2) * `SQL-BOF` added to AD-BOF ( from [https://github.com/Tw1sm/SQL-BOF/pull/8arrow-up-right](https://github.com/Tw1sm/SQL-BOF/pull/8) ) ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FfHApVwYsEsBkdXlLAQTT%252FScreenshot_20251029_222319.png%3Falt%3Dmedia%26token%3Ddb0c2b0c-fbed-4eaa-ba9d-2abf5f2aa15e&width=768&dpr=3&quality=100&sign=8e2e0d4c&sv=2) * `badtakeover` added to AD-BOF * `cookie-monster` decryptor updated **Fix:** * `poolparty`: fixed ALPC port name randomization to prevent beacon crashes with certain injection techniques (by [jacopoaugelliarrow-up-right](https://github.com/jacopoaugelli) ) * `ldapsearch`: LDAP signing/sealing implementation fixed. * `ldapsearch`**:** use DC hostname instead of IP for LDAP connections. * `cacls`**:** fixed out-of-bounds error. * `token make`**:** added support for multi-language usernames. [Previousv0.8 -> v0.9chevron-left](https://adaptix-framework.gitbook.io/adaptix-framework/changelog-and-updates/version-0.1-greater-than-1.0/v0.8-greater-than-v0.9) [Nextv0.10 -> v0.11chevron-right](https://adaptix-framework.gitbook.io/adaptix-framework/changelog-and-updates/version-0.1-greater-than-1.0/v0.10-greater-than-v0.11) Last updated 5 months ago * [AdaptixC2](https://adaptix-framework.gitbook.io/adaptix-framework/changelog-and-updates/version-0.1-greater-than-1.0/v0.9-greater-than-v0.10#adaptixc2) * [Beacon](https://adaptix-framework.gitbook.io/adaptix-framework/changelog-and-updates/version-0.1-greater-than-1.0/v0.9-greater-than-v0.10#beacon) * [Extension-Kit](https://adaptix-framework.gitbook.io/adaptix-framework/changelog-and-updates/version-0.1-greater-than-1.0/v0.9-greater-than-v0.10#extension-kit) --- # v1.0 -> v1.1 | Adaptix Framework circle-info Contributors to the GitHub update include: [shashinmaarrow-up-right](https://github.com/shashinma) , [AnvithLoboarrow-up-right](https://github.com/AnvithLobo) , [LongWayHomiearrow-up-right](https://github.com/LongWayHomie) , [nth347arrow-up-right](https://github.com/nth347) , [newBBnewarrow-up-right](https://github.com/newBBnew) , [lesteratSOLarrow-up-right](https://github.com/lesteratSOL) , [BlackMeerkatarrow-up-right](https://github.com/BlackMeerkat) [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/changelog-and-updates/v1.0-greater-than-v1.1#adaptixc2) AdaptixC2 --------------------------------------------------------------------------------------------------------------------------------------- **New:** * The data synchronization model has been completely redesigned. Data categories and category subscriptions have been introduced. Now, when logging in and during work, operators can select which data to synchronize. Login subscriptions Runtime subscriptions ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FEgnatOaKtsKFj1U0rNws%252FScreenshot_20260129_105805.png%3Falt%3Dmedia%26token%3Dca40d8c4-71cd-4f33-80f3-90b108ffe12e&width=768&dpr=3&quality=100&sign=5928e401&sv=2) ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FAVvwq1Lx6iN5rqqgRym8%252FScreenshot_20260129_105826.png%3Falt%3Dmedia%26token%3D039d0406-ca9b-4519-8366-9094d389954b&width=768&dpr=3&quality=100&sign=8c403f82&sv=2) * Completely redesigned extenders models. * Agent generation can now be performed in a separate channel, allowing build status to be displayed online and without being affected by timeouts. * Agents now have a `multi_listeners mode`, which can be configured in the extender configuration. This mode allows you to generate an agent that will work with an unlimited number of listeners simultaneously, regardless of their protocol. ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FUh2w9HCy27JUQeT0SKTN%252FScreenshot_20260130_114842.png%3Falt%3Dmedia%26token%3D616bfdcf-bc75-4fcb-824e-ca5c8ed0a7d3&width=768&dpr=3&quality=100&sign=7f426f7a&sv=2) * YAML is now used to store configurations instead of JSON. * The main HTTP server of the team server now has the ability to flexibly configure HTTP connection parameters. ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252Fr8e6ZOEpn8eVA8NNQ0Sv%252FScreenshot_20260130_115040.png%3Falt%3Dmedia%26token%3Dfd24a6b9-d7d3-4077-ba8b-a118cb907098&width=768&dpr=3&quality=100&sign=1f7a4bc6&sv=2) * The tunnels have been improved and optimized (by [AnvithLoboarrow-up-right](https://github.com/AnvithLobo) ) * Columns in the session table can now be moved. Columns now automatically adjust to the correct size (by [newBBnewarrow-up-right](https://github.com/newBBnew) ) * Now the listener state (paused or running) is saved and restored from the database. * Adds new themes: Adaptix Dracula, Dark Ice, Glass Morphism, Hacker Tech (by [newBBnewarrow-up-right](https://github.com/newBBnew) ) * New AxScript functions: * Menu: `menu.add_main`, `menu.add_main_project`, `menu.add_main_axscript`, `menu.add_main_settings`. * Ax: `ax.file_dirname`, `ax.file_extension`, `ax.file_size`, `ax.file_write_binary`, `ax.decode_data`, `ax.decode_file`, `ax.encode_data`, `ax.encode_file`, `ax.convert_to_code`, `ax.get_prject`. **Fix:** * The issue of re-saving an agent profile with a configuration already existing in the database has been resolved. * Fix duplicate remote shell writes in teamserver (by [BlackMeerkatarrow-up-right](https://github.com/BlackMeerkat) ) * Reverse Port Forwarding errors have been fixed (by [AnvithLoboarrow-up-right](https://github.com/AnvithLobo) ) * * * [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/changelog-and-updates/v1.0-greater-than-v1.1#beacon) Beacon --------------------------------------------------------------------------------------------------------------------------------- **New:** circle-check New DNS/DoH connector (by [shashinmaarrow-up-right](https://github.com/shashinma) ) ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FaeYe688TqTmjU7Gv1sX0%252FScreenshot_20260130_120010.png%3Falt%3Dmedia%26token%3Dfe4bbca5-0d34-46c8-a937-c43122956a89&width=768&dpr=3&quality=100&sign=ba9ffdfa&sv=2) ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FYNvMursGA8GfwYB4ohuW%252FScreenshot_20260128_230939.png%3Falt%3Dmedia%26token%3Da192549c-fec7-41a3-b39f-311fb9b4aa89&width=768&dpr=3&quality=100&sign=e7aee4d0&sv=2) * Updated tunnels (by [AnvithLoboarrow-up-right](https://github.com/AnvithLobo) ) * Updated ls command (by [AnvithLoboarrow-up-right](https://github.com/AnvithLobo) ) * Add http/https proxy support ([Adnnlnistratorarrow-up-right](https://github.com/Adnnlnistrator) ) ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FaJA0fshqSfdupLqQfBVT%252FScreenshot_20260128_230816.png%3Falt%3Dmedia%26token%3D7a3e982b-7bb8-4e8e-959f-a98d00a36edd&width=768&dpr=3&quality=100&sign=986686cd&sv=2) **Fix:** * Fixed a bug that sometimes prevented TCP beacons from being generated * Fixed AUTH RCE error in the `BuildPayload` function of the beacon\_agent plugin (by [https://github.com/lesteratSOLarrow-up-right](https://github.com/lesteratSOL) ) * The tunnels have been improved and optimized (by [AnvithLoboarrow-up-right](https://github.com/AnvithLobo) ) * * * [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/changelog-and-updates/v1.0-greater-than-v1.1#gopher) Gopher --------------------------------------------------------------------------------------------------------------------------------- * The Gopher agent profile now supports `multi_listeners` mode. This means that multiple different listeners can be configured for the agent, regardless of protocol. * Updated socks tunnels (by [AnvithLoboarrow-up-right](https://github.com/AnvithLobo) ) * Updated ls command (by [AnvithLoboarrow-up-right](https://github.com/AnvithLobo) ) * * * [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/changelog-and-updates/v1.0-greater-than-v1.1#extension-kit) Extension-Kit ----------------------------------------------------------------------------------------------------------------------------------------------- **New:** * LateralMovement-BOF: `invoke winrm` now support background execution (by [BlackMeerkatarrow-up-right](https://github.com/BlackMeerkat) ) * Make 32-bit builds available in Creds-BOF, Elevation-BOF, Injection-BOF, LateralMovement-BOF, Postex-BOF, SAL-BOF and SAR-BOF (by [nth347arrow-up-right](https://github.com/nth347) ) * Added `relay-informer` BOF ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FZh0PlyUfQfew6C2Yyb0X%252FScreenshot_20260109_234136.png%3Falt%3Dmedia%26token%3D44dd75d3-f30a-43bb-a8b8-81f733318e8c&width=768&dpr=3&quality=100&sign=eb9e2686&sv=2) * Added `webdav` BOF ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FuJRjEhWMpU8oiFFE8MMG%252FScreenshot_20260109_234303.png%3Falt%3Dmedia%26token%3D5404c992-6a07-480c-a7a8-a201c35f091f&width=768&dpr=3&quality=100&sign=d565d5b1&sv=2) * Added `lsadump_secrets` BOF (by [shashinmaarrow-up-right](https://github.com/shashinma) ) ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FQr673NNC8UXSmPDUveg9%252F535947796-5d1cd45d-ac93-429e-9e01-6d24674b2752.png%3Falt%3Dmedia%26token%3D1911d9a1-43db-4a3a-8cec-9886781588a2&width=768&dpr=3&quality=100&sign=35ad7b86&sv=2) * Added `lsadump_sam` BOF (by [shashinmaarrow-up-right](https://github.com/shashinma) ) ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FWrv5AEnB6PeIgLRcCMk2%252F535947976-f3dbce98-30bd-4d5f-b59f-c158f79a85e6.png%3Falt%3Dmedia%26token%3Dd47f629d-edde-4809-a01e-8b19e62e94f9&width=768&dpr=3&quality=100&sign=97514535&sv=2) * Added `lsadump_cache` BOF (by [shashinmaarrow-up-right](https://github.com/shashinma) ) ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FCUfREefSzry5zeVufUeB%252F535948038-91c97786-ffbf-49f2-be03-31c8915a2495.png%3Falt%3Dmedia%26token%3D217b0168-2bb2-4420-b0bb-5d69d655262f&width=768&dpr=3&quality=100&sign=e498f5e&sv=2) * Add `runas-session` BOF ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252F4VqnlGy7EvgWjIAqR7fZ%252FScreenshot_20260129_131724.png%3Falt%3Dmedia%26token%3D422ca289-c03f-41a5-be80-ee03aa45b0f6&width=768&dpr=3&quality=100&sign=ffb33fb8&sv=2) * Cookie-monster: added chrome 144+ support * Added Kharon agent support **Fix:** * Issue in the PSExec BOF implementation that caused service creation and startup failures (errors 1053, 1072, 1073) (by [LongWayHomiearrow-up-right](https://github.com/LongWayHomie) ) * Issue of subsequent executions of potato-dcom which works perfectly on the first attempt but returns "Failure" on all subsequent attempts within the same beacon session (by [LongWayHomiearrow-up-right](https://github.com/LongWayHomie) ) [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/changelog-and-updates/v1.0-greater-than-v1.1#templates-extender) templates-extender --------------------------------------------------------------------------------------------------------------------------------------------------------- * A new task type has been introduced: TASK\_TYPE\_LOCAL. This task type is used to retrieve information and returns the task output directly to the client; it is not saved to the database or sent to agents or other clients. * The agent config now has a `multi_listeners` parameter. * Changed TS API: * Added TS API: [PreviousVersion 1.0chevron-left](https://adaptix-framework.gitbook.io/adaptix-framework/changelog-and-updates/version-0.1-greater-than-1.0/version-1.0) [Nextv1.1 -> v1.2chevron-right](https://adaptix-framework.gitbook.io/adaptix-framework/changelog-and-updates/v1.1-greater-than-v1.2) Last updated 2 months ago * [AdaptixC2](https://adaptix-framework.gitbook.io/adaptix-framework/changelog-and-updates/v1.0-greater-than-v1.1#adaptixc2) * [Beacon](https://adaptix-framework.gitbook.io/adaptix-framework/changelog-and-updates/v1.0-greater-than-v1.1#beacon) * [Gopher](https://adaptix-framework.gitbook.io/adaptix-framework/changelog-and-updates/v1.0-greater-than-v1.1#gopher) * [Extension-Kit](https://adaptix-framework.gitbook.io/adaptix-framework/changelog-and-updates/v1.0-greater-than-v1.1#extension-kit) * [templates-extender](https://adaptix-framework.gitbook.io/adaptix-framework/changelog-and-updates/v1.0-greater-than-v1.1#templates-extender) Copy TsClientGuiDisks(taskData adaptix.TaskData, jsonDrives string) -> TsClientGuiDisksWindows(taskData adaptix.TaskData, drives []adaptix.ListingDrivesDataWin) TsClientGuiFiles(taskData adaptix.TaskData, path string, jsonFiles string) -> TsClientGuiFilesWindows(taskData adaptix.TaskData, path string, files []adaptix.ListingFileDataWin) TsClientGuiFilesUnix(taskData adaptix.TaskData, path string, files []adaptix.ListingFileDataUnix) TsClientGuiProcess(taskData adaptix.TaskData, jsonFiles string) -> TsClientGuiProcessWindows(taskData adaptix.TaskData, process []adaptix.ListingProcessDataWin) TsClientGuiProcessUnix(taskData adaptix.TaskData, process []adaptix.ListingProcessDataUnix) TsListenerGetProfile(listenerName string, listenerType string) (string, []byte, error) -> TsListenerGetProfile(listenerName string) (string, []byte, error) GenerateConfig(config GenerateConfig) ([]byte, error) -> GenerateProfiles(config GenerateConfig) ([][]byte, error) BuildPayload(config string, agentConfig []byte, listenerProfile []byte, builderId string) ([]byte, string, error) -> BuildPayload(config GenerateConfig, agentProfiles [][]byte) ([]byte, string, error) TsTunnelConnectionClose(channelId int) -> TsTunnelConnectionClose(channelId int, writeOnly bool) Copy TsAgentBuildExecute(builderId string, workingDir string, program string, args ...string) error TsAgentBuildLog(builderId string, status int, message string) error TsTunnelPause(channelId int) TsTunnelResume(channelId int) --- # Listener extender | Adaptix Framework External Listener accepts connections from agents directly over the network (HTTP/HTTPS, DNS, etc.). ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/extenders/listener-extender#flow-diagram) Flow Diagram ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FNQQiKIcgA2QUTzNoJrnE%252FScreenshot_20260120_205611.png%3Falt%3Dmedia%26token%3Dd1fbeb01-1db5-4918-908d-ee5aef1b3e4a&width=768&dpr=3&quality=100&sign=78512b21&sv=2) * * * ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/extenders/listener-extender#listener-config-config.yaml) Listener Config (config.yaml) ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/extenders/listener-extender#pluginlistener-interface) PluginListener Interface ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/extenders/listener-extender#axscript-for-listener-ax_config.axs) AxScript for Listener (ax\_config.axs) The `.axs` file defines the UI for creating/editing listeners in the GUI. **Required function:** [PreviousRegister new extenderschevron-left](https://adaptix-framework.gitbook.io/adaptix-framework/development/extenders/register-new-extenders) [NextInternal listenerchevron-right](https://adaptix-framework.gitbook.io/adaptix-framework/development/extenders/listener-extender/internal-listener) Last updated 3 months ago * [Flow Diagram](https://adaptix-framework.gitbook.io/adaptix-framework/development/extenders/listener-extender#flow-diagram) * [Listener Config (config.yaml)](https://adaptix-framework.gitbook.io/adaptix-framework/development/extenders/listener-extender#listener-config-config.yaml) * [PluginListener Interface](https://adaptix-framework.gitbook.io/adaptix-framework/development/extenders/listener-extender#pluginlistener-interface) * [AxScript for Listener (ax\_config.axs)](https://adaptix-framework.gitbook.io/adaptix-framework/development/extenders/listener-extender#axscript-for-listener-ax_config.axs) Copy ┌──────────────────────────────────────────────────────────────────────────────────┐ │ EXTERNAL LISTENER FLOW │ ├──────────────────────────────────────────────────────────────────────────────────┤ │ │ │ ╔════════════════════════════════════════════════════════════════════════════╗ │ │ ║ CREATE LISTENER ║ │ │ ╚════════════════════════════════════════════════════════════════════════════╝ │ │ │ │ GUI ──> POST /listener/create │ │ │ │ │ V │ │ ┌─────────────────────────────────────────────────────────────────────────────┐ │ │ │ TEAMSERVER │ │ │ │ │ │ │ │ │ V │ │ │ │ TsListenerCreate(listenerType, name, config) │ │ │ │ │ │ │ │ │ V │ │ │ │ ┌───────────────────────────────────────────────────────────────────────┐ │ │ │ │ │ EXTENDER │ │ │ │ │ │ │ │ │ │ │ │ │ V │ │ │ │ │ │ PluginListener.Create(name, config, customData) │ │ │ │ │ │ │ │ │ │ │ │ │ ├──> Configuration validation │ │ │ │ │ │ └──> return ExtenderListener, ListenerData, customData │ │ │ │ │ │ │ │ │ │ │ └───────────────────────────────────────────────────────────────────────┘ │ │ │ │ │ │ │ │ │ └──> Save to DBMS, broadcast to clients │ │ │ │ │ │ │ └─────────────────────────────────────────────────────────────────────────────┘ │ │ │ │ ╔════════════════════════════════════════════════════════════════════════════╗ │ │ ║ START LISTENER ║ │ │ ╚════════════════════════════════════════════════════════════════════════════╝ │ │ │ │ (automatically after Create) │ │ │ │ │ V │ │ ┌─────────────────────────────────────────────────────────────────────────────┐ │ │ │ TEAMSERVER │ │ │ │ │ │ │ │ │ V │ │ │ │ TsListenerStart(listenerName) │ │ │ │ │ │ │ │ │ V │ │ │ │ ┌───────────────────────────────────────────────────────────────────────┐ │ │ │ │ │ EXTENDER │ │ │ │ │ │ │ │ │ │ │ │ │ V │ │ │ │ │ │ ExtenderListener.Start() │ │ │ │ │ │ │ │ │ │ │ │ │ └──> Start HTTP/DNS server │ │ │ │ │ │ │ │ │ │ │ └───────────────────────────────────────────────────────────────────────┘ │ │ │ │ │ │ │ └─────────────────────────────────────────────────────────────────────────────┘ │ │ │ │ ╔════════════════════════════════════════════════════════════════════════════╗ │ │ ║ AGENT CONNECTION ║ │ │ ╚════════════════════════════════════════════════════════════════════════════╝ │ │ │ │ Agent ──> [HTTP] Request to Listener │ │ │ │ │ V │ │ ┌─────────────────────────────────────────────────────────────────────────────┐ │ │ │ EXTENDER ([HTTP] Handler) │ │ │ │ │ │ │ │ │ V │ │ │ │ [processRequest(ctx)] │ │ │ │ │ │ │ │ │ ├──> Extract AgentID and data │ │ │ │ │ │ │ │ │ V │ │ │ │ ┌───────────────────────────────────────────────────────────────────────┐ │ │ │ │ │ TEAMSERVER API calls │ │ │ │ │ │ │ │ │ │ │ │ │ ├──> if !TsAgentIsExists(agentId): │ │ │ │ │ │ │ TsAgentCreate(agentCrc, agentId, data, listener, IP) │ │ │ │ │ │ │ │ │ │ │ │ │ ├──> TsAgentSetTick(agentId, listener) - last tick update │ │ │ │ │ │ │ │ │ │ │ │ │ ├──> TsAgentProcessData(agentId, bodyData) - process data │ │ │ │ │ │ │ │ │ │ │ │ │ └──> TsAgentGetHostedAll(agentId, maxSize) - send tasks │ │ │ │ │ │ │ │ │ │ │ └───────────────────────────────────────────────────────────────────────┘ │ │ │ │ │ │ │ │ │ └──> return [HTTP] response to agent │ │ │ │ │ │ │ └─────────────────────────────────────────────────────────────────────────────┘ │ │ │ │ ╔════════════════════════════════════════════════════════════════════════════╗ │ │ ║ STOP LISTENER ║ │ │ ╚════════════════════════════════════════════════════════════════════════════╝ │ │ │ │ GUI ──> POST /listener/stop │ │ │ │ │ V │ │ ┌─────────────────────────────────────────────────────────────────────────────┐ │ │ │ TEAMSERVER │ │ │ │ │ │ │ │ │ V │ │ │ │ TsListenerStop(listenerName) │ │ │ │ │ │ │ │ │ V │ │ │ │ ┌───────────────────────────────────────────────────────────────────────┐ │ │ │ │ │ EXTENDER │ │ │ │ │ │ │ │ │ │ │ │ │ V │ │ │ │ │ │ ExtenderListener.Stop() │ │ │ │ │ │ │ │ │ │ │ │ │ └──> Stop server, cleanup resources │ │ │ │ │ │ │ │ │ │ │ └───────────────────────────────────────────────────────────────────────┘ │ │ │ │ │ │ │ └─────────────────────────────────────────────────────────────────────────────┘ │ │ │ └──────────────────────────────────────────────────────────────────────────────────┘ Copy extender_type: "listener" extender_file: "listener.so" ax_file: "ax_config.axs" listener_name: "LISTENER_NAME" listener_type: "external" # or "internal" protocol: "protocol here" Copy type PluginListener interface { // Create listener Create(name string, config string, customData []byte) (ExtenderListener, ListenerData, []byte, error) } // ExtenderListener - active listener interface type ExtenderListener interface { // Start listener Start() error // Edit configuration Edit(config string) (ListenerData, []byte, error) // Stop listener Stop() error // Get profile for agent generation GetProfile() ([]byte, error) // Handle pivot connections (for internal listener) InternalHandler(data []byte) (string, error) } Copy function ListenerUI(mode_create) { // mode_create: true = create, false = edit // Create UI elements let labelHost = form.create_label("Host:"); let comboHost = form.create_combo(); comboHost.setEnabled(mode_create); // Non-editable fields when editing let spinPort = form.create_spin(); spinPort.setRange(1, 65535); spinPort.setValue(443); // Layout let layout = form.create_gridlayout(); layout.addWidget(labelHost, 0, 0, 1, 1); layout.addWidget(comboHost, 0, 1, 1, 1); // Container for retrieving values let container = form.create_container(); container.put("host_bind", comboHost); container.put("port_bind", spinPort); let panel = form.create_panel(); panel.setLayout(layout); // Required return return { ui_panel: panel, // Panel with UI ui_container: container, // Container for retrieving values ui_height: 400, // Dialog height ui_width: 500 // Dialog width } } --- # Beacon | Adaptix Framework triangle-exclamation This version of the Beacon agent is not designed for AV or EDR evasion and is therefore not OPSEC compliant. Beacon is primarily intended to test and demonstrate the capabilities of AdaptixC2. However, the Beacon agent can be easily extended and modified, making it compatible with various AV evasion methods. [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/extenders/agents/beacon#configuration) Configuration -------------------------------------------------------------------------------------------------------------------------- HTTP Beacon can connect through a Proxy server. ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FaJA0fshqSfdupLqQfBVT%252FScreenshot_20260128_230816.png%3Falt%3Dmedia%26token%3D7a3e982b-7bb8-4e8e-959f-a98d00a36edd&width=768&dpr=3&quality=100&sign=986686cd&sv=2) DNS Beacon can connect only via DNS or DoH, and can also switch from DoH to DNS and from DNS to DoH if the first option does not work. ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FI2Ttz8Abt6PApKiF0ihf%252FScreenshot_20260128_230951.png%3Falt%3Dmedia%26token%3Db38a19bf-3131-47d1-9847-e98474fa3217&width=768&dpr=3&quality=100&sign=395dba26&sv=2) ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FYNvMursGA8GfwYB4ohuW%252FScreenshot_20260128_230939.png%3Falt%3Dmedia%26token%3Da192549c-fec7-41a3-b39f-311fb9b4aa89&width=768&dpr=3&quality=100&sign=e7aee4d0&sv=2) ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/extenders/agents/beacon#main-configuration) Main configuration EXE SHELLCODE DLL SERVICE ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FjxTGRFgc8UyuX2gQdRCN%252FScreenshot_20251229_200158.png%3Falt%3Dmedia%26token%3D19bfe6e0-d670-4444-861f-a82c5d11d45c&width=768&dpr=3&quality=100&sign=f0431793&sv=2) ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FygekCepvUnQOjQHilWW0%252FScreenshot_20251229_200204.png%3Falt%3Dmedia%26token%3D15f9d282-be19-4987-89c2-4dfb0f68a230&width=768&dpr=3&quality=100&sign=36cecb2c&sv=2) ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FLyBnwApLA2IpxHrMgJF3%252FScreenshot_20251229_200207.png%3Falt%3Dmedia%26token%3D0180955c-8bc1-4206-97ab-1c1f0195583d&width=768&dpr=3&quality=100&sign=f7d27e4c&sv=2) ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252F2eBXlV5MqDCLWXkgyqLe%252FScreenshot_20251229_200211.png%3Falt%3Dmedia%26token%3D56feb83e-313d-4951-ad92-674bbcbe1a2b&width=768&dpr=3&quality=100&sign=694ee913&sv=2) Beacon currently **only supports Windows OS**. The Beacon can be generated **for x64 and x86** architectures in the following formats: EXE, DLL, Service Executable, Shellcode. The **KillDate** parameter sets the date and time of the beacon's death (GMT+0 format). The **WorkingTime** parameter sets the time interval during which the beacon will be active (local time on the target host). * The **Service Name** is set for the Service Executable. * The **Legit-DLL** is set for the DLL. This option will generate a DLL for Sideloading that will contain all exports from the specified DLL. [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/extenders/agents/beacon#commands) Commands ---------------------------------------------------------------------------------------------------------------- Beacon currently supports the following commands. ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252Fm6fzIjGdWLzAom0XiBxm%252FScreenshot_20250224_215402.png%3Falt%3Dmedia%26token%3D69e1b9e3-ff18-4d0e-855f-2123dd44ec7f&width=768&dpr=3&quality=100&sign=5caa3137&sv=2) Commands marked with `*` have subcommands. ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FXFn7RyqFVkXDR5BKj4Lo%252F%25D0%25B8%25D0%25B7%25D0%25BE%25D0%25B1%25D1%2580%25D0%25B0%25D0%25B6%25D0%25B5%25D0%25BD%25D0%25B8%25D0%25B5.png%3Falt%3Dmedia%26token%3D1079f459-2f62-40d8-8802-e2333342513a&width=768&dpr=3&quality=100&sign=40f40405&sv=2) ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/extenders/agents/beacon#filesystem-commands) Filesystem Commands Command Description cat Read first 2048 bytes of the specified file cd Change current working directory cp Copy file disks Lists mounted drives on current system ls Lists files in a folder mv Move file mkdir Make a directory pwd Print current working directory rm Remove a file or folder ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FMO0sx8GH0gL5XIZYFfW8%252FScreenshot_20250327_142421.png%3Falt%3Dmedia%26token%3D88938db5-03e6-4177-bcec-58688d5eaed4&width=768&dpr=3&quality=100&sign=92dcf8c0&sv=2) ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FVOTNsKDm98ILWNJfMHFz%252FScreenshot_20250327_142445.png%3Falt%3Dmedia%26token%3Db079671b-77a4-4d3c-86f5-b7a7273859ef&width=768&dpr=3&quality=100&sign=18cc02f9&sv=2) ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/extenders/agents/beacon#exfiltration-commands) Exfiltration commands Command Description download Download a file upload Upload a file profile download.chunksize Change the exfiltrate data size for download request (default 128000) exfil cancel Cancels a download exfil start Resumes a download that's has been stoped exfil stop Stops a download that's in-progress ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FeZY98rTaMTBGiaOD1W9y%252FScreenshot_20250327_143000.png%3Falt%3Dmedia%26token%3D7eb52a7b-15d0-4b40-b0c3-2e7b678d2ef7&width=768&dpr=3&quality=100&sign=aa19ab58&sv=2) ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/extenders/agents/beacon#tunnel-commands) Tunnel commands Command Description socks start Start a SOCKS4/5 proxy server (with/out auth) and listen on a specified port socks stop Stop a SOCKS proxy server lportfwd start Start local port forwarding from server via agent lportfwd stop Stop local port forwarding rportfwd start Start remote port forwarding from agent via server rportfwd stop Stop remote port forwarding circle-info Since Bacon is an asynchronous agent, proxy scanning should be performed with no more than four threads. Tested on NetExec SMB... Agent does not switch sleep time automatically. Use `sleep 0` ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FULiKhKHb7MiqJKQIl6MG%252FScreenshot_20250327_143154.png%3Falt%3Dmedia%26token%3D85435921-3e39-400c-ab46-1cbff98904a8&width=768&dpr=3&quality=100&sign=184fba58&sv=2) ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/extenders/agents/beacon#process-commands) Process commands Command Description ps list Show process list ps kill Kill a process with a given PID ps run Run a program ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252F6RYFRvc3CliqgRJ1vdFi%252FScreenshot_20250327_143345.png%3Falt%3Dmedia%26token%3D178b99a1-5637-4099-9a0e-5d6f5c98dc71&width=768&dpr=3&quality=100&sign=c03d1b71&sv=2) ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/extenders/agents/beacon#link-commands) Link commands Command Description link smb Connect to an SMB agent and re-establish control of it link tcp Connect to an TCP agent and re-establish control of it unlink Disconnect from an pivot agent ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FbleYDfxzPcFYvuPVBHOz%252FScreenshot_20250427_215636.png%3Falt%3Dmedia%26token%3D479721fe-465c-4298-868b-453d3924b7f8&width=768&dpr=3&quality=100&sign=8b6a001c&sv=2) ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/extenders/agents/beacon#post-exploitation-commands) Post-exploitation commands Command Description jobs list List of jobs jobs kill Kill a specified job execute bof Execute Beacon Object File getuid Prints the User ID associated with the current token rev2self Revert to your original access token ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FOZSNu59FgynVGdJTU6El%252FScreenshot_20250327_143817.png%3Falt%3Dmedia%26token%3D37375be2-e663-48db-b43b-7195b544af84&width=768&dpr=3&quality=100&sign=bf68c600&sv=2) ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/extenders/agents/beacon#agent-command) Agent command Command Description sleep Sets sleep time terminate thread Terminate the main beacon thread (without terminating the process) terminate process Terminate the beacon process profile workingtime Set the start and end time of the beacon activity. Time interval in the format 'HH:mm(start)-HH:mm(end)'. Set 0 to disable the option. profile killdate Set the date and time for the beacon to stop working. Datetime 'DD.MM.YYYY hh:mm:ss' in **GMT format**. Set 0 to disable the option ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252F3JZXeXJJa7kQAneLwmOV%252FScreenshot_20250427_215345.png%3Falt%3Dmedia%26token%3D9b634323-5f86-4854-a604-67016dd1756a&width=768&dpr=3&quality=100&sign=3e27facc&sv=2) [PreviousAgentschevron-left](https://adaptix-framework.gitbook.io/adaptix-framework/extenders/agents) [NextBeacon BOFschevron-right](https://adaptix-framework.gitbook.io/adaptix-framework/extenders/agents/beacon/beacon-bofs) Last updated 2 months ago * [Configuration](https://adaptix-framework.gitbook.io/adaptix-framework/extenders/agents/beacon#configuration) * [Main configuration](https://adaptix-framework.gitbook.io/adaptix-framework/extenders/agents/beacon#main-configuration) * [Commands](https://adaptix-framework.gitbook.io/adaptix-framework/extenders/agents/beacon#commands) * [Filesystem Commands](https://adaptix-framework.gitbook.io/adaptix-framework/extenders/agents/beacon#filesystem-commands) * [Exfiltration commands](https://adaptix-framework.gitbook.io/adaptix-framework/extenders/agents/beacon#exfiltration-commands) * [Tunnel commands](https://adaptix-framework.gitbook.io/adaptix-framework/extenders/agents/beacon#tunnel-commands) * [Process commands](https://adaptix-framework.gitbook.io/adaptix-framework/extenders/agents/beacon#process-commands) * [Link commands](https://adaptix-framework.gitbook.io/adaptix-framework/extenders/agents/beacon#link-commands) * [Post-exploitation commands](https://adaptix-framework.gitbook.io/adaptix-framework/extenders/agents/beacon#post-exploitation-commands) * [Agent command](https://adaptix-framework.gitbook.io/adaptix-framework/extenders/agents/beacon#agent-command) --- # v0.8 -> v0.9 | Adaptix Framework [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/changelog-and-updates/version-0.1-greater-than-1.0/v0.8-greater-than-v0.9#adaptixc2) AdaptixC2 -------------------------------------------------------------------------------------------------------------------------------------------------------------------- **New:** * Rewrote the client core — the client now uses a dock-based structure. ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252F1B6aWVVxDmiuEB3XrMrQ%252FScreenshot_20250927_213254.png%3Falt%3Dmedia%26token%3Dab0f5423-8d11-4bb3-97bd-c4eff8e478c1&width=768&dpr=3&quality=100&sign=7ebff42c&sv=2) * AxScript new functions: [agent\_hide](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#agent_hide) , [agent\_remove](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#agent_remove) , [hash](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#hash) , [random\_string](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#random_string) , [random\_int](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#random_int) . * Added new API `POST /agent/task/save` to save a task to the Tasks Manager. * Remote Terminal: you can now select a command response and save it to the Tasks Manager. * After server sync, files downloaded in DownloadsManager are now sorted by date. * Added a multithreaded client build. * Server web-APIs [published](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/web-api) . * Authentication: users can now authenticate to the server either with a master password or with credentials hard-coded in the profile. (by [exil-securityarrow-up-right](https://github.com/exil-security) ) * Optimised Exist DB functions — the Exist functions now query IDs directly instead of iterating through all rows. (by [Xre0uSarrow-up-right](https://github.com/Xre0uS) ) * Added a confirmation dialog when deleting a listener. (by [newBBnewarrow-up-right](https://github.com/newBBnew) ) * In addition to Telegram notifications, added the ability to notify any web service (for example ntfy.sh, Slack, or Microsoft Teams). (by [mdube99arrow-up-right](https://github.com/mdube99) ) **Fix:** * Fixed a bug where the client login configuration would not update. (by [newBBnewarrow-up-right](https://github.com/newBBnew) ) * Fixed a bug where the agent command configuration would not update when the user re-logged in. (by [newBBnewarrow-up-right](https://github.com/newBBnew) ) [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/changelog-and-updates/version-0.1-greater-than-1.0/v0.8-greater-than-v0.9#beacon) Beacon -------------------------------------------------------------------------------------------------------------------------------------------------------------- **New:** * Added BOF API `AxDownloadMemory(char* filename, char* data, int len);` **Fix:** * Fixed bug in `getuid` command (by [overflow0verturearrow-up-right](https://github.com/overflow0verture) ) * Encryption keys for HTTP/SMB/TCP listeners can now be set at listener creation. (by [newBBnewarrow-up-right](https://github.com/newBBnew) ) [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/changelog-and-updates/version-0.1-greater-than-1.0/v0.8-greater-than-v0.9#gopher) Gopher -------------------------------------------------------------------------------------------------------------------------------------------------------------- **Fix:** * Added BOF API `AxAddScreenshot(char* note, char* data, int len);` * Added BOF API `AxDownloadMemory(char* filename, char* data, int len);` * Encryption keys for listeners can now be set at listener creation. (by [newBBnewarrow-up-right](https://github.com/newBBnew) ) [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/changelog-and-updates/version-0.1-greater-than-1.0/v0.8-greater-than-v0.9#extension-kit) Extension-Kit ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- **New:** * `psexec`: now more configurable. * `inject-poolparty`: eight injection techniques for processes. (by [jacopoaugelliarrow-up-right](https://github.com/jacopoaugelli) ) ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FN782JbjP7YForB1sHIP7%252FScreenshot_20250927_220630.png%3Falt%3Dmedia%26token%3D685d0839-a90b-4f7b-bd10-727b42a39017&width=768&dpr=3&quality=100&sign=1129a906&sv=2) * `nanodump`: now produces a dump file from process memory ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FyvnE4ChPbrhjWa7I4vxx%252FScreenshot_20250927_215358.png%3Falt%3Dmedia%26token%3Db0722a95-24cb-4e10-a2bf-cf78586eca43&width=768&dpr=3&quality=100&sign=e70d0c63&sv=2) * `cookie-monster`: retrieves Chrome encryption key and downloads files from the Chrome process memory ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FQRpVvJf3Ochh1CcuCrBQ%252FScreenshot_20250927_215748.png%3Falt%3Dmedia%26token%3D139dc8e3-9b9a-4851-901e-4fd6b8c08028&width=768&dpr=3&quality=100&sign=cdbb46a7&sv=2) * `get-netntlm`: BOF implementation of Internal-Monologue. ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252F3vCAx7cRQvPUuX3600ZJ%252FScreenshot_20250927_215922.png%3Falt%3Dmedia%26token%3D546525b2-19af-4aa1-88de-ecd1651cbd0b&width=768&dpr=3&quality=100&sign=ddd87b29&sv=2) * `invoke-winrm`: execute commands via WinRM. ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FQlzmLpE2H2BE2jBlWcG9%252FScreenshot_20250927_221914.png%3Falt%3Dmedia%26token%3De2358f63-5890-45d0-b47a-4dc73c2ca962&width=768&dpr=3&quality=100&sign=3508ef5e&sv=2) **Fix:** * Fix hashdump for Windows Server 2019 (by [T1ernoarrow-up-right](https://github.com/T1erno) ) [Previousv0.7 -> v0.8chevron-left](https://adaptix-framework.gitbook.io/adaptix-framework/changelog-and-updates/version-0.1-greater-than-1.0/v0.7-greater-than-v0.8) [Nextv0.9 -> v0.10chevron-right](https://adaptix-framework.gitbook.io/adaptix-framework/changelog-and-updates/version-0.1-greater-than-1.0/v0.9-greater-than-v0.10) Last updated 6 months ago * [AdaptixC2](https://adaptix-framework.gitbook.io/adaptix-framework/changelog-and-updates/version-0.1-greater-than-1.0/v0.8-greater-than-v0.9#adaptixc2) * [Beacon](https://adaptix-framework.gitbook.io/adaptix-framework/changelog-and-updates/version-0.1-greater-than-1.0/v0.8-greater-than-v0.9#beacon) * [Gopher](https://adaptix-framework.gitbook.io/adaptix-framework/changelog-and-updates/version-0.1-greater-than-1.0/v0.8-greater-than-v0.9#gopher) * [Extension-Kit](https://adaptix-framework.gitbook.io/adaptix-framework/changelog-and-updates/version-0.1-greater-than-1.0/v0.8-greater-than-v0.9#extension-kit) --- # v0.10 -> v0.11 | Adaptix Framework circle-exclamation Go version has been updated from 1.24.4 to 1.25.4, so **a full installation** [**following the guide**](https://adaptix-framework.gitbook.io/adaptix-framework/adaptix-c2/getting-starting/installation-server#preinstall) **is required**. circle-info Contributed to this update: [shashinmaarrow-up-right](https://github.com/shashinma) , [cr0eaxarrow-up-right](https://github.com/cr0eax) , [Xre0uSarrow-up-right](https://github.com/Xre0uS) , [M1ndoarrow-up-right](https://github.com/M1ndo) , [ArturLukianovarrow-up-right](https://github.com/ArturLukianov) , [entropy-zarrow-up-right](https://github.com/entropy-z) [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/changelog-and-updates/version-0.1-greater-than-1.0/v0.10-greater-than-v0.11#adaptixc2) AdaptixC2 ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- **New:** * Golang has been updated from version 1.24.4 to 1.25.4. The new version will use the new experimental `encoding/json/v2` package and the new experimental `greenteagc` garbage collector. * Synchronization of extension package versions and the framework itself is now controlled by a single `go work` statement. * The synchronization mechanism has been optimized. The entire client interface is now blocked during synchronization. * The `GenerateUI` function in axscript now also returns the `ui_height` and `ui_width` properties, which adjust the window for creating listeners or agents. * Client UI: Add dynamic title bar styling based on theme (by [shashinmaarrow-up-right](https://github.com/shashinma) ) * Added building server and extenders in [docker compose](https://adaptix-framework.gitbook.io/adaptix-framework/adaptix-c2/getting-starting/installation-server#docker-compose) (by [shashinmaarrow-up-right](https://github.com/shashinma) ) **Fix:** * Fixed errors with interrupted upload and synchronization of large files. * Fixed an issue where the sync progress bar would not appear when reconnecting to the server. [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/changelog-and-updates/version-0.1-greater-than-1.0/v0.10-greater-than-v0.11#beacon) Beacon ---------------------------------------------------------------------------------------------------------------------------------------------------------------- **New:** * Classes that store this during initialization will get pointer to temporary memory (on stack) because of current construction method. Code changed to use new/delete with overridden operator new/operator delete for each of beacon class. (by [cr0eaxarrow-up-right](https://github.com/cr0eax) ) **Fix**: * Problem in `BeaconFormatPrintf`/`BeaconPrintf` because `vsnprintf` returns -1 on error which is later used as size leading to crash (by [cr0eaxarrow-up-right](https://github.com/cr0eax) ) * Problem in `BeaconAddValue` and family. It stores `Char*` as raw pointer inside `Map Values;` Changed to store actual key value (by [cr0eaxarrow-up-right](https://github.com/cr0eax) ) * Ntdll `RtlRandomEx`, `RtlGetVersion` `__stdcall` for x86 (crash on shifted stack) (by [cr0eaxarrow-up-right](https://github.com/cr0eax) ) [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/changelog-and-updates/version-0.1-greater-than-1.0/v0.10-greater-than-v0.11#gopher) Gopher ---------------------------------------------------------------------------------------------------------------------------------------------------------------- **New:** * Golang has been updated from version 1.24.4 to 1.25.4. **Fix:** * Fixed an issue where the agent would not have a delay between reconnections. * The `cat` command now has a 10 KB limit. [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/changelog-and-updates/version-0.1-greater-than-1.0/v0.10-greater-than-v0.11#extension-kit) Extension-Kit ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ **New:** * AD-BOF: Added `readlaps` BOF (by [Xre0uSarrow-up-right](https://github.com/Xre0uS) ) ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FxBwi9NiDw7jFHZn3rzmB%252FScreenshot_20251116_104251.png%3Falt%3Dmedia%26token%3D0d509ed4-c4f8-4a58-b17d-3010ff342139&width=768&dpr=3&quality=100&sign=16636073&sv=2) ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252F7pGnyG25QLSDyUo1mu4R%252FScreenshot_20251116_104303.png%3Falt%3Dmedia%26token%3D22093f6f-72bf-43dc-95dc-5a5ad4547194&width=768&dpr=3&quality=100&sign=3501a380&sv=2) * Postex-BOF: adde `SauronEye-BOF` (by [shashinmaarrow-up-right](https://github.com/shashinma) ) ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252Fqb43uLyETMAwulAVpI5K%252FScreenshot_20251124_190519.png%3Falt%3Dmedia%26token%3D436290bc-042b-4973-a792-969496299cb0&width=768&dpr=3&quality=100&sign=ee3cdf6&sv=2) * AD-BOF (ADCS): Added `certi enum` BOF ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FGWZ46c01fPeVAO1d1l07%252FScreenshot_20251124_155101.png%3Falt%3Dmedia%26token%3Dbf49356f-8f30-4da2-ad7b-bd2f14231f8b&width=768&dpr=3&quality=100&sign=7719b642&sv=2) * AD-BOF (ADCS): Added `certi req` BOF ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FQ5aWtPhjxZaPBeaHilnM%252FScreenshot_20251116_100858.png%3Falt%3Dmedia%26token%3D4d7f7530-492d-4601-b9c5-f9cfc36bd5ee&width=768&dpr=3&quality=100&sign=5b39c703&sv=2) * Creds-BOF: update `cookie-monster` BOF (by [M1ndoarrow-up-right](https://github.com/M1ndo) ) ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252F0fKG7NlIEVtk08tpLhBU%252FScreenshot_20251116_171016.png%3Falt%3Dmedia%26token%3Df614793e-17eb-4f7f-a223-c680fb22dac0&width=768&dpr=3&quality=100&sign=375eb865&sv=2) * Creds-BOF: Added `underlaycopy` BOF (by [shashinmaarrow-up-right](https://github.com/shashinma) ) ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FLrrIJkknvFToEqagBNhN%252FScreenshot_20251125_230852.png%3Falt%3Dmedia%26token%3D659db62c-aa51-4926-91d8-b6c0bc031fa0&width=768&dpr=3&quality=100&sign=38a5245b&sv=2) * Injection-BOF: Added `inject-32to64` BOF (by [Xre0uSarrow-up-right](https://github.com/Xre0uS) ) * LateralMovement-BOF: added `jump scshell` BOF (by [Xre0uSarrow-up-right](https://github.com/Xre0uS) ) * LateralMovement-BOF: added `invoke scshell` BOF (by [Xre0uSarrow-up-right](https://github.com/Xre0uS) ) * Elevation-BOF: Added `potato print` BOF **Fix:** * MSSQL-BOF: parse flags before positional arguments (by [Xre0uSarrow-up-right](https://github.com/Xre0uS) ) * MSSQL-BOF: fixed `mssql clr`, was missing the DLL bytes and hash (by [Xre0uSarrow-up-right](https://github.com/Xre0uS) ) * Kerbeus-BOF: Add `kerbeus describe` (by [Xre0uSarrow-up-right](https://github.com/Xre0uS) ) * In some environments `parsed_json` is not returning as a standard JS object, causing `Error: Property 'hasOwnProperty' of object TypeError: Type error is not a function`. Switched to using "property" in `parsed_json` instead of `parsed_json.hasOwnProperty("property")` (by [Xre0uSarrow-up-right](https://github.com/Xre0uS) ) [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/changelog-and-updates/version-0.1-greater-than-1.0/v0.10-greater-than-v0.11#templates-extender) templates-extender ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- * Golang has been updated from version 1.24.4 to 1.25.4 ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/changelog-and-updates/version-0.1-greater-than-1.0/v0.10-greater-than-v0.11#new-community-extenders) New community extenders * [PaperShellarrow-up-right](https://github.com/ArturLukianov/PaperShell) (by [ArturLukianovarrow-up-right](https://github.com/ArturLukianov) ) - Simple Powershell agent for Adaptix C2. + HTTP Listener * [Kharonarrow-up-right](https://github.com/entropy-z/Kharon-Agent) (by [entropy-zarrow-up-right](https://github.com/entropy-z) ) - Fully PIC agent that operates without a reflective loader and includes evasion features such as sleep obfuscation, heap obfuscation during sleep, stack spoofing with indirect syscalls, BOF API proxy for spoofed/indirect BOF API executions, and AMSI/ETW bypass. + HTTP/S Listener [Previousv0.9 -> v0.10chevron-left](https://adaptix-framework.gitbook.io/adaptix-framework/changelog-and-updates/version-0.1-greater-than-1.0/v0.9-greater-than-v0.10) [NextVersion 1.0chevron-right](https://adaptix-framework.gitbook.io/adaptix-framework/changelog-and-updates/version-0.1-greater-than-1.0/version-1.0) Last updated 4 months ago * [AdaptixC2](https://adaptix-framework.gitbook.io/adaptix-framework/changelog-and-updates/version-0.1-greater-than-1.0/v0.10-greater-than-v0.11#adaptixc2) * [Beacon](https://adaptix-framework.gitbook.io/adaptix-framework/changelog-and-updates/version-0.1-greater-than-1.0/v0.10-greater-than-v0.11#beacon) * [Gopher](https://adaptix-framework.gitbook.io/adaptix-framework/changelog-and-updates/version-0.1-greater-than-1.0/v0.10-greater-than-v0.11#gopher) * [Extension-Kit](https://adaptix-framework.gitbook.io/adaptix-framework/changelog-and-updates/version-0.1-greater-than-1.0/v0.10-greater-than-v0.11#extension-kit) * [templates-extender](https://adaptix-framework.gitbook.io/adaptix-framework/changelog-and-updates/version-0.1-greater-than-1.0/v0.10-greater-than-v0.11#templates-extender) * [New community extenders](https://adaptix-framework.gitbook.io/adaptix-framework/changelog-and-updates/version-0.1-greater-than-1.0/v0.10-greater-than-v0.11#new-community-extenders) --- # Internal listener | Adaptix Framework Internal Listener defines the protocol for pivot connections (SMB pipe, TCP). Does not open ports on the server. ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/extenders/listener-extender/internal-listener#flow-diagram) Flow Diagram ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252Fl3ekQ6qa6COmRjczk390%252FScreenshot_20260120_205625.png%3Falt%3Dmedia%26token%3D7429f64f-04cb-4d77-8158-aa98b8449967&width=768&dpr=3&quality=100&sign=b8ae622f&sv=2) ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/extenders/listener-extender/internal-listener#differences-from-external-listener) Differences from External Listener Aspect External Listener Internal Listener Opens ports Yes (HTTP, DNS) No Connection Agent → Server directly Via parent agent `InternalHandler()` Returns empty string Creates child agent Examples HTTP, HTTPS, DNS SMB, TCP (pivot) * * * [PreviousListener extenderchevron-left](https://adaptix-framework.gitbook.io/adaptix-framework/development/extenders/listener-extender) [NextAgent pluginchevron-right](https://adaptix-framework.gitbook.io/adaptix-framework/development/extenders/agent-plugin) Last updated 3 months ago * [Flow Diagram](https://adaptix-framework.gitbook.io/adaptix-framework/development/extenders/listener-extender/internal-listener#flow-diagram) * [Differences from External Listener](https://adaptix-framework.gitbook.io/adaptix-framework/development/extenders/listener-extender/internal-listener#differences-from-external-listener) Copy ┌──────────────────────────────────────────────────────────────────────────────────┐ │ INTERNAL LISTENER FLOW │ ├──────────────────────────────────────────────────────────────────────────────────┤ │ │ │ ╔════════════════════════════════════════════════════════════════════════════╗ │ │ ║ CREATE INTERNAL LISTENER ║ │ │ ╚════════════════════════════════════════════════════════════════════════════╝ │ │ │ │ GUI ──> POST /listener/create │ │ │ │ │ V │ │ ┌─────────────────────────────────────────────────────────────────────────────┐ │ │ │ TEAMSERVER │ │ │ │ │ │ │ │ │ V │ │ │ │ TsListenerCreate(listenerType, name, config) │ │ │ │ │ │ │ │ │ V │ │ │ │ ┌───────────────────────────────────────────────────────────────────────┐ │ │ │ │ │ EXTENDER │ │ │ │ │ │ │ │ │ │ │ │ │ V │ │ │ │ │ │ PluginListener.Create(name, config, customData) │ │ │ │ │ │ │ │ │ │ │ │ │ └──> Save configuration (pipename, encrypt_key, etc.) │ │ │ │ │ │ Does NOT open ports/pipes on the server! │ │ │ │ │ │ │ │ │ │ │ └───────────────────────────────────────────────────────────────────────┘ │ │ │ │ │ │ │ └─────────────────────────────────────────────────────────────────────────────┘ │ │ │ │ ╔════════════════════════════════════════════════════════════════════════════╗ │ │ ║ PIVOT AGENT CONNECTION ║ │ │ ╚════════════════════════════════════════════════════════════════════════════╝ │ │ │ │ Child Agent ──> COMMAND_LINK via Parent Agent │ │ │ │ │ V │ │ ┌─────────────────────────────────────────────────────────────────────────────┐ │ │ │ EXTENDER (Agent Plugin) │ │ │ │ │ │ │ │ │ V │ │ │ │ ExtenderAgent.ProcessData() ──> ProcessTasksResult() │ │ │ │ │ │ │ │ │ V │ │ │ │ case COMMAND_LINK: │ │ │ │ │ │ │ │ │ ├──> watermark := packer.ParseInt32() │ │ │ │ ├──> data := packer.ParseBytes() │ │ │ │ │ │ │ │ │ V │ │ │ │ ┌───────────────────────────────────────────────────────────────────────┐ │ │ │ │ │ TEAMSERVER │ │ │ │ │ │ │ │ │ │ │ │ │ V │ │ │ │ │ │ TsListenerInteralHandler(watermark, data) │ │ │ │ │ │ │ │ │ │ │ │ │ V │ │ │ │ │ │ ┌─────────────────────────────────────────────────────────────────┐ │ │ │ │ │ │ │ EXTENDER (Listener Plugin) │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ V │ │ │ │ │ │ │ │ ExtenderListener.InternalHandler(data) │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├──> parse AgentId and data │ │ │ │ │ │ │ │ ├──> TsAgentCreate(...) ←── Create child agent │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ └──> return childAgentId │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ └─────────────────────────────────────────────────────────────────┘ │ │ │ │ │ │ │ │ │ │ │ │ │ V │ │ │ │ │ │ TsPivotCreate(pivotId, parentAgentId, childAgentId) │ │ │ │ │ │ │ │ │ │ │ └───────────────────────────────────────────────────────────────────────┘ │ │ │ │ │ │ │ └─────────────────────────────────────────────────────────────────────────────┘ │ │ │ └──────────────────────────────────────────────────────────────────────────────────┘ --- # Terminals | Adaptix Framework Terminals provide an interactive shell on the target machine via WebSocket connection with the GUI. ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/extenders/agent-plugin/terminals#flow) Flow Copy ┌──────────────────────────────────────────────────────────────────────────────────┐ │ TERMINAL FLOW │ ├──────────────────────────────────────────────────────────────────────────────────┤ │ │ │ ╔════════════════════════════════════════════════════════════════════════════╗ │ │ ║ OPEN TERMINAL ║ │ │ ╚════════════════════════════════════════════════════════════════════════════╝ │ │ │ │ GUI ──> WS /channel (agent/terminal, data=base64(agentId|termId|...)) │ │ │ │ │ V │ │ ┌─────────────────────────────────────────────────────────────────────────────┐ │ │ │ TEAMSERVER │ │ │ │ │ │ │ │ │ V │ │ │ │ TsAgentTerminalCreateChannel(terminalData, wsconn) │ │ │ │ │ │ │ │ │ ├──> Decode: agentId, terminalId, program, sizeH, sizeW │ │ │ │ ├──> Create Terminal with Pipes (prSrv, pwSrv, prTun, pwTun) │ │ │ │ │ │ │ │ │ V │ │ │ │ ┌───────────────────────────────────────────────────────────────────────┐ │ │ │ │ │ EXTENDER (Agent Plugin) │ │ │ │ │ │ │ │ │ │ │ │ │ V │ │ │ │ │ │ TerminalCallbacks.Start(terminalId, program, sizeH, sizeW) │ │ │ │ │ │ │ │ │ │ │ │ │ └──> return TaskData (added to agent queue) │ │ │ │ │ │ │ │ │ │ │ └───────────────────────────────────────────────────────────────────────┘ │ │ │ │ │ │ │ └─────────────────────────────────────────────────────────────────────────────┘ │ │ │ │ ╔════════════════════════════════════════════════════════════════════════════╗ │ │ ║ AGENT STARTS PROCESS ║ │ │ ╚════════════════════════════════════════════════════════════════════════════╝ │ │ │ │ Agent ──> COMMAND_TERMINAL_OUTPUT (process ready) │ │ │ │ │ V │ │ ┌─────────────────────────────────────────────────────────────────────────────┐ │ │ │ EXTENDER (Agent Plugin - ProcessTasksResult) │ │ │ │ │ │ │ │ │ V │ │ │ │ ┌───────────────────────────────────────────────────────────────────────┐ │ │ │ │ │ TEAMSERVER │ │ │ │ │ │ │ │ │ │ │ │ │ V │ │ │ │ │ │ TsTerminalConnResume(agentId, terminalId, ioDirect) │ │ │ │ │ │ │ │ │ │ │ │ │ └──> Start relay goroutines: │ │ │ │ │ │ - WebSocket → pwSrv → prSrv → TaskData → Agent │ │ │ │ │ │ - Agent → pwTun → prTun → WebSocket │ │ │ │ │ │ │ │ │ │ │ └───────────────────────────────────────────────────────────────────────┘ │ │ │ │ │ │ │ └─────────────────────────────────────────────────────────────────────────────┘ │ │ │ │ ╔════════════════════════════════════════════════════════════════════════════╗ │ │ ║ DATA FLOW (bidirectional) ║ │ │ ╚════════════════════════════════════════════════════════════════════════════╝ │ │ │ │ User types ──> WebSocket ──> pwSrv ──> prSrv ──read──> │ │ ──> TerminalCallbacks.Write(terminalId, data) │ │ ──> TaskData ──> Agent ──> Process stdin │ │ │ │ Process stdout ──> Agent ──> TsTerminalConnData(terminalId, data) │ │ ──> pwTun ──> prTun ──read──> WebSocket ──> GUI │ │ │ │ ╔════════════════════════════════════════════════════════════════════════════╗ │ │ ║ TERMINAL CLOSE ║ │ │ ╚════════════════════════════════════════════════════════════════════════════╝ │ │ │ │ User closes ──> TerminalCallbacks.Close(terminalId) ──> TaskData ──> Agent │ │ Process exits ──> TsTerminalConnClose(terminalId, status) ──> Close WebSocket │ │ │ └──────────────────────────────────────────────────────────────────────────────────┘ ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/extenders/agent-plugin/terminals#teamserver-api-for-terminal) Teamserver API for Terminal [PreviousTunnelschevron-left](https://adaptix-framework.gitbook.io/adaptix-framework/development/extenders/agent-plugin/tunnels) [NextService Extenderchevron-right](https://adaptix-framework.gitbook.io/adaptix-framework/development/extenders/service-extender) Last updated 3 months ago * [Flow](https://adaptix-framework.gitbook.io/adaptix-framework/development/extenders/agent-plugin/terminals#flow) * [Teamserver API for Terminal](https://adaptix-framework.gitbook.io/adaptix-framework/development/extenders/agent-plugin/terminals#teamserver-api-for-terminal) Copy type Teamserver interface { // Check existence TsTerminalConnExists(terminalId string) bool // Get Pipes for I/O TsTerminalGetPipe(AgentId string, terminalId string) (*io.PipeReader, *io.PipeWriter, error) // Activate relay after successful terminal start TsTerminalConnResume(agentId string, terminalId string, ioDirect bool) // Write data to terminal (from agent) TsTerminalConnData(terminalId string, data []byte) // Close terminal TsTerminalConnClose(terminalId string, status string) error } --- # Agent plugin | Adaptix Framework Agent Plugin is responsible for payload generation, data parsing, and command handling. ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/extenders/agent-plugin#flow-diagram) Flow Diagram ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FQwRzOnRNwkvDsjL9tFqK%252FScreenshot_20260120_205719.png%3Falt%3Dmedia%26token%3De472c888-ea69-404a-96fc-c3e184d69700&width=768&dpr=3&quality=100&sign=e9bd45bf&sv=2) ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/extenders/agent-plugin#agent-config-config.yaml) Agent Config (config.yaml) ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/extenders/agent-plugin#pluginagent-interface) PluginAgent Interface ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/extenders/agent-plugin#axscript-for-agent-ax_config.axs) AxScript for Agent (ax\_config.axs) The `.axs` file defines agent commands, context menus, and UI for payload generation. **Required functions:** **Optional elements:** [PreviousInternal listenerchevron-left](https://adaptix-framework.gitbook.io/adaptix-framework/development/extenders/listener-extender/internal-listener) [NextTunnelschevron-right](https://adaptix-framework.gitbook.io/adaptix-framework/development/extenders/agent-plugin/tunnels) Last updated 3 months ago * [Flow Diagram](https://adaptix-framework.gitbook.io/adaptix-framework/development/extenders/agent-plugin#flow-diagram) * [Agent Config (config.yaml)](https://adaptix-framework.gitbook.io/adaptix-framework/development/extenders/agent-plugin#agent-config-config.yaml) * [PluginAgent Interface](https://adaptix-framework.gitbook.io/adaptix-framework/development/extenders/agent-plugin#pluginagent-interface) * [AxScript for Agent (ax\_config.axs)](https://adaptix-framework.gitbook.io/adaptix-framework/development/extenders/agent-plugin#axscript-for-agent-ax_config.axs) Copy ┌──────────────────────────────────────────────────────────────────────────────────┐ │ AGENT PLUGIN FLOW │ ├──────────────────────────────────────────────────────────────────────────────────┤ │ │ │ ╔════════════════════════════════════════════════════════════════════════════╗ │ │ ║ AGENT GENERATION ║ │ │ ╚════════════════════════════════════════════════════════════════════════════╝ │ │ │ │ GUI ──> WS /channel (agent/generate) │ │ │ │ │ V │ │ ┌─────────────────────────────────────────────────────────────────────────────┐ │ │ │ TEAMSERVER │ │ │ │ │ │ │ │ │ V │ │ │ │ TsAgentGenerate(agentType, config) │ │ │ │ │ │ │ │ │ V │ │ │ │ ┌───────────────────────────────────────────────────────────────────────┐ │ │ │ │ │ EXTENDER │ │ │ │ │ │ │ │ │ │ │ │ │ V │ │ │ │ │ │ PluginAgent.GenerateProfiles(BuildProfile) │ │ │ │ │ │ │ │ │ │ │ │ │ └──> Create profiles for each listener │ │ │ │ │ │ return [][]byte (agentProfiles) │ │ │ │ │ │ │ │ │ │ │ │ PluginAgent.BuildPayload(BuildProfile, agentProfiles) │ │ │ │ │ │ │ │ │ │ │ │ │ ├──> TsAgentBuildExecute() ←── Run build commands │ │ │ │ │ │ ├──> TsAgentBuildLog() ←── Build logging │ │ │ │ │ │ │ │ │ │ │ │ │ └──> return []byte (payload), filename │ │ │ │ │ │ │ │ │ │ │ └───────────────────────────────────────────────────────────────────────┘ │ │ │ │ │ │ │ └─────────────────────────────────────────────────────────────────────────────┘ │ │ │ │ ╔════════════════════════════════════════════════════════════════════════════╗ │ │ ║ AGENT REGISTRATION ║ │ │ ╚════════════════════════════════════════════════════════════════════════════╝ │ │ │ │ Agent ──> Request to Listener (first contact) │ │ │ │ │ V │ │ ┌─────────────────────────────────────────────────────────────────────────────┐ │ │ │ EXTENDER (Listener Plugin) │ │ │ │ │ │ │ │ │ V │ │ │ │ processRequest(ctx) ──> Parse data │ │ │ │ │ │ │ │ │ V │ │ │ │ ┌───────────────────────────────────────────────────────────────────────┐ │ │ │ │ │ TEAMSERVER │ │ │ │ │ │ │ │ │ │ │ │ │ V │ │ │ │ │ │ TsAgentCreate(agentCrc, agentId, data, listenerName, IP, async) │ │ │ │ │ │ │ │ │ │ │ │ │ V │ │ │ │ │ │ ┌─────────────────────────────────────────────────────────────────┐ │ │ │ │ │ │ │ EXTENDER (Agent Plugin) │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ V │ │ │ │ │ │ │ │ PluginAgent.CreateAgent(data) │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├──> Decrypt data │ │ │ │ │ │ │ │ ├──> Parse agent info (OS, user, computer, etc.) │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ └──> return AgentData, ExtenderAgent │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ └─────────────────────────────────────────────────────────────────┘ │ │ │ │ │ │ │ │ │ │ │ │ │ └──> Save to DBMS, broadcast to clients │ │ │ │ │ │ │ │ │ │ │ └───────────────────────────────────────────────────────────────────────┘ │ │ │ │ │ │ │ └─────────────────────────────────────────────────────────────────────────────┘ │ │ │ │ ╔════════════════════════════════════════════════════════════════════════════╗ │ │ ║ COMMAND EXECUTION ║ │ │ ╚════════════════════════════════════════════════════════════════════════════╝ │ │ │ │ GUI ──> POST /agent/command/execute │ │ │ │ │ V │ │ ┌─────────────────────────────────────────────────────────────────────────────┐ │ │ │ TEAMSERVER │ │ │ │ │ │ │ │ │ V │ │ │ │ TsTaskCreate(agentId, command, args) │ │ │ │ │ │ │ │ │ V │ │ │ │ ┌───────────────────────────────────────────────────────────────────────┐ │ │ │ │ │ EXTENDER │ │ │ │ │ │ │ │ │ │ │ │ │ V │ │ │ │ │ │ ExtenderAgent.CreateCommand(agentData, args) │ │ │ │ │ │ │ │ │ │ │ │ │ ├──> Parse command and arguments │ │ │ │ │ │ ├──> Create TaskData with packed command │ │ │ │ │ │ │ │ │ │ │ │ │ └──> return TaskData, ConsoleMessageData │ │ │ │ │ │ │ │ │ │ │ └───────────────────────────────────────────────────────────────────────┘ │ │ │ │ │ │ │ │ │ └──> Add to agent queue, broadcast to clients │ │ │ │ │ │ │ └─────────────────────────────────────────────────────────────────────────────┘ │ │ │ │ ╔════════════════════════════════════════════════════════════════════════════╗ │ │ ║ DATA PROCESSING (Agent → Server) ║ │ │ ╚════════════════════════════════════════════════════════════════════════════╝ │ │ │ │ Agent ──> Request to Listener (with results) │ │ │ │ │ V │ │ ┌─────────────────────────────────────────────────────────────────────────────┐ │ │ │ EXTENDER (Listener Plugin) │ │ │ │ │ │ │ │ │ V │ │ │ │ processRequest(ctx) ──> Parse body data │ │ │ │ │ │ │ │ │ V │ │ │ │ ┌───────────────────────────────────────────────────────────────────────┐ │ │ │ │ │ TEAMSERVER │ │ │ │ │ │ │ │ │ │ │ │ │ V │ │ │ │ │ │ TsAgentProcessData(agentId, bodyData) │ │ │ │ │ │ │ │ │ │ │ │ │ V │ │ │ │ │ │ ┌─────────────────────────────────────────────────────────────────┐ │ │ │ │ │ │ │ EXTENDER (Agent Plugin) │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ V │ │ │ │ │ │ │ │ ExtenderAgent.Decrypt() + ProcessTasksResult() │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├──> case COMMAND_OUTPUT: TsTaskUpdate │ │ │ │ │ │ │ │ ├──> case COMMAND_DOWNLOAD: TsDownloadAdd/Update/Close │ │ │ │ │ │ │ │ ├──> case COMMAND_SCREENSHOT: TsScreenshotAdd │ │ │ │ │ │ │ │ ├──> case COMMAND_LINK: TsPivotCreate │ │ │ │ │ │ │ │ ├──> case COMMAND_TUNNEL_*: TsTunnelConnection* │ │ │ │ │ │ │ │ └──> ... other commands │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ └─────────────────────────────────────────────────────────────────┘ │ │ │ │ │ │ │ │ │ │ │ └───────────────────────────────────────────────────────────────────────┘ │ │ │ │ │ │ │ └─────────────────────────────────────────────────────────────────────────────┘ │ │ │ └──────────────────────────────────────────────────────────────────────────────────┘ Copy extender_type: "agent" extender_file: "agent.so" ax_file: "ax_config.axs" agent_name: "AGENT_NAME" agent_watermark: "deadbeef" listeners: - "LISTENER_NAME_1" - "LISTENER_NAME_2" # - .... multi_listeners: false Copy type PluginAgent interface { // Get ExtenderAgent GetExtender() ExtenderAgent // Generate profiles for listeners GenerateProfiles(profile BuildProfile) ([][]byte, error) // Build agent payload BuildPayload(profile BuildProfile, agentProfiles [][]byte) ([]byte, string, error) // Create agent from beat data CreateAgent(beat []byte) (AgentData, ExtenderAgent, error) } // ExtenderAgent - interface for working with agent type ExtenderAgent interface { // Encrypt data Encrypt(data []byte, key []byte) ([]byte, error) // Decrypt data Decrypt(data []byte, key []byte) ([]byte, error) // Pack tasks for sending to agent PackTasks(agentData AgentData, tasks []TaskData) ([]byte, error) // Pack data for pivot agent PivotPackData(pivotId string, data []byte) (TaskData, error) // Create task from command CreateCommand(agentData AgentData, args map[string]any) (TaskData, ConsoleMessageData, error) // Callbacks for tunnels TunnelCallbacks() TunnelCallbacks // Callbacks for terminal TerminalCallbacks() TerminalCallbacks } // TunnelCallbacks - functions for tunnel management type TunnelCallbacks struct { ConnectTCP func(channelId, tunnelType, addressType int, address string, port int) TaskData ConnectUDP func(channelId, tunnelType, addressType int, address string, port int) TaskData WriteTCP func(channelId int, data []byte) TaskData WriteUDP func(channelId int, data []byte) TaskData Close func(channelId int) TaskData Reverse func(tunnelId, port int) TaskData } // TerminalCallbacks - functions for terminal management type TerminalCallbacks struct { Start func(terminalId int, program string, sizeH, sizeW int, oemCP int) TaskData Write func(terminalId int, oemCP int, data []byte) TaskData Close func(terminalId int) TaskData } Copy // 1. Register agent commands (called when plugin loads) function RegisterCommands(listenerType) { // listenerType: "BeaconHTTP", "BeaconDNS", "BeaconSMB", "BeaconTCP", etc. // Create command let cmd_ls = ax.create_command("ls", "List files", "ls /tmp", "Task: list files"); cmd_ls.addArgString("path", false, "."); // name, required, default let cmd_cd = ax.create_command("cd", "Change directory", "cd /tmp", "Task: change dir"); cmd_cd.addArgString("path", true); // Command with subcommands let cmd_ps_list = ax.create_command("list", "Show processes", "ps list"); let cmd_ps_kill = ax.create_command("kill", "Kill process", "ps kill 1234"); cmd_ps_kill.addArgInt("pid", true); let cmd_ps = ax.create_command("ps", "Process manager"); cmd_ps.addSubCommands([cmd_ps_list, cmd_ps_kill]); // Alias with pre-hook let cmd_shell = ax.create_command("shell", "Execute via cmd.exe", "shell whoami"); cmd_shell.addArgString("cmd", true); cmd_shell.setPreHook(function(id, cmdline, parsed_json) { ax.execute_alias(id, cmdline, "ps run -o cmd.exe /c " + parsed_json["cmd"]); }); // Commands group let commands = ax.create_commands_group("beacon", [cmd_ls, cmd_cd, cmd_ps, cmd_shell]); return { commands_windows: commands, // Commands for Windows // commands_linux: commands, // Commands for Linux (optional) } } // 2. UI for payload generation (called when generation dialog opens) function GenerateUI(listeners_type) { // listeners_type: array of selected listener types let labelArch = form.create_label("Arch:"); let comboArch = form.create_combo(); comboArch.addItems(["x64", "x86"]); let labelFormat = form.create_label("Format:"); let comboFormat = form.create_combo(); comboFormat.addItems(["Exe", "DLL", "Shellcode"]); let layout = form.create_gridlayout(); layout.addWidget(labelArch, 0, 0); layout.addWidget(comboArch, 0, 1); layout.addWidget(labelFormat, 1, 0); layout.addWidget(comboFormat, 1, 1); let container = form.create_container(); container.put("arch", comboArch); container.put("format", comboFormat); let panel = form.create_panel(); panel.setLayout(layout); return { ui_panel: panel, ui_container: container, ui_height: 300, ui_width: 400 } } Copy // Context menus for agent sessions let exit_action = menu.create_action("Terminate", function(agents) { agents.forEach(a => ax.execute_command(a, "terminate process")); }); menu.add_session_agent(exit_action, ["beacon"]); // For agents of type "beacon" // Context menus for File Browser let download_action = menu.create_action("Download", function(files) { files.forEach(f => ax.execute_command(f.agent_id, "download " + f.path + f.name)); }); menu.add_filebrowser(download_action, ["beacon"]); // Browser event handlers event.on_filebrowser_disks(function(id) { ax.execute_browser(id, "disks"); }, ["beacon"]); event.on_filebrowser_list(function(id, path) { ax.execute_browser(id, "ls " + path); }, ["beacon"]); event.on_processbrowser_list(function(id) { ax.execute_browser(id, "ps list"); }, ["beacon"]); --- # Service Extender | Adaptix Framework Service Extender — plugins for extending server functionality: notifications, integrations, automation. ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/extenders/service-extender#flow) Flow ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FSkeLpunHLazcWVmGSICU%252FScreenshot_20260120_205810.png%3Falt%3Dmedia%26token%3D7781238b-d9cb-4c60-9969-465f5b19ce03&width=768&dpr=3&quality=100&sign=6a86fd01&sv=2) ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/extenders/service-extender#pluginservice-interface) PluginService Interface ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/extenders/service-extender#axscript-for-service-ax_config.axs) AxScript for Service (ax\_config.axs) The `.axs` file defines the UI for interacting with the service in GUI (settings dialogs, menus). **Required functions:** **Optional elements:** **GUI ↔ Server Interaction:** #### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/extenders/service-extender#service-config-config.yaml) Service Config (config.yaml) * * * #### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/extenders/service-extender#example-teamserver-api-for-service-extender) Example Teamserver API for Service Extender [PreviousTerminalschevron-left](https://adaptix-framework.gitbook.io/adaptix-framework/development/extenders/agent-plugin/terminals) Last updated 3 months ago * [Flow](https://adaptix-framework.gitbook.io/adaptix-framework/development/extenders/service-extender#flow) * [PluginService Interface](https://adaptix-framework.gitbook.io/adaptix-framework/development/extenders/service-extender#pluginservice-interface) * [AxScript for Service (ax\_config.axs)](https://adaptix-framework.gitbook.io/adaptix-framework/development/extenders/service-extender#axscript-for-service-ax_config.axs) Copy ┌─────────────────────────────────────────────────────────────────────────────┐ │ SERVICE EXTENDER FLOW │ ├─────────────────────────────────────────────────────────────────────────────┤ │ │ │ ╔═══════════════════════════════════════════════════════════════════════╗ │ │ ║ INITIALIZATION ║ │ │ ╚═══════════════════════════════════════════════════════════════════════╝ │ │ │ │ Server Startup │ │ │ │ │ V │ │ LoadPluginService(configPath) │ │ │ │ │ ├──> Load config.yaml │ │ │ │ │ ├──> Load plugin.so │ │ │ │ │ └──> InitPlugin(ts, moduleDir, serviceConfig) │ │ │ │ │ ├──> [optional] Parse serviceConfig (YAML) │ │ │ │ │ ├──> [optional] Restore data from DB │ │ │ TsExtenderDataLoad(extenderName, key) │ │ │ │ │ ├──> [optional] Register event hooks │ │ │ TsEventHookRegister("agent.new", ...) │ │ │ TsEventHookRegister("agent.terminate", ...) │ │ │ │ │ ├──> [optional] Register HTTP endpoints │ │ │ TsEndpointRegister("POST", "/api/...", ...) │ │ │ │ │ └──> return PluginService │ │ │ │ ╔═══════════════════════════════════════════════════════════════════════╗ │ │ ║ EVENT HANDLING ║ │ │ ╚═══════════════════════════════════════════════════════════════════════╝ │ │ │ │ Server Event (e.g. agent.new) │ │ │ │ │ V │ │ EventManager.Emit("agent.new", HookPost, eventData) │ │ │ │ │ V │ │ Service Hook Handler │ │ │ │ │ ├──> Extract event data │ │ │ │ │ ├──> Process (send notification, log, etc.) │ │ │ │ │ └──> return nil (success) or error │ │ │ │ ╔═══════════════════════════════════════════════════════════════════════╗ │ │ ║ GUI INTERACTION ║ │ │ ╚═══════════════════════════════════════════════════════════════════════╝ │ │ │ │ GUI Client ──> POST /service/call (via .axs ax.service_command) │ │ │ │ │ V │ │ TsServiceCall(serviceName, operator, function, args) │ │ │ │ │ V │ │ PluginService.Call(operator, function, args) │ │ │ │ │ ├──> Process request │ │ │ │ │ └──> TsServiceSendDataClient(operator, service, response) │ │ │ │ │ V │ │ GUI receives response via WebSocket │ │ │ │ ╔═══════════════════════════════════════════════════════════════════════╗ │ │ ║ DATA PERSISTENCE ║ │ │ ╚═══════════════════════════════════════════════════════════════════════╝ │ │ │ │ Service needs to save/load config or data │ │ │ │ │ ├──> TsExtenderDataSave(extenderName, key, value) │ │ │ │ │ └──> TsExtenderDataLoad(extenderName, key) │ │ │ └─────────────────────────────────────────────────────────────────────────────┘ Copy type PluginService interface { // Call service function from GUI Call(operator string, function string, args string) } Copy // 1. Service initialization (called on load) function InitService() { // Optional: initial setup } // 2. Data handler from server (called when receiving data via TsServiceSendData*) function data_handler(data) { let response = JSON.parse(data); switch (response.action) { case "config": // Show configuration dialog buildConfigDialog(response); break; case "result": if (response.success) { ax.show_message("Success", "Operation completed!"); } else { ax.show_message("Error", response.error); } break; } } Copy // Service metadata var metadata = { name: "My Service", description: "Service description" }; // Add item to Settings menu let settings_action = menu.create_action("My Service Settings", function() { // Request configuration from server ax.service_command("my_service", "get_config", {}); }); menu.add_main_settings(settings_action); // Settings dialog example function buildConfigDialog(config) { let label = form.create_label("API Key:"); let text_key = form.create_textline(config.api_key || ""); let check_enabled = form.create_check("Enable service"); check_enabled.setChecked(config.enabled || false); let layout = form.create_vlayout(); layout.addWidget(label); layout.addWidget(text_key); layout.addWidget(check_enabled); let dialog = form.create_dialog("Service Settings"); dialog.setSize(400, 200); dialog.setLayout(layout); if (dialog.exec()) { // Send new configuration to server ax.service_command("my_service", "set_config", { api_key: text_key.text(), enabled: check_enabled.isChecked() }); } } Copy GUI Server (Plugin) │ │ ├────── ax.service_command ──────────┼──> PluginService.Call(operator, function, args) │ (service, function, args) │ │ │ │ ├──> Process request │ │ │<───────────────────────────────────┼── TsServiceSendDataClient(operator, service, data) │ │ └─ data_handler(data) <──────────────┘ Copy extender_type: "service" extender_file: "notifier.so" ax_file: "ax_config.axs" service_name: "notifier" service_config: | bot_token: "" chat_ids: [] enabled: false events: agent.new: enabled: true template: "*New Agent*\n└ ID: `{AgentId}`" agent.activate: enabled: true template: "*Agent Activated*\n└ ID: `{AgentId}`" Copy type Teamserver interface { // ═══════════════════════════════════════════════════════════════════════ // EVENT HOOKS // ═══════════════════════════════════════════════════════════════════════ // Register event handler TsEventHookRegister(eventType string, name string, phase int, priority int, handler func(event any) error) string // Remove handler by ID TsEventHookUnregister(hookID string) bool // Remove all handlers by name TsEventHookUnregisterByName(name string) int // Simplified Pre/Post hook registration TsEventHookOnPre(eventType string, name string, handler func(event any) error) string TsEventHookOnPost(eventType string, name string, handler func(event any) error) string // ═══════════════════════════════════════════════════════════════════════ // GUI COMMUNICATION // ═══════════════════════════════════════════════════════════════════════ // Send data to all clients TsServiceSendDataAll(service string, data string) // Send data to specific client TsServiceSendDataClient(operator string, service string, data string) // ═══════════════════════════════════════════════════════════════════════ // DATA PERSISTENCE // ═══════════════════════════════════════════════════════════════════════ // Save data to DB TsExtenderDataSave(extenderName string, key string, value []byte) error // Load data from DB TsExtenderDataLoad(extenderName string, key string) ([]byte, error) // Delete data TsExtenderDataDelete(extenderName string, key string) error // List keys TsExtenderDataKeys(extenderName string) ([]string, error) // Delete all data TsExtenderDataDeleteAll(extenderName string) error // ═══════════════════════════════════════════════════════════════════════ // HTTP ENDPOINTS (optional) // ═══════════════════════════════════════════════════════════════════════ // Register protected endpoint (with authentication) TsEndpointRegister(method string, path string, handler func(username string, body []byte) (int, []byte)) error // Register public endpoint (without authentication) TsEndpointRegisterPublic(method string, path string, handler func(body []byte) (int, []byte)) error // Remove endpoints TsEndpointUnregister(method string, path string) error TsEndpointUnregisterPublic(method string, path string) error // Check existence TsEndpointExists(method string, path string) bool TsEndpointExistsPublic(method string, path string) bool } --- # Tunnels | Adaptix Framework Tunnels allow proxying network traffic through an agent. SOCKS4/5, Local Port Forward, and Reverse Port Forward are supported. ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/extenders/agent-plugin/tunnels#tunnel-types) Tunnel Types Type Description `TUNNEL_TYPE_SOCKS4` SOCKS4 proxy `TUNNEL_TYPE_SOCKS5` SOCKS5 proxy `TUNNEL_TYPE_SOCKS5_AUTH` SOCKS5 proxy with authentication `TUNNEL_TYPE_LOCAL_PORT` Local port forward (Server → Agent → Target) `TUNNEL_TYPE_REVERSE` Reverse port forward (Agent → Server → Target) ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/extenders/agent-plugin/tunnels#flow-socks-local-port-forward) Flow (SOCKS/Local Port Forward) ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FSXLJaV9xAB1X0dTbMzYW%252FScreenshot_20260120_205728.png%3Falt%3Dmedia%26token%3D7522daff-5107-47e7-a2ba-4e7d4b6e23f8&width=768&dpr=3&quality=100&sign=d8105446&sv=2) ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/extenders/agent-plugin/tunnels#flow-reverse-port-forward) Flow Reverse Port Forward ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252F5ZSvK7edcCHYrHd31hok%252FScreenshot_20260120_205739.png%3Falt%3Dmedia%26token%3Dfd2af5ec-df36-43a0-99e6-e365a4d0fac4&width=768&dpr=3&quality=100&sign=72a022f5&sv=2) ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/extenders/agent-plugin/tunnels#teamserver-api-for-tunnel) Teamserver API for Tunnel [PreviousAgent pluginchevron-left](https://adaptix-framework.gitbook.io/adaptix-framework/development/extenders/agent-plugin) [NextTerminalschevron-right](https://adaptix-framework.gitbook.io/adaptix-framework/development/extenders/agent-plugin/terminals) Last updated 2 months ago * [Tunnel Types](https://adaptix-framework.gitbook.io/adaptix-framework/development/extenders/agent-plugin/tunnels#tunnel-types) * [Flow (SOCKS/Local Port Forward)](https://adaptix-framework.gitbook.io/adaptix-framework/development/extenders/agent-plugin/tunnels#flow-socks-local-port-forward) * [Flow Reverse Port Forward](https://adaptix-framework.gitbook.io/adaptix-framework/development/extenders/agent-plugin/tunnels#flow-reverse-port-forward) * [Teamserver API for Tunnel](https://adaptix-framework.gitbook.io/adaptix-framework/development/extenders/agent-plugin/tunnels#teamserver-api-for-tunnel) Copy ┌──────────────────────────────────────────────────────────────────────────────────┐ │ TUNNEL FLOW (SOCKS/LPORTFWD) │ ├──────────────────────────────────────────────────────────────────────────────────┤ │ │ │ ╔════════════════════════════════════════════════════════════════════════════╗ │ │ ║ CREATE TUNNEL ║ │ │ ╚════════════════════════════════════════════════════════════════════════════╝ │ │ │ │ GUI ──> POST /tunnel/start/socks5 (socks5 start 127.0.0.1:1080) │ │ │ │ │ V │ │ ┌─────────────────────────────────────────────────────────────────────────────┐ │ │ │ TEAMSERVER │ │ │ │ │ │ │ │ │ V │ │ │ │ TsTunnelCreateSocks5(AgentId, Info, Lhost, Lport, ...) │ │ │ │ │ │ │ │ │ ├──> Create Tunnel object with agent Callbacks │ │ │ │ │ │ │ │ │ V │ │ │ │ TsTunnelStart(TunnelId) │ │ │ │ │ │ │ │ │ └──> net.Listen("tcp", "127.0.0.1:1080") │ │ │ │ Start Accept() goroutine for incoming connections │ │ │ │ │ │ │ └─────────────────────────────────────────────────────────────────────────────┘ │ │ │ │ ╔════════════════════════════════════════════════════════════════════════════╗ │ │ ║ CLIENT CONNECTION ║ │ │ ╚════════════════════════════════════════════════════════════════════════════╝ │ │ │ │ Browser/App ──> TCP connect to 127.0.0.1:1080 │ │ │ │ │ V │ │ ┌─────────────────────────────────────────────────────────────────────────────┐ │ │ │ TEAMSERVER (TunnelManager) │ │ │ │ │ │ │ │ │ V │ │ │ │ handleTunChannelCreate() │ │ │ │ │ │ │ │ │ ├──> Generate unique channelId │ │ │ │ ├──> proxy.CheckSocks5() ←── Parse SOCKS handshake │ │ │ │ ├──> Create TunnelChannel with Pipes │ │ │ │ │ │ │ │ │ V │ │ │ │ ┌───────────────────────────────────────────────────────────────────────┐ │ │ │ │ │ EXTENDER (Agent Plugin) │ │ │ │ │ │ │ │ │ │ │ │ │ V │ │ │ │ │ │ TunnelCallbacks.ConnectTCP(channelId, host, port) │ │ │ │ │ │ │ │ │ │ │ │ │ └──> return TaskData (added to agent queue) │ │ │ │ │ │ │ │ │ │ │ └───────────────────────────────────────────────────────────────────────┘ │ │ │ │ │ │ │ └─────────────────────────────────────────────────────────────────────────────┘ │ │ │ │ ╔════════════════════════════════════════════════════════════════════════════╗ │ │ ║ AGENT RESPONSE ║ │ │ ╚════════════════════════════════════════════════════════════════════════════╝ │ │ │ │ Agent ──> COMMAND_TUNNEL_OPEN / COMMAND_TUNNEL_CLOSE │ │ │ │ │ V │ │ ┌─────────────────────────────────────────────────────────────────────────────┐ │ │ │ EXTENDER (Agent Plugin - ProcessTasksResult) │ │ │ │ │ │ │ │ │ V │ │ │ │ ┌───────────────────────────────────────────────────────────────────────┐ │ │ │ │ │ TEAMSERVER │ │ │ │ │ │ │ │ │ │ │ │ │ ├──> Success: TsTunnelConnectionResume(channelId) │ │ │ │ │ │ │ └──> proxy.ReplySocks5Status(SUCCESS) │ │ │ │ │ │ │ Start relay goroutines │ │ │ │ │ │ │ │ │ │ │ │ │ └──> Failed: TsTunnelConnectionHalt(channelId, errorCode) │ │ │ │ │ │ └──> proxy.ReplySocks5Status(ERROR) │ │ │ │ │ │ │ │ │ │ │ └───────────────────────────────────────────────────────────────────────┘ │ │ │ │ │ │ │ └─────────────────────────────────────────────────────────────────────────────┘ │ │ │ │ ╔════════════════════════════════════════════════════════════════════════════╗ │ │ ║ DATA FLOW (bidirectional) ║ │ │ ╚════════════════════════════════════════════════════════════════════════════╝ │ │ │ │ Browser ──write──> Socket ──> pwSrv ──> prSrv ──read──> │ │ ──> TunnelCallbacks.WriteTCP(channelId, data) │ │ ──> TaskData ──> Agent ──> Target │ │ │ │ Target ──> Agent ──> TsTunnelConnectionData(channelId, data) │ │ ──> pwTun ──> prTun ──read──> Socket ──write──> Browser │ │ │ │ ╔════════════════════════════════════════════════════════════════════════════╗ │ │ ║ CONNECTION CLOSE ║ │ │ ╚════════════════════════════════════════════════════════════════════════════╝ │ │ │ │ Browser closes ──> TunnelCallbacks.Close(channelId) ──> TaskData ──> Agent │ │ Agent closes ──> TsTunnelConnectionClose(channelId, write) ──> Close Socket │ │ │ └──────────────────────────────────────────────────────────────────────────────────┘ Copy ┌──────────────────────────────────────────────────────────────────────────────────┐ │ REVERSE PORT FORWARD FLOW │ ├──────────────────────────────────────────────────────────────────────────────────┤ │ │ │ ╔════════════════════════════════════════════════════════════════════════════╗ │ │ ║ CREATE RPORTFWD ║ │ │ ╚════════════════════════════════════════════════════════════════════════════╝ │ │ │ │ GUI ──> POST /tunnel/start/rportfwd (rportfwd 8080 127.0.0.1:80) │ │ │ │ │ V │ │ ┌─────────────────────────────────────────────────────────────────────────────┐ │ │ │ TEAMSERVER │ │ │ │ │ │ │ │ │ V │ │ │ │ TsTunnelCreateRportfwd(AgentId, Info, 8080, "127.0.0.1", 80) │ │ │ │ │ │ │ │ │ V │ │ │ │ ┌───────────────────────────────────────────────────────────────────────┐ │ │ │ │ │ EXTENDER (Agent Plugin) │ │ │ │ │ │ │ │ │ │ │ │ │ V │ │ │ │ │ │ TunnelCallbacks.Reverse(tunnelId, 8080) │ │ │ │ │ │ │ │ │ │ │ │ │ └──> return TaskData ──> Agent listens on port 8080 │ │ │ │ │ │ │ │ │ │ │ └───────────────────────────────────────────────────────────────────────┘ │ │ │ │ │ │ │ └─────────────────────────────────────────────────────────────────────────────┘ │ │ │ │ ╔════════════════════════════════════════════════════════════════════════════╗ │ │ ║ REMOTE CLIENT CONNECTION ║ │ │ ╚════════════════════════════════════════════════════════════════════════════╝ │ │ │ │ Remote Client ──> TCP connect to Agent:8080 │ │ │ │ │ V │ │ ┌─────────────────────────────────────────────────────────────────────────────┐ │ │ │ EXTENDER (Agent Plugin - ProcessTasksResult) │ │ │ │ │ │ │ │ │ V │ │ │ │ Agent sends COMMAND_TUNNEL_OPEN(tunnelId, channelId) │ │ │ │ │ │ │ │ │ V │ │ │ │ ┌───────────────────────────────────────────────────────────────────────┐ │ │ │ │ │ TEAMSERVER │ │ │ │ │ │ │ │ │ │ │ │ │ V │ │ │ │ │ │ TsTunnelConnectionAccept(tunnelId, channelId) │ │ │ │ │ │ │ │ │ │ │ │ │ └──> net.Dial("tcp", "127.0.0.1:80") │ │ │ │ │ │ Relay: Agent:8080 ←→ Server ←→ 127.0.0.1:80 │ │ │ │ │ │ │ │ │ │ │ └───────────────────────────────────────────────────────────────────────┘ │ │ │ │ │ │ │ └─────────────────────────────────────────────────────────────────────────────┘ │ │ │ └──────────────────────────────────────────────────────────────────────────────────┘ Copy type Teamserver interface { // Create tunnel TsTunnelCreate(AgentId string, Type int, Info string, Lhost string, Lport int, Client string, Thost string, Tport int, AuthUser string, AuthPass string) (string, error) TsTunnelCreateSocks4(AgentId string, Info string, Lhost string, Lport int) (string, error) TsTunnelCreateSocks5(AgentId string, Info string, Lhost string, Lport int, UseAuth bool, Username string, Password string) (string, error) TsTunnelCreateLportfwd(AgentId string, Info string, Lhost string, Lport int, Thost string, Tport int) (string, error) TsTunnelCreateRportfwd(AgentId string, Info string, Lport int, Thost string, Tport int) (string, error) // Start/stop TsTunnelStart(TunnelId string) (string, error) TsTunnelStop(TunnelId string) error TsTunnelStopSocks(AgentId string, Port int) TsTunnelStopLportfwd(AgentId string, Port int) TsTunnelStopRportfwd(AgentId string, Port int) // Connection management TsTunnelChannelExists(channelId int) bool TsTunnelGetPipe(AgentId string, channelId int) (*io.PipeReader, *io.PipeWriter, error) TsTunnelConnectionData(channelId int, data []byte) TsTunnelConnectionResume(AgentId string, channelId int, ioDirect bool) TsTunnelConnectionClose(channelId int, writeOnly bool) TsTunnelConnectionHalt(channelId int, errorCode byte) TsTunnelConnectionAccept(tunnelId int, channelId int) TsTunnelPause(channelId int) TsTunnelResume(channelId int) // Update Reverse Port Forward TsTunnelUpdateRportfwd(tunnelId int, result bool) (string, string, error) } --- # Commands and Hooks | Adaptix Framework [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axcommand-type/commands-and-hooks#command-data) Command data ------------------------------------------------------------------------------------------------------------------------------------------------------- When a user enters a command in the agent console, it is passed to the Commander handler. This handler matches the entered command with the registered _AxCommand_ object, and then parses and converts the commandline into a JSON object: * The argument name is the JSON key and the value is the JSON value. * The JSON value type will match the argument type. The exception is the FILE type, as the file will be read and encoded in base64. ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axcommand-type/commands-and-hooks#example) Example: Registered command: Copy let _cmd_start = ax.create_command("start", "Description"); _cmd_start.addArgBool("-b"); _cmd_start.addArgInt("arg_int", true); _cmd_start.addArgString("arg_str", true); _cmd_start.addArgFlagString("-flag", "arg_str_flag", true); _cmd_start.addArgFile("content", true); let _cmd_stop = ax.create_command("stop", "Description"); _socks_stop.addArgInt("i", true); let cmd = ax.create_command("cmd", "Description"); cmd.addSubCommands([_cmd_start, _cmd_stop]); CommandLine: JSON: * * * [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axcommand-type/commands-and-hooks#prehook) PreHook --------------------------------------------------------------------------------------------------------------------------------------------- You can set a `PreHook` for a command. `PreHook` is an AxScript function that will process the command data between the command entry and sending its data to the server. `handler(id, cmdline, parsed_json, ...parsed_lines)` - is an AxScript function that takes 4 parameters: * `id` - identifier of the agent for which the command is specified * `cmdline` - command sent from the agent console * `parsed_json` - the JSON object that the command was converted to after processing. * `parsed_lines` - is an array of strings that the command was converted to. ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axcommand-type/commands-and-hooks#example-1) Example This code creates the `screenshot_bof` command If the command is sent from the agent console: `screenshot_bof -n "Test bof" -p 608` **cmdline:** **parsed\_lines:** **parsed\_json:** In this example, `setPreHook` installs a handler that packages arguments into BOF format and executes the `execute bof` command via the `ax.execute_alias` function. * * * [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axcommand-type/commands-and-hooks#posthook) PostHook ----------------------------------------------------------------------------------------------------------------------------------------------- A PostHook is used to allow the user to access intermediate results and perform data transformations before displaying and saving. AxScript uses the concept of hooks due to its asynchronous behavior: sending a task to a beacon and receiving a response at a later time, depending on the current wait time. After executing an asynchronous hook, you can perform the necessary operations to transform the result according to your use case (for each message in the task). Hooks can be used to process the task result, start an additional task, or format the result before outputting it to the agent console. circle-info You should test a hook before creating it and implementing it. PostHook can be set via the `ax.execute_alias_hook` or `ax.execute_command_hook` functions. `hooktask handler(hooktask task)` - is an AxScript function that takes `hooktask` parameter and return `hooktask`. * `task` - a `hooktask` structure that contains the result of the task execution. Both the client and teamserver save requests that have associated callbacks in a queue. The request is deleted when the initiating client disconnects from TeamServer. This deletes the queue managed by the client, as it is tied to each TeamServer connection. The queue on the teamserver will see the originating client has disconnected and flag any requests for that client to be removed. This means the originating client needs to stay connected to the teamserver until the command with a PostHook has completed. Otherwise, any responses from Beacon after a disconnection from the originating client will be lost. ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axcommand-type/commands-and-hooks#example-2) Example [Hashdump BOFarrow-up-right](https://github.com/Adaptix-Framework/Extension-Kit/tree/main/Creds-BOF/hashdump) output without posthook: ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252F7PSEeJc6vtABhyjCEwaF%252FScreenshot_20250726_151224.png%3Falt%3Dmedia%26token%3De6603cf5-b066-4a7a-9d8f-0a5c0a0e2eda&width=768&dpr=3&quality=100&sign=d368818d&sv=2) This posthook removes "BOF output" messages, parses names and hashes, and stores them in _Credentials Manager._ ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FgO1br6rpyekYZPVBgoks%252FScreenshot_20250726_151231.png%3Falt%3Dmedia%26token%3D48298bd6-55db-4fc1-a0b2-d199e5e9135a&width=768&dpr=3&quality=100&sign=43221a4f&sv=2) ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252F9ztujUphGbv3pWXiT6o5%252FScreenshot_20250710_010820.png%3Falt%3Dmedia%26token%3Dc4985315-9320-4767-ba0f-da65cf5ba2e4&width=768&dpr=3&quality=100&sign=e5f363f6&sv=2) [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axcommand-type/commands-and-hooks#handler) Handler --------------------------------------------------------------------------------------------------------------------------------------------- A handler is used to allow the user to access and process the final result. Handlers can be used to process a task's result, start an additional task, or transfer control within a task flow. circle-info You should test a handler before creating it and implementing it. Handlers can be set via the `ax.execute_alias_handler` or `ax.execute_command_handler` functions. `void handler(handlertask task)` - is an AxScript function that takes `handlertask` parameter. * `task` - a `handlertask` structure that contains the result of the task execution. Both the client and the command server store requests with their corresponding callbacks in a queue. The request will remain stored, but will not be processed by the handler, when the initiating client disconnects from the command server. This means that the initiating client must remain connected to the command server until the command from the handler is completed. ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axcommand-type/commands-and-hooks#example-3) Example ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FDbfI1Lxgc7HNO3QFnKH6%252FScreenshot_20251229_185926.png%3Falt%3Dmedia%26token%3Da3db26f4-b7eb-4966-8efe-e98654cb050a&width=768&dpr=3&quality=100&sign=16b48d34&sv=2) ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FffuVPkt75r8t3uUjOmsN%252FScreenshot_20251229_190012.png%3Falt%3Dmedia%26token%3D90b502d3-ce59-4017-9bcc-e7c75b90210a&width=768&dpr=3&quality=100&sign=6320fc82&sv=2) * * * [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axcommand-type/commands-and-hooks#axscript-execute-command) AxScript Execute command ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axcommand-type/commands-and-hooks#execute_command) execute\_command The function passes the specified `command` to the Commander handler for the agent with the specified `id`. This will work as if the user entered the command in the agent console. * `id` - agent ID * `command` - command line * `hook` - PostHook * `handler` - Handler **Example:** * * * ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axcommand-type/commands-and-hooks#execute_browser) execute\_browser The function passes the specified `command` to the Commander handler for the agent with the specified `id`, but marks the task as TYPE\_BROWSER, so the command and its result are not saved and displayed in the agent console. * `id` - agent ID * `command` - command line **Example:** * * * ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axcommand-type/commands-and-hooks#execute_alias) execute\_alias The function passes the specified `command` to the Commander handler, but overrides the `comandline` and `message` for the agent console with the specified `id`. So if `execute_command` outputs the original `comandline` and `message`, `execute_alias` will replace them after processing and before output to the agent console. * `id` - agent ID * `command` - command line * `cmdline` - new command line for agent console * `message` - new message for agent console * `hook` - PostHook * `handler` - Handler **Example:** * * * [PreviousAxCommand typechevron-left](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axcommand-type) [NextAxForm typechevron-right](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type) Last updated 3 months ago * [Command data](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axcommand-type/commands-and-hooks#command-data) * [Example:](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axcommand-type/commands-and-hooks#example) * [PreHook](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axcommand-type/commands-and-hooks#prehook) * [Example](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axcommand-type/commands-and-hooks#example-1) * [PostHook](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axcommand-type/commands-and-hooks#posthook) * [Example](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axcommand-type/commands-and-hooks#example-2) * [Handler](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axcommand-type/commands-and-hooks#handler) * [Example](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axcommand-type/commands-and-hooks#example-3) * [AxScript Execute command](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axcommand-type/commands-and-hooks#axscript-execute-command) * [execute\_command](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axcommand-type/commands-and-hooks#execute_command) * [execute\_browser](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axcommand-type/commands-and-hooks#execute_browser) * [execute\_alias](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axcommand-type/commands-and-hooks#execute_alias) Copy cmd start -b 123 test -flag test_flag /tmp/file Copy { "command": "cmd", "subcommand": "start", "-b": true, "arg_int": 123, "arg_str": "test", "arg_str_flag": "test_flag", "content": "dGVzdCBjb250ZW50" } Copy setPreHook(function() handler) Copy var cmd_screenshot = ax.create_command("screenshot_bof", "Alternative screenshot capability that does not do fork n run by @codex_tf2", "screenshot -n screen1 -p 812"); cmd_screenshot.addArgFlagString("-n", "note", "Screenshot caption", "ScreenshotBOF"); cmd_screenshot.addArgFlagInt("-p", "pid", "PID of the application whose window screenshot will be taken. If 0, then a full-screen screenshot", 0); Copy screenshot_bof -n "Test bof" -p 608 Copy ["screenshot_bof", "-n", "Test bof", "-p", "608"] Copy { "command": "screenshot_bof", "note": "Test bof", "pid": 608 } Copy cmd_screenshot.setPreHook(function (id, cmdline, parsed_json, ...parsed_lines) { let note = parsed_json["note"]; let pid = parsed_json["pid"]; let bof_params = ax.bof_pack("cstr,int", [note, pid]); let bof_path = ax.script_dir() + "_bin/Screenshot." + ax.arch(id) + ".o"; ax.execute_alias(id, cmdline, `execute bof ${bof_path} ${bof_params}`, "Task: Screenshot BOF"); } Copy // HOOKTASK STRUCTURE: string hook_task["agent"] // agent ID string hook_task["type"] // message type -> "info", "error" or "success" string hook_task["message"] // console string hook_task["text"] // task output bool hook_task["completed"] // is the task complete (true) or is it still running (false) int hook_task["index"] // job_index Copy let hook = function (task) { let agent = ax.agents()[task.agent]; let computer = agent["computer"]; let address = agent["internal_ip"]; let match; let regex = /^([a-zA-Z0-9_\-]+):\d+:([a-fA-F0-9]{32})$/gm; while ((match = regex.exec(task.text)) !== null) { ax.credentials_add(match[1], match[2], "", "ntlm", "", "SAM", `${computer} (${address})`); } if(task.message != "BOF finished" && task.index != 0) { task.message = ""; } return task; } Copy // HOOKTASK STRUCTURE: string handlertask["id"] // task ID string handlertask["agent"] // agent ID string handlertask["cmdline"] // Command line string handlertask["type"] // message type -> "info", "error" or "success" string handlertask["message"] // console string handlertask["text"] // task output Copy let dcsync_handler = function (task) { var lines = task.text.split(/\r?\n/); var results = []; var domainInfo = { dc: null, domain: null }; var currentName = null; var currentObjectType = null; function pushHash(hashType, hashValue) { if (!currentName || !hashValue) return; let tag = "" if (currentObjectType == "Computer") tag = "computer"; results.push({ username: currentName, type: hashType, password: hashValue, storage: "dcsync", tag: tag, realm: domainInfo.domain, host: domainInfo.dc }); } for (var i = 0; i < lines.length; i++) { if(results.length > 1000) { ax.credentials_add_list(results); results = [] } var line = lines[i].trim(); if (!domainInfo.dc && line.match(/^\[\*\]\s+Discovered DC:\s+(.+)$/)) { domainInfo.dc = line.match(/^\[\*\]\s+Discovered DC:\s+(.+)$/)[1]; continue; } if (!domainInfo.domain && line.match(/^\[\*\]\s+Default naming context:\s+(.+)$/)) { domainInfo.domain = line.match(/^\[\*\]\s+Default naming context:\s+(.+)$/)[1]; continue; } var mObj = line.match(/^\[\*\]\s+(User|Computer|Trust account|Object):\s+(.+)$/); if (mObj) { currentObjectType = mObj[1]; currentName = mObj[2]; continue; } var mNt = line.match(/^nt:\s*([0-9a-fA-F]{32})$/); if (mNt) { pushHash("ntlm", mNt[1]); continue; } var mAes256 = line.match(/^aes256:\s*([0-9a-fA-F]{64})$/); if (mAes256) { pushHash("aes256", mAes256[1]); continue; } var mAes128 = line.match(/^aes128:\s*([0-9a-fA-F]{32})$/); if (mAes128) { pushHash("aes128", mAes128[1]); continue; } } ax.credentials_add_list(results); } Copy void ax.execute_command(string id, string command); void ax.execute_command_hook(string id, string command, hook(task){}); void ax.execute_command_handler(string id, string command, handler(task){}); Copy ax.execute_command(id, "screenshot"); Copy void ax.execute_browser(string id, string command); Copy ax.execute_browser(id, "disks"); Copy void execute_alias(string id, string cmdline, string command, string message = ""); void execute_alias_hook(string id, string cmdline, string command, string message, hook(task){}); void execute_alias_handler(string id, string cmdline, string command, string message, handler(task){}); Copy var _cmd_getsystem_token = ax.create_command("token", "Elevate the current agent to SYSTEM and gain the TrustedInstaller group privilege through impersonation", "getsystem token"); _cmd_getsystem_token.setPreHook(function (id, cmdline, parsed_json, ...parsed_lines) { let hook = function (task) { if(/Impersonate to SYSTEM & TrustedInstaller succeeded/.test(task.text)) { ax.agent_set_impersonate(task.agent, "SYSTEM", true); } return task; } let bof_path = ax.script_dir() + "_bin/getsystem_token." + ax.arch(id) + ".o"; ax.execute_alias_hook(id, cmdline, `execute bof ${bof_path}`, "Task: Get system via token (BOF)", hook); }); var cmd_getsystem = ax.create_command("getsystem", "Elevate context to SYSTEM"); cmd_getsystem.addSubCommands([_cmd_getsystem_token]); --- # Version 1.0 | Adaptix Framework circle-exclamation The client and server database structures have been changed and are not backward compatible with previous versions. circle-info Contributors to the GitHub update include: [shashinmaarrow-up-right](https://github.com/shashinma) , [P0142arrow-up-right](https://github.com/P0142) , [bri5eearrow-up-right](https://github.com/bri5ee) , [BlackMeerkatarrow-up-right](https://github.com/BlackMeerkat) [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/changelog-and-updates/version-0.1-greater-than-1.0/version-1.0#adaptixc2) AdaptixC2 --------------------------------------------------------------------------------------------------------------------------------------------------------- **New:** * Network tunnels SOCKS4/SOCKS5 have been completely reworked on both client and server sides, significantly improving stability, performance, and speed. Tunnels are now RFC-compliant, which allows port scanning through tunnels. SOCKS5 tunnels (both client-side and server-side) now support IPv6 (Client and TeamServer). Added an internal TeamServer API for service responses to the SOCKS client about connection status: `TsTunnelConnectionHalt(channelId int, errorCode byte)` * The session graph has been completely redesigned. New icons have been added. Support for Top-Bottom layout has been introduced. Sessions through which tunnels are operating are now marked as TunS (tunnel via TeamServer) and TunC (tunnel via client). Inactive and Terminated sessions are no longer displayed on the graph. Quick session console opening via mouse middle-click. ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FP9DKARFpkY5yaF4TKWx8%252FScreenshot_20251229_225406.png%3Falt%3Dmedia%26token%3D44c8175b-cf3e-4d76-a08f-48fd4facf203&width=768&dpr=3&quality=100&sign=1480ac6c&sv=2) * Dialog windows have been reworked and a profile system with background saving to the client database has been added for: Authorization Form, Listener Creation Window, Agent Generation Window. The authorization form now requires specifying a project directory, which will be used as the base path for all file system dialogs. ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252F48XLkIdBfPj28Pj3QSlB%252FScreenshot_20251229_204213.png%3Falt%3Dmedia%26token%3Daac4f74e-8139-4ae9-b3a3-94e19847be63&width=768&dpr=3&quality=100&sign=3f7b51e7&sv=2) * Implemented Remote Shell — an interactive Non-PTY shell. This required rewriting the API `TsTerminalConnResume(agentId, terminalId, ioDirect bool)`. * Remote Terminal now operates in SSH-like mode (fast input + stable PTY). Multiple terminals can now be created within a single Remote Terminal tab. Term 1 Term2 ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252Fegld7ifphDuWDNAbzz5p%252FScreenshot_20251229_220225.png%3Falt%3Dmedia%26token%3D05295ca9-49b1-48a7-bc90-18bc29e56f6d&width=768&dpr=3&quality=100&sign=81691a1b&sv=2) ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FaDsFMwPvMVjgbooZYWUv%252FScreenshot_20251229_220230.png%3Falt%3Dmedia%26token%3Dc816268f-a3e3-44fb-bcb4-a8f9a42af3ff&width=768&dpr=3&quality=100&sign=b458afd9&sv=2) * The client now interacts with the server using asynchronous functions * AxScript is now executed asynchronously if the script does not use UI elements * A Handler mechanism for commands executed via AxScript has been implemented using new Ax APIs: [execute\_alias](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axcommand-type/commands-and-hooks#execute_alias) , [execute\_alias\_hook](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axcommand-type/commands-and-hooks#execute_alias) , [execute\_alias\_handler](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axcommand-type/commands-and-hooks#execute_alias) , [execute\_command](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axcommand-type/commands-and-hooks#execute_command) , [execute\_command\_hook](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axcommand-type/commands-and-hooks#execute_command) , [execute\_command\_handler](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axcommand-type/commands-and-hooks#execute_command) * When a command is entered incorrectly, the help output is now displayed by default. * Added the ability to modify session parameters via the context menu ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FKVqsae4dOJ19np9J9gkP%252FScreenshot_20251229_223727.png%3Falt%3Dmedia%26token%3De5ab1deb-3fb4-49b9-9304-06868b1eb380&width=768&dpr=3&quality=100&sign=77b7fa49&sv=2) * Added tab blinking animation for background updates (by [shashinmaarrow-up-right](https://github.com/shashinma)) ) * Added the ability to rename tabs via the context menu (by [shashinmaarrow-up-right](https://github.com/shashinma)) ) * Tabs can now be closed by middle-clicking the tab or using a three-finger touchpad gesture * Added text batching to prevent UI freezes: flush every 100 ms or 64 KB, optimized bulk line removal, and added a database truncation limit of 10 MB (by [bri5eearrow-up-right](https://github.com/bri5ee) ) * The Listener Manager now includes a Created column with the listener creation date and time * The Sessions table now includes a Created column with the agent creation date and time * Targets Manager now supports copying data to the clipboard * Credentials Manager now supports copying data to the clipboard. When copying credentials, templates can now be selected (impacket, netexec, etc.) * DownloadsManager now allows deleting multiple saved files at once * In all tables, Ctrl+F now enables filtering and searching. The search field supports conditional operators: `and` &, `or` |, `not` ^, `grouping` (). * The client synchronization system has been updated * Added new themes: Adaptix Dark and Adaptix Light Ax Dark Ax Light ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252Fbuu7biqoh5ZorNkPAShL%252FScreenshot_20251229_220857.png%3Falt%3Dmedia%26token%3D827f3fbb-661e-4520-b670-b03c6157a184&width=768&dpr=3&quality=100&sign=4c8095d7&sv=2) ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252F0A6Xno6GNKRsscbzHqBP%252FScreenshot_20251229_220851.png%3Falt%3Dmedia%26token%3Dcdef6af5-ff2b-4484-8361-d96bb778d982&width=768&dpr=3&quality=100&sign=f96c0305&sv=2) * Added Slack event callbacks. * Implemented global managers: TaskManager, TunnelManager, EventBroker. * Added Docker Compose build commands to the Makefile. * Added new TS APIs: * Removed TS APIs: * Added Web APIs: * Removed Web API **Fix:** * Authorization errors on the Windows client have been resolved * Correct handling of `PostHook` even when the client is disconnected * Fixed an issue with automatic titlebar enlargement (by [shashinmaarrow-up-right](https://github.com/shashinma) ) * Fixed buttons and centering issues in the tabbar and titlebar (by [shashinmaarrow-up-right](https://github.com/shashinma) ) * Fixed date sorting in all tables * Fixed Console UI freezing when displaying large outputs (by [bri5eearrow-up-right](https://github.com/bri5ee) ) * Fixed focus restoration so tabs no longer auto-switch when agents connect (by [bri5eearrow-up-right](https://github.com/bri5ee) ) * Fixed an issue where port 1080 was always used when creating SOCKS4 tunnels from the UI * On client reconnect, if the server is still unavailable, the synchronization banner is now hidden automatically [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/changelog-and-updates/version-0.1-greater-than-1.0/version-1.0#beacon) Beacon --------------------------------------------------------------------------------------------------------------------------------------------------- **New:** * Implemented Remote Shell. ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FUVI3S8PWMrwATaDwQo4G%252FScreenshot_20251229_223421.png%3Falt%3Dmedia%26token%3Db8957314-a7f1-4375-afa9-796cec17dc15&width=768&dpr=3&quality=100&sign=50b5feea&sv=2) [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/changelog-and-updates/version-0.1-greater-than-1.0/version-1.0#gopher) Gopher --------------------------------------------------------------------------------------------------------------------------------------------------- **Fix:** * Fixed terminal input handling and resizing for Gopher sessions (by [BlackMeerkatarrow-up-right](https://github.com/BlackMeerkat) ) * Fixed premature task termination caused by `bufio.Scanner: token too long` errors (by [bri5eearrow-up-right](https://github.com/bri5ee) ) * Increased `cat` command output size from 10 KB to 1 MB. [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/changelog-and-updates/version-0.1-greater-than-1.0/version-1.0#extension-kit) Extension-Kit ----------------------------------------------------------------------------------------------------------------------------------------------------------------- **New:** * Added LDAP-BOF (by [P0142arrow-up-right](https://github.com/P0142) ) ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252F92ELZSTj9aYQilPLd0Cx%252FScreenshot_20251230_164549.png%3Falt%3Dmedia%26token%3Db33b9af9-73ca-427e-b612-f438b5a64a14&width=768&dpr=3&quality=100&sign=eac9f08c&sv=2) * Added DCSync-BOF (by [P0142arrow-up-right](https://github.com/P0142) ) ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FMJQR6YNwx8Uc9HQk6e7G%252FScreenshot_20251230_001057.png%3Falt%3Dmedia%26token%3Dd03486df-6592-40b8-8627-8ea748c8671b&width=768&dpr=3&quality=100&sign=7f10a55a&sv=2) * Added BOF `nbtscan` (by [shashinmaarrow-up-right](https://github.com/shashinma) ) ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252F1mOPRqqN0AVoRmG9oHWB%252FScreenshot_20251230_163215.png%3Falt%3Dmedia%26token%3D819bec08-b164-484e-ab78-6b8c546b2ad8&width=768&dpr=3&quality=100&sign=7764da2e&sv=2) * Update `certi request` BOF ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FFs8SsveKm7zR8YJLCGV9%252FScreenshot_20251230_152321.png%3Falt%3Dmedia%26token%3D8f806f73-c3eb-413b-8b23-49dba361da0f&width=768&dpr=3&quality=100&sign=5c84ab9f&sv=2) * Added `certi request_on_behalf` BOF ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FBYCeDTE9UKRFfkc2sYz7%252FScreenshot_20251230_152403.png%3Falt%3Dmedia%26token%3D24f44f55-072b-475a-8e34-996255883401&width=768&dpr=3&quality=100&sign=c6662e38&sv=2) * Added `certi auth` BOF ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FBCltI3NM0y8YRRbL7e3s%252FScreenshot_20251230_152213.png%3Falt%3Dmedia%26token%3D57050ca3-3b54-4606-9d2f-1cf2d29d60dc&width=768&dpr=3&quality=100&sign=e24030&sv=2) * Added `certi shadow` BOF ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252F5yK22ljgq8ntbjTzaQSx%252FScreenshot_20251230_161457.png%3Falt%3Dmedia%26token%3D4fbc5aae-6f83-41cc-bea4-ee3eea609eca&width=768&dpr=3&quality=100&sign=e0708b1e&sv=2) * Added `runas` BOF ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FkXJOPUIGhjfDToDt6M1u%252FScreenshot_20251230_092335.png%3Falt%3Dmedia%26token%3D4be64732-0db5-45e9-ba07-26bae07cf649&width=768&dpr=3&quality=100&sign=bd522dae&sv=2) * SQL-BOF: now `mssql sql-databases` also show the owner and trustworthiness setting **Fix:** * `Kerbeus-BOF` small fix [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/changelog-and-updates/version-0.1-greater-than-1.0/version-1.0#templates-extender) templates-extender --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- * Added constants used by the framework * Removed APIs: * Added APIs: * Changed API **New community extenders** * [Lamperlv3arrow-up-right](https://github.com/P0142/Lamperlv3) (by [P0142arrow-up-right](https://github.com/P0142) ) - Lamperl is a Linux agent for the Adaptix C2 written in Perl + HTTP Listener [Previousv0.10 -> v0.11chevron-left](https://adaptix-framework.gitbook.io/adaptix-framework/changelog-and-updates/version-0.1-greater-than-1.0/v0.10-greater-than-v0.11) [Nextv1.0 -> v1.1chevron-right](https://adaptix-framework.gitbook.io/adaptix-framework/changelog-and-updates/v1.0-greater-than-v1.1) Last updated 3 months ago * [AdaptixC2](https://adaptix-framework.gitbook.io/adaptix-framework/changelog-and-updates/version-0.1-greater-than-1.0/version-1.0#adaptixc2) * [Beacon](https://adaptix-framework.gitbook.io/adaptix-framework/changelog-and-updates/version-0.1-greater-than-1.0/version-1.0#beacon) * [Gopher](https://adaptix-framework.gitbook.io/adaptix-framework/changelog-and-updates/version-0.1-greater-than-1.0/version-1.0#gopher) * [Extension-Kit](https://adaptix-framework.gitbook.io/adaptix-framework/changelog-and-updates/version-0.1-greater-than-1.0/version-1.0#extension-kit) * [templates-extender](https://adaptix-framework.gitbook.io/adaptix-framework/changelog-and-updates/version-0.1-greater-than-1.0/version-1.0#templates-extender) Copy TsConvertCpToUTF8(input string, codePage int) string TsConvertUTF8toCp(input string, codePage int) string TsWin32Error(errorCode uint) string TsAgentUpdateDataPartial(agentId string, updateData interface{}) error TsTunnelConnectionHalt(channelId int, errorCode byte) Copy TsAgentSetTag TsAgentSetMark TsAgentSetColor TsAgentSetImpersonate Copy /agent/update/data /agent/task/list (by https://github.com/mdube99) Copy /agent/set/impersonate Copy TsAgentSetTag TsAgentSetMark TsAgentSetColor TsAgentSetImpersonate Copy TsTunnelConnectionHalt TsTerminalConnData TsTerminalConnClose TsConvertCpToUTF8 TsConvertUTF8toCp TsWin32Error Copy TsTerminalConnResume(agentId string, terminalId string) → TsTerminalConnResume(agentId string, terminalId string, ioDirect bool) AgentTunnelCallbacks --- # AxFunction | Adaptix Framework [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#data-model) Data Model ---------------------------------------------------------------------------------------------------------------------------- ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#agents) agents Get information about all agents calling back to this Adaptix teamserver. Copy AGENT[id] ax.agents(); Copy // AGENT STRUCT string agent["id"] string agent["type"] string agent["listener"] string agent["external_ip"] string agent["internal_ip"] string agent["domain"] string agent["computer"] string agent["username"] string agent["impersonated"] string agent["process"] string agent["arch"] int agent["pid"] int agent["tid"] int agent["gmt"] int agent["acp"] int agent["oemcp"] bool agent["elevated"] string agent["tags"] bool agent["async"] int agent["sleep"] string agent["os_full"] chevron-rightExample[hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#example) ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FCDktH0nfgLReVIB7lYaj%252FScreenshot_20250726_223045.png%3Falt%3Dmedia%26token%3D1e5d02f8-db82-4fbd-bfef-b9616a9aad86&width=768&dpr=3&quality=100&sign=bd44c0da&sv=2) * * * ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#credentials) credentials Returns a list of credentials. chevron-rightExample[hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#example-1) ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FJu147mUSRXd5Iv1RLSjh%252FScreenshot_20250726_223225.png%3Falt%3Dmedia%26token%3Dae1f668f-9b69-40a9-b93d-8ebd6dc8ce82&width=768&dpr=3&quality=100&sign=724b6c71&sv=2) * * * ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#downloads) downloads Returns a list of downloads. chevron-rightExample[hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#example-2) ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FVB07WZpgAOFm91o3BtvO%252FScreenshot_20250828_135048.png%3Falt%3Dmedia%26token%3D5a67cadc-b140-4650-b314-dcde4a2a19d7&width=768&dpr=3&quality=100&sign=fdea92c4&sv=2) * * * ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#screenshots) screenshots Returns a list of screenshots. chevron-rightExample[hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#example-3) ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252Fy3NwwVqWye6pxsILMhlG%252FScreenshot_20250828_135629.png%3Falt%3Dmedia%26token%3Dde8975aa-3529-4811-9533-d58162f06425&width=768&dpr=3&quality=100&sign=5013ecd5&sv=2) * * * ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#targets) targets Returns a list of targets. chevron-rightExample[hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#example-4) ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252Fgn1k2236wPPhDumgCxbg%252FScreenshot_20250828_135948.png%3Falt%3Dmedia%26token%3D2b49a2f9-7ae5-4b0a-ae20-0e077ffee67f&width=768&dpr=3&quality=100&sign=bbab93b3&sv=2) * * * ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#tunnels) tunnels Returns a list of tunnels. chevron-rightExample[hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#example-5) ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252Fp2J88PCRNA3ywMJLpgZc%252FScreenshot_20250828_140330.png%3Falt%3Dmedia%26token%3D61f9818b-f50a-4713-ad3c-7c02daaaec31&width=768&dpr=3&quality=100&sign=f93bb660&sv=2) * * * [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#functions) Functions -------------------------------------------------------------------------------------------------------------------------- The following is a list of AxScript's functions: ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#agents-1) agents [See here](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#agents) * * * ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#agent_info) agent\_info Get information from a agent session's metadata. * `id` - agent ID * `property` - CRED property ([see here](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#agents) ) chevron-rightExample[hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#example-6) ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FkHY7G8R3YtWM87Jkn1rX%252FScreenshot_20250726_234931.png%3Falt%3Dmedia%26token%3D21d4f730-8c9d-4771-b7ad-b07c0b1cb4b3&width=768&dpr=3&quality=100&sign=25ba8d8a&sv=2) * * * ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#agent_hide) agent\_hide Hide agents from Sessions Table. * `ids` - array of agent ids * * * ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#agent_remove) agent\_remove Remove agents from server. * `ids` - array of agent ids * * * ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#agent_set_color) agent\_set\_color Set color for agent's item in Session Table * `ids` - array of agent ids * `background` - item background color in hex RGB * `foreground` - item text color in hex RGB * `reser` - if true, reset the color to default chevron-rightExample[hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#example-7) * * * ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#agent_set_impersonate) agent\_set\_impersonate Set impersonate for agent's item in Session Table * `id` - agent ID * `impersonate` - impersonated user * `elevated` - is impersonated user elevated chevron-rightExample[hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#example-8) * * * ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#agent_set_mark) agent\_set\_mark Set mark for agent's item in Session Table * `id` - agent ID * `mark` - agent's mark ("Terminated", "Inactive", "Disconnect", empty "" for active). chevron-rightExample[hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#example-9) * * * ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#agent_set_tag) agent\_set\_tag Set tag for agent's item in Session Table * `id` - agent ID * `tag` - agent's tag chevron-rightExample[hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#example-10) * * * ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#agent_update_data) agent\_update\_data Update/set agent data * `id` - agent ID * `json_property` - CRED property ([see here](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#agents) ) chevron-rightExample[hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#example-11) * * * ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#arch) arch Returns the architecture of agent session (e.g., x86 or x64) * `id` - agent ID chevron-rightExample[hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#example-12) ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FuQvb3kprUOjQxgjdnrZ8%252FScreenshot_20250727_003042.png%3Falt%3Dmedia%26token%3D85cf25f4-f808-4f37-97ab-19b38d9a8891&width=768&dpr=3&quality=100&sign=6109b911&sv=2) * * * ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#bof_pack) bof\_pack Pack arguments in a way that's suitable for BOF APIs to unpack. To transmit binary data to the server, the function will encode it in base64. * `types` - a set of comma separated string types for BOF's arguments * `args` - array of BOF's arguments Type Description Unpack With (C) bytes binary data BeaconDataExtract int 4-byte integer BeaconDataInt short 2-byte short integer BeaconDataShort cstr zero-terminated+encoded string BeaconDataExtract wstr zero-terminated wide-char string (wchar\_t \*)BeaconDataExtract chevron-rightExample[hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#example-13) ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FH9Ehpfd0LZ4RLwbcgxZj%252FScreenshot_20250727_004155.png%3Falt%3Dmedia%26token%3Dd46bd402-6620-4c25-a9b0-09c518330c2d&width=768&dpr=3&quality=100&sign=87092c4a&sv=2) * * * ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#copy_to_clipboard) copy\_to\_clipboard Copy `text` to client's clipboard. chevron-rightExample[hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#example-14) * * * ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#console_message) console\_message Print an output message and text to the agent console. * `id` - agent ID * `message` - brief message * `type` - message type ("info", "success", or "error") * `text` - text output chevron-rightExample[hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#example-15) ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FkpigFMwC9MZWKm1a6E9h%252FScreenshot_20250727_005620.png%3Falt%3Dmedia%26token%3Df2736736-bdf1-4736-b418-cd42347e30df&width=768&dpr=3&quality=100&sign=f170afe0&sv=2) * * * ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#convert_to_code) convert\_to\_code Convert base64 binary data to code format. * `languaage` - programming language ("c", "csharp", "python", "golang", "vbs", "nim", "rust", "powershell") * `base64data` - base64 data for converting * `varName` - var's name in code chevron-rightExample[hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#example-16) ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252F7XKXpVMRxwEskKNBw0Co%252FScreenshot_20260115_002717.png%3Falt%3Dmedia%26token%3D4797c08c-8e07-4edd-8aac-7b4b0aacb1ae&width=768&dpr=3&quality=100&sign=d8c6f627&sv=2) * * * ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#credentials-1) credentials [See here](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#credentials) * * * ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#credentials_add) credentials\_add Save the specified credentials in Credentials Manager * `username` - creds username * `password` - creds secret * `realm` - creds domain/realm * `type` - creds type (possible "password", "hash", "rc4", "aes128", "aes256", "token") * `tag` - creds tag * `storage` - creds container (possible "browser", "dpapi", "database", "sam", "lsass", "ntds", "manual") * `host` - the host where the credentials were stored chevron-rightExample[hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#example-17) * * * ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#credentials_add_list) credentials\_add\_list Save a list of creds in the Credentials Manager chevron-rightExample[hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#example-18) * * * ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#create_command) create\_command [See here](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axcommand-type#command) * * * ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#create_commands_group) create\_commands\_group [See here](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axcommand-type#registering-commands) * * * ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#decode_data) decode\_data Return decoded base64 data from algorithm ("hex", "base64", "base32", "zip" or "xor") in base64. * `algorithm` - "hex", "base64", "base32", "zip" or "xor". * `base64data` - data in base64 * `key` - encrypt key (for `xor`) chevron-rightExample[hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#example-19) ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252Fw4orRpSbgvfhfZ7C3QgT%252FScreenshot_20260115_002343.png%3Falt%3Dmedia%26token%3Dad9a1ebf-4c5e-4bde-a547-092746cf43b7&width=768&dpr=3&quality=100&sign=df1bcb25&sv=2) * * * ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#decode_file) decode\_file Return decoded base64 data from algorithm ("hex", "base64", "base32", "zip" or "xor") in base64. * `algorithm` - "hex", "base64", "base32", "zip" or "xor". * `filepath` - file with data in base64 * `key` - encrypt key (for `xor`) chevron-rightExample[hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#example-20) * * * ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#encode_data) encode\_data Return encoded data ("hex", "base64", "base32", "zip" or "xor") in base64. * `algorithm` - "hex", "base64", "base32", "zip" or "xor". * `data` - data for encoding * `key` - encrypt key (for `xor`) chevron-rightExample[hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#example-21) ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FGLpfxvxLLgyyBJWsRo93%252FScreenshot_20260115_002315.png%3Falt%3Dmedia%26token%3Ddb8ea1de-a0a9-4643-93eb-6e1644957f95&width=768&dpr=3&quality=100&sign=9c0ae4f7&sv=2) * * * ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#encode_file) encode\_file Return encoded data ("hex", "base64", "base32", "zip" or "xor") in base64. * `algorithm` - "hex", "base64", "base32", "zip" or "xor". * `filepath` - file with data in base64 * `key` - encrypt key (for `xor`) chevron-rightExample[hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#example-22) * * * ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#execute_alias) execute\_alias [See here](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axcommand-type/commands-and-hooks#execute_alias) * * * ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#execute_browser) execute\_browser [See here](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axcommand-type/commands-and-hooks#execute_browser) * * * ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#execute_command) execute\_command [See here](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axcommand-type/commands-and-hooks#execute_command) * * * ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#file_basename) file\_basename Returns the filename * `path` - full filename chevron-rightExample[hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#example-23) ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FP4xL9Utiw9WL8W7wZODS%252FScreenshot_20250727_011742.png%3Falt%3Dmedia%26token%3D92891ea0-caff-4b1e-941a-37c48c1fb616&width=768&dpr=3&quality=100&sign=9b98e7ed&sv=2) * * * ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#file_dirname) file\_dirname Returns the base directory name * `path` - full filename chevron-rightExample[hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#example-24) ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FSZSCT9Xr6a2LbhY898Vb%252FScreenshot_20260114_234128.png%3Falt%3Dmedia%26token%3D57707510-7e13-4d5f-9c74-aa349c861697&width=768&dpr=3&quality=100&sign=39131837&sv=2) * * * ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#file_exists) file\_exists Checks if a file exists * `path` - full filename chevron-rightExample[hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#example-25) ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FWrc3QcV1SKoCHpE6HVA4%252FScreenshot_20250727_011950.png%3Falt%3Dmedia%26token%3Dff301122-1d75-404f-8dab-33f30d495500&width=768&dpr=3&quality=100&sign=bb4f8480&sv=2) * * * ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#file_extension) file\_extension Checks if a file exists * `path` - full filename chevron-rightExample[hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#example-26) ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FAqhkvqUJFuSRPQghI7cf%252FScreenshot_20260114_234136.png%3Falt%3Dmedia%26token%3D0592a416-f7f0-4be6-9c58-e9640ce7260b&width=768&dpr=3&quality=100&sign=a4c73a9&sv=2) * * * ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#file_read) file\_read Reads a file and returns base64 encoded contents * `path` - full filename chevron-rightExample[hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#example-27) ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FF4AzO1zouuBOE1t5UaJF%252FScreenshot_20250727_113427.png%3Falt%3Dmedia%26token%3Dfbc15503-24c0-4693-b070-fb78f9641f90&width=768&dpr=3&quality=100&sign=70a3a24a&sv=2) * * * ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#file_size) file\_size Return the file size * `path` - full filename chevron-rightExample[hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#example-28) ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252F47sxvM6Dy6Uw7N68NLyK%252FScreenshot_20260114_234642.png%3Falt%3Dmedia%26token%3Df86e55aa-e131-4782-8f64-ab3ce116aa2e&width=768&dpr=3&quality=100&sign=33ecb1c5&sv=2) * * * ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#file_write_text) file\_write\_text Writes text data to a file and returns true if the write is successful. * `path` - full filename * `text` - text data chevron-rightExample[hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#example-29) * * * ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#file_write_binary) file\_write\_binary Writes base64 data to a file and returns true if the write is successful. * `path` - full filename * `b64text` - base64 data chevron-rightExample[hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#example-30) * * * ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#format_time) format\_time Convert UNIX Epoch Time to date/time string value. * `format` - datetime format (e.g. "dd/MM/yyyy hh:mm:ss") * `unixtime` - UNIX Epoch Time value chevron-rightExample[hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#example-31) ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FCPTnXbiy5G5B9FsnRmm8%252FScreenshot_20250727_113727.png%3Falt%3Dmedia%26token%3D3b9d2d3c-4597-445a-9753-66db72517b1b&width=768&dpr=3&quality=100&sign=a9289292&sv=2) * * * ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#format_size) format\_size Converts bytes into a convenient format chevron-rightExample[hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#example-32) ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252F6n4c9U9PQE9nuFlHpCBn%252FScreenshot_20250828_145219.png%3Falt%3Dmedia%26token%3D4a4b946f-c902-4110-b708-39270f854ccf&width=768&dpr=3&quality=100&sign=15b33035&sv=2) * * * ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#get_commands) get\_commands Returns a list of available commands for the agent. * `id` - agent ID chevron-rightExample[hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#example-33) ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FPuOwcelA1mXi4DHk7sgC%252FScreenshot_20250828_143514.png%3Falt%3Dmedia%26token%3Da610a8c1-a08c-4aef-a134-e82b6809a3d0&width=768&dpr=3&quality=100&sign=c671e401&sv=2) * * * ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#get_project) get\_project Returns the name of the current project. * * * ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#hash) hash Returns a hash string in hex format. * `algorithm` - hash "sha1" or "md5"; * `length` - length of the returned string * `data` - data to be hashed chevron-rightExample[hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#example-34) ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FDETXadhicz9XlEknBcJw%252FScreenshot_20250926_201942.png%3Falt%3Dmedia%26token%3D78017cb2-890d-40df-a513-535de6786d7c&width=768&dpr=3&quality=100&sign=1d676489&sv=2) * * * ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#interfaces) interfaces Returns a list of network interfaces of the teamserver chevron-rightExample[hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#example-35) ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FwZr8So9xrcuo0H4sJUyg%252FScreenshot_20250727_194836.png%3Falt%3Dmedia%26token%3D41e924ff-147b-47b6-a4db-e954216e660d&width=768&dpr=3&quality=100&sign=d57d4e41&sv=2) * * * ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#ids) ids Returns a list of agent ids chevron-rightExample[hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#example-36) ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FowQS76yKmTA3QatuNylJ%252FScreenshot_20250828_132900.png%3Falt%3Dmedia%26token%3D20d53be6-284f-4a6e-aadb-77690c65c6e6&width=768&dpr=3&quality=100&sign=b07741c4&sv=2) * * * ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#is64) is64 Check if a session is on an x64 system or not * `id` - agent ID chevron-rightExample[hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#example-37) ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FkaWiUwbfPsp5UOilc6KU%252FScreenshot_20250727_114654.png%3Falt%3Dmedia%26token%3Da90229af-2730-4260-aa2a-7d49c1994afd&width=768&dpr=3&quality=100&sign=7f3c0cea&sv=2) * * * ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#isactive) isactive Returns true if the agent is active `id` - agent ID chevron-rightExample[hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#example-38) ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FeNTrINeDvfrSf1xzzHRJ%252FScreenshot_20250828_143237.png%3Falt%3Dmedia%26token%3D98100cff-0a47-4725-8304-7ed315dfc603&width=768&dpr=3&quality=100&sign=847a3a4d&sv=2) * * * ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#isadmin) isadmin Check if a session has admin rights * `id` - agent ID chevron-rightExample[hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#example-39) ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252Fo2zvZywSj0dr68E4fAYt%252FScreenshot_20250727_114813.png%3Falt%3Dmedia%26token%3Da3040482-dcbf-45af-9805-1653dd5e375c&width=768&dpr=3&quality=100&sign=3f8cf0c4&sv=2) * * * ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#log-log_error) log / log\_error Print `text` to AxScript Console. chevron-rightExample[hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#example-40) ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252Fd1IGYoL5aRo68RUxZ4sI%252FScreenshot_20250727_115052.png%3Falt%3Dmedia%26token%3D246771f8-3b7f-4060-950e-de7c0a4b3e45&width=768&dpr=3&quality=100&sign=ae154481&sv=2) * * * ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#open_agent_console) open\_agent\_console Open the console to interact with a agent * `id` - agent ID * * * ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#open_access_tunnel) open\_access\_tunnel Open the tunnel creation dialog window * `id` - agent ID * `socks4` - is agent support socks4 * `socks5` - is agent support socks5 * `lportfwd` - is agent support local port forwarding * `rportfwd` - is agent support reverse port forwarding chevron-rightExample[hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#example-41) ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FMIUDhdG5rN31EwJGY9iY%252FScreenshot_20250727_115836.png%3Falt%3Dmedia%26token%3D56992107-fa03-42a7-b56a-74c651c53de9&width=768&dpr=3&quality=100&sign=c88d759b&sv=2) * * * ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#open_browser_files) open\_browser\_files Open the File Browser for a agent * `id` - agent ID * * * ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#open_browser_process) open\_browser\_process Open the Process Browser for a agent * `id` - agent ID * * * ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#open_remote_terminal) open\_remote\_terminal Open the Interactive Terminal for a agent * `id` - agent ID * * * ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#open_remote_shell) open\_remote\_shell Open the I/O remote shell for a agent * `id` - agent ID * * * ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#prompt_confirm) prompt\_confirm Show a confirm dialog. * `caption` - title of the dialog * `text` - Text question chevron-rightExample[hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#example-42) ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252F6iKXJeHrK01sIoR1xXIb%252FScreenshot_20250828_145826.png%3Falt%3Dmedia%26token%3Dcdfb30e6-46e4-4194-a33e-5f166f06c8ca&width=768&dpr=3&quality=100&sign=c91f0e3e&sv=2) * * * ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#prompt_open_file) prompt\_open\_file Show a file open dialog. * `caption` - title of the dialog * `filter` - filter for selecting files chevron-rightExample[hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#example-43) ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FeP7ARQdVQ4UbbrWR7UIS%252FScreenshot_20250727_120613.png%3Falt%3Dmedia%26token%3D31ad03a7-16f4-4125-a03b-afd63b4affeb&width=768&dpr=3&quality=100&sign=dfdca108&sv=2) * * * ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#prompt_open_dir) prompt\_open\_dir Show a directory open dialog. * `caption` - title of the dialog chevron-rightExample[hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#example-44) ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FIsGyGl9yoJJ96YDD8uXi%252FScreenshot_20250727_121200.png%3Falt%3Dmedia%26token%3D5f3f4479-7f89-4899-bf86-fc181b0520fc&width=768&dpr=3&quality=100&sign=5071da18&sv=2) * * * ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#prompt_save_file) prompt\_save\_file Show a file save dialog. * `filename` - default filename * `caption` - title of the dialog * `filter` - filter for selecting files chevron-rightExample[hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#example-45) ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FjIioDZ0dQGspjSaqQUm5%252FScreenshot_20250727_121514.png%3Falt%3Dmedia%26token%3De0d694e8-acf3-4b11-a564-7ddd224b64f9&width=768&dpr=3&quality=100&sign=814db22e&sv=2) * * * ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#random_string) random\_string Generates a random string of length `len` from a set of characters `set`. * `set` - set of characters (`alphanumeric`, `alphabetic`, `numeric` or `hex`) chevron-rightExample[hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#example-46) ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252Fgc2dsUJKe5Di5o34PJHP%252FScreenshot_20250926_231359.png%3Falt%3Dmedia%26token%3Dd23255e2-4536-4d04-9b23-f4eb96ca223a&width=768&dpr=3&quality=100&sign=26557564&sv=2) * * * ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#random_int) random\_int Generates a random int value. * `min` - min value * `max` - max value chevron-rightExample[hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#example-47) ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FLK2k9pWWCxXQDGTtcRaW%252FScreenshot_20250926_231725.png%3Falt%3Dmedia%26token%3D5fad8c72-7de8-4d9a-9e64-44731d63ebde&width=768&dpr=3&quality=100&sign=a561ff47&sv=2) * * * ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#register_commands_group) register\_commands\_group [See here](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axcommand-type#registering-commands) * * * ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#script_import) script\_import Import AxScript script into current script's env. * `path` - path to script file * * * ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#script_load) script\_load Load a new script to AxScript Manager * `path` - path to script file * * * ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#script_unload) script\_unload Unload a script from the AxScript Manager * `path` - path to script file * * * ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#script_dir) script\_dir Returns the directory where the script is located. * * * ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#show_message) show\_message Shows a message to the user in a dialog box. Use this function to relay information. * `title` - title of the dialog * `text` - the message text chevron-rightExample[hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#example-48) ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FbCQTIPZZVyZ8rCGrNqpS%252FScreenshot_20250727_124650.png%3Falt%3Dmedia%26token%3D4724e2df-d1d0-4e31-8a0a-e1987275ce68&width=768&dpr=3&quality=100&sign=f1539fbd&sv=2) * * * ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#targets_add) targets\_add Save the specified target in Targets Manager * `computer` - computer name * `domain` - domain name * `address` - IP address * `os` - OS type (possible "windows", "linux", "macos") * `osDesc` - detailed information about OS * `tag` - tag * `info` - info * `alive` - true if the host is alive chevron-rightExample[hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#example-49) * * * ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#targets_add_list) targets\_add\_list Save a list of targets in the Targets Manager chevron-rightExample[hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#example-50) * * * ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#ticks) ticks UNIX Epoch Time value * * * ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#validate_command) validate\_command Checks the validity of the entered command and returns full information * `id` - agent ID * `command` - agents command chevron-rightExample[hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#example-51) ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FT76KrY9rzvXBxsDzr420%252FScreenshot_20250828_144547.png%3Falt%3Dmedia%26token%3Db04e23b9-53c9-4c7f-830f-fbd41d461606&width=768&dpr=3&quality=100&sign=ca54c56f&sv=2) * * * [PreviousIntroductionchevron-left](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/introduction) [NextAxCommand typechevron-right](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axcommand-type) Last updated 2 months ago * [Data Model](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#data-model) * [agents](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#agents) * [credentials](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#credentials) * [downloads](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#downloads) * [screenshots](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#screenshots) * [targets](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#targets) * [tunnels](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#tunnels) * [Functions](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#functions) * [agents](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#agents-1) * [agent\_info](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#agent_info) * [agent\_hide](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#agent_hide) * [agent\_remove](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#agent_remove) * [agent\_set\_color](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#agent_set_color) * [agent\_set\_impersonate](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#agent_set_impersonate) * [agent\_set\_mark](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#agent_set_mark) * [agent\_set\_tag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#agent_set_tag) * [agent\_update\_data](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#agent_update_data) * [arch](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#arch) * [bof\_pack](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#bof_pack) * [copy\_to\_clipboard](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#copy_to_clipboard) * [console\_message](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#console_message) * [convert\_to\_code](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#convert_to_code) * [credentials](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#credentials-1) * [credentials\_add](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#credentials_add) * [credentials\_add\_list](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#credentials_add_list) * [create\_command](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#create_command) * [create\_commands\_group](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#create_commands_group) * [decode\_data](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#decode_data) * [decode\_file](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#decode_file) * [encode\_data](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#encode_data) * [encode\_file](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#encode_file) * [execute\_alias](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#execute_alias) * [execute\_browser](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#execute_browser) * [execute\_command](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#execute_command) * [file\_basename](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#file_basename) * [file\_dirname](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#file_dirname) * [file\_exists](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#file_exists) * [file\_extension](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#file_extension) * [file\_read](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#file_read) * [file\_size](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#file_size) * [file\_write\_text](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#file_write_text) * [file\_write\_binary](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#file_write_binary) * [format\_time](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#format_time) * [format\_size](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#format_size) * [get\_commands](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#get_commands) * [get\_project](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#get_project) * [hash](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#hash) * [interfaces](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#interfaces) * [ids](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#ids) * [is64](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#is64) * [isactive](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#isactive) * [isadmin](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#isadmin) * [log / log\_error](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#log-log_error) * [open\_agent\_console](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#open_agent_console) * [open\_access\_tunnel](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#open_access_tunnel) * [open\_browser\_files](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#open_browser_files) * [open\_browser\_process](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#open_browser_process) * [open\_remote\_terminal](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#open_remote_terminal) * [open\_remote\_shell](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#open_remote_shell) * [prompt\_confirm](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#prompt_confirm) * [prompt\_open\_file](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#prompt_open_file) * [prompt\_open\_dir](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#prompt_open_dir) * [prompt\_save\_file](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#prompt_save_file) * [random\_string](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#random_string) * [random\_int](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#random_int) * [register\_commands\_group](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#register_commands_group) * [script\_import](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#script_import) * [script\_load](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#script_load) * [script\_unload](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#script_unload) * [script\_dir](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#script_dir) * [show\_message](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#show_message) * [targets\_add](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#targets_add) * [targets\_add\_list](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#targets_add_list) * [ticks](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#ticks) * [validate\_command](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axfunction#validate_command) Copy var agents = ax.agents(); for (var id in agents) { ax.log("Agent ID: " + id); var agent = agents[id]; for (var key in agent) { ax.log(" " + key + ": " + agent[key]); } } Copy CRED[id] ax.credentials() Copy // CRED STRUCT cred["id"] cred["username"] cred["password"] cred["realm"] cred["type"] cred["tag"] cred["date"] cred["storage"] cred["agent_id"] cred["host"] Copy var creds = ax.credentials(); for (var id in creds) { ax.log("Cred ID: " + id); var cred = creds[id]; for (var key in cred) { ax.log(" " + key + ": " + cred[key]); } } Copy DOWNLOAD[id] ax.downloads() Copy // DOWNLOAD STRUCT download["id"] download["agent_id"] download["agent_name"] download["user"] download["computer"] download["filename"] download["recv_size"] download["total_size"] download["date"] download["state"] Copy var downloads = ax.downloads(); for (var id in downloads) { ax.log("Download ID: " + id); var dw = downloads[id]; for (var key in dw) { ax.log(" " + key + ": " + dw[key]); } } Copy SCREEN[id] ax.screenshots() Copy // SCREEN STRUCT screen["id"] screen["user"] screen["computer"] screen["note"] screen["date"] Copy var screenshots = ax.screenshots(); for (var id in screenshots) { ax.log("Screen ID: " + id); var screen = screenshots[id]; for (var key in screen) { ax.log(" " + key + ": " + screen[key]); } } Copy TARGET[id] ax.targets() Copy // TARGET STRUCT target["id"] target["computer"] target["domain"] target["address"] target["tag"] target["date"] target["info"] target["alive"] target["owned"] target["os"] target["os_desc"] Copy var targets = ax.targets(); for (var id in targets) { ax.log("Target ID: " + id); var targ = targets[id]; for (var key in targ) { ax.log(" " + key + ": " + targ[key]); } } Copy TUNNEL[id] ax.tunnels() Copy // TUNNEL STRUCT tunnel["id"] tunnel["agent_id"] tunnel["username"] tunnel["computer"] tunnel["process"] tunnel["type"] tunnel["info"] tunnel["interface"] tunnel["port"] tunnel["client"] tunnel["f_port"] tunnel["f_host"] Copy var tunnels = ax.tunnels(); for (var id in tunnels) { ax.log("Tunn ID: " + id); var tun = tunnels[id]; for (var key in tun) { ax.log(" " + key + ": " + tun[key]); } } Copy any ax.agent_info(string id, string property) Copy ax.agent_info("47ca27cf", "username"); ax.agent_info("47ca27cf", "pid"); Copy void ax.agent_hide(string[] ids) Copy void ax.agent_hide(string[] ids) Copy void ax.agent_set_color(string[] ids, string background, string foreground, bool reset); Copy ax.agent_set_color(["47ca27cf"], "008000", "000000", false); Copy void ax.agent_set_impersonate(string id, string impersonate, bool elevated); Copy ax.agent_set_impersonate("47ca27cf", "SYSTEM", true); Copy void ax.agent_set_mark(string id, string mark); Copy ax.agent_set_mark("47ca27cf", "Inactive"); Copy void ax.agent_set_tag(string id, string tag); Copy ax.agent_set_tag("47ca27cf", "long"); Copy void ax.agent_update_data(string id, json_property object); Copy ax.agent_update_data("aa26e9d4", { internal_ip:"192.168.1.1", domain:"dom.local" pid: 1234 }); Copy string ax.arch(string id); Copy ax.arch("47ca27cf"); Copy string ax.bof_pack(string types, any[] args); Copy ax.bof_pack("bytes,int,short,cstr,wstr", ["bytes_str", 123, 12, "c_string", "w_string"]); Copy void ax.copy_to_clipboard(string text); Copy ax.copy_to_clipboard("stored data"); Copy void ax.console_message(string id, string message, string type = "", string text = ""); Copy ax.console_message("47ca27cf", "Info message\n", "info", "This is\nmulti line\ntext"); ax.console_message("47ca27cf", "Error message\n", "error"); Copy void ax.convert_to_code(string language, string base64data, string varName = "shellcode"); Copy ax.convert_to_code("rust", "dGVzdCBtZXNzYWdlCg==", "shellcode"); Copy void ax.credentials_add(string username, string password, string realm = "", string type = "password", string tag = "", string storage = "manual", string host = ""); Copy ax.credentials_add("user", "P@ssw0rd", "dom.local", "password", "", "dpapi", `SERVER12`); Copy void ax.credentials_add_list(cred[] array); Copy // cred STRUCT string cred.username string cred.password string cred.realm string cred.type string cred.tag string cred.storage string cred.host Copy var obj = {}; obj.username = "user"; obj.password = "!Q@W3e4r"; obj.realm = "domain"; obj.type = "password"; obj.host = "DB"; var arr = []; arr.push(obj); ax.credentials_add_list(arr); Copy string ax.decode_data(string algorithm, string base64data, string key =""); Copy ax.decode_data("xor", "GAAaQ1dH", "key123"); Copy string ax.decode_file(string algorithm, string filepath, string key =""); Copy ax.decode_data("xor", "/tmp/encfile.txt", "key123"); Copy string ax.encode_data(string algorithm, string data, string key =""); Copy ax.encode_data("xor", "secret", "key123"); Copy string ax.encode_data(string algorithm, string filepath, string key =""); Copy ax.encode_data("xor", "/tmp/encfile.txt", "key123"); Copy string ax.file_basename(string path); Copy ax.file_basename("/tmp/test.txt"); Copy string ax.file_dirname(string path); Copy ax.file_dirname("/tmp/test.txt"); Copy bool ax.file_exists(string path); Copy ax.file_exists("/tmp/test.txt"); Copy string ax.file_extension(string path); Copy ax.file_extension("/tmp/test.txt"); Copy string ax.file_read(string path); Copy ax.file_read("/tmp/test.txt"); Copy int ax.file_size(string path); Copy ax.file_size("/tmp/file.txt"); Copy bool ax.file_write_text(string path, string text); Copy ax.file_write_text("/tmp/test.txt", "this is text"); Copy bool ax.file_write_binary(string path, string b64text); Copy ax.file_write_binary("/tmp/file2.txt", "dGVzdCBtZXNzYWdlCg=="); Copy string ax.format_time(string format, int unixtime); Copy ax.format_time("dd/MM hh:mm", ax.ticks()); Copy string ax.format_size(int bytes); Copy string[] get_commands(string id); Copy string get_project(); Copy string ax.hash(string algorithm, int length, string data) Copy ax.hash("sha1", 8, "data-for-hash"); ax.hash("md5", 32, "data-for-hash"); Copy string[] ax.interfaces() Copy ax.interfaces() Copy string[] ax.ids() Copy bool ax.is64(string id); Copy ax.is64("47ca27cf"); Copy bool ax.isactive(string id); Copy bool ax.isadmin(string id); Copy ax.isadmin("47ca27cf"); Copy void ax.log(string text); void ax.log_error(string text); Copy ax.log("log"); ax.log_error("log"); Copy void ax.open_agent_console(string id); Copy void ax.open_access_tunnel(string id, bool socks4, bool socks5, bool lportfwd, bool rportfwd); Copy ax.open_access_tunnel("47ca27cf", true, true, false, false); Copy void ax.open_browser_files(string id); Copy void ax.open_browser_process(string id); Copy void ax.open_remote_terminal(string id); Copy void ax.open_remote_shell(string id); Copy string prompt_confirm(string caption, string text); Copy ax.prompt_confirm(" ", "Exit main windows?"); Copy string prompt_open_file(string caption = "Select file", string filter = ""); Copy ax.prompt_open_file("Select AxScript", "AxScript Files (*.axs)"); Copy string prompt_open_dir(string caption = "Select directory"); Copy ax.prompt_open_dir("Open directory"); Copy string prompt_save_file(string filename, string caption = "Select file", string filter = ""); Copy ax.prompt_save_file("/tmp/creds.txt", "Save file"); Copy string random_string(int len, string set); Copy ax.random_string(10, "hex") ax.random_string(36, "alphanumeric") Copy int random_int(int min, int max); Copy ax.random_int(2, 1024) Copy string script_import(string path); Copy string script_load(string path); Copy string script_unload(string path); Copy string script_dir(); Copy void show_message(string title, string text); Copy ax.show_message("Info", "This is text"); Copy void ax.targets_add(string computer, string domain, string address, string os = "unknown", string osDesc = "", string tag = "", string info = "", bool alive = true); Copy ax.targets_add("DC", "dom.local", "dom.local", "192.168.1.10", "windows"); Copy void ax.targets_add_list(target[] array); Copy // target STRUCT string target.computer string target.domain string target.address string target.tag string target.info string target.os_desc string target.os ["windows", "linux", "macos"] bool target.alive Copy var obj = {}; obj.computer = "DC"; obj.domain = "DOM.LOCAL"; obj.os_desc = "Windows Server 2019"; obj.os = "windows"; obj.alive = true; obj.tag = ""; obj.info = "from axscript"; var arr = []; arr.push(obj); ax.targets_add_list(arr); Copy int ticks(); Copy cmd_info ax.validate_command(string id, string command); Copy // cmd_info STRUCT bool info["valid"] string info["message"] bool info["is_pre_hook"] bool info["has_output"] bool info["has_post_hook"] map{} info["parsed"] Copy let cmd = ax.validate_command("551757de", "socks start 1080"); cmd.valid let cmd = ax.validate_command("551757de", "socks start"); cmd.message --- # Events and Hooks | Adaptix Framework The AdaptixC2 TeamServer event system allows plugins to react to various actions in the system: agent connections, task execution, tunnel creation, etc. [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/events-and-hooks#architecture) Architecture -------------------------------------------------------------------------------------------------------------------------------------------------- ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FYUyKBZaGdtdGCBycGaaf%252F02.png%3Falt%3Dmedia%26token%3D3bc2231e-c88e-4b4b-a8b9-51f79a6861d8&width=768&dpr=3&quality=100&sign=f418d632&sv=2) Concept Description **Event** Notification about an action in the system **Hook** Event handler function **Phase** Execution phase: Pre (before) or Post (after) **Priority** Execution priority (lower = earlier) **Timeout** Maximum hook execution time [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/events-and-hooks#hook-phases) Hook **Phases** ---------------------------------------------------------------------------------------------------------------------------------------------------- The event system supports two hook phases with fundamentally different capabilities. ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/events-and-hooks#pre-hooks-phase-pre) **Pre Hooks (Phase: Pre)** Pre hooks execute **before** the main action is performed. They have full control over the event: Capability Description **Modify data** Can modify event data before the action executes. Changes are passed to subsequent hooks and the action itself **Cancel event** Can completely cancel the event by returning an error. The action will not be executed **Validate** Can validate input data and reject invalid requests **Synchronous** Execute sequentially in priority order. Block the action until all Pre hooks complete **Timeout** 5 seconds maximum execution time per hook **Use cases:** * Input validation (reject agents from specific IP ranges) * Data enrichment (add tags, modify parameters) * Access control (block certain operations) * Data transformation before processing ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/events-and-hooks#post-hooks-phase-post) **Post Hooks (Phase: Post)** Post hooks execute **after** the main action has completed. They are read-only observers: Capability Description **Read-only** Receive a copy of the event data. Modifications have no effect on the system **Cannot cancel** The action has already been executed. Returning an error only logs a warning (exception: `agent.generate` — Post hooks can cancel generation and modify `FileName`/`FileContent`) **Asynchronous** Execute in parallel via worker pool. Do not block the main flow **Timeout** 30 seconds maximum execution time per hook **Use cases:** * Notifications (Telegram, Slack, email) * Logging and analytics * External integrations * Metrics collection #### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/events-and-hooks#comparison-table) Comparison Table Feature Pre Hook Post Hook Execution time Before action After action Can modify data ✅ Yes ❌ No (read-only copy) Can cancel event ✅ Yes (return error) ❌ No Execution mode Synchronous Asynchronous Blocks main flow ✅ Yes ❌ No Timeout 5 seconds 30 seconds Error handling Cancels event Logs warning ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/events-and-hooks#priorities) Priorities Hooks are executed in order of priority (lower value = earlier): Priority Recommended usage 1-10 Critical validators 10-50 Data modifiers 50-100 Standard processing 100+ Logging, monitoring [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/events-and-hooks#event-types) Event Types ------------------------------------------------------------------------------------------------------------------------------------------------ ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/events-and-hooks#client-events) Client Events Event Type Description Data `client.connect` Client GUI connection `EventDataClientConnect` `client.disconnect` Client GUI disconnection `EventDataClientDisconnect` ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/events-and-hooks#agent-events) Agent Events Event Type Description Data `agent.new` New agent connected `EventDataAgentNew` `agent.generate` Agent payload generation `EventDataAgentGenerate` `agent.checkin` Agent check-in (heartbeat) `EventDataAgentCheckin` `agent.activate` Agent activated (from Inactive) `EventDataAgentActivate` `agent.update` Agent data update `EventDataAgentUpdate` `agent.terminate` Agent terminated `EventDataAgentTerminate` `agent.remove` Agent removed `EventDataAgentRemove` ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/events-and-hooks#listener-events) Listener Events Event Type Description Data `listener.start` Listener started (start/resume) `EventDataListenerStart` `listener.stop` Listener stopped (stop/pause) `EventDataListenerStop` ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/events-and-hooks#task-events) Task Events Event Type Description Data `task.create` Task creation `EventDataTaskCreate` `task.start` Task start `EventDataTaskStart` `task.update_job` Background task update `EventDataTaskUpdateJob` `task.complete` Task completion `EventDataTaskComplete` ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/events-and-hooks#credentials-events) Credentials Events Event Type Description Data `credentials.add` Credentials added `EventCredentialsAdd` `credentials.edit` Credentials edited `EventCredentialsEdit` `credentials.remove` Credentials removed `EventCredentialsRemove` ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/events-and-hooks#download-events) Download Events Event Type Description Data `download.start` Download started `EventDataDownloadStart` `download.finish` Download finished `EventDataDownloadFinish` `download.remove` Download removed `EventDataDownloadRemove` ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/events-and-hooks#screenshot-events) Screenshot Events Event Type Description Data `screenshot.add` Screenshot added `EventDataScreenshotAdd` `screenshot.remove` Screenshot removed `EventDataScreenshotRemove` ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/events-and-hooks#tunnel-events) Tunnel Events Event Type Description Data `tunnel.start` Tunnel started `EventDataTunnelStart` `tunnel.stop` Tunnel stopped `EventDataTunnelStop` ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/events-and-hooks#target-events) Target Events Event Type Description Data `target.add` Target added `EventDataTargetAdd` `target.edit` Target edited `EventDataTargetEdit` `target.remove` Target removed `EventDataTargetRemove` ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/events-and-hooks#pivot-events) Pivot Events Event Type Description Data `pivot.create` Pivot connection created `EventDataPivotCreate` `pivot.remove` Pivot connection removed `EventDataPivotRemove` * * * [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/events-and-hooks#hook-registration) Hook Registration ------------------------------------------------------------------------------------------------------------------------------------------------------------ ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/events-and-hooks#tseventhookregister) TsEventHookRegister Full registration with all parameters specified. **Example:** ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/events-and-hooks#tseventhookonpre-tseventhookonpost) TsEventHookOnPre / TsEventHookOnPost Simplified registration for Pre/Post hooks. ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/events-and-hooks#tseventhookunregister) TsEventHookUnregister Unregister a hook by ID. ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/events-and-hooks#tseventhookunregisterbyname) TsEventHookUnregisterByName Unregister all hooks with the specified name. * * * [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/events-and-hooks#event-data-structures) Event Data Structures -------------------------------------------------------------------------------------------------------------------------------------------------------------------- ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/events-and-hooks#baseevent) BaseEvent Base structure embedded in all events. ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/events-and-hooks#client-events-1) Client Events ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/events-and-hooks#agent-events-1) Agent Events ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/events-and-hooks#listener-events-1) Listener Events ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/events-and-hooks#task-events-1) Task Events ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/events-and-hooks#credentials-events-1) Credentials Events ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/events-and-hooks#download-events-1) Download Events ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/events-and-hooks#screenshot-events-1) Screenshot Events ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/events-and-hooks#tunnel-events-1) Tunnel Events ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/events-and-hooks#target-events-1) Target Events ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/events-and-hooks#pivot-events-1) Pivot Events * * * [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/events-and-hooks#usage-examples) Usage Examples ------------------------------------------------------------------------------------------------------------------------------------------------------ ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/events-and-hooks#example-1-event-logger) Example 1: Event Logger ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/events-and-hooks#example-2-ip-blacklist-validator-pre-hook) Example 2: IP Blacklist Validator (Pre Hook) ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/events-and-hooks#example-3-auto-tagger) Example 3: Auto-Tagger ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/events-and-hooks#example-4-webhook-integration) Example 4: Webhook Integration * * * [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/events-and-hooks#best-practices) Best Practices ------------------------------------------------------------------------------------------------------------------------------------------------------ ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/events-and-hooks#id-1.-error-handling) 1\. Error Handling ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/events-and-hooks#id-2.-asynchronous-processing-in-post-hooks) 2\. Asynchronous Processing in Post Hooks ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/events-and-hooks#id-3.-correct-usage-of-pre-hooks) 3\. Correct Usage of Pre Hooks ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/events-and-hooks#id-4.-unique-hook-names) 4\. Unique Hook Names ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/events-and-hooks#id-5.-priorities) 5\. Priorities ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/events-and-hooks#id-6.-timeouts) 6\. Timeouts * Pre hooks: 5 seconds (short operations) * Post hooks: executed in a separate thread, 30 seconds (you can do external requests) If a hook exceeds the timeout, it is interrupted with an error. * * * ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/events-and-hooks#constants) Constants [PreviousTS APIchevron-left](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api) [NextExtenderschevron-right](https://adaptix-framework.gitbook.io/adaptix-framework/development/extenders) Last updated 1 month ago * [Architecture](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/events-and-hooks#architecture) * [Hook Phases](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/events-and-hooks#hook-phases) * [Pre Hooks (Phase: Pre)](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/events-and-hooks#pre-hooks-phase-pre) * [Post Hooks (Phase: Post)](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/events-and-hooks#post-hooks-phase-post) * [Priorities](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/events-and-hooks#priorities) * [Event Types](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/events-and-hooks#event-types) * [Client Events](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/events-and-hooks#client-events) * [Agent Events](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/events-and-hooks#agent-events) * [Listener Events](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/events-and-hooks#listener-events) * [Task Events](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/events-and-hooks#task-events) * [Credentials Events](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/events-and-hooks#credentials-events) * [Download Events](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/events-and-hooks#download-events) * [Screenshot Events](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/events-and-hooks#screenshot-events) * [Tunnel Events](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/events-and-hooks#tunnel-events) * [Target Events](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/events-and-hooks#target-events) * [Pivot Events](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/events-and-hooks#pivot-events) * [Hook Registration](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/events-and-hooks#hook-registration) * [TsEventHookRegister](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/events-and-hooks#tseventhookregister) * [TsEventHookOnPre / TsEventHookOnPost](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/events-and-hooks#tseventhookonpre-tseventhookonpost) * [TsEventHookUnregister](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/events-and-hooks#tseventhookunregister) * [TsEventHookUnregisterByName](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/events-and-hooks#tseventhookunregisterbyname) * [Event Data Structures](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/events-and-hooks#event-data-structures) * [BaseEvent](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/events-and-hooks#baseevent) * [Client Events](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/events-and-hooks#client-events-1) * [Agent Events](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/events-and-hooks#agent-events-1) * [Listener Events](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/events-and-hooks#listener-events-1) * [Task Events](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/events-and-hooks#task-events-1) * [Credentials Events](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/events-and-hooks#credentials-events-1) * [Download Events](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/events-and-hooks#download-events-1) * [Screenshot Events](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/events-and-hooks#screenshot-events-1) * [Tunnel Events](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/events-and-hooks#tunnel-events-1) * [Target Events](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/events-and-hooks#target-events-1) * [Pivot Events](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/events-and-hooks#pivot-events-1) * [Usage Examples](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/events-and-hooks#usage-examples) * [Example 1: Event Logger](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/events-and-hooks#example-1-event-logger) * [Example 2: IP Blacklist Validator (Pre Hook)](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/events-and-hooks#example-2-ip-blacklist-validator-pre-hook) * [Example 3: Auto-Tagger](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/events-and-hooks#example-3-auto-tagger) * [Example 4: Webhook Integration](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/events-and-hooks#example-4-webhook-integration) * [Best Practices](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/events-and-hooks#best-practices) * [1\. Error Handling](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/events-and-hooks#id-1.-error-handling) * [2\. Asynchronous Processing in Post Hooks](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/events-and-hooks#id-2.-asynchronous-processing-in-post-hooks) * [3\. Correct Usage of Pre Hooks](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/events-and-hooks#id-3.-correct-usage-of-pre-hooks) * [4\. Unique Hook Names](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/events-and-hooks#id-4.-unique-hook-names) * [5\. Priorities](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/events-and-hooks#id-5.-priorities) * [6\. Timeouts](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/events-and-hooks#id-6.-timeouts) * [Constants](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/events-and-hooks#constants) Copy ┌─────────────────────────────────────────────────────────────────────────────┐ │ EVENT SYSTEM ARCHITECTURE │ ├─────────────────────────────────────────────────────────────────────────────┤ │ │ │ ┌────────────────────────────────────────────────────────────────────────┐ │ │ │ EVENT MANAGER │ │ │ │ │ │ │ │ ┌─────────────────────────────────────────────────────────────────┐ │ │ │ │ │ HOOK REGISTRY │ │ │ │ │ │ │ │ │ │ │ │ EventType: "agent.new" │ │ │ │ │ │ ├── Hook[0]: {Name: "validator", Phase: Pre, Priority: 10} │ │ │ │ │ │ ├── Hook[1]: {Name: "logger", Phase: Pre, Priority: 100} │ │ │ │ │ │ ├── Hook[2]: {Name: "notifier", Phase: Post, Priority: 50} │ │ │ │ │ │ └── Hook[3]: {Name: "analytics", Phase: Post, Priority: 100} │ │ │ │ │ │ │ │ │ │ │ │ EventType: "task.complete" │ │ │ │ │ │ ├── Hook[0]: {Name: "logger", Phase: Post, Priority: 100} │ │ │ │ │ │ └── ... │ │ │ │ │ └─────────────────────────────────────────────────────────────────┘ │ │ │ │ │ │ │ │ ┌─────────────────────────────────────────────────────────────────┐ │ │ │ │ │ WORKER POOL │ │ │ │ │ │ │ │ │ │ │ │ Worker[0] ─┬─> Process async Post hooks │ │ │ │ │ │ Worker[1] ─┤ │ │ │ │ │ │ Worker[2] ─┤ │ │ │ │ │ │ Worker[3] ─┘ │ │ │ │ │ │ │ │ │ │ │ └─────────────────────────────────────────────────────────────────┘ │ │ │ └────────────────────────────────────────────────────────────────────────┘ │ │ │ │ ═══════════════════════════════════════════════════════════════════════ │ │ │ │ EVENT FLOW │ │ │ │ Action Triggered │ │ │ │ │ V │ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ │ │ PRE HOOKS │────>│ ACTION │────>│ POST HOOKS │ │ │ │ (sync) │ │ EXECUTED │ │ (async) │ │ │ └─────────────┘ └─────────────┘ └─────────────┘ │ │ │ │ │ │ │ Can cancel │ Cannot cancel │ │ │ Timeout: 5s │ Timeout: 30s │ │ V V │ │ event.Cancel(err) Notifications, logging, etc │ │ │ └─────────────────────────────────────────────────────────────────────────────┘ Copy // Example: Pre hook that can cancel the event Ts.TsEventHookRegister("agent.new", "ip_filter", HookPre, 10, func(event any) error { e := event.(*adaptix.EventDataAgentNew) // Modify data e.AgentData.Tag = "auto-tagged" // Cancel event if condition met if isBlockedIP(e.AgentData.ExternalIP) { return fmt.Errorf("blocked IP: %s", e.AgentData.ExternalIP) } return nil // Allow event to proceed }) Copy // Example: Post hook for notifications (read-only) Ts.TsEventHookRegister("agent.new", "telegram_notify", HookPost, 50, func(event any) error { e := event.(*adaptix.EventDataAgentNew) // Data is read-only, modifications are ignored message := fmt.Sprintf("New agent: %s from %s", e.AgentData.Id, e.AgentData.ExternalIP) sendTelegramMessage(message) return nil // Errors are logged but don't affect the system }) Copy hookId := Ts.TsEventHookRegister( eventType string, // Event type name string, // Hook name (for identification) phase int, // 0 = Pre, 1 = Post priority int, // Execution priority handler func(event any) error, // Handler function ) string // Returns a unique hook ID Copy const ( HookPre = 0 HookPost = 1 ) hookId := Ts.TsEventHookRegister("agent.new", "my_handler", HookPost, 50, func(event any) error { data := event.(*eventing.EventDataAgentNew) fmt.Printf("New agent: %s\n", data.Agent.Id) return nil }) Copy // Pre hook with default priority hookId := Ts.TsEventHookOnPre("agent.new", "validator", func(event any) error { // ... return nil }) // Post hook with default priority hookId := Ts.TsEventHookOnPost("agent.terminate", "notifier", func(event any) error { // ... return nil }) Copy success := Ts.TsEventHookUnregister(hookId) // bool Copy count := Ts.TsEventHookUnregisterByName("my_handler") // int - number removed Copy type BaseEvent struct { Type EventType // Event type Phase HookPhase // Phase (Pre/Post) Cancelled bool // Cancellation flag Error error // Error (if any) } // Method to cancel an action (Pre hooks only) func (e *BaseEvent) Cancel(err error) { e.Cancelled = true e.Error = err } Copy type EventDataClientConnect struct { BaseEvent Username string // Username } type EventDataClientDisconnect struct { BaseEvent Username string } Copy type EventDataAgentNew struct { BaseEvent Agent adaptix.AgentData // Agent data Restore bool // true if restored from DB } type EventDataAgentGenerate struct { BaseEvent BuilderId string // Builder ID (for logging and cancellation) AgentName string // Agent type name ListenersName []string // List of listeners Config string // Configuration (JSON) FileName string // File name FileContent []byte // File content } type EventDataAgentCheckin struct { BaseEvent Agent adaptix.AgentData } type EventDataAgentActivate struct { BaseEvent Agent adaptix.AgentData // Activated agent data } type EventDataAgentUpdate struct { BaseEvent Agent adaptix.AgentData } type EventDataAgentTerminate struct { BaseEvent AgentId string // Agent ID TaskId string // Terminate task ID } type EventDataAgentRemove struct { BaseEvent Agent adaptix.AgentData } Copy type EventDataListenerStart struct { BaseEvent ListenerName string // Listener name ListenerType string // Listener type Config string // Configuration (JSON) } type EventDataListenerStop struct { BaseEvent ListenerName string // Listener name ListenerType string // Listener type } Copy type EventDataTaskCreate struct { BaseEvent AgentId string Task adaptix.TaskData Cmdline string Client string // Operator name } type EventDataTaskStart struct { BaseEvent AgentId string Task adaptix.TaskData } type EventDataTaskUpdateJob struct { BaseEvent AgentId string Task adaptix.TaskData } type EventDataTaskComplete struct { BaseEvent AgentId string Task adaptix.TaskData } Copy type EventCredentialsAdd struct { BaseEvent Credentials []adaptix.CredsData } type EventCredentialsEdit struct { BaseEvent CredId string OldCred adaptix.CredsData NewCred adaptix.CredsData } type EventCredentialsRemove struct { BaseEvent CredIds []string } Copy type EventDataDownloadStart struct { BaseEvent AgentId string FileId string FileName string FileSize int } type EventDataDownloadFinish struct { BaseEvent Download adaptix.DownloadData Canceled bool } type EventDataDownloadRemove struct { BaseEvent FileIds []string } Copy type EventDataScreenshotAdd struct { BaseEvent AgentId string Note string Content []byte } type EventDataScreenshotRemove struct { BaseEvent ScreenId string } Copy type EventDataTunnelStart struct { BaseEvent AgentId string TunnelId string TunnelType int Port int Info string } type EventDataTunnelStop struct { BaseEvent AgentId string TunnelId string TunnelType int Port int } Copy type EventDataTargetAdd struct { BaseEvent Targets []adaptix.TargetData } type EventDataTargetEdit struct { BaseEvent Target adaptix.TargetData } type EventDataTargetRemove struct { BaseEvent TargetIds []string } Copy type EventDataPivotCreate struct { BaseEvent PivotId string ParentAgentId string ChildAgentId string PivotName string } type EventDataPivotRemove struct { BaseEvent PivotId string } Copy package main import ( "fmt" "time" ) const ( HookPre = 0 HookPost = 1 ) var AllEventTypes = []string{ "client.connect", "client.disconnect", "agent.new", "agent.activate", "agent.terminate", "agent.remove", "listener.start", "listener.stop", "task.create", "task.complete", "download.start", "download.finish", "tunnel.start", "tunnel.stop", "pivot.create", "pivot.remove", } func InitPlugin(ts any, moduleDir string, serviceConfig string) adaptix.PluginService { Ts = ts.(Teamserver) for _, eventType := range AllEventTypes { et := eventType // Pre hook Ts.TsEventHookRegister(et, "event_logger_pre", HookPre, 100, func(event any) error { logEvent("PRE", et, event) return nil }) // Post hook Ts.TsEventHookRegister(et, "event_logger_post", HookPost, 100, func(event any) error { logEvent("POST", et, event) return nil }) } fmt.Println("[EventLogger] All event hooks registered") return &PluginService{} } func logEvent(phase string, eventType string, event any) { timestamp := time.Now().Format("2006-01-02 15:04:05.000") fmt.Printf("[%s] [%s] %s: %+v\n", timestamp, phase, eventType, event) } Copy package main import ( "errors" "strings" ) const HookPre = 0 var blacklistedIPs = []string{ "10.0.0.1", "192.168.1.100", } var blacklistedSubnets = []string{ "172.16.", } func InitPlugin(ts any, moduleDir string, serviceConfig string) adaptix.PluginService { Ts = ts.(Teamserver) // Register Pre hook for validation Ts.TsEventHookRegister("agent.new", "ip_validator", HookPre, 10, func(event any) error { data := event.(*EventDataAgentNew) // Skip restore from DB if data.Restore { return nil } ip := data.Agent.ExternalIP // Check exact IPs for _, blocked := range blacklistedIPs { if ip == blocked { data.Cancel(errors.New("IP is blacklisted")) return errors.New("blocked IP: " + ip) } } // Check subnets for _, subnet := range blacklistedSubnets { if strings.HasPrefix(ip, subnet) { data.Cancel(errors.New("IP subnet is blacklisted")) return errors.New("blocked subnet: " + ip) } } return nil }) return &PluginService{} } Copy package main const HookPost = 1 func InitPlugin(ts any, moduleDir string, serviceConfig string) adaptix.PluginService { Ts = ts.(Teamserver) // Automatic tagging of new agents Ts.TsEventHookRegister("agent.new", "auto_tagger", HookPost, 50, func(event any) error { data := event.(*EventDataAgentNew) agent := data.Agent var tag string // Determine tag by OS switch agent.Os { case 0: // Windows if agent.Elevated { tag = "windows-admin" } else { tag = "windows-user" } case 1: // Linux tag = "linux" case 2: // macOS tag = "macos" } // Additional tags by domain if strings.Contains(strings.ToLower(agent.Domain), "dc") { tag += ",domain-controller" } // Update tags if tag != "" { Ts.TsAgentUpdateDataPartial(agent.Id, map[string]interface{}{ "tags": tag, }) } return nil }) return &PluginService{} } Copy package main import ( "bytes" "encoding/json" "net/http" "time" ) const HookPost = 1 var webhookURL = "https://example.com/webhook" type WebhookPayload struct { EventType string `json:"event_type"` Timestamp int64 `json:"timestamp"` Data interface{} `json:"data"` } func InitPlugin(ts any, moduleDir string, serviceConfig string) adaptix.PluginService { Ts = ts.(Teamserver) events := []string{"agent.new", "agent.terminate", "task.complete"} for _, et := range events { eventType := et Ts.TsEventHookRegister(eventType, "webhook", HookPost, 50, func(event any) error { go sendWebhook(eventType, event) return nil }) } return &PluginService{} } func sendWebhook(eventType string, event any) { payload := WebhookPayload{ EventType: eventType, Timestamp: time.Now().Unix(), Data: event, } jsonData, err := json.Marshal(payload) if err != nil { return } client := &http.Client{Timeout: 10 * time.Second} req, _ := http.NewRequest("POST", webhookURL, bytes.NewBuffer(jsonData)) req.Header.Set("Content-Type", "application/json") req.Header.Set("X-Webhook-Event", eventType) resp, err := client.Do(req) if err != nil { return } defer resp.Body.Close() } Copy Ts.TsEventHookRegister("agent.new", "my_hook", HookPost, 50, func(event any) error { // Safe type assertion data, ok := event.(*EventDataAgentNew) if !ok { return errors.New("invalid event type") } // Recover from panic defer func() { if r := recover(); r != nil { fmt.Printf("Hook panic recovered: %v\n", r) } }() // ... main logic ... return nil }) Copy Ts.TsEventHookRegister("agent.new", "notifier", HookPost, 50, func(event any) error { data := event.(*EventDataAgentNew) // Async send — do not block the event go func() { sendNotification(data.Agent) }() return nil // Return nil immediately }) Copy // Correct: validation and cancellation Ts.TsEventHookRegister("agent.new", "validator", HookPre, 10, func(event any) error { data := event.(*EventDataAgentNew) if !isAllowed(data.Agent.ExternalIP) { data.Cancel(errors.New("not allowed")) return errors.New("blocked") } return nil }) // Incorrect: long-running operations in Pre hook Ts.TsEventHookRegister("agent.new", "slow_hook", HookPre, 10, func(event any) error { time.Sleep(10 * time.Second) // Blocks everything for 10 seconds! return nil }) Copy // Use unique names to allow unregistration hookId := Ts.TsEventHookRegister("agent.new", "my_service_agent_hook", ...) // Later you can remove all service hooks Ts.TsEventHookUnregisterByName("my_service_agent_hook") Copy // Validators — low priority (executed first) Ts.TsEventHookRegister("agent.new", "validator", HookPre, 10, ...) // Modifiers — medium priority Ts.TsEventHookRegister("agent.new", "modifier", HookPre, 50, ...) // Loggers — high priority (executed last) Ts.TsEventHookRegister("agent.new", "logger", HookPre, 100, ...) Copy // Execution phases const ( HookPre = 0 // Before action (sync) HookPost = 1 // After action (async) ) // Default timeouts const ( DefaultPreHookTimeout = 5 * time.Second DefaultPostHookTimeout = 30 * time.Second ) --- # AxForm type | Adaptix Framework [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#namespace-form) Namespace Form ------------------------------------------------------------------------------------------------------------------------------------- The form namespace contains functions and objects for working with UI elements such as buttons, input fields, tables, and dialogs. All visual elements have the following methods: * `void setEnabled(bool enable)` - if `enable` == true the element will be enabled, otherwise it will be disabled. * `void setVisible(bool enable)` - if `enable` is true the element will be visible, otherwise it will be hidden. * `bool getEnabled()` - returns true if the element is enabled. * `bool getVisible()` - returns true if the element is visible. ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#connect) Connect AxScript uses QT signal-slot technology. A signal is emitted when a particular event occurs. A slot is a function that is called in response to a particular signal. Qt's signals and slots mechanism ensures that if you connect a signal to a slot, the slot will be called with the signal's parameters at the right time. Signals and slots can take any number of arguments of any type. They are completely type safe. You can connect as many signals as you want to a single slot, and a signal can be connected to as many slots as you need. It is even possible to connect a signal directly to another signal. (This will emit the second signal immediately whenever the first is emitted.) `form.connect(element elem, string signal, function(){})` - Creates a connection from the `signal` in the `elem` object to the `function` handler. chevron-rightExample[hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#example) Copy let btn = form.create_button("Send signal"); form.connect(btn, "clicked", function(){ ax.show_message("test", "Clicked signal"); }); let layout = form.create_vlayout(); layout.addWidget(btn); let dialog = form.create_dialog(""); dialog.setLayout(layout); dialog.exec() ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252Fe1xchuvl3AA4W1ekWkw0%252FScreenshot_20250726_000241.png%3Falt%3Dmedia%26token%3D4429ed2f-2792-4dde-bc17-04b7cb42fff7&width=768&dpr=3&quality=100&sign=4461e9bc&sv=2) ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#container) Container To retrieve data in JSON format from input elements, you must use a `container` object. #### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#methods) Methods: 1 #### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#put) put This method adds an element `elem` with the given `id` to the container. 2 #### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#get) get This method gets an element from the container by the given `id`. 3 #### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#contains) contains This method checks if an element with the given `id` exists in the container. 4 #### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#remove) remove This method removes the element with the given `id` from the container. 5 #### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#tojson) toJson This method packs the data of all container elements into JSON format. 6 #### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#fromjson) fromJson This method recovers the values of elements in a container from a JSON string `jsonString`. chevron-rightExample[hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#example-1) ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FV9kMe5vYfEw90bQZL0X1%252FScreenshot_20250725_233726.png%3Falt%3Dmedia%26token%3D3346cd7f-2ebc-4172-a664-01f7a38f1f42&width=768&dpr=3&quality=100&sign=6d45335&sv=2) * * * [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#vlayout-hlayout) VLayout / HLayout ----------------------------------------------------------------------------------------------------------------------------------------- The `vlayout` class lines up elements vertically. The `hlayout` class lines up elements horizontally. To create a `vlayout`/`hlayout` element, use the `form.create_vlayout()` / `form.create_hlayout()` function. #### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#methods-1) Methods: 1 #### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#addwidget) addWidget Adds `element` to the end of this box layout. chevron-rightExample[hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#example-2) ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252F8wVXex97lz1u7uU44ZfL%252FScreenshot_20250725_004941.png%3Falt%3Dmedia%26token%3Df25c662d-3993-428d-b4b4-d88d1ea891b6&width=768&dpr=3&quality=100&sign=a8514b9b&sv=2) ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252Fl64eMwKp8T5FFvKB3e6T%252FScreenshot_20250725_005020.png%3Falt%3Dmedia%26token%3D0e61f348-f736-4486-9f89-666d469bcb82&width=768&dpr=3&quality=100&sign=a1fe476b&sv=2) * * * [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#gridlayout) GridLayout ----------------------------------------------------------------------------------------------------------------------------- The `gridlayout` class lays out elements in a grid. To create a `gridlayout` element, use the `form.create_gridlayout()` function. #### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#methods-2) Methods: 1 #### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#addwidget-1) addWidget Adds the given `element` to the cell grid, spanning multiple rows/columns. The cell will start at `row`, `col` spanning `rowSpan` rows and `colSpan` columns. chevron-rightExample[hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#example-3) ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FHathiyT1c68nRTyxqAsM%252FScreenshot_20250725_010236.png%3Falt%3Dmedia%26token%3Db778a95a-4a55-425e-9fab-9b5c395d1d26&width=768&dpr=3&quality=100&sign=399f6ced&sv=2) * * * [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#vline-hline) VLine / HLine --------------------------------------------------------------------------------------------------------------------------------- The `line` element is a simple divider cover. To create a `vline` / `hline` element, use the `form.create_vline()` / `form.create_hline()` function. chevron-rightExample[hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#example-4) ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FwuBtfeup2BzY1wOV1Acy%252FScreenshot_20250725_114722.png%3Falt%3Dmedia%26token%3D5fc447ff-2dd6-41d4-af2d-6340f94fc1fa&width=768&dpr=3&quality=100&sign=5b749fcc&sv=2) ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FsbP2DVtqKlIZ3iJVnMEf%252FScreenshot_20250725_114751.png%3Falt%3Dmedia%26token%3D6dffc02d-ff80-4039-9abe-5fe1d1346359&width=768&dpr=3&quality=100&sign=a6c17474&sv=2) * * * [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#vspacer-hspacer) VSpacer / HSpacer ----------------------------------------------------------------------------------------------------------------------------------------- The `spacer` element provides blank space in a layout. Normally, you don't need to use this element directly. To create a `vspacer` / `hspacer` element, use the `form.create_vline()` / `form.create_hline()` function. chevron-rightExample[hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#example-5) Basic ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FG1o6EAmWwjo1uRJ8txqZ%252FScreenshot_20250725_120533.png%3Falt%3Dmedia%26token%3D5e4256fb-ef3b-4a0d-84ed-f34627147dba&width=768&dpr=3&quality=100&sign=e429415f&sv=2) With hspacer ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FcISdiXv3iSrSV7JUIYEy%252FScreenshot_20250725_120550.png%3Falt%3Dmedia%26token%3D686f18a0-7ba0-4ffd-ab66-f69dc89d3539&width=768&dpr=3&quality=100&sign=d3a2b672&sv=2) * * * [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#label) Label ------------------------------------------------------------------------------------------------------------------- The `label` element provides a text display. `element create_label(string text = "")` - Constructs a label that displays the text, `text`. #### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#methods-3) Methods: 1 #### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#text) text This property holds the label's text. If no text has been set this will return an empty string. 2 #### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#settext) setText This method sets the label text, `text`. chevron-rightExample[hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#example-6) ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FDKhpkCeldL6d3RRXoa3G%252FScreenshot_20250725_123708.png%3Falt%3Dmedia%26token%3D5c9de088-6f32-41b9-8640-c44f377ccb40&width=768&dpr=3&quality=100&sign=fb28224&sv=2) * * * [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#textline) TextLine ------------------------------------------------------------------------------------------------------------------------- The `textline` element is a one-line text editor. `element create_textline(string text = "")` - Constructs a textline containing the text, `text`. #### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#methods-4) Methods: 1 #### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#text-1) text This property holds the textline's text. If no text has been set this will return an empty string. 2 #### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#settext-1) setText This method sets the textline text, `text`. 3 #### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#setplaceholder) setPlaceholder This method sets the textline placeholder text, `text`. 4 #### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#setreadonly) setReadOnly This method holds whether the textline is read-only. #### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#signals) Signals: 1 #### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#textchanged) textChanged This signal is emitted whenever the text changes. The `text` argument is the new text. 2 #### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#textedited) textEdited This signal is emitted whenever the text is edited. The `text` argument is the new text. 3 #### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#returnpressed) returnPressed This signal is emitted when the Return or Enter key is used. 4 #### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#editingfinished) editingFinished This signal is emitted when the Return or Enter key is used, or if the textline loses focus and its contents have changed since the last time this signal was emitted. chevron-rightExample[hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#example-7) ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FYJWBziVf7RLagymlV3Tj%252FScreenshot_20250725_132102.png%3Falt%3Dmedia%26token%3D8c8a03c8-d0d5-4cc2-877d-dd75a1159a02&width=768&dpr=3&quality=100&sign=a311d20e&sv=2) * * * [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#textmulti) TextMulti --------------------------------------------------------------------------------------------------------------------------- The `textmulti` element provides a widget that is used to edit and display text. `element create_textmulti(string text = "")` - Constructs a textmulti containing the text, `text`. #### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#methods-5) Methods: 1 #### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#text-2) text This property holds the textmulti's text. If no text has been set this will return an empty string. 2 #### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#settext-2) setText This method sets the textmulti text, `text`. 3 #### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#appendtext) appendText Appends a new paragraph with `text` to the end of the textmulti. 4 #### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#setplaceholder-1) setPlaceholder This method sets the textmulti placeholder text, `text`. 5 #### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#setreadonly-1) setReadOnly This method holds whether the textmulti is read-only. chevron-rightExample[hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#example-8) ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FTG4qZ8CNVMaGJT0FTBqn%252FScreenshot_20250725_173008.png%3Falt%3Dmedia%26token%3D61ae8ef3-1d6a-4bc0-bb23-39fe1aec287d&width=768&dpr=3&quality=100&sign=4539aefc&sv=2) * * * [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#dateline) DateLine ------------------------------------------------------------------------------------------------------------------------- The `dateline` element provides a widget for editing dates. `element create_dateline(string format = "dd.MM.yyyy")` - Constructs a `dateline`. The `format` used to display the date of the date edit. #### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#methods-6) Methods: 1 #### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#datestring) dateString This method return the date that is set in the element. 2 #### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#setdatestring) setDateString This method set the date in the element. chevron-rightExample[hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#example-9) ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FKakacYdI4rNNo5dvcvnZ%252FScreenshot_20250725_175550.png%3Falt%3Dmedia%26token%3D0e037990-d37d-4bde-bc3a-91498a284b8f&width=768&dpr=3&quality=100&sign=9be0e7d7&sv=2) * * * [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#timeline) TimeLine ------------------------------------------------------------------------------------------------------------------------- The `timeline` element provides a widget for editing times. `element create_dateline(string format = "HH:mm.yyyy")` - Constructs a `timeline`. The `format` used to display the time of the time edit. #### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#methods-7) Methods: 1 #### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#timestring) timeString This method return the time that is set in the element. 2 #### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#settimestring) setTimeString This method set the time in the element. chevron-rightExample[hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#example-10) ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FC4oPKQUvENpQHT2k4Ohe%252FScreenshot_20250725_181646.png%3Falt%3Dmedia%26token%3D9b9cc108-c8bf-41c4-98d2-3212644c1565&width=768&dpr=3&quality=100&sign=db5145be&sv=2) * * * [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#combo) Combo ------------------------------------------------------------------------------------------------------------------- The `combo` element combines a button with a dropdown list. `element create_combo()` - Constructs a `combo`. #### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#methods-8) Methods: 1 #### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#additem) addItem Adds an item to the `combo` with the given `text`. 2 #### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#additems) addItems Adds each of the strings in the given `array` to the `combo`. Each item is appended to the list of existing items in turn. 3 #### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#setitems) setItems Clears the `combo` and adds each of the strings in the given `array` to the `combo`. 4 #### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#clear) clear Clears the `combo`. 5 #### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#currenttext) currentText This method set the current text. 6 #### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#setcurrentindex) setCurrentIndex This method set the current item by the index. 7 #### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#currentindex) currentIndex This method return the index of the current item. #### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#signals-1) Signals: 1 #### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#currenttextchanged) currentTextChanged This signal is emitted whenever currentText changes. The new value is passed as _text_. 2 #### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#currentindexchanged) currentIndexChanged This signal is emitted whenever currentIndex changes. The new index is passed as number. chevron-rightExample[hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#example-11) ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FSV3lb7bEzafb8C42C31r%252FScreenshot_20250725_185437.png%3Falt%3Dmedia%26token%3Db7c0fa02-a2e8-4e22-8b2f-39743bbc9f95&width=768&dpr=3&quality=100&sign=8623dfdc&sv=2) * * * [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#spin) Spin ----------------------------------------------------------------------------------------------------------------- The `spin` element provides a spin box widget. `element create_spin()` - Constructs a `spin` with 0 as minimum value and 99 as maximum value, a step value of 1. The value is initially set to 0. #### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#methods-9) Methods: 1 #### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#value) value This method return the value of the `spin`. 2 #### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#setvalue) setValue This method set the value of the `spin`. 3 #### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#setrange) setRange Convenience method to set the `min`, and `max` values with a single function call. #### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#signals-2) Signals: 1 #### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#valuechanged) valueChanged This signal is emitted whenever the `spin`'s value is changed. The new value's passed as integer value. chevron-rightExample[hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#example-12) ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FLuR0mblN1vUCgJ4LqAO8%252FScreenshot_20250725_190957.png%3Falt%3Dmedia%26token%3D5d816f39-1eab-462f-a2ee-d36d953660da&width=768&dpr=3&quality=100&sign=dee0633c&sv=2) * * * [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#check) Check ------------------------------------------------------------------------------------------------------------------- The `check` element provides a checkbox with a text label. `element create_check(string label= "")` - Constructs a checkbox with the given `text`. #### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#methods-10) Methods: 1 #### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#ischecked) isChecked This method return true if the button is checked. 2 #### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#setchecked) setChecked This method sets the checked state. #### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#signals-3) Signals: 1 #### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#statechanged) stateChanged This signal is emitted whenever the `check` state changes, i.e., whenever the user checks or unchecks it. chevron-rightExample[hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#example-13) ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252Fx0nJf7hm2qjU3xP648EV%252FScreenshot_20250725_192202.png%3Falt%3Dmedia%26token%3D0210d83b-3c94-4e12-9ea5-a907665bc73a&width=768&dpr=3&quality=100&sign=3c6debe&sv=2) * * * [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#button) Button --------------------------------------------------------------------------------------------------------------------- The `button` element provides a command button. `element create_button(string text= "")` - Constructs a `button` with the text `text`. #### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#signals-4) Signals: 1 #### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#clicked) clicked This signal is emitted when the button is activated. chevron-rightExample[hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#example-14) ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FdWdPdrcFRzU5rnIm11UD%252FScreenshot_20250725_193525.png%3Falt%3Dmedia%26token%3D73c04e0a-f978-4e3b-9fe9-4a90da1b2944&width=768&dpr=3&quality=100&sign=432a15c0&sv=2) * * * [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#list) List ----------------------------------------------------------------------------------------------------------------- The `list` element provides an item-based list widget. `element create_list()` - Constructs an empty `list`. #### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#methods-11) Methods: 1 #### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#items) items Returns an array of elements. 2 #### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#additem-1) addItem Inserts the `item` at the end of the list widget. 3 #### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#additems-1) addItems Inserts `items` at the end of the list widget. 4 #### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#removeitem) removeItem Removes the element at the specified index. 5 #### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#itemtext) itemText Return the element at the specified index. 6 #### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#setitemtext) setItemText Set the item at the specified index. 7 #### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#clear-1) clear Removes all items and selections. 8 #### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#count) count This method return the number of items in the list including any hidden items. 9 #### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#currentrow) currentRow This method return the row of the current item. 10 #### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#setcurrentrow) setCurrentRow This method sets the row of the current element at the specified index. 11 #### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#selectedrows) selectedRows Returns an array of selected elements. 12 #### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#setreadonly-2) setReadOnly This method holds whether the `list` is read-only. #### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#signals-5) Signals: 1 #### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#currenttextchanged-1) currentTextChanged This signal is emitted whenever the current item changes. `currentText` is the text data in the current item. If there is no current item, the `currentText` is invalid. 2 #### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#currentrowchanged) currentRowChanged This signal is emitted whenever the current item changes. `currentRow` is the row of the current item. If there is no current item, the `currentRow` is -1. 3 #### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#itemclickedtext) itemClickedText This signal is emitted with the specified `text` when a mouse button is clicked on an item in the `list`. 4 #### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#itemdoubleclickedtext) itemDoubleClickedText This signal is emitted with the specified `text` when a mouse button is double clicked on an item in the `list`. chevron-rightExample[hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#example-15) ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FtagraDjPntq4F02pJ6AP%252FScreenshot_20250725_205506.png%3Falt%3Dmedia%26token%3Dcfbec0e7-1d33-410b-802c-4c09bcdd01cd&width=768&dpr=3&quality=100&sign=e72850f&sv=2) * * * [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#table) Table ------------------------------------------------------------------------------------------------------------------- The `table` elements provides an item-based table view. `element create_table(string[] headers)` - Creates a new `table` view with the given headers. #### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#methods-12) Methods: 1 #### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#addcolumn) addColumn This method adds a new column to the table with the specified `header`. 2 #### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#setcolumns) setColumns This method adds new columns to the table with the specified `headers`. 3 #### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#additem-2) addItem Inserts `item` at the end of the table, `item` is an array of strings, the string index corresponds to the column index. 4 #### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#rowcount) rowCount Returns the number of rows. 5 #### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#columncount) columnCount Returns the number of columns. 6 #### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#text-3) text This property contains the cell text for the specified `row` and `column`. If no text is specified, an empty string is returned. 7 #### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#setitemtext-1) setItemText Set the cell text for the specified `row` and `column`. 8 #### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#clear-2) clear Removes all items from table. 9 #### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#setrowcount) setRowCount Sets the number of `rows` in this `table`'s. 10 #### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#setcolumncount) setColumnCount Sets the number of `cols` in this `table`'s. 11 #### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#currentrow-1) currentRow This method return the row of the current cell. 12 #### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#currentcolumn) currentColumn This method return the column of the current cell. 13 #### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#hidecolumn) hideColumn Hide the given `column`. 14 #### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#selectedrows-1) selectedRows Returns an array of arrays of the selected elements. 15 #### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#setreadonly-3) setReadOnly This method holds whether the `table` is read-only. 16 #### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#setsortingenabled) setSortingEnabled If _enable_ is true, enables sorting for the table 17 #### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#resizetocontent) resizeToContent Will automatically resize the section to its optimal size based on the contents of the entire `column`. 18 #### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#setheadersvisible) setHeadersVisible If `enable` is true, the column in the table will be visible, otherwise hidden. 19 #### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#setcolumnalign) setColumnAlign Sets the alignment in the `column`. Available values are "left", "right", "center". #### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#signals-6) Signals: 1 #### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#cellchanged) cellChanged This signal is emitted whenever the data of the item in the cell specified by `row` and `column` has changed. 2 #### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#cellclicked) cellClicked This signal is emitted whenever a cell in the table is clicked. The `row` and `column` specified is the cell that was clicked. 3 #### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#celldoubleclicked) cellDoubleClicked This signal is emitted whenever a cell in the table is double clicked. The `row` and `column` specified is the cell that was double clicked. chevron-rightExample[hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#example-16) ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FlGwOQmUN1Ul0gQlGIMgo%252FScreenshot_20250725_211735.png%3Falt%3Dmedia%26token%3Dadb78b04-1e63-41c9-8e50-d6a718b76385&width=768&dpr=3&quality=100&sign=21926015&sv=2) * * * [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#panel) Panel ------------------------------------------------------------------------------------------------------------------- The `panel` element provides a placement of other elements using layout. `element create_panel()` - Constructs a `panel`. #### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#methods-13) Methods: 1 #### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#setlayout) setLayout Sets the layout manager for this element to `lt`. chevron-rightExample[hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#example-17) ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FJRAWPGrR1eQSkjqJ0K7c%252FScreenshot_20250725_231912.png%3Falt%3Dmedia%26token%3Daaf83a3d-99c3-43b1-8ae0-2ed997e2e13b&width=768&dpr=3&quality=100&sign=226b7f62&sv=2) * * * [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#groupbox) GroupBox ------------------------------------------------------------------------------------------------------------------------- The `groupbox` element provides a group box frame with a title. `element create_groupbox(string title, bool checkable)` - Constructs a `groupbox` with the given `title`. Property `checkable` holds whether the group box has a checkbox in its title. #### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#methods-14) Methods: 1 #### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#ischecked-1) isChecked This method return true if the checkbox is checked. 2 #### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#setchecked-1) setChecked This method sets the checked state. 3 #### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#ischeckable) isCheckable If this property is `true`, the group box displays its title using a checkbox in place of an ordinary label. 4 #### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#setcheckable) setCheckable If `checkable` is `true`, the group box displays its title using a checkbox in place of an ordinary label. 5 #### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#settitle) setTitle This method sets the title text of the group box. 6 #### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#setpanel) setPanel This method sets an element inside a `groupbox`. #### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#signals-7) Signals: 1 #### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#clicked-1) clicked This signal is emitted when the check box is activated chevron-rightExample[hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#example-18) ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252F1tNvsk9PfeTwjMDT0tgw%252FScreenshot_20250725_230608.png%3Falt%3Dmedia%26token%3D06bf4a85-5805-4056-9f8b-07564f4dc031&width=768&dpr=3&quality=100&sign=3734740&sv=2) * * * [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#scrollarea) ScrollArea ----------------------------------------------------------------------------------------------------------------------------- The `scrollarea` element provides a scrolling view onto another elements. `element create_scrollarea()` - Constructs an empty `scrollarea`. #### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#methods-15) Methods: 1 #### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#setwidgetresizable) setWidgetResizable This property holds whether the `scrollarea` should resize the view element. 2 #### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#setpanel-1) setPanel This method sets an element inside a `scrollarea`. chevron-rightExample[hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#example-19) ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252F7jFkVgvG6USUmpMD9oqX%252FScreenshot_20250726_004310.png%3Falt%3Dmedia%26token%3D12215db1-e077-42b3-aa53-d05c61fe9123&width=768&dpr=3&quality=100&sign=38c5d57b&sv=2) * * * [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#vsplitter-hsplitter) VSplitter / HSplitter ------------------------------------------------------------------------------------------------------------------------------------------------- The `splitter` element implements a splitter widget. To create a `vsplitter` / `hsplitter` element, use the `create_vsplitter()` / `form.create_hsplitter()` function. #### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#methods-16) Methods: 1 #### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#setsizes) setSizes Sets the child elements respective sizes to the values given in the `sizes`. 2 #### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#addpage) addPage Adds the given `elem` to the splitter's layout after all the other items. #### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#signals-8) Signals: 1 #### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#splittermoved) splitterMoved This signal is emitted when the splitter handle at a particular `index` has been moved to position `pos`. chevron-rightExample[hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#example-20) ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252F0etJyh4zjOaoDZ7on8FX%252FScreenshot_20250726_005552.png%3Falt%3Dmedia%26token%3Dd61cc7e1-5e5f-47eb-9599-f51b7ebf18a1&width=768&dpr=3&quality=100&sign=fd1c711c&sv=2) * * * [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#tabs) Tabs ----------------------------------------------------------------------------------------------------------------- The `tabs` element provides a stack of tabbed widgets. `element form.create_tabs()` - Constructs a `tabs` element. #### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#methods-17) Methods: 1 #### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#addtab) addTab Adds a tab with the given `elem` and `title` to the `tabs`. chevron-rightExample[hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#example-21) ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FmH59SClYy1qToIKo0zpL%252FScreenshot_20250726_010649.png%3Falt%3Dmedia%26token%3D54796c22-c312-434b-8e10-7969095238ff&width=768&dpr=3&quality=100&sign=60084c9&sv=2) * * * [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#stack) Stack ------------------------------------------------------------------------------------------------------------------- The `stack` element provides a stack of widgets where only one widget is visible at a time. `element create_stack()` - Constructs a `stack`. #### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#methods-18) Methods: 1 #### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#addpage-1) addPage Appends the given `page` to the `stask` and returns the index position. 2 #### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#insertpage) insertPage Inserts the given `page` at the given `index` in the `stack`. 3 #### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#removepage) removePage Removes element from the `stack` by `index`. 4 #### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#setcurrentindex-1) setCurrentIndex This method set the `index` position of the widget that is visible; 5 #### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#currentindex-1) currentIndex This method return the `index` position of the widget that is visible; 6 #### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#count-1) count This method return the number of elements contained by this `stack`. #### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#signals-9) Signals: 1 #### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#currentchanged) currentChanged This signal is emitted whenever the current element changes. chevron-rightExample[hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#example-22) ![](https://adaptix-framework.gitbook.io/adaptix-framework/~gitbook/image?url=https%3A%2F%2F2104178602-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FS8p8XLFtLmf0NkofQvoa%252Fuploads%252FkpSwggVHQkbNiTZ9KIxL%252FScreenshot_20250726_012107.png%3Falt%3Dmedia%26token%3Dd265f63e-435c-488d-bb6e-88f8fbfb6f97&width=768&dpr=3&quality=100&sign=40f39975&sv=2) * * * [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#dialog) Dialog --------------------------------------------------------------------------------------------------------------------- The `dialog` element is implement of dialog windows. `dialog create_dialog(string title)` - Constructs a `dialog` with `title`. #### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#methods-19) Methods: 1 #### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#setbuttonstext) setButtonsText This method sets the text `ok_text` for button OK and the text `cancel_text` for button CANCEL. 2 #### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#setsize) setSize This method sets the size for the window. 3 #### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#setlayout-1) setLayout Sets the layout manager for this window. 4 #### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#close) close Close window. 5 #### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#exec) exec Shows the dialog as a modal dialog, blocking until the user closes it. If the window is closed by pressing the OK button, the method will return true. * * * [PreviousCommands and Hookschevron-left](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axcommand-type/commands-and-hooks) [NextAxSelector typechevron-right](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axselector-type) Last updated 1 month ago * [Namespace Form](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#namespace-form) * [Connect](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#connect) * [Container](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#container) * [VLayout / HLayout](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#vlayout-hlayout) * [GridLayout](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#gridlayout) * [VLine / HLine](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#vline-hline) * [VSpacer / HSpacer](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#vspacer-hspacer) * [Label](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#label) * [TextLine](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#textline) * [TextMulti](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#textmulti) * [DateLine](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#dateline) * [TimeLine](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#timeline) * [Combo](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#combo) * [Spin](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#spin) * [Check](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#check) * [Button](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#button) * [List](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#list) * [Table](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#table) * [Panel](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#panel) * [GroupBox](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#groupbox) * [ScrollArea](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#scrollarea) * [VSplitter / HSplitter](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#vsplitter-hsplitter) * [Tabs](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#tabs) * [Stack](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#stack) * [Dialog](https://adaptix-framework.gitbook.io/adaptix-framework/development/axscript/axform-type#dialog) Copy form.create_container() Copy void container::put(string id, element elem); Copy element container::get(string id); Copy bool container::contains(string id) Copy void container::remove(string id) Copy string container::toJson(); Copy void container::fromJson(string jsonString); Copy let tl1 = form.create_textline(); let tl2 = form.create_textline(); let tm3 = form.create_textmulti(); let btn = form.create_button("Get data"); let container = form.create_container() container.put("line1", tl1) container.put("lin2", tl2) form.connect(btn, "clicked", function(){ tm3.setText(container.toJson()); }); let layout = form.create_vlayout(); layout.addWidget(tl1); layout.addWidget(tl2); layout.addWidget(tm3); layout.addWidget(btn); let dialog = form.create_dialog(""); dialog.setLayout(layout); dialog.exec() Copy layout form.create_vlayout() layout form.create_hlayout() Copy void layout::addWidget(form.object element) Copy let b1 = form.create_button("One"); let b2 = form.create_button("Two"); let b3 = form.create_button("Three"); let layout = form.create_hlayout(); layout.addWidget(b1); layout.addWidget(b2); layout.addWidget(b3); let dialog = form.create_dialog(); dialog.setLayout(layout); dialog.exec() Copy let b1 = form.create_button("One"); let b2 = form.create_button("Two"); let b3 = form.create_button("Three"); let layout = form.create_vlayout(); layout.addWidget(b1); layout.addWidget(b2); layout.addWidget(b3); let dialog = form.create_dialog(""); dialog.setLayout(layout); dialog.exec() Copy layout form.create_gridlayout() Copy void layout::addWidget(form.object element, int row, int col, int rowSpan = 1, int colSpan = 1) Copy let b1 = form.create_button("One"); let b2 = form.create_button("Two"); let b3 = form.create_button("Three"); let b4 = form.create_button("Four"); let layout = form.create_gridlayout(); layout.addWidget(b1, 0, 0, 1, 2); layout.addWidget(b2, 0, 2, 2, 1); layout.addWidget(b3, 1, 0, 1, 1); layout.addWidget(b4, 1, 1, 1, 1); let dialog = form.create_dialog(""); dialog.setLayout(layout); dialog.exec() Copy element form.create_vline() element form.create_hline() Copy let b1 = form.create_button("One"); let b2 = form.create_button("Two"); let line = form.create_hline(); let layout = form.create_vlayout(); layout.addWidget(b1); layout.addWidget(line); layout.addWidget(b2); let dialog = form.create_dialog(""); dialog.setLayout(layout); dialog.exec() Copy let b1 = form.create_button("One"); let b2 = form.create_button("Two"); let line = form.create_vline(); let layout = form.create_hlayout(); layout.addWidget(b1); layout.addWidget(line); layout.addWidget(b2); let dialog = form.create_dialog(""); dialog.setLayout(layout); dialog.exec() Copy element form.create_hline() element form.create_vspacer() Copy let b1 = form.create_button("One"); let b2 = form.create_button("Two"); let layout = form.create_gridlayout(); layout.addWidget(b1, 0, 0, 1, 1); layout.addWidget(b2, 1, 0, 1, 2); let dialog = form.create_dialog(""); dialog.setLayout(layout); dialog.exec() Copy let b1 = form.create_button("One"); let b2 = form.create_button("Two"); let spacer = form.create_hspacer(); let layout = form.create_gridlayout(); layout.addWidget(b1, 0, 0, 1, 1); layout.addWidget(spacer, 0, 1, 1, 1); layout.addWidget(b2, 1, 0, 1, 2); let dialog = form.create_dialog(""); dialog.setLayout(layout); dialog.exec() Copy string label::text(); Copy void label::setText(string text); Copy let l1 = form.create_label("Text label"); let l2 = form.create_label(); l2.setText(l1.text() + " 2"); let layout = form.create_vlayout(); layout.addWidget(l1); layout.addWidget(l2); let dialog = form.create_dialog(""); dialog.setLayout(layout); dialog.exec() Copy string textline::text(); Copy void textline::setText(string text); Copy void textline::setPlaceholder(string text); Copy void textline::setReadOnly(bool readonly); Copy textChanged(string text) Copy textEdited(string text) Copy returnPressed() Copy editingFinished() Copy let tl1 = form.create_textline(); let tl2 = form.create_textline(); tl2.setPlaceholder("test signal"); form.connect(tl1, "textEdited", function(text){ tl2.setText(tl1.text()); }); let layout = form.create_vlayout(); layout.addWidget(tl1); layout.addWidget(tl2); let dialog = form.create_dialog(""); dialog.setLayout(layout); dialog.exec() Copy string textmulti::text(); Copy void textmulti::setText(string text); Copy void appendText(string text) Copy void textmulti::setPlaceholder(string text); Copy void textmulti::setReadOnly(bool readonly); Copy let tl1 = form.create_textmulti("test\nmulti\ntext"); let tl2 = form.create_textline(); let layout = form.create_vlayout(); layout.addWidget(tl1); layout.addWidget(tl2); let dialog = form.create_dialog(""); dialog.setLayout(layout); dialog.exec() Copy string dateline::dateString(); Copy void dateline::setDateString(string date); Copy let tl1 = form.create_dateline("dd/MM/yyyy"); let layout = form.create_vlayout(); layout.addWidget(tl1); let dialog = form.create_dialog(""); dialog.setLayout(layout); dialog.exec() Copy string timeline::timeString(); Copy void timeline::setTimeString(string time); Copy let tl1 = form.create_timeline("HH:mm"); let layout = form.create_vlayout(); layout.addWidget(tl1); let dialog = form.create_dialog(""); dialog.setLayout(layout); dialog.exec() Copy void combo::addItem(string text); Copy void combo::addItems(string[] array); Copy void combo::setItems(string[] array); Copy void combo::clear(); Copy string combo::currentText(); Copy void combo::setCurrentIndex(int index); Copy int combo::currentIndex(); Copy currentTextChanged(string text); Copy currentIndexChanged(int index); Copy let c1 = form.create_combo(); c1.setItems(["Item 1", "Item 2", "Item 3"]); let tl2 = form.create_textline(); tl2.setReadOnly(true); form.connect(c1, "currentTextChanged", function(text){ tl2.setText(c1.currentText()); }); let layout = form.create_vlayout(); layout.addWidget(c1); layout.addWidget(tl2); let dialog = form.create_dialog(""); dialog.setLayout(layout); dialog.exec() Copy int spin::value(); Copy void spin::setValue(int value); Copy void spin::setRange(int min, int max); Copy valueChanged(int); Copy let c1 = form.create_spin(); c1.setRange(1,10); let tl2 = form.create_textline(); tl2.setReadOnly(true); form.connect(c1, "valueChanged", function(value){ tl2.setText(value); }); let layout = form.create_vlayout(); layout.addWidget(c1); layout.addWidget(tl2); let dialog = form.create_dialog(""); dialog.setLayout(layout); dialog.exec() Copy bool check::isChecked(); Copy void check::setChecked(bool checked); Copy stateChanged(); Copy let c1 = form.create_check("Checkbox"); let tl2 = form.create_textline(); tl2.setReadOnly(true); form.connect(c1, "stateChanged", function(){ if(c1.isChecked()) tl2.setText("Checked"); else tl2.setText("UnChecked"); }); let layout = form.create_vlayout(); layout.addWidget(c1); layout.addWidget(tl2); let dialog = form.create_dialog(""); dialog.setLayout(layout); dialog.exec() Copy clicked(); Copy let c1 = form.create_button("Button"); let tl2 = form.create_textline(); tl2.setReadOnly(true); form.connect(c1, "clicked", function(){ tl2.setText("Clicked!"); }); let layout = form.create_vlayout(); layout.addWidget(c1); layout.addWidget(tl2); let dialog = form.create_dialog(""); dialog.setLayout(layout); dialog.exec() Copy string[] list::items(); Copy void list::addItem(string item); Copy void list::addItems(string[] items); Copy void list::removeItem(int index); Copy string list::itemText(int index); Copy void list::setItemText(int index, string text); Copy void list::clear(); Copy int list::count(); Copy int list::currentRow(); Copy void list::setCurrentRow(int row); Copy string[] list::selectedRows(); Copy void list::setReadOnly(bool readonly); Copy currentTextChanged(string currentText); Copy currentRowChanged(int currentRow); Copy itemClickedText(string text); Copy itemDoubleClickedText(string text); Copy let listw = form.create_list(); listw.addItems(["Item 1", "Item 2", "Item 3"]); listw.addItem("New"); let text_line = form.create_textline(listw.count()) let text_button = form.create_button("go"); form.connect(text_button, "clicked", function (){ text_line.setText(listw.items()); }) form.connect(listw, "itemClicked", function (text){ text_line.setText(text); }) let layout = form.create_gridlayout(); layout.addWidget(listw, 0, 0, 1, 2); layout.addWidget(text_line, 1, 0, 1, 1); layout.addWidget(text_button, 1, 1, 1, 1); let dialog = form.create_dialog(""); dialog.setSize(460, 240); dialog.setLayout(layout); dialog.exec() Copy void table::addColumn(string header); Copy void table::setColumns(string[] headers); Copy void table::addItems(string[] item); Copy int table::rowCount(); Copy int table::columnCount(); Copy string table::text(int row, int column); Copy void table::setText(int row, int column, string text); Copy void table::clear(); Copy void table::setRowCount(int rows); Copy void table::setColumnCount(int cols); Copy int table::currentRow(); Copy int table::currentColumn(); Copy void table::hideColumn(int columns); Copy string[][] table::selectedRows(); Copy void table::setReadOnly(bool readonly); Copy void table::setSortingEnabled(bool enable); Copy void table::resizeToContent(int column); Copy void table::setHeadersVisible(const bool enable) Copy void table::setColumnAlign(int column, string align); Copy cellChanged(int row, int column) Copy cellClicked(int row, int column); Copy cellDoubleClicked(int row, int column); Copy let table = form.create_table(["Name", "Age", "Id"]) table.addItem(["Alex", "23", "a1a2"]); table.addItem(["Bella", "37", "b1c8"]); table.setColumnAlign(1, "center"); let text_line = form.create_textline(table.columnCount()) let text_button = form.create_button("go"); form.connect(text_button, "clicked", function (){ text_line.setText(table.selectedRows()); }) form.connect(table, "cellChanged", function (row, column){ text_line.setText(table.text(row, column)); }) let layout = form.create_gridlayout(); layout.addWidget(table, 0, 0, 1, 2); layout.addWidget(text_line, 1, 0, 1, 1); layout.addWidget(text_button, 1, 1, 1, 1); let dialog = form.create_dialog(""); dialog.setSize(460, 240); dialog.setLayout(layout); dialog.exec() Copy void panel::setLayout(layout lt); Copy let text_multi1 = form.create_textmulti("Panel 1"); let combo_w = form.create_combo(); combo_w.setItems(["Panel 1", "Panel 2"]); let layout1 = form.create_gridlayout(); layout1.addWidget(text_multi1, 0, 0, 1, 1); layout1.addWidget(combo_w, 1, 0, 1, 1); let panel = form.create_panel(); panel.setLayout(layout1); let layout = form.create_gridlayout(); layout.addWidget(panel, 0, 0, 1, 1); let dialog = form.create_dialog(""); dialog.setSize(460, 240); dialog.setLayout(layout); dialog.exec() Copy bool groupbox::isChecked(); Copy void groupbox::setChecked(bool checked); Copy bool groupbox::isCheckable(); Copy void groupbox::setCheckable(bool checkable); Copy void groupbox::setTitle(string title); Copy void groupbox::setPanel(element panel); Copy clicked(bool checked = false); Copy let text_multi1 = form.create_textmulti("Panel 1"); let combo_w = form.create_combo(); combo_w.setItems(["Panel 1", "Panel 2"]); let layout1 = form.create_gridlayout(); layout1.addWidget(text_multi1, 0, 0, 1, 1); layout1.addWidget(combo_w, 1, 0, 1, 1); let panel = form.create_panel(); panel.setLayout(layout1); let group_box = form.create_groupbox("Box", true); group_box.setPanel(panel); form.connect(group_box, "clicked", function (checked){ panel.setEnabled(checked); }) let layout = form.create_gridlayout(); layout.addWidget(group_box, 0, 0, 1, 1); let dialog = form.create_dialog(""); dialog.setSize(460, 240); dialog.setLayout(layout); dialog.exec() Copy void scrollarea::setWidgetResizable(bool resizable); Copy void scrollarea::setPanel(element panel); Copy let text_multi1 = form.create_textmulti("Panel 1"); let text_multi2 = form.create_textmulti("Panel 2"); let combo_w = form.create_combo(); combo_w.setItems(["Panel 1", "Panel 2"]); let layout1 = form.create_gridlayout(); layout1.addWidget(text_multi1, 0, 0, 1, 1); layout1.addWidget(text_multi2, 1, 0, 1, 1); layout1.addWidget(combo_w, 2, 0, 1, 1); let panel = form.create_panel(); panel.setLayout(layout1); const scroll = form.create_scrollarea(); scroll.setPanel(panel); let layout = form.create_gridlayout(); layout.addWidget(scroll, 0, 0, 1, 1); let dialog = form.create_dialog(""); dialog.setSize(460, 240); dialog.setLayout(layout); dialog.exec() Copy void splitter::setSizes(int[] sizes); Copy void splitter::addPage(element elem); Copy splitterMoved(int pos, int index) Copy let text_multi1 = form.create_textmulti("Panel 1"); let text_multi2 = form.create_textmulti("Panel 2"); let splitter = form.create_hsplitter(); splitter.addPage(text_multi1); splitter.addPage(text_multi2); splitter.setSizes([100, 200]); let layout = form.create_gridlayout(); layout.addWidget(splitter, 0, 0, 1, 1); let dialog = form.create_dialog(""); dialog.setSize(460, 240); dialog.setLayout(layout); dialog.exec() Copy void tabs::addTab(element elem, string title) Copy let text_multi1 = form.create_textmulti("Panel 1"); let text_multi2 = form.create_textmulti("Panel 2"); let tabs = form.create_tabs(); tabs.addTab(text_multi1, "tab 1"); tabs.addTab(text_multi2, "tab 2"); let layout = form.create_gridlayout(); layout.addWidget(tabs, 0, 0, 1, 1); let dialog = form.create_dialog(""); dialog.setSize(460, 240); dialog.setLayout(layout); dialog.exec() Copy int stack::addPage(element page); Copy int stack::insertPage(int index, element page); Copy void stack::removePage(int index); Copy void stack::setCurrentIndex(int index); Copy int stack::currentIndex(); Copy int stack::count(); Copy currentChanged(int index); Copy let text_multi1 = form.create_textmulti("Panel 1"); let text_multi2 = form.create_textmulti("Panel 2"); let stack_w = form.create_stack(); stack_w.addPage(text_multi1); stack_w.addPage(text_multi2); let combo_w = form.create_combo(); combo_w.setItems(["Panel 1", "Panel 2"]); form.connect(combo_w, "currentIndexChanged", function (index){ stack_w.setCurrentIndex(index); }) let layout = form.create_gridlayout(); layout.addWidget(stack_w, 0, 0, 1, 1); layout.addWidget(combo_w, 1, 0, 1, 1); let dialog = form.create_dialog(""); dialog.setSize(460, 240); dialog.setLayout(layout); dialog.exec() Copy void dialog::setButtonsText(string ok_text, string cancel_text); Copy void dialog::setSize(int w, int h) Copy void dialog::setLayout(layout lt); Copy void dialog::close(); Copy bool dialog::exec(); --- # Web API | Adaptix Framework circle-info If authentication fails, the web server will respond with a 404 page by default. [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/web-api#auth) Auth ------------------------------------------------------------------------------------------------------------------------- chevron-right**POST {endpoint}/login** [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/web-api#post-endpoint-login) Authenticate and receive a JWT **Request (JSON)** * `username` string - operator login * `password` string - operator password **Response (JSON)** * `access_token` string - JWT access token * `refresh_token` string - JWT refresh token * `version` string - Teamserver version chevron-right**POST {endpoint}/**refresh [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/web-api#post-endpoint-refresh) Update JWT access token **Request (JSON)** Header `Authorization: Bearer ` **Response (JSON)** * `access_token` string - JWT access token chevron-right**POST {endpoint}/**sync [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/web-api#post-endpoint-sync) Start synchronizing data with the client via WebSocket **Request (JSON)** Header `Authorization: Bearer ` **Response** chevron-right**POST {endpoint}/**otp/generate [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/web-api#post-endpoint-otp-generate) Generate OTP **Request (JSON)** Header `Authorization: Bearer ` * `type` string - object type: "connect", "download", "tmp\_upload", "channel\_tunnel", "channel\_terminal", "channel\_agent\_build" * `id` string - object ID **Response (JSON)** * `ok` bool - status * `message` string - OTP or error text [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/web-api#chat) Chat ------------------------------------------------------------------------------------------------------------------------- chevron-right**POST {endpoint}/**chat/send [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/web-api#post-endpoint-chat-send) Send message to chat **Request (JSON)** Header `Authorization: Bearer ` * `message` string **Response** [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/web-api#agent) Agent --------------------------------------------------------------------------------------------------------------------------- chevron-right**GET {endpoint}/agent**/list [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/web-api#get-endpoint-agent-list) Get a list of agents with full information **Request** Header `Authorization: Bearer ` **Response (JSON)** List of agents with parameters * `a_crc` string - agent type hash * `a_id` string - agent id * `a_name` string - agent type * `a_session_key` string - session encrypt key (base64) * `a_listener` string - listener name * `a_async` bool - is async mode * `a_external_ip` string - external IP * `a_internal_ip` string - internal IP * `a_gmt_offset` int - GMT offset * `a_sleep` int - session sleep time * `a_jitter` int - session sleep jitter * `a_pid` int - PID * `a_tid` int - TID * `a_arch` string - process arch * `a_elevated` bool - is elevated session * `a_process` string - process name * `a_os` int - OS type (0 - unknown, 1- windows, 2 - Linux, 3 - MacOS ) * `a_os_desc` string - OS description * `a_domain` string - domain name * `a_computer` string - computer name * `a_username` string - username * `a_impersonated` string - impersonated username * `a_oemcp` int - OemCP * `acp` int - ACP * `a_create_time` int - creation time in UNIX timestamp format * `a_last_tick` int - last tick in UNIX timestamp format * `a_killdate` int - packed kill date * `a_workingtime` int - packed working time * `a_tags` string - tag * `a_mark` string - mark * `a_color` string - backgroud and line color * `a_target` string - target ID chevron-right**POST {endpoint}/**agent/generate [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/web-api#post-endpoint-agent-generate) Build and download agent **Request (JSON)** Header `Authorization: Bearer ` * `listener_name` string - listener name * `listener_type` string - listener registration name * `agent` string - agent registration name * `config` string - agent configuration **Response** Payload content chevron-right**POST {endpoint}/**agent/remove[hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/web-api#post-endpoint-agent-remove) Remove agent data **Request (JSON)** Header `Authorization: Bearer ` * `agent_id_array` \[strings\] - list of agent IDs **Response (JSON)** * `ok` bool - status * `message` string - empty string or error text chevron-right**POST {endpoint}/**agent/update/data[hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/web-api#post-endpoint-agent-update-data) Update agent data **Request (JSON)** Header `Authorization: Bearer ` Possible parameters in JSON * `agent_id` string - agent id * `external_ip` string - external IP * `internal_ip` string - internal IP * `gmt_offset` int - GMT offset * `oemcp` int - OemCP * `acp` int - ACP * `pid` string - PID * `tid` string - TID * `arch` string - process arch * `elevated` bool - is elevated session * `process` string - process name * `os` int - OS type (0 - unknown, 1- windows, 2 - Linux, 3 - MacOS ) * `os_desc` string - OS description * `domain` string - domain name * `computer` string - computer name * `username` string - username * `impersonated` string - impersonated username * `tags` string - tag * `mark` string - mark * `color` string - backgroud and line color **Response (JSON)** * `ok` bool - status * `message` string - empty string or error text chevron-right**POST {endpoint}/**agent/set/tag[hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/web-api#post-endpoint-agent-set-tag) Set a tag for an agent **Request (JSON)** Header `Authorization: Bearer ` * `agent_id_array` \[strings\] - list of agent IDs * `tag` string - agent tag **Response (JSON)** * `ok` bool - status * `message` string - empty string or error text chevron-right**POST {endpoint}/**agent/set/mark[hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/web-api#post-endpoint-agent-set-mark) Set a mark for an agent **Request (JSON)** Header `Authorization: Bearer ` * `agent_id_array` \[strings\] - list of agent IDs * `bc` string - background color * `fc` string - foreground color * `reset` bool - if true, set default color **Response (JSON)** * `ok` bool - status * `message` string - empty string or error text chevron-right**POST {endpoint}/**agent/set/tag[hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/web-api#post-endpoint-agent-set-tag-1) Set a tag for an agent **Request (JSON)** Header `Authorization: Bearer ` * `agent_id_array` \[strings\] - list of agent IDs * `tag` string - agent tag **Response (JSON)** * `ok` bool - status * `message` string - empty string or error text chevron-right**POST {endpoint}/**agent/command/execute[hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/web-api#post-endpoint-agent-command-execute) Create a task for the agent **Request (JSON)** Header `Authorization: Bearer ` * `id` string - agent ID * `ui` bool - UI mode (the task is not saved and does not have a callback) * `cmdline` string - full command * `data` string - parsed command data * `ax_hook_id` string - AxHook ID * `wait_answer` bool - Wait for a response from the HTTP server, otherwise the response will come to the web socket channel **Response (JSON)** * `ok` bool - status * `message` string - empty string or error text chevron-right**POST {endpoint}/**agent/command/raw[hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/web-api#post-endpoint-agent-command-raw) Executing a raw command on an agent via the server-side AxScript engine. The command is parsed and executed server-side without the use of client-side hooks. **Request (JSON)** Header `Authorization: Bearer ` * `id` string - agent ID * `cmdline` string - full command **Response (JSON)** * `ok` bool - status * `message` string - empty string or error text chevron-right**POST {endpoint}/**agent/console/remove[hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/web-api#post-endpoint-agent-console-remove) Remove agent console data **Request (JSON)** Header `Authorization: Bearer ` * `agent_id_array` \[strings\] - list of agent IDs **Response (JSON)** * `ok` bool - status * `message` string - empty string or error text chevron-right**GET {endpoint}/**agent/task/list[hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/web-api#get-endpoint-agent-task-list) Get a list of tasks with full information **Request (JSON)** Header `Authorization: Bearer ` URI ?`agent_id=&limit=<100>&offset=<0>` * `agent_id` string - Agent ID * `limit` int - Max records (default: 200, max: 1000) * `offset` int - Records offset (default: 0) **Response (JSON)** * `t_type` int - Task type (1=task, 2=browser, 3=job, 4=tunnel, 5=proxy\_data) * `t_task_id` string - Unique task ID * `t_agent_id` string - Agent ID * `t_client` string - Operator name who created task * `t_user` string - Target machine username * `t_computer` string - Target machine computer name * `t_start_date` int - Start timestamp (Unix) * `t_finish_date` int - Finish timestamp (Unix) * `t_command_line` string - Command line * `t_message_type` int - Message type (5=info, 6=error, 7=success) * `t_message` string - Message header * `t_clear_text` string - Message body/output * `t_completed` bool - Task completed flag * `t_sync` bool - Sync with GUI flag chevron-right**POST {endpoint}/**agent/task/save[hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/web-api#post-endpoint-agent-task-save) Save data to Task Manager **Request (JSON)** Header `Authorization: Bearer ` * `agent_id` strings - agent ID * `command_line` string - full command line * `message_type` int - result message type (6 - error, 7 - success) * `message` string - task message * `clear_text` string - task output **Response (JSON)** * `ok` bool - status * `message` string - empty string or error text chevron-right**POST {endpoint}/**agent/task/cancel[hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/web-api#post-endpoint-agent-task-cancel) Cancel hosted tasks **Request (JSON)** Header `Authorization: Bearer ` * `agent_id` strings - agent ID * `tasks_array` \[strings\] - list of task IDs **Response (JSON)** * `ok` bool - status * `message` string - empty string or error text chevron-right**POST {endpoint}/**agent/task/delete[hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/web-api#post-endpoint-agent-task-delete) Remove task from Task Manager **Request (JSON)** Header `Authorization: Bearer ` * `agent_id` strings - agent ID * `tasks_array` \[strings\] - list of task IDs **Response (JSON)** * `ok` bool - status * `message` string - empty string or error text [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/web-api#listener) Listener --------------------------------------------------------------------------------------------------------------------------------- chevron-right**GET {endpoint}/listener**/list [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/web-api#get-endpoint-listener-list) Get a list of listeners with full information **Request** Header `Authorization: Bearer ` **Response (JSON)** List of listeners with parameters * `l_name` string - listener name * `l_reg_name` string - listener registration name * `l_protocol` string - protocol * `l_type` string - listener type * `l_bind_host` string - bind host * `l_bind_port` string - bind port * `l_agent_addr` string - callback hosts & ports * `l_status` string - running status * `l_data` string - listener config data * `l_watermark` string - process name chevron-right**POST {endpoint}/**listener/create [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/web-api#post-endpoint-listener-create) Create and start listener **Request (JSON)** Header `Authorization: Bearer ` * `name` string - listener name * `type` string - listener registration name * `config` string - listener config data **Response (JSON)** * `ok` bool - status * `message` string - status string or error text chevron-right**POST {endpoint}/**listener/edit [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/web-api#post-endpoint-listener-edit) Edit listener config **Request (JSON)** Header `Authorization: Bearer ` * `name` string - listener name * `type` string - listener registration name * `config` string - listener config data **Response (JSON)** * `ok` bool - status * `message` string - status string or error text chevron-right**POST {endpoint}/**listener/stop [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/web-api#post-endpoint-listener-stop) Stop and delete listener **Request (JSON)** Header `Authorization: Bearer ` * `name` string - listener name * `type` string - listener registration name **Response (JSON)** * `ok` bool - status * `message` string - status string or error text [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/web-api#download) Download --------------------------------------------------------------------------------------------------------------------------------- chevron-right**GET {endpoint}/download**/list [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/web-api#get-endpoint-download-list) Get a list of downloads with full information **Request** Header `Authorization: Bearer ` **Response (JSON)** List of downloads with parameters * `d_file_id` string - file ID * `d_agent_id` string - agent ID * `d_agent_name` string - agent registration name * `d_user` string - session username * `d_computer` string - session computer * `d_remote_path` string - remote file path * `d_total_size` int - total file size * `d_recv_size` int - receive file size * `d_date` int - date in UNIX timestamp format * `d_state` int - download status (1 - running, 2 - stopped, 3 - finished) chevron-right**POST {endpoint}/**download/sync[hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/web-api#post-endpoint-download-sync) Download file content **Request (JSON)** Header `Authorization: Bearer ` * `file_id` string - file ID **Response (JSON) success** * `ok` bool - status * `filename` string - file basename * `content` string - file content in base64 **Response (JSON) error** * `ok` bool - status * `message` string - error text chevron-right**POST {endpoint}/**download/delete[hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/web-api#post-endpoint-download-delete) Delete file **Request (JSON)** Header `Authorization: Bearer ` * `file_id` string - file ID **Response (JSON) error** * `ok` bool - status * `message` string - status string or error text [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/web-api#screen) Screen ----------------------------------------------------------------------------------------------------------------------------- chevron-right**GET {endpoint}/screen**/list [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/web-api#get-endpoint-screen-list) Get a list of screenshots with full information **Request** Header `Authorization: Bearer ` **Response (JSON)** List of screenshots with parameters * `s_screen_id` string - screen ID * `s_user` string - session username * `s_computer` string - session computer * `s_note` string - screenshot note * `d_date` int - date in UNIX timestamp format * `d_content` string - screenshot content in base64 chevron-right**GET {endpoint}/screen/image** [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/web-api#get-endpoint-screen-image) Download a screenshot by Screen ID **Request** Header `Authorization: Bearer ` URI `?screen_id=` * `screen_id` string - Screen ID **Response (image/png)** chevron-right**POST {endpoint}/**screen/setnote[hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/web-api#post-endpoint-screen-setnote) Set a note for a screenshot **Request (JSON)** Header `Authorization: Bearer ` * `screen_id_array` \[strings\] - list of screen IDs * `note` string - screenshot note **Response (JSON)** * `ok` bool - status * `message` string - empty string or error text chevron-right**POST {endpoint}/**screen/remove[hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/web-api#post-endpoint-screen-remove) Remove a screenshot **Request (JSON)** Header `Authorization: Bearer ` * `screen_id_array` \[strings\] - list of screen IDs **Response (JSON)** * `ok` bool - status * `message` string - empty string or error text [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/web-api#creds) Creds --------------------------------------------------------------------------------------------------------------------------- chevron-right**GET {endpoint}/creds**/list [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/web-api#get-endpoint-creds-list) Get a list of credentials with full information **Request** Header `Authorization: Bearer ` **Response (JSON)** List of credentials with parameters * `c_creds_id` string - creds ID * `c_username` string - login * `c_password` string - password * `c_realm` string - domain * `c_type` string - creds type * `c_tag` string - creds tag * `d_date` int - date in UNIX timestamp format * `d_storage` string - creds storage * `c_agent_id` string - agent ID * `c_host` string - session computer chevron-right**POST {endpoint}/**creds/add [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/web-api#post-endpoint-creds-add) Store credentials to Creds Manager **Request (JSON)** Header `Authorization: Bearer ` * `creds` - List of credentials with parameters * `username` string - login * `password` string - password * `realm` string - domain * `type` string - creds type * `tag` string - creds tag * `storage` string - creds storage * `host` string - session computer **Response (JSON)** * `ok` bool - status * `message` string - status string or error text chevron-right**POST {endpoint}/**creds/edit [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/web-api#post-endpoint-creds-edit) Edit stored credentials **Request (JSON)** Header `Authorization: Bearer ` * `cred_id` string - creds ID * `username` string - login * `password` string - password * `realm` string - domain * `type` string - creds type * `tag` string - creds tag * `storage` string - creds storage * `host` string - session computer **Response (JSON)** * `ok` bool - status * `message` string - status string or error text chevron-right**POST {endpoint}/**creds/set/tag [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/web-api#post-endpoint-creds-set-tag) Set creds tag **Request (JSON)** Header `Authorization: Bearer ` * `id_array` \[string\] - list of creds IDs * `tag` string - tag for the creds **Response (JSON)** * `ok` bool - status * `message` string - status string or error text chevron-right**POST {endpoint}/**creds/remove [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/web-api#post-endpoint-creds-remove) Remove stored credentials **Request (JSON)** Header `Authorization: Bearer ` * `cred_id_array` \[string\] - list of creds IDs **Response (JSON)** * `ok` bool - status * `message` string - status string or error text [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/web-api#targets) Targets ------------------------------------------------------------------------------------------------------------------------------- chevron-right**GET {endpoint}/**targets/list [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/web-api#get-endpoint-targets-list) Get a list of targets with full information **Request** Header `Authorization: Bearer ` **Response (JSON)** List of targets with parameters * `t_target_id` string - target ID * `t_computer` string - hostname * `t_domain` string - domain name * `t_address` string - host IP address * `t_os` int - OS type (0 - unknown, 1- windows, 2 - Linux, 3 - MacOS ) * `t_os_desc` string - OS description * `t_tag` string - target tag * `t_info` string - target info * `d_date` int - date in UNIX timestamp format * `t_alive` bool - is alive target * `t_agents` \[string\] - list of agents ID chevron-right**POST {endpoint}/**targets/add [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/web-api#post-endpoint-targets-add) Store credentials to Creds Manager **Request (JSON)** Header `Authorization: Bearer ` * `targets` - List of targets with parameters * `computer` string - hostname * `domain` string - domain name * `address` string - host IP address * `os` int - OS type (0 - unknown, 1- windows, 2 - Linux, 3 - MacOS ) * `os_desc` string - OS description * `tag` string - target tag * `info` string - target info * `alive` bool - is alive target **Response (JSON)** * `ok` bool - status * `message` string - status string or error text chevron-right**POST {endpoint}/**targets/edit [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/web-api#post-endpoint-targets-edit) Edit stored target **Request (JSON)** Header `Authorization: Bearer ` * `t_target_id` string - target ID * `t_computer` string - hostname * `t_domain` string - domain name * `t_address` string - host IP address * `t_os` int - OS type (0 - unknown, 1- windows, 2 - Linux, 3 - MacOS ) * `t_os_desc` string - OS description * `t_tag` string - target tag * `t_info` string - target info * `t_alive` bool - is alive target **Response (JSON)** * `ok` bool - status * `message` string - status string or error text chevron-right**POST {endpoint}/**targets/set/tag [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/web-api#post-endpoint-targets-set-tag) Set target tag **Request (JSON)** Header `Authorization: Bearer ` * `id_array` \[string\] - list of target IDs * `tag` string - tag for the target **Response (JSON)** * `ok` bool - status * `message` string - status string or error text chevron-right**POST {endpoint}/**targets/remove [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/web-api#post-endpoint-targets-remove) Remove stored targets **Request (JSON)** Header `Authorization: Bearer ` * `target_id_array` \[string\] - list of target IDs **Response (JSON)** * `ok` bool - status * `message` string - status string or error text [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/web-api#tunnel) Tunnel ----------------------------------------------------------------------------------------------------------------------------- chevron-right**GET {endpoint}/**tunnel/list [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/web-api#get-endpoint-tunnel-list) Get a list of tunnels with full information **Request** Header `Authorization: Bearer ` **Response (JSON)** List of tunnels with parameters * `p_tunnel_id` string - tunnel ID * `p_agent_id` string - agent ID * `p_computer` string - session computer * `p_username` string - session user * `p_process` string - session process * `p_type` string - tunnel type * `p_info` string - tunnel info * `p_interface` string - listen address * `p_port` string - listen port * `p_client` string - listen client * `p_fhost` string - forward address * `p_fport` string - forward port * `p_auth_user` string - proxy login * `p_auth_pass` string - proxy password chevron-right**POST {endpoint}/**start/socks5 [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/web-api#post-endpoint-start-socks5) Start socks5 proxy **Request (JSON)** Header `Authorization: Bearer ` * `agent_id` string - agent ID * `listen` bool - is listen port on teamserver * `desc` string - tunnel info * `l_host` string - listen address * `l_port` int - listen port * `use_auth` bool - use authentication * `username` string - proxy login * `password` string - proxy password **Response (JSON)** * `ok` bool - status * `message` string - tunnel ID or error text chevron-right**POST {endpoint}/**start/socks4 [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/web-api#post-endpoint-start-socks4) Start socks4 proxy **Request (JSON)** Header `Authorization: Bearer ` * `agent_id` string - agent ID * `listen` bool - is listen port on teamserver * `desc` string - tunnel info * `l_host` string - listen address * `l_port` int - listen port **Response (JSON)** * `ok` bool - status * `message` string - tunnel ID or error text chevron-right**POST {endpoint}/**start/lportfwd [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/web-api#post-endpoint-start-lportfwd) Start local port forwarding **Request (JSON)** Header `Authorization: Bearer ` * `agent_id` string - agent ID * `listen` bool - is listen port on teamserver * `desc` string - tunnel info * `l_host` string - listen address * `l_port` int - listen port * `t_host` string - target address * `t_port` int - target port **Response (JSON)** * `ok` bool - status * `message` string - tunnel ID or error text chevron-right**POST {endpoint}/**start/rportfwd [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/web-api#post-endpoint-start-rportfwd) Start reverse port forwarding **Request (JSON)** Header `Authorization: Bearer ` * `agent_id` string - agent ID * `listen` bool - is listen port on teamserver * `desc` string - tunnel info * `port` int - listen port * `t_host` string - target address * `t_port` int - target port **Response (JSON)** * `ok` bool - status * `message` string - tunnel ID or error text chevron-right**POST {endpoint}/**set/info [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/web-api#post-endpoint-set-info) Set tunnel info **Request (JSON)** Header `Authorization: Bearer ` * `p_tunnel_id` string - tunnel ID * `p_info` string - tunnel info **Response (JSON)** * `ok` bool - status * `message` string - tunnel ID or error text chevron-right**POST {endpoint}/**stop [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/web-api#post-endpoint-stop) Stop tunnel **Request (JSON)** Header `Authorization: Bearer ` * `p_tunnel_id` string - tunnel ID **Response (JSON)** * `ok` bool - status * `message` string - tunnel ID or error text [PreviousTeamserver Interfacechevron-left](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface) [NextTS APIchevron-right](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api) Last updated 1 month ago * [Auth](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/web-api#auth) * [Chat](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/web-api#chat) * [Agent](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/web-api#agent) * [Listener](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/web-api#listener) * [Download](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/web-api#download) * [Screen](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/web-api#screen) * [Creds](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/web-api#creds) * [Targets](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/web-api#targets) * [Tunnel](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/web-api#tunnel) --- # TS API | Adaptix Framework [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#agent-functions) Agent Functions ---------------------------------------------------------------------------------------------------------------------------------------------- ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#tsagentisexists) TsAgentIsExists Checks if an agent exists by ID. Copy TsAgentIsExists(agentId string) bool Parameter Type Description `agentId` `string` Unique agent identifier **Returns:** `bool` — `true` if agent exists * * * ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#tsagentcreate) TsAgentCreate Creates a new agent on first connection. Copy TsAgentCreate(agentCrc string, agentId string, beat []byte, listenerName string, ExternalIP string, Async bool) (adaptix.AgentData, error) Parameter Type Description `agentCrc` `string` CRC/watermark of agent type `agentId` `string` Unique agent ID `beat` `[]byte` Initial data from agent (heartbeat) `listenerName` `string` Listener name `ExternalIP` `string` Agent's external IP `Async` `bool` Async mode **Returns:** `adaptix.AgentData`, `error` **Events:** * `agent.new` (Pre/Post hooks) * * * ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#tsagentprocessdata) TsAgentProcessData Processes data received from the agent. Parameter Type Description `agentId` `string` Agent ID `bodyData` `[]byte` Data from agent **Note:** If the agent has `Mark="Inactive"`, it is automatically activated and the `agent.activate` event is called. * * * ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#tsagentupdatedata) TsAgentUpdateData Updates agent data (sleep, jitter, killdate, workingtime). * * * ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#tsagentupdatedatapartial) TsAgentUpdateDataPartial Partial update of agent data. **Supported fields:** * `InternalIP`, `ExternalIP`, `GmtOffset`, `ACP`, `OemCP` * `Pid`, `Tid`, `Arch`, `Elevated`, `Process` * `Os`, `OsDesc`, `Domain`, `Computer`, `Username` * `Impersonated`, `Tags`, `Mark`, `Color` * * * ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#tsagentterminate) TsAgentTerminate Terminates the agent. **Actions on call:** 1. Cancels all active downloads 2. Stops all tunnels 3. Closes terminals 4. Clears task queues 5. Removes pivot connections **Events:** * `agent.terminate` (Pre/Post hooks) * * * ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#tsagentsettick) TsAgentSetTick Updates the agent's last response time and current listener. * * * ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#tsagentconsoleoutput) TsAgentConsoleOutput Outputs a message to the agent console. Parameter Type Description `agentId` `string` Agent ID `messageType` `int` Message type (5=INFO, 6=ERROR, 7=SUCCESS) `message` `string` Message title `clearText` `string` Message text `store` `bool` Store in DB * * * ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#tsagentbuildexecute) TsAgentBuildExecute Executes an external command during agent build with output redirected to the WebSocket build channel. Parameter Type Description `builderId` `string` Builder ID (empty string for synchronous execution) `workingDir` `string` Working directory for the command `program` `string` Executable `args` `...string` Command-line arguments **Note:** If `builderId` is empty, the command executes synchronously without WebSocket output. Otherwise, stdout/stderr are redirected to the build channel. * * * ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#tsagentbuildlog) TsAgentBuildLog Sends a log message to the agent's WebSocket build channel. Parameter Type Description `builderId` `string` Builder ID `status` `int` Status: BUILD\_LOG\_NONE=0, INFO=1, ERROR=2, SUCCESS=3 `message` `string` Message text * * * ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#tsagentgethosted-functions) TsAgentGetHosted\* Functions Gets tasks for sending to the agent. All functions pack tasks considering size limitations. #### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#tsagentgethostedall) **TsAgentGetHostedAll** Gets all available tasks: regular tasks, tunnel tasks, tunnel data, and pivot tasks. Parameter Type Description `agentId` `string` Agent ID `maxDataSize` `int` Maximum data size (bytes) **Returns:** Packed task data for sending to the agent. #### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#tsagentgethostedtasks) **TsAgentGetHostedTasks** Gets only regular tasks and tunnel tasks (without pivot). #### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#tsagentgethostedtaskscount) **TsAgentGetHostedTasksCount** Gets the specified number of tasks. Parameter Type Description `agentId` `string` Agent ID `count` `int` Maximum number of tasks `maxDataSize` `int` Maximum data size (bytes) * * * [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#task-functions) Task Functions -------------------------------------------------------------------------------------------------------------------------------------------- ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#tstaskrunningexists) TsTaskRunningExists Checks if a task is running. * * * ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#tstaskcreate) TsTaskCreate Creates a new task. **Events:** * `task.create` (Pre/Post hooks) * * * ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#tstaskupdate) TsTaskUpdate Updates the task with execution results. **Events:** * `task.complete` (Post hook) — when task is completed * * * ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#tstaskcancel) TsTaskCancel Cancels a task that is in the queue (not yet sent to the agent). Parameter Type Description `agentId` `string` Agent ID `taskId` `string` Task ID **Note:** Cancels only tasks in the queue. Already running tasks cannot be cancelled. * * * [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#client-gui-functions) Client GUI Functions -------------------------------------------------------------------------------------------------------------------------------------------------------- Functions for synchronizing data with GUI clients (File Browser, Process Manager). These functions send results only to the client that initiated the request. ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#tsclientguidiskswindows) TsClientGuiDisksWindows Sends the list of Windows drives to the client. Parameter Type Description `taskData` `adaptix.TaskData` Task data `drives` `[]adaptix.ListingDrivesDataWin` Drive list * * * ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#tsclientguifileswindows) TsClientGuiFilesWindows Sends the list of Windows files to the client. Parameter Type Description `taskData` `adaptix.TaskData` Task data `path` `string` Directory path `files` `[]adaptix.ListingFileDataWin` File list * * * ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#tsclientguifilesunix) TsClientGuiFilesUnix Sends the list of Unix/Linux files to the client. Parameter Type Description `taskData` `adaptix.TaskData` Task data `path` `string` Directory path `files` `[]adaptix.ListingFileDataUnix` File list * * * ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#tsclientguifilesstatus) TsClientGuiFilesStatus Sends the file operation status (delete, rename, etc.) to the client. Parameter Type Description `taskData` `adaptix.TaskData` Task data with MessageType and Message for status * * * ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#tsclientguiprocesswindows) TsClientGuiProcessWindows Sends the list of Windows processes to the client. Parameter Type Description `taskData` `adaptix.TaskData` Task data `process` `[]adaptix.ListingProcessDataWin` Process list * * * ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#tsclientguiprocessunix) TsClientGuiProcessUnix Sends the list of Unix/Linux processes to the client. Parameter Type Description `taskData` `adaptix.TaskData` Task data `process` `[]adaptix.ListingProcessDataUnix` Process list * * * [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#credentials-functions) Credentials Functions ---------------------------------------------------------------------------------------------------------------------------------------------------------- ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#tscredentilsadd) TsCredentilsAdd Adds credentials. **Credential structure:** **Events:** * `credentials.add` (Pre/Post hooks) * * * ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#tscredentilsedit) TsCredentilsEdit **Events:** * `credentials.edit` (Pre/Post hooks) * * * ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#tscredentialssettag) TsCredentialsSetTag * * * ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#tscredentilsdelete) TsCredentilsDelete **Events:** * `credentials.remove` (Pre/Post hooks) * * * [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#download-upload-functions) Download/Upload Functions ------------------------------------------------------------------------------------------------------------------------------------------------------------------ ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#tsdownloadadd) TsDownloadAdd Initializes a file download. **Events:** * `download.start` (Pre/Post hooks) * * * ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#tsdownloadupdate) TsDownloadUpdate Updates download state. State Value Description 1 RUNNING Download in progress 2 STOPPED Paused 3 FINISHED Completed 4 CANCELED Cancelled * * * ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#tsdownloadclose) TsDownloadClose Finishes a download. **Events:** * `download.finish` (Pre/Post hooks) * * * ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#tsdownloadsave) TsDownloadSave Saves a file directly (from memory). * * * ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#tsdownloadgetfilepath) TsDownloadGetFilepath Returns the local path to the downloaded file. Parameter Type Description `fileId` `string` File ID **Returns:** Full path to the file on the server. **Note:** Works only for completed downloads (state=FINISHED). * * * ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#tsdownloaddelete) TsDownloadDelete Deletes downloaded files. Parameter Type Description `fileId` `[]string` List of file IDs **Actions:** 1. Deletes files from disk 2. Removes records from DB 3. Synchronizes with clients **Events:** * `download.remove` (Pre/Post hooks) * * * [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#listener-functions) Listener Functions ---------------------------------------------------------------------------------------------------------------------------------------------------- ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#tslistenergetprofile) TsListenerGetProfile Gets a profile for agent generation. **Returns:** watermark, profile bytes, error * * * ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#tslistenerinteralhandler) TsListenerInteralHandler Handles internal requests (pivot agents). * * * [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#pivot-functions) Pivot Functions ---------------------------------------------------------------------------------------------------------------------------------------------- ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#tspivotcreate) TsPivotCreate Creates a pivot connection. **Events:** * `pivot.create` (Pre/Post hooks) * * * ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#tspivotdelete) TsPivotDelete **Events:** * `pivot.remove` (Pre/Post hooks) * * * ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#tsgetpivotinfobyname-tsgetpivotinfobyid) TsGetPivotInfoByName / TsGetPivotInfoById * * * ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#tsgetpivotbyname-tsgetpivotbyid) TsGetPivotByName / TsGetPivotById * * * [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#screenshot-functions) Screenshot Functions -------------------------------------------------------------------------------------------------------------------------------------------------------- ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#tsscreenshotadd) TsScreenshotAdd Adds a screenshot. **Events:** * `screenshot.add` (Pre/Post hooks) * * * ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#tsscreenshotnote) TsScreenshotNote Updates the note for a screenshot. Parameter Type Description `screenId` `string` Screenshot ID `note` `string` Note text * * * ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#tsscreenshotdelete) TsScreenshotDelete Deletes a screenshot. Parameter Type Description `screenId` `string` Screenshot ID **Actions:** 1. Deletes the file from disk 2. Removes the record from the DB 3. Synchronizes with clients **Events:** * `screenshot.remove` (Pre/Post hooks) * * * [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#target-functions) Target Functions ------------------------------------------------------------------------------------------------------------------------------------------------ ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#tstargetsadd) TsTargetsAdd Adds new targets (hosts). Duplicates are automatically ignored. **Target structure:** **Events:** * `target.add` (Pre/Post hooks) * * * ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#tstargetsedit) TsTargetsEdit Edits an existing target. Parameter Type Description `targetId` `string` Target ID `computer` `string` Computer name `domain` `string` Domain `address` `string` IP address `os` `int` OS type (1/2/3) `osDesk` `string` OS description `tag` `string` Tag `info` `string` Additional info `alive` `bool` Alive **Events:** * `target.edit` (Pre/Post hooks) * * * ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#tstargetsettag) TsTargetSetTag Sets a tag for a group of targets. Parameter Type Description `targetsId` `[]string` List of target IDs `tag` `string` New tag * * * ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#tstargetdelete) TsTargetDelete Deletes targets. Parameter Type Description `targetsId` `[]string` List of target IDs **Events:** * `target.remove` (Pre/Post hooks) * * * [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#tunnel-functions) Tunnel Functions ------------------------------------------------------------------------------------------------------------------------------------------------ ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#tstunnelstart) TsTunnelStart Starts the created tunnel. Parameter Type Description `TunnelId` `string` Tunnel ID **Returns:** TaskId for tracking **Events:** * `tunnel.start` (Pre/Post hooks) * * * ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#tstunnelcreate-functions) TsTunnelCreate\* Functions Functions for creating tunnels of different types. Return TunnelId. #### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#tstunnelcreatesocks4) TsTunnelCreateSocks4 Creates a SOCKS4 proxy. Parameter Type Description `AgentId` `string` Agent ID `Info` `string` Tunnel description `Lhost` `string` Bind address `Lport` `int` Bind port #### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#tstunnelcreatesocks5) TsTunnelCreateSocks5 Creates a SOCKS5 proxy with optional authentication. Parameter Type Description `AgentId` `string` Agent ID `Info` `string` Tunnel description `Lhost` `string` Bind address `Lport` `int` Bind port `UseAuth` `bool` Use authentication `Username` `string` Username (if UseAuth) `Password` `string` Password (if UseAuth) #### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#tstunnelcreatelportfwd) TsTunnelCreateLportfwd Creates a local port forward. Parameter Type Description `AgentId` `string` Agent ID `Info` `string` Tunnel description `Lhost` `string` Local address `Lport` `int` Local port `Thost` `string` Target address (on agent) `Tport` `int` Target port #### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#tstunnelcreaterportfwd) TsTunnelCreateRportfwd Creates a reverse port forward. Parameter Type Description `AgentId` `string` Agent ID `Info` `string` Tunnel description `Lport` `int` Port on agent `Thost` `string` Target address (on server) `Tport` `int` Target port * * * ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#tstunnelupdaterportfwd) TsTunnelUpdateRportfwd Updates reverse port forward status after the agent response. Parameter Type Description `tunnelId` `int` Tunnel ID (numeric) `result` `bool` Whether the tunnel was created on the agent **Returns:** TaskId, message, error * * * ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#tstunnelstop-functions) TsTunnelStop\* Functions Functions for stopping tunnels. #### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#tstunnelstop) TsTunnelStop Stops a tunnel by ID. **Events:** * `tunnel.stop` (Pre/Post hooks) #### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#tstunnelstopsocks) TsTunnelStopSocks Stops a SOCKS proxy by agent and port. #### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#tstunnelstoplportfwd) TsTunnelStopLportfwd Stops a local port forward. #### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#tstunnelstoprportfwd) TsTunnelStopRportfwd Stops a reverse port forward. Sends a close command to the agent. * * * ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#tstunnelchannelexists) TsTunnelChannelExists Checks whether the tunnel channel exists. * * * ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#tstunnelgetpipe) TsTunnelGetPipe Gets pipes for reading/writing tunnel data. Parameter Type Description `AgentId` `string` Agent ID `channelId` `int` Channel ID **Returns:** PipeReader for reading data from the server, PipeWriter for writing data to the tunnel. * * * ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#tstunnelconnection-functions) TsTunnelConnection\* Functions Functions for managing tunnel connections. #### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#tstunnelconnectiondata) TsTunnelConnectionData Sends data to the tunnel channel. #### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#tstunnelconnectionresume) TsTunnelConnectionResume Resumes the connection after a successful connection on the agent side. Parameter Type Description `AgentId` `string` Agent ID `channelId` `int` Channel ID `ioDirect` `bool` true = direct transfer without buffering #### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#tstunnelconnectionclose) TsTunnelConnectionClose Closes the channel connection. Parameter Type Description `channelId` `string` ChannelId ID `writeOnly` `bool` To ensure sufficient time for reading and sending data over a socket. Used in async payloads such as HTTP. #### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#tstunnelconnectionhalt) TsTunnelConnectionHalt Closes the connection with a SOCKS error. Parameter Type Description `channelId` `int` Channel ID `errorCode` `byte` SOCKS5 error code (1-8) #### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#tstunnelconnectionaccept) TsTunnelConnectionAccept Accepts an incoming connection for reverse port forward. * * * ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#tstunnelpause) TsTunnelPause Pause tunnels connection to client * * * ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#tstunnelresume) TsTunnelResume Recume tunnels connection to client * * * [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#terminal-functions) Terminal Functions ---------------------------------------------------------------------------------------------------------------------------------------------------- Functions for managing interactive terminal sessions via the agent. ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#tsagentterminalclosechannel) TsAgentTerminalCloseChannel Closes the terminal channel and notifies the client. Parameter Type Description `terminalId` `string` Terminal session ID `status` `string` Close status/reason * * * ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#tsterminalconnexists) TsTerminalConnExists Checks whether a terminal connection exists. Parameter Type Description `terminalId` `string` Terminal session ID **Returns:** `true` if the session exists * * * ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#tsterminalconnresume) TsTerminalConnResume Resumes the terminal connection after a successful start on the agent. Parameter Type Description `agentId` `string` Agent ID `terminalId` `string` Terminal session ID `ioDirect` `bool` true = direct transfer without buffering * * * ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#tsterminalconndata) TsTerminalConnData Sends data to the terminal session (output from the agent). Parameter Type Description `terminalId` `string` Terminal session ID `data` `[]byte` Data to send * * * ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#tsterminalconnclose) TsTerminalConnClose Closes the terminal session. Parameter Type Description `terminalId` `string` Terminal session ID `reason` `string` Close reason * * * ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#tsterminalgetpipe) TsTerminalGetPipe Gets pipes for terminal input/output. Parameter Type Description `AgentId` `string` Agent ID `terminalId` `string` Terminal session ID **Returns:** PipeReader for reading input from the client, PipeWriter for writing agent output. * * * [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#service-functions) Service Functions -------------------------------------------------------------------------------------------------------------------------------------------------- ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#tsservicesenddataall) TsServiceSendDataAll Sends data to all clients on behalf of the service. * * * ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#tsservicesenddataclient) TsServiceSendDataClient Sends data to a specific client on behalf of the service. * * * [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#axscript-server-functions) AxScript Server Functions ------------------------------------------------------------------------------------------------------------------------------------------------------------------ Server-side AxScript engine functions. Allow loading and executing scripts on the server side, defining commands and hooks without client participation. ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#tsaxscriptloaduser) TsAxScriptLoadUser Loads a user AxScript on the server. Parameter Type Description `name` `string` Script name `script` `string` Script content * * * ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#tsaxscriptunloaduser) TsAxScriptUnloadUser Unloads a user AxScript from the server. * * * ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#tsaxscriptlist) TsAxScriptList Returns a JSON list of loaded scripts. * * * ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#tsaxscriptcommands) TsAxScriptCommands Returns a JSON list of registered server-side commands. * * * ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#tsaxscriptresolvehooks) TsAxScriptResolveHooks Resolves server-side hooks for an agent command. Used when processing commands where the client did not provide a hook/handler. Parameter Type Description `agentName` `string` Agent type name `agentId` `string` Agent ID `listenerRegName` `string` Registered listener name `os` `int` Agent OS type `cmdline` `string` Command line `args` `map[string]interface{}` Command arguments **Returns:** `hookId`, `handlerId`, `preHookHandled` (true if Pre hook fully handled the command), `error` * * * ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#tsaxscriptparseandexecute) TsAxScriptParseAndExecute Parses and executes a raw command via the server-side AxScript engine. Parameter Type Description `agentId` `string` Agent ID `username` `string` Operator name `cmdline` `string` Command line * * * ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#axgetagentcontext) AxGetAgentContext Returns agent context for the server-side AxScript. * * * [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#extender-data-functions) Extender Data Functions -------------------------------------------------------------------------------------------------------------------------------------------------------------- Functions for storing extender data in the database. ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#tsextenderdatasave) TsExtenderDataSave Saves extender data to the database. * * * ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#tsextenderdataload) TsExtenderDataLoad Loads extender data from the database. * * * ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#tsextenderdatadelete) TsExtenderDataDelete Deletes data by key from the database. * * * ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#tsextenderdatakeys) TsExtenderDataKeys Returns a list of saved extender keys. * * * ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#tsextenderdatadeleteall) TsExtenderDataDeleteAll Deletes all extender data from the database. * * * [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#endpoint-functions) Endpoint Functions ---------------------------------------------------------------------------------------------------------------------------------------------------- Functions for registering HTTP endpoints. ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#tsendpointregister) TsEndpointRegister Registers a protected endpoint (uses the teamserver's shared JWT authentication). Parameter Type Description `method` `string` HTTP method (GET, POST...) `path` `string` Endpoint path `handler` `func(username string, body []byte) (int, []byte)` Handler **Handler parameters:** * `username` — authenticated username * `body` — request body **Handler returns:** * `int` — HTTP status code * `[]byte` — response body * * * ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#tsendpointunregister) TsEndpointUnregister Unregisters an endpoint. * * * ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#tsendpointexists) TsEndpointExists Checks whether an endpoint exists. * * * ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#tsendpointregisterpublic) TsEndpointRegisterPublic Registers a public endpoint (no authentication). Parameter Type Description `method` `string` HTTP method (GET, POST...) `path` `string` Endpoint path `handler` `func(body []byte) (int, []byte)` Handler * * * ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#tsendpointunregisterpublic) TsEndpointUnregisterPublic Unregisters a public endpoint. * * * ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#tsendpointexistspublic) TsEndpointExistsPublic Checks whether a public endpoint exists. * * * [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#utility-functions) Utility Functions -------------------------------------------------------------------------------------------------------------------------------------------------- ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#tsconvertcptoutf8) TsConvertCpToUTF8 Converts a string from a code page to UTF-8. **Supported code pages:** * 866 (Russian DOS) * 1251 (Cyrillic Windows) * 1252 (Western European Windows) * 936 (Chinese GBK) * 65001 (UTF-8) * and many others... * * * ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#tsconvertutf8tocp) TsConvertUTF8toCp Converts UTF-8 to the agent's code page. * * * ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#tswin32error) TsWin32Error Returns a description of a Windows error code. * * * [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#data-types) Data Types ------------------------------------------------------------------------------------------------------------------------------------ ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#adaptix.agentdata) adaptix.AgentData * * * ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#adaptix.taskdata) adaptix.TaskData * * * ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#adaptix.listenerdata) adaptix.ListenerData * * * ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#adaptix.downloaddata) adaptix.DownloadData * * * ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#adaptix.tunneldata) adaptix.TunnelData * * * ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#adaptix.pivotdata) adaptix.PivotData * * * ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#adaptix.credsdata) adaptix.CredsData * * * ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#adaptix.targetdata) adaptix.TargetData * * * ### [hashtag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#constants) Constants [PreviousWeb APIchevron-left](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/web-api) [NextEvents and Hookschevron-right](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/events-and-hooks) Last updated 1 month ago * [Agent Functions](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#agent-functions) * [TsAgentIsExists](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#tsagentisexists) * [TsAgentCreate](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#tsagentcreate) * [TsAgentProcessData](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#tsagentprocessdata) * [TsAgentUpdateData](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#tsagentupdatedata) * [TsAgentUpdateDataPartial](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#tsagentupdatedatapartial) * [TsAgentTerminate](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#tsagentterminate) * [TsAgentSetTick](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#tsagentsettick) * [TsAgentConsoleOutput](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#tsagentconsoleoutput) * [TsAgentBuildExecute](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#tsagentbuildexecute) * [TsAgentBuildLog](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#tsagentbuildlog) * [TsAgentGetHosted\* Functions](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#tsagentgethosted-functions) * [Task Functions](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#task-functions) * [TsTaskRunningExists](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#tstaskrunningexists) * [TsTaskCreate](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#tstaskcreate) * [TsTaskUpdate](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#tstaskupdate) * [TsTaskCancel](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#tstaskcancel) * [Client GUI Functions](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#client-gui-functions) * [TsClientGuiDisksWindows](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#tsclientguidiskswindows) * [TsClientGuiFilesWindows](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#tsclientguifileswindows) * [TsClientGuiFilesUnix](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#tsclientguifilesunix) * [TsClientGuiFilesStatus](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#tsclientguifilesstatus) * [TsClientGuiProcessWindows](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#tsclientguiprocesswindows) * [TsClientGuiProcessUnix](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#tsclientguiprocessunix) * [Credentials Functions](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#credentials-functions) * [TsCredentilsAdd](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#tscredentilsadd) * [TsCredentilsEdit](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#tscredentilsedit) * [TsCredentialsSetTag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#tscredentialssettag) * [TsCredentilsDelete](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#tscredentilsdelete) * [Download/Upload Functions](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#download-upload-functions) * [TsDownloadAdd](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#tsdownloadadd) * [TsDownloadUpdate](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#tsdownloadupdate) * [TsDownloadClose](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#tsdownloadclose) * [TsDownloadSave](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#tsdownloadsave) * [TsDownloadGetFilepath](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#tsdownloadgetfilepath) * [TsDownloadDelete](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#tsdownloaddelete) * [Listener Functions](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#listener-functions) * [TsListenerGetProfile](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#tslistenergetprofile) * [TsListenerInteralHandler](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#tslistenerinteralhandler) * [Pivot Functions](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#pivot-functions) * [TsPivotCreate](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#tspivotcreate) * [TsPivotDelete](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#tspivotdelete) * [TsGetPivotInfoByName / TsGetPivotInfoById](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#tsgetpivotinfobyname-tsgetpivotinfobyid) * [TsGetPivotByName / TsGetPivotById](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#tsgetpivotbyname-tsgetpivotbyid) * [Screenshot Functions](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#screenshot-functions) * [TsScreenshotAdd](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#tsscreenshotadd) * [TsScreenshotNote](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#tsscreenshotnote) * [TsScreenshotDelete](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#tsscreenshotdelete) * [Target Functions](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#target-functions) * [TsTargetsAdd](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#tstargetsadd) * [TsTargetsEdit](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#tstargetsedit) * [TsTargetSetTag](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#tstargetsettag) * [TsTargetDelete](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#tstargetdelete) * [Tunnel Functions](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#tunnel-functions) * [TsTunnelStart](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#tstunnelstart) * [TsTunnelCreate\* Functions](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#tstunnelcreate-functions) * [TsTunnelUpdateRportfwd](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#tstunnelupdaterportfwd) * [TsTunnelStop\* Functions](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#tstunnelstop-functions) * [TsTunnelChannelExists](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#tstunnelchannelexists) * [TsTunnelGetPipe](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#tstunnelgetpipe) * [TsTunnelConnection\* Functions](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#tstunnelconnection-functions) * [TsTunnelPause](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#tstunnelpause) * [TsTunnelResume](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#tstunnelresume) * [Terminal Functions](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#terminal-functions) * [TsAgentTerminalCloseChannel](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#tsagentterminalclosechannel) * [TsTerminalConnExists](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#tsterminalconnexists) * [TsTerminalConnResume](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#tsterminalconnresume) * [TsTerminalConnData](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#tsterminalconndata) * [TsTerminalConnClose](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#tsterminalconnclose) * [TsTerminalGetPipe](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#tsterminalgetpipe) * [Service Functions](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#service-functions) * [TsServiceSendDataAll](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#tsservicesenddataall) * [TsServiceSendDataClient](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#tsservicesenddataclient) * [AxScript Server Functions](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#axscript-server-functions) * [TsAxScriptLoadUser](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#tsaxscriptloaduser) * [TsAxScriptUnloadUser](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#tsaxscriptunloaduser) * [TsAxScriptList](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#tsaxscriptlist) * [TsAxScriptCommands](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#tsaxscriptcommands) * [TsAxScriptResolveHooks](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#tsaxscriptresolvehooks) * [TsAxScriptParseAndExecute](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#tsaxscriptparseandexecute) * [AxGetAgentContext](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#axgetagentcontext) * [Extender Data Functions](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#extender-data-functions) * [TsExtenderDataSave](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#tsextenderdatasave) * [TsExtenderDataLoad](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#tsextenderdataload) * [TsExtenderDataDelete](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#tsextenderdatadelete) * [TsExtenderDataKeys](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#tsextenderdatakeys) * [TsExtenderDataDeleteAll](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#tsextenderdatadeleteall) * [Endpoint Functions](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#endpoint-functions) * [TsEndpointRegister](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#tsendpointregister) * [TsEndpointUnregister](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#tsendpointunregister) * [TsEndpointExists](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#tsendpointexists) * [TsEndpointRegisterPublic](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#tsendpointregisterpublic) * [TsEndpointUnregisterPublic](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#tsendpointunregisterpublic) * [TsEndpointExistsPublic](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#tsendpointexistspublic) * [Utility Functions](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#utility-functions) * [TsConvertCpToUTF8](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#tsconvertcptoutf8) * [TsConvertUTF8toCp](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#tsconvertutf8tocp) * [TsWin32Error](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#tswin32error) * [Data Types](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#data-types) * [adaptix.AgentData](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#adaptix.agentdata) * [adaptix.TaskData](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#adaptix.taskdata) * [adaptix.ListenerData](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#adaptix.listenerdata) * [adaptix.DownloadData](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#adaptix.downloaddata) * [adaptix.TunnelData](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#adaptix.tunneldata) * [adaptix.PivotData](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#adaptix.pivotdata) * [adaptix.CredsData](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#adaptix.credsdata) * [adaptix.TargetData](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#adaptix.targetdata) * [Constants](https://adaptix-framework.gitbook.io/adaptix-framework/development/teamserver-interface/ts-api#constants) Copy TsAgentProcessData(agentId string, bodyData []byte) error Copy TsAgentUpdateData(newAgentData adaptix.AgentData) error Copy TsAgentUpdateDataPartial(agentId string, updateData interface{}) error Copy TsAgentTerminate(agentId string, terminateTaskId string) error Copy TsAgentSetTick(agentId string, listenerName string) error Copy TsAgentConsoleOutput(agentId string, messageType int, message string, clearText string, store bool) Copy TsAgentBuildExecute(builderId string, workingDir string, program string, args ...string) error Copy TsAgentBuildLog(builderId string, status int, message string) error Copy TsAgentGetHostedAll(agentId string, maxDataSize int) ([]byte, error) Copy TsAgentGetHostedTasks(agentId string, maxDataSize int) ([]byte, error) Copy TsAgentGetHostedTasksCount(agentId string, count int, maxDataSize int) ([]byte, error) Copy TsTaskRunningExists(agentId string, taskId string) bool Copy TsTaskCreate(agentId string, cmdline string, client string, taskData adaptix.TaskData) Copy TsTaskUpdate(agentId string, updateData adaptix.TaskData) Copy TsTaskCancel(agentId string, taskId string) error Copy TsClientGuiDisksWindows(taskData adaptix.TaskData, drives []adaptix.ListingDrivesDataWin) Copy TsClientGuiFilesWindows(taskData adaptix.TaskData, path string, files []adaptix.ListingFileDataWin) Copy TsClientGuiFilesUnix(taskData adaptix.TaskData, path string, files []adaptix.ListingFileDataUnix) Copy TsClientGuiFilesStatus(taskData adaptix.TaskData) Copy TsClientGuiProcessWindows(taskData adaptix.TaskData, process []adaptix.ListingProcessDataWin) Copy TsClientGuiProcessUnix(taskData adaptix.TaskData, process []adaptix.ListingProcessDataUnix) Copy TsCredentilsAdd(creds []map[string]interface{}) error Copy map[string]interface{}{ "username": "admin", "password": "hash_or_password", "realm": "DOMAIN", "type": "NTLM", "tag": "DC01", "storage": "LSASS", "agent_id": "abc123", "host": "192.168.1.1", } Copy TsCredentilsEdit(credId string, username string, password string, realm string, credType string, tag string, storage string, host string) error Copy TsCredentialsSetTag(credsId []string, tag string) error Copy TsCredentilsDelete(credsId []string) error Copy TsDownloadAdd(agentId string, fileId string, fileName string, fileSize int64) error Copy TsDownloadUpdate(fileId string, state int, data []byte) error Copy TsDownloadClose(fileId string, reason int) error Copy TsDownloadSave(agentId string, fileId string, filename string, content []byte) error Copy TsDownloadGetFilepath(fileId string) (string, error) Copy TsDownloadDelete(fileId []string) error Copy TsListenerGetProfile(listenerName string, listenerType string) (string, []byte, error) Copy TsListenerInteralHandler(watermark string, data []byte) (string, error) Copy TsPivotCreate(pivotId string, pAgentId string, chAgentId string, pivotName string, isRestore bool) error Copy TsPivotDelete(pivotId string) error Copy TsGetPivotInfoByName(pivotName string) (string, string, string) // pivotId, parentAgentId, childAgentId TsGetPivotInfoById(pivotId string) (string, string, string) // pivotName, parentAgentId, childAgentId Copy TsGetPivotByName(pivotName string) *adaptix.PivotData TsGetPivotById(pivotId string) *adaptix.PivotData Copy TsScreenshotAdd(agentId string, Note string, Content []byte) error Copy TsScreenshotNote(screenId string, note string) error Copy TsScreenshotDelete(screenId string) error Copy TsTargetsAdd(targets []map[string]interface{}) error Copy map[string]interface{}{ "computer": "DC01", // Computer name "domain": "CORP.LOCAL", // Domain "address": "192.168.1.10", // IP address "os": 1, // 1=Windows, 2=Linux, 3=macOS "os_desk": "Windows Server 2019", "tag": "Domain Controller", "info": "Additional information", "alive": true, // Is target alive } Copy TsTargetsEdit(targetId string, computer string, domain string, address string, os int, osDesk string, tag string, info string, alive bool) error Copy TsTargetSetTag(targetsId []string, tag string) error Copy TsTargetDelete(targetsId []string) error Copy TsTunnelStart(TunnelId string) (string, error) Copy TsTunnelCreateSocks4(AgentId string, Info string, Lhost string, Lport int) (string, error) Copy TsTunnelCreateSocks5(AgentId string, Info string, Lhost string, Lport int, UseAuth bool, Username string, Password string) (string, error) Copy TsTunnelCreateLportfwd(AgentId string, Info string, Lhost string, Lport int, Thost string, Tport int) (string, error) Copy TsTunnelCreateRportfwd(AgentId string, Info string, Lport int, Thost string, Tport int) (string, error) Copy TsTunnelUpdateRportfwd(tunnelId int, result bool) (string, string, error) Copy TsTunnelStop(tunnelId string) error Copy TsTunnelStopSocks(AgentId string, Port int) Copy TsTunnelStopLportfwd(AgentId string, Port int) Copy TsTunnelStopRportfwd(AgentId string, Port int) Copy TsTunnelChannelExists(channelId int) bool Copy TsTunnelGetPipe(AgentId string, channelId int) (*io.PipeReader, *io.PipeWriter, error) Copy TsTunnelConnectionData(channelId int, data []byte) Copy TsTunnelConnectionResume(AgentId string, channelId int, ioDirect bool) Copy TsTunnelConnectionClose(channelId int, writeOnly bool) Copy TsTunnelConnectionHalt(channelId int, errorCode byte) Copy TsTunnelConnectionAccept(tunnelId int, channelId int) Copy TsTunnelPause(channelId int) Copy TsTunnelResume(channelId int) Copy TsAgentTerminalCloseChannel(terminalId string, status string) error Copy TsTerminalConnExists(terminalId string) bool Copy TsTerminalConnResume(agentId string, terminalId string, ioDirect bool) Copy TsTerminalConnData(terminalId string, data []byte) Copy TsTerminalConnClose(terminalId string, reason string) error Copy TsTerminalGetPipe(AgentId string, terminalId string) (*io.PipeReader, *io.PipeWriter, error) Copy TsServiceSendDataAll(service string, data string) Copy TsServiceSendDataClient(operator string, service string, data string) Copy TsAxScriptLoadUser(name string, script string) error Copy TsAxScriptUnloadUser(name string) error Copy TsAxScriptList() (string, error) Copy TsAxScriptCommands() (string, error) Copy TsAxScriptResolveHooks(agentName string, agentId string, listenerRegName string, os int, cmdline string, args map[string]interface{}) (string, string, bool, error) Copy TsAxScriptParseAndExecute(agentId string, username string, cmdline string) error Copy AxGetAgentContext(agentId string) (agentName string, listenerRegName string, osType int, err error) Copy TsExtenderDataSave(extenderName string, key string, value []byte) error Copy TsExtenderDataLoad(extenderName string, key string) ([]byte, error) Copy TsExtenderDataDelete(extenderName string, key string) error Copy TsExtenderDataKeys(extenderName string) ([]string, error) Copy TsExtenderDataDeleteAll(extenderName string) error Copy TsEndpointRegister(method string, path string, handler func(username string, body []byte) (int, []byte)) error Copy TsEndpointUnregister(method string, path string) error Copy TsEndpointExists(method string, path string) bool Copy TsEndpointRegisterPublic(method string, path string, handler func(body []byte) (int, []byte)) error Copy TsEndpointUnregisterPublic(method string, path string) error Copy TsEndpointExistsPublic(method string, path string) bool Copy TsConvertCpToUTF8(input string, codePage int) string Copy TsConvertUTF8toCp(input string, codePage int) string Copy TsWin32Error(errorCode uint) string Copy type AgentData struct { Crc string // CRC/watermark of the agent type Id string // Unique agent ID Name string // Agent type name SessionKey []byte // Session key for encryption Listener string // Listener name Async bool // Asynchronous mode ExternalIP string // External IP address InternalIP string // Internal IP address GmtOffset int // Time zone offset Sleep uint // Sleep interval (seconds) Jitter uint // Jitter (percentage) Pid string // Process ID Tid string // Thread ID Arch string // Architecture (x86, x64) Elevated bool // Elevated privileges Process string // Process name Os int // OS type (0=Windows, 1=Linux, 2=macOS) OsDesc string // OS description Domain string // Domain Computer string // Computer name Username string // Username Impersonated string // Impersonated user OemCP int // OEM code page ACP int // ANSI code page CreateTime int64 // Creation time (Unix timestamp) LastTick int // Last tick KillDate int // Kill date WorkingTime int // Working time Tags string // Tags Mark string // Mark (Inactive, Terminated, etc.) Color string // Color in GUI TargetId string // ID of the associated target } Copy type TaskData struct { Type int // Type: TASK_TYPE_TASK=1, TASK_TYPE_BROWSER=2, TASK_TYPE_JOB=3, TASK_TYPE_TUNNEL=4 TaskId string // Unique task ID AgentId string // Agent ID Client string // Client (operator) name HookId string // Hook ID for callback HandlerId string // Handler ID for callback User string // User on the target machine Computer string // Computer name StartDate int64 // Start time FinishDate int64 // Finish time Data []byte // Task binary data CommandLine string // Command line MessageType int // Message type: INFO=5, ERROR=6, SUCCESS=7 Message string // Message title ClearText string // Message text Completed bool // Completion flag Sync bool // Synchronize with GUI } Copy type ListenerData struct { Name string // Unique listener name RegName string // Registered type Protocol string // Protocol Type string // Listener type BindHost string // Bind address BindPort string // Bind port AgentAddr string // Address for the agent CreateTime int64 // Creation date Status string // Status (running, stopped, paused) Data string // Additional data (JSON) Watermark string // Watermark } Copy type DownloadData struct { FileId string // Unique file ID AgentId string // Agent ID AgentName string // Agent type name User string // User Computer string // Computer RemotePath string // Path on the target machine LocalPath string // Local path on the server TotalSize int // Total file size RecvSize int // Received size Date int64 // Start date State int // State: RUNNING=1, STOPPED=2, FINISHED=3, CANCELED=4 } Copy type TunnelData struct { TunnelId string // Unique tunnel ID AgentId string // Agent ID Computer string // Computer Username string // User Process string // Process Type string // Type (socks4, socks5, lportfwd, rportfwd) Info string // Additional information Interface string // Bind interface Port string // Port Client string // Client that created the tunnel Fhost string // Forward host Fport string // Forward port AuthUser string // Authentication user AuthPass string // Authentication password } Copy type PivotData struct { PivotId string // Unique pivot ID PivotName string // Pivot name ParentAgentId string // Parent agent ID ChildAgentId string // Child agent ID } Copy type CredsData struct { CredId string // Unique ID Username string // Username Password string // Password or hash Realm string // Domain/realm Type string // Type (NTLM, Plaintext, Kerberos) Tag string // Tag Date int64 // Date added Storage string // Source (LSASS, SAM, DCSync) AgentId string // Agent ID (source) Host string // Host (source) } Copy type TargetData struct { TargetId string // Unique target ID Computer string // Computer name Domain string // Domain Address string // IP address Os int // OS type OsDesk string // OS description Tag string // Tag Info string // Additional information Date int64 // Date added Alive bool // Active Agents []string // List of agent IDs } Copy // Task types const ( TASK_TYPE_TASK = 1 // Regular task TASK_TYPE_BROWSER = 2 // File/Process Browser TASK_TYPE_JOB = 3 // Background job TASK_TYPE_TUNNEL = 4 // Tunnel ) // Console message types const ( CONSOLE_OUT_LOCAL = 1 CONSOLE_OUT_LOCAL_INFO = 2 CONSOLE_OUT_LOCAL_ERROR = 3 CONSOLE_OUT_LOCAL_SUCCESS = 4 CONSOLE_OUT_INFO = 5 // INFO CONSOLE_OUT_ERROR = 6 // ERROR CONSOLE_OUT_SUCCESS = 7 // SUCCESS CONSOLE_OUT = 10 ) // Download states const ( DOWNLOAD_STATE_RUNNING = 1 DOWNLOAD_STATE_STOPPED = 2 DOWNLOAD_STATE_FINISHED = 3 DOWNLOAD_STATE_CANCELED = 4 ) ---