cutter/src/widgets/Dashboard.cpp

189 lines
5.2 KiB
C++
Raw Normal View History

#include "Dashboard.h"
#include "ui_Dashboard.h"
2018-02-04 17:27:48 +00:00
#include "utils/Helpers.h"
2017-10-01 19:09:42 +00:00
#include "MainWindow.h"
#include <QDebug>
#include <QJsonArray>
#include <QStringList>
#include <QJsonObject>
#include <QJsonDocument>
#include <QFile>
#include <QLayoutItem>
Dashboard::Dashboard(MainWindow *main, QWidget *parent) :
QDockWidget(parent),
2017-10-01 18:08:12 +00:00
ui(new Ui::Dashboard),
main(main)
{
ui->setupUi(this);
connect(Core(), SIGNAL(refreshAll()), this, SLOT(updateContents()));
}
2017-10-02 09:41:28 +00:00
Dashboard::~Dashboard() {}
2017-04-09 19:55:06 +00:00
void Dashboard::updateContents()
{
// Parse and add JSON file info
2017-10-09 18:08:35 +00:00
QString info = CutterCore::getInstance()->getFileInfo();
QJsonDocument docu = QJsonDocument::fromJson(info.toUtf8());
QJsonObject object = docu.object();
QJsonValue value_core = object.value(QString("core"));
QJsonObject item = value_core.toObject();
//qDebug() << tr("QJsonObject of description: ") << item;
QJsonValue value_bin = object.value(QString("bin"));
//qDebug() << value;
QJsonObject item2 = value_bin.toObject();
//qDebug() << tr("QJsonObject of description: ") << item;
this->ui->fileEdit->setText(item["file"].toString());
this->ui->formatEdit->setText(item["format"].toString());
this->ui->modeEdit->setText(item["mode"].toString());
this->ui->typeEdit->setText(item["type"].toString());
2018-02-04 17:27:48 +00:00
this->ui->sizeEdit->setText(qhelpers::formatBytecount(item["size"].toDouble()));
2017-04-09 19:55:06 +00:00
this->ui->fdEdit->setText(QString::number(item["fd"].toDouble()));
this->ui->archEdit->setText(item2["arch"].toString());
this->ui->langEdit->setText(item2["lang"].toString().toUpper());
this->ui->classEdit->setText(item2["class"].toString());
this->ui->machineEdit->setText(item2["machine"].toString());
this->ui->osEdit->setText(item2["os"].toString());
this->ui->subsysEdit->setText(item2["subsys"].toString());
this->ui->endianEdit->setText(item2["endian"].toString());
this->ui->compiledEdit->setText(item2["compiled"].toString());
2017-04-09 19:55:06 +00:00
this->ui->bitsEdit->setText(QString::number(item2["bits"].toDouble()));
if (!item2["relro"].isUndefined())
{
2017-06-09 08:40:27 +00:00
QString relro = item2["relro"].toString().split(" ").at(0);
relro[0] = relro[0].toUpper();
this->ui->relroEdit->setText(relro);
}
2017-06-02 16:35:26 +00:00
2017-04-09 19:55:06 +00:00
this->ui->baddrEdit->setText(QString::number(item2["baddr"].toDouble()));
2017-04-09 19:55:06 +00:00
if (item2["va"].toBool() == true)
{
this->ui->vaEdit->setText("True");
2017-04-09 19:55:06 +00:00
}
else
{
this->ui->vaEdit->setText("False");
}
2017-04-09 19:55:06 +00:00
if (item2["canary"].toBool() == true)
{
this->ui->canaryEdit->setText("True");
2017-04-09 19:55:06 +00:00
}
else
{
this->ui->canaryEdit->setText("False");
2018-01-09 11:03:07 +00:00
//this->ui->canaryEdit->setStyleSheet("color: rgb(255, 0, 0);");
}
2017-04-09 19:55:06 +00:00
if (item2["crypto"].toBool() == true)
{
this->ui->cryptoEdit->setText("True");
2017-04-09 19:55:06 +00:00
}
else
{
this->ui->cryptoEdit->setText("False");
}
2017-04-09 19:55:06 +00:00
if (item2["nx"].toBool() == true)
{
this->ui->nxEdit->setText("True");
2017-04-09 19:55:06 +00:00
}
else
{
this->ui->nxEdit->setText("False");
2018-01-09 11:03:07 +00:00
//this->ui->nxEdit->setStyleSheet("color: rgb(255, 0, 0);");
}
2017-04-09 19:55:06 +00:00
if (item2["pic"].toBool() == true)
{
this->ui->picEdit->setText("True");
2017-04-09 19:55:06 +00:00
}
else
{
this->ui->picEdit->setText("False");
2018-01-09 11:03:07 +00:00
//this->ui->picEdit->setStyleSheet("color: rgb(255, 0, 0);");
}
2017-04-09 19:55:06 +00:00
if (item2["static"].toBool() == true)
{
this->ui->staticEdit->setText("True");
2017-04-09 19:55:06 +00:00
}
else
{
this->ui->staticEdit->setText("False");
}
2017-04-09 19:55:06 +00:00
if (item2["stripped"].toBool() == true)
{
this->ui->strippedEdit->setText("True");
2017-04-09 19:55:06 +00:00
}
else
{
this->ui->strippedEdit->setText("False");
}
2017-04-09 19:55:06 +00:00
if (item2["relocs"].toBool() == true)
{
this->ui->relocsEdit->setText("True");
2017-04-09 19:55:06 +00:00
}
else
{
this->ui->relocsEdit->setText("False");
}
// Add file hashes and libraries
2017-10-09 18:08:35 +00:00
QString md5 = CutterCore::getInstance()->cmd("e file.md5");
QString sha1 = CutterCore::getInstance()->cmd("e file.sha1");
ui->md5Edit->setText(md5);
ui->sha1Edit->setText(sha1);
2017-10-09 18:08:35 +00:00
QString libs = CutterCore::getInstance()->cmd("il");
QStringList lines = libs.split("\n", QString::SkipEmptyParts);
if (!lines.isEmpty())
2017-04-09 19:55:06 +00:00
{
lines.removeFirst();
lines.removeLast();
}
// dunno: why not label->setText(lines.join("\n")?
while (ui->verticalLayout_2->count() > 0)
{
QLayoutItem *item = ui->verticalLayout_2->takeAt(0);
if (item != nullptr)
{
QWidget *w = item->widget();
if (w != nullptr)
{
w->deleteLater();
}
delete item;
}
}
for (QString lib : lines)
2017-04-09 19:55:06 +00:00
{
QLabel *label = new QLabel(this);
label->setText(lib);
label->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);
ui->verticalLayout_2->addWidget(label);
}
2017-04-09 19:55:06 +00:00
QSpacerItem *spacer = new QSpacerItem(1, 1, QSizePolicy::Fixed, QSizePolicy::Expanding);
ui->verticalLayout_2->addSpacerItem(spacer);
// Add entropy value
2017-10-09 18:08:35 +00:00
QString entropy = CutterCore::getInstance()->cmd("ph entropy").trimmed();
ui->lblEntropy->setText(entropy);
// Get stats for the graphs
2017-10-09 18:08:35 +00:00
QStringList stats = CutterCore::getInstance()->getStats();
}