AdaptixC2-Mod0/Source/UI/Dialogs/DialogAgentData.cpp
2026-04-06 00:20:51 -05:00

264 lines
8.4 KiB
C++

#include <UI/Dialogs/DialogAgentData.h>
#include <Client/Requestor.h>
DialogAgentData::DialogAgentData(QWidget* parent) : QDialog(parent)
{
this->createUI();
connect(buttonUpdate, &QPushButton::clicked, this, &DialogAgentData::onButtonUpdate);
connect(buttonCancel, &QPushButton::clicked, this, &DialogAgentData::onButtonCancel);
}
DialogAgentData::~DialogAgentData() = default;
void DialogAgentData::createUI()
{
this->setWindowTitle("Set Agent Data");
this->setProperty("Main", "base");
this->setMinimumWidth(450);
groupNetwork = new QGroupBox("Network", this);
layoutNetwork = new QGridLayout(groupNetwork);
labelInternalIP = new QLabel("Internal IP:", this);
inputInternalIP = new QLineEdit(this);
labelExternalIP = new QLabel("External IP:", this);
inputExternalIP = new QLineEdit(this);
layoutNetwork->addWidget(labelInternalIP, 0, 0);
layoutNetwork->addWidget(inputInternalIP, 0, 1);
layoutNetwork->addWidget(labelExternalIP, 0, 2);
layoutNetwork->addWidget(inputExternalIP, 0, 3);
groupCoding = new QGroupBox("Coding", this);
layoutCoding = new QGridLayout(groupCoding);
labelACP = new QLabel("ACP:", this);
inputACP = new QSpinBox(this);
inputACP->setRange(0, 65535);
labelOemCP = new QLabel("OEM CP:", this);
inputOemCP = new QSpinBox(this);
inputOemCP->setRange(0, 65535);
layoutCoding->addWidget(labelACP, 0, 0);
layoutCoding->addWidget(inputACP, 0, 1);
layoutCoding->addWidget(labelOemCP, 0, 2);
layoutCoding->addWidget(inputOemCP, 0, 3);
groupProcess = new QGroupBox("Process", this);
layoutProcess = new QGridLayout(groupProcess);
labelProcess = new QLabel("Process:", this);
inputProcess = new QLineEdit(this);
inputArch = new QComboBox(this);
inputArch->addItems({"x86", "x64"});
inputElevated = new QCheckBox("Elevated", this);
labelPid = new QLabel("PID:", this);
inputPid = new QLineEdit(this);
labelTid = new QLabel("TID:", this);
inputTid = new QLineEdit(this);
layoutProcess->addWidget(labelProcess, 0, 0);
layoutProcess->addWidget(inputProcess, 0, 1);
layoutProcess->addWidget(inputArch, 0, 2);
layoutProcess->addWidget(inputElevated, 0, 3);
layoutProcess->addWidget(labelPid, 1, 0);
layoutProcess->addWidget(inputPid, 1, 1);
layoutProcess->addWidget(labelTid, 1, 2);
layoutProcess->addWidget(inputTid, 1, 3);
groupOS = new QGroupBox("OS", this);
layoutOS = new QGridLayout(groupOS);
labelOs = new QLabel("OS:", this);
inputOs = new QComboBox(this);
inputOs->addItem("Windows", OS_WINDOWS);
inputOs->addItem("Linux", OS_LINUX);
inputOs->addItem("macOS", OS_MAC);
inputOs->addItem("Unknown", OS_UNKNOWN);
inputOsDesc = new QLineEdit(this);
inputOsDesc->setPlaceholderText("description");
labelGmtOffset = new QLabel("GMT Offset:", this);
inputGmtOffset = new QSpinBox(this);
inputGmtOffset->setRange(-12, 14);
layoutOS->addWidget(labelOs, 0, 0);
layoutOS->addWidget(inputOs, 0, 1);
layoutOS->addWidget(inputOsDesc, 0, 2);
layoutOS->addWidget(labelGmtOffset, 0, 3);
layoutOS->addWidget(inputGmtOffset, 0, 4);
groupContext = new QGroupBox("Context", this);
layoutContext = new QGridLayout(groupContext);
labelDomain = new QLabel("Domain:", this);
inputDomain = new QLineEdit(this);
labelComputer = new QLabel("Computer:", this);
inputComputer = new QLineEdit(this);
labelUsername = new QLabel("Username:", this);
inputUsername = new QLineEdit(this);
labelImpersonated = new QLabel("Impersonated:", this);
inputImpersonated = new QLineEdit(this);
layoutContext->addWidget(labelDomain, 0, 0);
layoutContext->addWidget(inputDomain, 0, 1);
layoutContext->addWidget(labelComputer, 0, 2);
layoutContext->addWidget(inputComputer, 0, 3);
layoutContext->addWidget(labelUsername, 1, 0);
layoutContext->addWidget(inputUsername, 1, 1);
layoutContext->addWidget(labelImpersonated, 1, 2);
layoutContext->addWidget(inputImpersonated, 1, 3);
buttonUpdate = new QPushButton("Update", this);
buttonUpdate->setDefault(true);
buttonCancel = new QPushButton("Cancel", this);
horizontalSpacer = new QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);
hLayoutBottom = new QHBoxLayout();
hLayoutBottom->addItem(horizontalSpacer);
hLayoutBottom->addWidget(buttonUpdate);
hLayoutBottom->addWidget(buttonCancel);
mainLayout = new QVBoxLayout(this);
mainLayout->addWidget(groupNetwork);
mainLayout->addWidget(groupCoding);
mainLayout->addWidget(groupProcess);
mainLayout->addWidget(groupOS);
mainLayout->addWidget(groupContext);
mainLayout->addLayout(hLayoutBottom);
this->setLayout(mainLayout);
}
void DialogAgentData::SetProfile(const AuthProfile &profile)
{
this->authProfile = profile;
}
void DialogAgentData::SetAgentData(const AgentData &data)
{
this->agentId = data.Id;
originalInternalIP = data.InternalIP;
originalExternalIP = data.ExternalIP;
originalGmtOffset = data.GmtOffset;
originalACP = data.ACP;
originalOemCP = data.OemCP;
originalPid = data.Pid;
originalTid = data.Tid;
originalArch = data.Arch;
originalElevated = data.Elevated;
originalProcess = data.Process;
originalOs = data.Os;
originalOsDesc = data.OsDesc;
originalDomain = data.Domain;
originalComputer = data.Computer;
originalUsername = data.Username;
originalImpersonated = data.Impersonated;
inputInternalIP->setText(data.InternalIP);
inputExternalIP->setText(data.ExternalIP);
inputGmtOffset->setValue(data.GmtOffset);
inputACP->setValue(data.ACP);
inputOemCP->setValue(data.OemCP);
inputPid->setText(data.Pid);
inputTid->setText(data.Tid);
inputArch->setCurrentText(data.Arch);
inputElevated->setChecked(data.Elevated);
inputProcess->setText(data.Process);
int osIndex = inputOs->findData(data.Os);
if (osIndex >= 0)
inputOs->setCurrentIndex(osIndex);
inputOsDesc->setText(data.OsDesc);
inputDomain->setText(data.Domain);
inputComputer->setText(data.Computer);
inputUsername->setText(data.Username);
inputImpersonated->setText(data.Impersonated);
}
void DialogAgentData::Start()
{
this->setModal(true);
this->show();
}
void DialogAgentData::onButtonUpdate()
{
QJsonObject updateData;
if (inputInternalIP->text() != originalInternalIP)
updateData["internal_ip"] = inputInternalIP->text();
if (inputExternalIP->text() != originalExternalIP)
updateData["external_ip"] = inputExternalIP->text();
if (inputGmtOffset->value() != originalGmtOffset)
updateData["gmt_offset"] = inputGmtOffset->value();
if (inputACP->value() != originalACP)
updateData["acp"] = inputACP->value();
if (inputOemCP->value() != originalOemCP)
updateData["oemcp"] = inputOemCP->value();
if (inputPid->text() != originalPid)
updateData["pid"] = inputPid->text();
if (inputTid->text() != originalTid)
updateData["tid"] = inputTid->text();
if (inputArch->currentText() != originalArch)
updateData["arch"] = inputArch->currentText();
if (inputElevated->isChecked() != originalElevated)
updateData["elevated"] = inputElevated->isChecked();
if (inputProcess->text() != originalProcess)
updateData["process"] = inputProcess->text();
int currentOs = inputOs->currentData().toInt();
if (currentOs != originalOs)
updateData["os"] = currentOs;
if (inputOsDesc->text() != originalOsDesc)
updateData["os_desc"] = inputOsDesc->text();
if (inputDomain->text() != originalDomain)
updateData["domain"] = inputDomain->text();
if (inputComputer->text() != originalComputer)
updateData["computer"] = inputComputer->text();
if (inputUsername->text() != originalUsername)
updateData["username"] = inputUsername->text();
if (inputImpersonated->text() != originalImpersonated)
updateData["impersonated"] = inputImpersonated->text();
if (updateData.isEmpty()) {
this->close();
return;
}
HttpReqAgentUpdateDataAsync(agentId, updateData, authProfile, nullptr);
this->close();
}
void DialogAgentData::onButtonCancel()
{
this->close();
}