Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
OST-C2-Spec — Open Source C&C Specification | Kitploit
도구/GitHubGitHub/rasta-mouse/ost-c2-spec
ExploitationLateral MovementPost-ExploitationCommand and ControlRed Teaming
GitHubrasta-mouse/ost-c2-spec

OST-C2-Spec

Open Source C&C Specification

저장소 보기
283181년 전Kitploit 검토 완료

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

초안: 토론 요청

개요

이 문서는 OST C&C 사양 버전 1의 개요를 제공합니다. 메시지와 메시지 내 필드에 대한 상세한 설명을 제공하기 위한 것입니다.

소개

이 사양의 동기는 작업 지시, 구조화된 출력, 피어 투 피어 라우팅을 포함한 C&C 메시징 프로토콜을 제공하는 것이며, 이를 그대로 구현하거나 프로젝트 개발자에게 영감을 주는 용도로 사용할 수 있습니다. 이 문서는 C&C가 무엇인지 설명하기 위한 문서가 아닙니다. 독자가 C&C가 무엇이고 어떻게 사용되는지 이해하고 있다고 가정합니다.

키워드 "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", "OPTIONAL"은 [RFC2119]에 설명된 대로 해석되어야 합니다.

환경 가정

이 사양은 다음을 가정합니다.

  • 메시지는 암호화되지 않은 네트워크를 통해 전송됩니다.
  • 임플란트 페이로드에는 통신 대상 팀 서버가 사용하는 공개 RSA 키가 포함되어 있습니다.

용어집

이 문서 전체에서 사용되는 용어 목록은 다음과 같습니다.

  • 임플란트 메타데이터: 임플란트가 팀 서버에 자신에 대해 보고하는 정보.

  • 작업 요청: 임플란트가 수행하도록 주어진 작업.

  • 작업 응답: 주어진 작업의 상태 및 출력(있는 경우).

  • 세션 키: 임플란트가 메시지를 암호화하는 데 사용하는 고유 암호화 키.

작업 메시지

작업 헤더

각 작업 요청 및 응답 메시지는 다음 16바이트 헤더를 반드시(MUST) 포함해야 합니다.```text | Byte | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | | -------------------------------------------------------------| | 0 | Type | Code | Flags | Label | | -------------------------------------------------------------| | 1 | Identifier | Length | | -------------------------------------------------------------|

root@kitploit:~
- **Type**: 1바이트 정수.  이 작업의 '유형'입니다.  [[작업 유형 및 코드](https://github.com/rasta-mouse/ost-c2-spec?tab=readme-ov-file#task-types-and-codes)] 참조.
- **Code**: 1바이트 정수.  주어진 Type에 대한 '하위 코드'입니다.  [[작업 유형 및 코드](https://github.com/rasta-mouse/ost-c2-spec?tab=readme-ov-file#task-types-and-codes)] 참조.
- **Flags**: 2바이트 정수.  메시지의 상태를 설명하는 비트 단위 플래그 집합입니다.  [[작업 플래그](https://github.com/rasta-mouse/ost-c2-spec?tab=readme-ov-file#task-flags)] 참조.
- **Label**: 4바이트 정수.  동일한 작업과 관련된 여러 메시지를 연결하는 고유 레이블입니다.
- **Identifier**: 4바이트 정수.  단편화된 메시지를 올바른 순서로 구성하는 데 사용되는 순차 식별자입니다.
- **Length**: 4바이트 정수.  작업 데이터의 총 길이입니다.

## 작업 유형 및 코드```text
|------------------|--------------------------|
| Type             | Code                     |
|------------------|--------------------------|
| 0 - NOP          | 0                        |
|------------------|--------------------------|
| 1 - Exit         | 0                        |
|------------------|--------------------------|
| 2 - Set          | 0 - Sleep/Jitter         |
|                  | 1 - SpawnTo              |
|                  | 2 - BlockDLLs            |
|                  | 3 - PPID                 |
|------------------|--------------------------|
| 3 - File         | 0 - Copy                 |
|                  | 1 - Move                 |
|                  | 2 - Delete               |
|                  | 3 - Upload               |
|                  | 4 - Download             |
|------------------|--------------------------|
| 4 - Directory    | 0 - Print                |
|                  | 1 - Change               |
|                  | 2 - Create               |
|                  | 3 - Copy                 |
|                  | 4 - Move                 |
|                  | 5 - List                 |
|                  | 6 - Delete               |
|------------------|--------------------------|
| 5 - WhoAmI       | 0                        |
|------------------|--------------------------|
| 6 - Process      | 0 - List                 |
|                  | 1 - Kill                 |
|                  | 2 - Inject Spawn         |
|                  | 3 - Inject Explicit      |
|------------------|--------------------------|
| 7 - Registry     | 0 - Query                |
|                  | 1 - Add                  |
|                  | 2 - Delete               |
|------------------|--------------------------|
| 8 - RPortFwd     | 0 - Start                |
|                  | 1 - Data                 |
|------------------|--------------------------|
| 9 - Environment  | 0 - Get                  |
|                  | 1 - Set                  |
|------------------|--------------------------|
| 10 - SOCKS       | 0 - Connect              |
|                  | 1 - Data                 |
|                  | 2 - Close                |
|------------------|--------------------------|
| 11 - Tokens      | 0 - List                 |
|                  | 1 - Make                 |
|                  | 2 - Steal                |
|                  | 3 - Use                  |
|                  | 4 - Revert               |
|                  | 5 - Delete               |
|                  | 6 - Purge                |
|------------------|--------------------------|
| 12 - Run         | 0                        |
|------------------|--------------------------|
| 13 - ItemStore   | 0 - List                 |
|                  | 1 - Add                  |
|                  | 2 - Delete               |
|                  | 3 - Purge                |
|------------------|--------------------------|
| 14 - LocalExec   | 0 - .NET                 |
|                  | 1 - BOF                  |
|                  | 2 - Managed PowerShell   |
|                  | 3 - Unmanaged PowerShell |
|------------------|--------------------------|
| 15 - PrintScreen | 0                        |
|------------------|--------------------------|
| 16 - RemoteExec  | 0 - WinRM                |
|                  | 1 - WMI                  |
|                  | 2 - PsExec               |
|                  | 3 - SSH                  |
|------------------|--------------------------|
| 17 - Link        | 1 - Link SMB             |
|                  | 2 - Link TCP             |
|------------------|--------------------------|
| 18 - Unlink      | 0                        |
|------------------|--------------------------|
| 19 - P2P         | 0 - Acknowledge          |
|                  | 1 - PassThru             |
|------------------|--------------------------|
| 20 - Jobs        | 0 - List                 |
|                  | 1 - Kill                 |
|---------------------------------------------|

작업 플래그

일부 플래그는 상호 배타적이므로 함께 설정해서는 안 됩니다(MUST NOT). 플래그가 설정되지 않은 경우 작업이 성공적으로 완료된 것으로 간주해야 하며(SHOULD), 관련 출력(있는 경우)은 조각화되지 않습니다.```text

ValueDescription
0No flags
1Task Error
2Task Running (as job)
4Message is fragmented, more to follow
root@kitploit:~
## 태스크 데이터

태스크 데이터는 헤더에 추가되며, 특정 태스크 유형과 코드에 따라 바이너리 구조로 구성됩니다. 각 태스크 요청 및 응답 메시지 유형은 [[메시지 정의](https://github.com/rasta-mouse/ost-c2-spec?tab=readme-ov-file#message-definitions)]에 정의되어 있습니다.

태스크 요청 또는 응답에 데이터가 필요하지 않은 경우, 데이터를 포함할 의무는 없습니다.

## 암호화된 태스크 메시지

전송 전에 태스크 헤더와 태스크 데이터가 결합된 후, 임플란트의 세션 키로 AES 암호화됩니다.```text
| Byte | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| ------------------------------------ |
|  0   |            Iv                 |
|  8   |                               |
| ------------------------------------ |
|  16  |          Checksum             |
|  24  |                               |
|  32  |                               |
|  40  |                               |
| ------------------------------------ |
|  48  |           Data                |
|  ..  |                               |
| ------------------------------------ |
  • Iv: 16바이트 초기화 벡터.
  • Checksum: 32바이트 HMAC256 체크섬.
  • Data: 암호화된 데이터.

메시지 교환

임플란트 등록

임플란트는 작업 데이터를 수신하거나 전송하기 전에 팀 서버에 자신을 등록해야 한다(MUST).

IMPLANT-METADATA 생성

임플란트는 [IMPLANT-METADATA] 메시지를 생성하고, 팀 서버의 공개 RSA 키로 암호화한 후 팀 서버로 전송한다.

IMPLANT-METADATA 수신

팀 서버는 개인 RSA 키를 사용하여 임플란트의 [IMPLANT-METADATA]를 복호화하고, 이를 새 세션/콜백으로 등록해야 한다(MUST).

임플란트 체크인

임플란트는 자신 또는 하위 임플란트에 대한 대기 중인 작업 데이터를 수신하려면 팀 서버에 "체크인"해야 한다(MUST).

체크인 요청

체크인 방법은 C2 채널별로 다르며 이 사양의 범위에 포함되지 않는다. 등록된 임플란트는 체크인을 위해 해당 ID만 전송할 수 있다(MAY). 그러나 임플란트가 세션 키, 슬립(sleep), 또는 지터(jitter) 구성을 변경한 경우, 메타데이터도 다시 전송해야 한다(MUST).

체크인 응답

대기 중인 작업이 없으면 팀 서버는 데이터 없이 응답하거나, 하나 이상의 [NOP] 메시지 형태의 더미 데이터로 응답할 수 있다(MAY). 그렇지 않은 경우, 임플란트의 세션 키로 AES 암호화된 작업 요청 모음으로 응답해야 한다(MUST).

피어 투 피어

LINK-X-REQ 수신

하위 임플란트는 새 상위 임플란트와 연결이 수립되면 자체 메타데이터를 P2P 채널(예: named pipe 또는 TCP 소켓)에 기록해야 한다(MUST).

LINK-REP 생성

상위 임플란트는 이 메타데이터를 읽고, [LINK-REP] 메시지로 팀 서버에 다시 전송해야 한다(MUST).

LINK-REP 수신

팀 서버는 하위 임플란트의 메타데이터를 복호화하여 새 세션/콜백으로 등록하거나, unlink 및 link의 경우 기존의 상위-하위 관계를 업데이트해야 한다(MUST).

LINK-ACK 생성

팀 서버는 하위 임플란트의 ID를 확인하기 위해 [LINK-ACK] 메시지를 새 상위 임플란트로 다시 전송해야 한다(MUST). 상위 임플란트는 이 과정을 연관시키기 위해 메시지 Label을 사용해야 한다(SHOULD).

하위 임플란트 작업

하위 임플란트에 대한 작업은 하나 이상의 [LINK-PASS-THRU] 메시지로 래핑된다. 이 메시지들은 상위 임플란트의 세션 키로 암호화된다. 수신 시, 상위 임플란트는 메시지를 복호화하고 child-id 필드가 가리키는 하위 임플란트로 래핑된 데이터를 전달해야 한다(MUST).

래핑된 데이터는 작업 자체이거나, 하위 임플란트가 체인의 한 단계 더 아래에 있는 경우 또 다른 LINK-PASS-THRU일 수 있다.

메시지 정의

타임스탬프 필드

모든 Timestamp 필드는 UNIX epoch(1970년 1월 1일 이후 경과된 초 수)를 나타내는 부호 있는 64비트 정수(Int64)로 전송된다.

선택적 필드

일부 언어에서는 생략된 값과 전송된 0 값을 구분하지 않는다. 일관성을 위해, 구현은 OPTIONAL 필드 앞에 값의 존재 여부를 나타내는 1 또는 0 바이트(즉, TRUE 또는 FALSE)를 붙여야 한다(MUST).

길이-접두어 필드

이진 스트림에서 데이터를 읽을 때 한 필드가 끝나고 다른 필드가 시작되는 시점을 항상 알 수 있는 것은 아니다. 이 사양은 이러한 필드에 길이 값을 접두어로 붙이는 것을 요구하므로, 구현체는 해당 필드에 포함된 바이트 수 또는 요소 수를 알 수 있다. 다음 데이터 유형은 길이 접두어로 표시해야 한다(MUST):

  • String (null로 종료될 수도 있지만(MAY), 필수는 아님).
  • 길이가 정적으로 정의되지 않은 SEQUENCE.
  • IPV4-ADDRESS.
  • IPV6-ADDRESS.

사양 확장

구현체는 고유한 설계와 기능에 따라 이 사양에 정의되지 않은 메시지 유형, 제어 코드 및 플래그를 포함할 수 있다(MAY). 그러나 향후 개정에서 할당될 가능성을 줄이기 위해 예약되지 않은 풀의 높은 쪽 끝에 있는 값을 사용하는 것이 권장된다(RECOMMENDED). 구현체는 의도된 목적 이외의 용도로 정의된 유형, 코드 또는 플래그를 사용해서는 안 된다(MUST NOT).

인식할 수 없는 메시지

구현체는 인식할 수 없는 필드나 플래그가 포함된 메시지를 수신할 때 이를 정상적으로 처리하고 적절한 오류 메시지를 반환해야 한다(SHOULD).

IMPLANT-METADATA```text

IMPLANT-METADATA { id [1] UInt32 session-key [2] SEQUENCE of Byte (32) sleep [3] UInt32 OPTIONAL jitter [4] UInt32 OPTIONAL username [5] String OPTIONAL host-id [6] String OPTIONAL hostname [7] String OPTIONAL domain [8] String OPTIONAL ipv4-ips [9] SEQUENCE of IPV4-ADDRESS OPTIONAL ipv6-ips [10] SEQUENCE of IPV6-ADDRESS OPTIONAL process-name [11] String OPTIONAL process-id [12] UInt32 OPTIONAL architecture [13] [Architecture] OPTIONAL platform [14] [Platform] OPTIONAL os-description [15] String OPTIONAL integrity [16] [Integrity] OPTIONAL }

root@kitploit:~
### IPV4-ADDRESS```text
IPV4-ADDRESS {
  address  [1]  SEQUENCE of Byte (4)
}

IPV6-ADDRESS```text

IPV6-ADDRESS { address [1] SEQUENCE of Byte (16) }

root@kitploit:~
IP 주소는 반드시 네트워크 바이트 순서로 전송되어야 합니다.

### 플랫폼```text
Platform {
  Linux   = 0,
  MacOS   = 1,
  Windows = 2
}

TASK-ERROR```text

TASK-ERROR { error-code [1] UInt32 message [2] String OPTIONAL }

root@kitploit:~
## NOP 정의

### NOP```text
NOP {
  padding  [1]  SEQUENCE of Byte  OPTIONAL
}

세트 정의

SET-SLEEP-REQ```text

SET-SLEEP-REQ { interval [1] UInt32 jitter [2] Byte OPTIONAL }

root@kitploit:~
### SET-SPAWNTO-REQ```text
SET-SPAWNTO-REQ {
  spawnto  [1]  String  OPTIONAL
}

spawnto 필드가 설정되지 않은 경우, 임플란트는 기본 구성으로 되돌아가야 합니다.

SET-BLOCKDLLS-REQ```text

SET-BLOCKDLLS-REQ { blockdlls [1] Boolean OPTIONAL }

root@kitploit:~
`blockdlls` 필드가 *설정되지 않으면*, 임플란트는 기본 구성으로 되돌아가야 합니다.

### SET-PPID-REQ```text
SET-PPID-REQ {
  ppid  [1]  UInt32  OPTIONAL
}

ppid 필드가 설정되지 않으면, 임플란트는 기본 구성으로 되돌아가야 합니다.

파일 시스템 정의

FILE-COPY-REQ```text

FILE-COPY-REQ { source [1] String destination [2] String force [3] Boolean OPTIONAL }

root@kitploit:~
### FILE-MOVE-REQ```text
FILE-MOVE-REQ {
  source       [1]  String
  destination  [2]  String
}

FILE-DELETE-REQ```text

FILE-DELETE-REQ { path [1] String }

root@kitploit:~
### FILE-UPLOAD-REQ```text
FILE-UPLOAD-REQ {
  destination  [1]  String
  content      [2]  SEQUENCE of Byte
}

FILE-DOWNLOAD-REQ```text

FILE-DOWNLOAD-REQ { path [1] String }

root@kitploit:~
### FILE-DOWNLOAD-REP```text
FILE-DOWNLOAD-REP {
  current-chuck  [1]  UInt16
  total-chunks   [2]  UInt16
  chunk-content  [3]  SEQUENCE of Byte
}

DIR-PRINT-REP```text

DIR-PRINT-REP { path [1] String }

root@kitploit:~
### DIR-CHANGE-REQ```text
DIR-CHANGE-REQ {
  path  [1]  String  OPTIONAL
}

path 필드가 설정되지 않은 경우, 임플란트는 작업 디렉토리를 '기본' 위치(예: 사용자의 홈 디렉토리)로 변경해야 합니다(SHOULD).

DIR-CREATE-REQ```text

DIR-CREATE-REQ { path [1] String }

root@kitploit:~
### DIR-CREATE-REP```text
DIR-CREATE-REP {
  entry  [1]  [FileSystemEntry]
}

DIR-COPY-REQ```text

DIR-COPY-REQ { source [1] String destination [2] String }

root@kitploit:~
### DIR-MOVE-REQ```text
DIR-MOVE-REQ {
  source       [1]  String
  destination  [2]  String
}

DIR-LIST-REQ```text

DIR-LIST-REQ { path [1] String OPTIONAL access-control [2] Boolean OPTIONAL }

root@kitploit:~
`path` 필드가 설정되지 *않은* 경우, 임플란트는 현재 작업 디렉터리를 나열해야 합니다(SHOULD).

### DIR-LIST-REP```text
DIR-LIST-REP {
  entries  [1]  SEQUENCE of [FileSystemEntry]
}

DIR-DELETE-REQ```text

DIR-DELETE-REQ { path [1] String recurse [2] Boolean OPTIONAL }

root@kitploit:~
### FileSystemEntry```text
FileSystemEntry {
  path            [1]  String
  length          [2]  UInt32                      OPTIONAL
  attributes      [3]  [FileAttributes]            OPTIONAL
  owner           [4]  String                      OPTIONAL
  created         [5]  Timestamp                   OPTIONAL
  last-accessed   [6]  Timestamp                   OPTIONAL
  last-written    [7]  Timestamp                   OPTIONAL
  access-control  [8]  SEQUENCE of [FileSecurity]  OPTIONAL
}

FileAttributes

비트 단위 플래그.```text FileAttributes { Normal = 1, Archive = 2, Compressed = 4, ReadOnly = 8, Hidden = 16, Directory = 32, System = 64 }

root@kitploit:~
### FileSecurity```text
FileSecurity {
  identity     [1]  String
  access-mask  [2]  Int32
  inheritance  [3]  [Inheritance]  OPTIONAL
  propagation  [4]  [Propagation]  OPTIONAL
}

상속

비트 단위 플래그.```text Inheritance { None = 0, ContainerInherit = 1, ObjectInherit = 2, }

root@kitploit:~
### 전파

비트 단위 플래그.```text
Propagation {
  None               = 0,
  NoPropagateInherit = 1,
  InheritOnly        = 2,
}

WhoAmI 정의

WHOAMI-REP```text

WHOAMI-REP { primary [1] String impersonation [2] String OPTIONAL }

root@kitploit:~
## 프로세스 정의

### PROC-LIST-REP```text
PROC-LIST-REP {
  processes  [1]  SEQUENCE of [ProcessEntry]
}

PROC-KILL-REQ```text

PROC-KILL-REQ { process-id [1] UInt32 force [2] Boolean OPTIONAL }

root@kitploit:~
### PROC-INJ-REQ```text
PROC-INJ-REQ {
  shellcode   [1]  SEQUENCE of Byte
  capability  [2]  SEQUENCE of Byte
  process-id  [3]  UInt32            OPTIONAL
}

ProcessEntry```text

ProcessEntry { process-name [1] String process-id [2] UInt32 parent-process-id [3] UInt32 OPTIONAL session-id [4] Byte OPTIONAL owner [5] String OPTIONAL architecture [6] [Architecture] OPTIONAL integrity [7] [Integrity] OPTIONAL }

root@kitploit:~
### 아키텍처```text
Architecture {
  X86   = 0,  // 32-bit Intel
  X64   = 1,  // 64-bit Intel
  Arm   = 2,  // 32-bit ARM
  Arm64 = 3,  // 64-bit ARM
  Wasm  = 4   // WebAssembly
}

무결성```text

Integrity { Untrusted = 0, Low = 1, Medium = 2, // user High = 3, // sudoers System = 4 // root }

root@kitploit:~
## 레지스트리 정의

### REG-QUERY-REQ```text
REG-QUERY-REQ {
  hive            [1]  [RegistryHive]
  key             [2]  String          OPTIONAL
  value           [3]  String          OPTIONAL
  access-control  [4]  Boolean         OPTIONAL
}

REG-QUERY-REP```text

REG-QUERY-REP { values [1] SEQUENCE of [RegistryValue] keys [2] SEQUENCE of [RegistryKey] }

root@kitploit:~
### REG-ADD-REQ```text
REG-ADD-REQ {
  hive   [1]  [RegistryHive]
  key    [2]  String
  name   [3]  String               OPTIONAL
  kind   [4]  [RegistryValueKind]  OPTIONAL
  value  [5]  SEQUENCE of Byte     OPTIONAL
}

REG-DELETE-REQ```text

REG-DELETE-REQ { hive [1] [RegistryHive] key [2] String }

root@kitploit:~
### RegistryHive```text
RegistryHive {
  ClassesRoot   = 0,
  CurrentUser   = 1,
  LocalMachine  = 2,
  Users         = 3,
  CurrentConfig = 4
}

RegistryKey```text

RegistryKey { name [1] String access-control [2] [RegistrySecurity] OPTIONAL }

root@kitploit:~
### RegistryValue```text
RegistryValue {
  name            [1]  String
  type            [2]  [RegistryValueKind]
  data            [3]  SEQUENCE of Byte
  access-control  [4]  SEQUENCE of [RegistrySecurity]  OPTIONAL
}

RegistryValueKind```text

RegistryValueKind { None = 0, // REG_NONE String = 1, // REG_SZ ExpandString = 2, // REG_EXPAND_SZ Binary = 3, // REG_BINARY DWord = 4, // REG_DWORD MultiString = 5, // REG_MULTI_SZ Qword = 6 // REG_QWORD }

root@kitploit:~
### RegistrySecurity```text
RegistrySecurity {
  identity     [1]  String
  access-mask  [2]  Int32
  inheritance  [3]  [Inheritance]  OPTIONAL
  propagation  [4]  [Propagation]  OPTIONAL
}

역방향 포트 포워딩 정의

RPORTFWD-START```text

RPORTFWD-START { bind-port [1] UInt16 localhost-only [2] Boolean OPTIONAL forward-host [3] String forward-port [4] UInt16 }

root@kitploit:~
### RPORTFWD-DATA```text
RPORTFWD-DATA {
  data  [1]  SEQUENCE of Byte
}

환경 정의

ENV-GET-REQ```text

ENV-GET-REQ { key [1] String }

root@kitploit:~
### ENV-GET-REP```text
ENV-GET-REP {
  value  [1]  String
}

ENV-SET-REQ```text

ENV-SET-REQ { key [1] String value [2] String }

root@kitploit:~
## SOCKS 정의

### SOCKS-CONNECT-REQ```text
SOCKS-CONNECT-REQ {
  id      [1]  UInt32
  target  [2]  SEQUENCE of Byte (4)
  port    [3]  UInt16
}

SOCKS-DATA```text

SOCKS-DATA { id [1] UInt32 data [2] SEQUENCE of Byte }

root@kitploit:~
### SOCKS-CLOSE-REQ```text
SOCKS-CLOSE-REQ {
  id  [1]  UInt32
}

## Token Definitions

### TOKEN-LIST-REP

```text
TOKEN-LIST-REP {
  tokens  [1]  SEQUENCE of [TokenEntry]
}```

### TOKEN-CREATE-REQ

```text
TOKEN-CREATE-REQ {
  username  [1]  String
  domain    [2]  String  OPTIONAL
  password  [3]  String  OPTIONAL
}```

### TOKEN-STEAL-REQ

```text
TOKEN-STEAL-REQ {
  process-id   [1]  UInt32
  access-mask  [2]  UInt32  OPTIONAL
}```

### TOKEN-USE-REQ

```text
TOKEN-USE-REQ {
  index  [1]  Byte
}```

### TOKEN-DELETE-REQ

```text
TOKEN-DELETE-REQ {
  index  [1]  Byte
}```

### TokenEntry

```text
Token {
  index       [1]  Byte
  username    [2]  String
  handle      [3]  String  OPTIONAL
  process-id  [4]  UInt32  OPTIONAL
}```

## Implant Store Definitions

### STORE-LIST-REP

```text
STORE-LIST-REP {
  items  [1]  SEQUENCE of [StoreItem]
}```

### STORE-ADD-ITEM Definition

```text
STORE-ADD-ITEM-REQ {
  item  [1]  SEQUENCE of Byte
  name  [2]  String
  type  [3]  [StoreItemType]
}```

### STORE-DELETE-ITEM Definition

```text
STORE-DELETE-ITEM-REQ {
  index  [1]  Byte
}```

### StoreItem

```text
StoreItem {
  index  [1]  Byte
  name   [2]  String
  type   [3]  [StoreItemType]
}```

### StoreItemType

```text
StoreItemType {
  Assembly = 0,
  BOF      = 1,
  Script   = 2,
  Generic  = 3
}```

## Local Execution Definitions

### RUN-REQ

```text
RUN-REQ {
  program    [1]  String
  arguments  [2]  String  OPTIONAL
  token      [3]  Byte    OPTIONAL
}```

### RUN-REP

```text
RUN-REP {
  output  [1]  String
}```

### EXEC-ASM-REQ

Either store-index or assembly MUST be provided.

```text
EXEC-ASM-REQ {
  store-index  [1]  Byte                OPTIONAL
  assembly     [2]  SEQUENCE of Byte    OPTIONAL
  arguments    [3]  SEQUENCE of String  OPTIONAL
  bypass-amsi  [4]  Boolean             OPTIONAL
  bypass-etw   [5]  Boolean             OPTIONAL
}```

### EXEC-ASM-REP

```text
EXEC-ASM-REP {
  output  [1]  String
}```

### EXEC-BOF-REQ

Either store-index or bof MUST be provided.

```text
EXEC-BOF-REQ {
  store-index  [1]  Byte              OPTIONAL
  bof          [2]  SEQUENCE of Byte  OPTIONAL
  arguments    [3]  SEQUENCE of Byte  OPTIONAL
  bypass-amsi  [4]  Boolean           OPTIONAL
  bypass-etw   [5]  Boolean           OPTIONAL
}```

### EXEC-BOF-REP

```text
EXEC-BOF-REP {
  output  [1]  String
}```

### EXEC-POSH-REQ

Either store-index or script MUST be provided.

```text
EXEC-POSH-REQ {
  cmdlet       [1]  String
  store-index  [2]  Byte              OPTIONAL
  script       [3]  SEQUENCE of Byte  OPTIONAL
  bypass-amsi  [3]  Boolean           OPTIONAL
  bypass-etw   [4]  Boolean           OPTIONAL
}```

### EXEC-POSH-REP

```text
EXEC-POSH-REP {
  output  [1]  String
}```

## Screenshot Definitions

### SCRNSHOT-REP

```text
SCRNSHOT-REP {
  data  [1]  SEQUENCE of Byte
}```

## Remote Execution Definitions

### WINRM-REQ

```text
WINRM-REQ {
  target     [1]  String
  program    [2]  String
  arguments  [3]  String  OPTIONAL
}```

### WMI-REQ

```text
WMI-REQ {
  target     [1]  String
  program    [2]  String
  arguments  [3]  String  OPTIONAL
}```

### PSEXEC-REQ

```text
PSEXEC-REQ {
  target               [1]  String
  service-name         [2]  String
  service-description  [3]  String  OPTIONAL
  bin-path             [4]  String
}```

## Peer-to-Peer Definitions

### LINK-SMB-REQ

```text
LINK-SMB-REQ {
  target    [1]  String
  pipename  [2]  String
}```

### LINK-TCP-REQ

```text
LINK-TCP-REQ {
  target  [1]  String
  port    [2]  UInt32
}```

### LINK-REP

```text
LINK-SMB-REP {
  child-metadata  [1]  SEQUENCE of Byte
}```

### LINK-ACK

```text
LINK-ACK {
  child-id  [1]  UInt32
}```

### LINK-PASS-THRU

```text
LINK-PASS-THRU {
  child-id  [1]  UInt32
  message   [2]  SEQUENCE of Byte
}```

## JOB Definitions

### JOB-LIST-REP

```text
jobs  [1]  [JobEntry]의 시퀀스```

### JOB-KILL-REQ

```text
INPUT:
  index  [1]  UInt32```

### JobEntry
```text
index  [1]  UInt32
  type   [2]  Byte
  code   [3]  Byte```
도구 다운로드
8Message is fragmented, no more to follow