Proxmark3GUI/ui/mainwindow.cpp

304 lines
7.9 KiB
C++
Raw Normal View History

2020-04-06 23:48:08 +08:00
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
2020-04-22 23:13:00 +08:00
pm3Thread = new QThread(this);
pm3 = new PM3Process(pm3Thread);
// pm3->moveToThread(pm3Thread);
// pm3->init();
pm3Thread->start();
2020-04-22 23:13:00 +08:00
pm3state = false;
2020-04-22 16:42:58 +08:00
util = new Util(this);
2020-04-22 23:13:00 +08:00
mifare = new Mifare(ui, util, this);
2020-04-22 16:42:58 +08:00
2020-04-09 09:10:47 +08:00
uiInit();
signalInit();
2020-04-06 23:48:08 +08:00
}
MainWindow::~MainWindow()
{
delete ui;
2020-04-22 16:00:56 +08:00
emit killPM3();
pm3Thread->exit(0);
pm3Thread->wait(5000);
delete pm3;
delete pm3Thread;
2020-04-06 23:48:08 +08:00
}
// ******************** basic functions ********************
void MainWindow::on_PM3_refreshPortButton_clicked()
{
ui->PM3_portBox->clear();
ui->PM3_portBox->addItem("");
QSerialPort serial;
QStringList serialList;
foreach(const QSerialPortInfo &info, QSerialPortInfo::availablePorts())
{
2020-04-22 23:13:00 +08:00
qDebug() << info.isBusy() << info.isNull() << info.portName();
serial.setPort(info);
if(serial.open(QIODevice::ReadWrite))
{
2020-04-22 23:13:00 +08:00
serialList << info.portName();
serial.close();
}
}
foreach(QString port, serialList)
{
ui->PM3_portBox->addItem(port);
}
}
2020-04-06 23:48:08 +08:00
void MainWindow::on_PM3_connectButton_clicked()
2020-04-06 23:48:08 +08:00
{
2020-04-22 23:13:00 +08:00
qDebug() << "Main:" << QThread::currentThread();
2020-04-16 00:39:10 +08:00
QString port = ui->PM3_portBox->currentText();
if(port == "")
2020-04-07 18:16:00 +08:00
QMessageBox::information(NULL, "Info", "Plz choose a port first", QMessageBox::Ok);
else
2020-04-15 00:38:43 +08:00
{
emit connectPM3(ui->PM3_pathEdit->text(), port);
2020-04-15 00:38:43 +08:00
}
2020-04-06 23:48:08 +08:00
}
void MainWindow::onPM3StateChanged(bool st, QString info)
2020-04-06 23:48:08 +08:00
{
2020-04-22 23:13:00 +08:00
pm3state = st;
if(st == true)
{
2020-04-22 23:13:00 +08:00
setStatusBar(PM3VersionBar, info);
setStatusBar(connectStatusBar, "Connected");
}
else
{
2020-04-22 23:13:00 +08:00
setStatusBar(connectStatusBar, "Not Connected");
}
}
void MainWindow::on_PM3_disconnectButton_clicked()
{
2020-04-22 23:13:00 +08:00
pm3state = false;
emit killPM3();
emit setSerialListener("", false);
2020-04-22 23:13:00 +08:00
setStatusBar(connectStatusBar, "Not Connected");
}
void MainWindow::refreshOutput(const QString& output)
{
2020-04-23 17:50:20 +08:00
// qDebug() << "MainWindow::refresh:" << output;
2020-04-22 23:13:00 +08:00
ui->Raw_outputEdit->insertPlainText(output);
ui->Raw_outputEdit->moveCursor(QTextCursor::End);
}
void MainWindow::refreshCMD(const QString& cmd)
{
ui->Raw_CMDEdit->setText(cmd);
if(cmd != "" && (ui->Raw_CMDHistoryWidget->count() == 0 || ui->Raw_CMDHistoryWidget->item(ui->Raw_CMDHistoryWidget->count() - 1)->text() != cmd))
ui->Raw_CMDHistoryWidget->addItem(cmd);
}
// *********************************************************
// ******************** raw command ********************
void MainWindow::on_Raw_sendCMDButton_clicked()
{
2020-04-22 21:14:33 +08:00
util->execCMD(ui->Raw_CMDEdit->text());
refreshCMD(ui->Raw_CMDEdit->text());
2020-04-06 23:48:08 +08:00
}
void MainWindow::on_Raw_clearOutputButton_clicked()
2020-04-06 23:48:08 +08:00
{
ui->Raw_outputEdit->clear();
2020-04-07 18:16:00 +08:00
}
void MainWindow::on_Raw_CMDHistoryBox_stateChanged(int arg1)
2020-04-07 18:16:00 +08:00
{
2020-04-22 23:13:00 +08:00
if(arg1 == Qt::Checked)
{
ui->Raw_CMDHistoryWidget->setVisible(true);
ui->Raw_clearHistoryButton->setVisible(true);
ui->Raw_CMDHistoryBox->setText("History:");
}
else
{
ui->Raw_CMDHistoryWidget->setVisible(false);
ui->Raw_clearHistoryButton->setVisible(false);
ui->Raw_CMDHistoryBox->setText("");
}
2020-04-07 18:16:00 +08:00
}
void MainWindow::on_Raw_clearHistoryButton_clicked()
2020-04-07 18:16:00 +08:00
{
ui->Raw_CMDHistoryWidget->clear();
2020-04-07 18:16:00 +08:00
}
void MainWindow::on_Raw_CMDHistoryWidget_itemDoubleClicked(QListWidgetItem *item)
2020-04-07 18:16:00 +08:00
{
ui->Raw_CMDEdit->setText(item->text());
ui->Raw_CMDEdit->setFocus();
2020-04-06 23:48:08 +08:00
}
2020-04-07 23:57:56 +08:00
void MainWindow::sendMSG() // send command when pressing Enter
{
if(ui->Raw_CMDEdit->hasFocus())
on_Raw_sendCMDButton_clicked();
}
// *****************************************************
// ******************** mifare ********************
void MainWindow::on_MF_Attack_infoButton_clicked()
{
2020-04-22 23:13:00 +08:00
mifare->info();
}
void MainWindow::on_MF_Attack_chkButton_clicked()
2020-04-07 23:57:56 +08:00
{
2020-04-22 23:13:00 +08:00
mifare->chk();
2020-04-07 23:57:56 +08:00
}
2020-04-08 18:18:53 +08:00
void MainWindow::on_MF_Attack_nestedButton_clicked()
2020-04-08 18:18:53 +08:00
{
2020-04-22 23:13:00 +08:00
mifare->nested();
}
void MainWindow::on_MF_Attack_hardnestedButton_clicked()
{
2020-04-22 23:13:00 +08:00
mifare->hardnested();
2020-04-08 18:18:53 +08:00
}
void MainWindow::on_MF_Attack_sniffButton_clicked()
2020-04-08 18:18:53 +08:00
{
2020-04-22 23:13:00 +08:00
mifare->sniff();
2020-04-08 18:18:53 +08:00
}
void MainWindow::on_MF_Attack_listButton_clicked()
2020-04-08 18:18:53 +08:00
{
2020-04-22 23:13:00 +08:00
mifare->list();
2020-04-16 00:39:10 +08:00
}
void MainWindow::on_MF_RW_readAllButton_clicked()
{
2020-04-22 23:13:00 +08:00
mifare->readAll();
}
2020-04-16 01:03:53 +08:00
void MainWindow::on_MF_RW_readBlockButton_clicked()
{
2020-04-22 23:13:00 +08:00
mifare->read();
2020-04-16 01:03:53 +08:00
}
void MainWindow::on_MF_RW_writeBlockButton_clicked()
{
2020-04-22 23:13:00 +08:00
mifare->write();
2020-04-16 01:03:53 +08:00
}
void MainWindow::on_MF_RW_writeAllButton_clicked()
{
2020-04-22 23:13:00 +08:00
mifare->writeAll();
}
void MainWindow::on_MF_RW_dumpButton_clicked()
{
mifare->dump();
}
void MainWindow::on_MF_RW_restoreButton_clicked()
{
mifare->restore();
}
// ************************************************
// ******************** other ********************
2020-04-09 09:10:47 +08:00
void MainWindow::uiInit()
{
connect(ui->Raw_CMDEdit, &QLineEdit::editingFinished, this, &MainWindow::sendMSG);
2020-04-16 00:39:10 +08:00
connectStatusBar = new QLabel(this);
programStatusBar = new QLabel(this);
PM3VersionBar = new QLabel(this);
setStatusBar(connectStatusBar, "Not Connected");
setStatusBar(programStatusBar, "Idle");
setStatusBar(PM3VersionBar, "");
ui->statusbar->addPermanentWidget(PM3VersionBar, 1);
ui->statusbar->addPermanentWidget(connectStatusBar, 1);
ui->statusbar->addPermanentWidget(programStatusBar, 1);
ui->MF_dataWidget->setColumnCount(3);
ui->MF_dataWidget->setRowCount(64);
ui->MF_dataWidget->setHorizontalHeaderItem(0, new QTableWidgetItem("Sec"));
ui->MF_dataWidget->setHorizontalHeaderItem(1, new QTableWidgetItem("Blk"));
2020-04-16 00:39:10 +08:00
ui->MF_dataWidget->setHorizontalHeaderItem(2, new QTableWidgetItem("Data"));
for(int i = 0; i < 64; i++)
2020-04-23 17:50:20 +08:00
{
2020-04-16 00:39:10 +08:00
ui->MF_dataWidget->setItem(i, 1, new QTableWidgetItem(QString::number(i)));
2020-04-23 17:50:20 +08:00
ui->MF_dataWidget->setItem(i, 2, new QTableWidgetItem(""));
}
2020-04-16 00:39:10 +08:00
for(int i = 0; i < 16; i++)
ui->MF_dataWidget->setItem(i * 4, 0, new QTableWidgetItem(QString::number(i)));
ui->MF_dataWidget->verticalHeader()->setVisible(false);
ui->MF_dataWidget->setColumnWidth(0, 35);
ui->MF_dataWidget->setColumnWidth(1, 35);
2020-04-16 00:39:10 +08:00
ui->MF_dataWidget->setColumnWidth(2, 400);
ui->MF_keyWidget->setColumnCount(3);
ui->MF_keyWidget->setRowCount(16);
ui->MF_keyWidget->setHorizontalHeaderItem(0, new QTableWidgetItem("Sec"));
2020-04-16 00:39:10 +08:00
ui->MF_keyWidget->setHorizontalHeaderItem(1, new QTableWidgetItem("KeyA"));
ui->MF_keyWidget->setHorizontalHeaderItem(2, new QTableWidgetItem("KeyB"));
for(int i = 0; i < 16; i++)
2020-04-23 17:50:20 +08:00
{
2020-04-16 00:39:10 +08:00
ui->MF_keyWidget->setItem(i, 0, new QTableWidgetItem(QString::number(i)));
2020-04-23 17:50:20 +08:00
ui->MF_keyWidget->setItem(i, 1, new QTableWidgetItem(""));
ui->MF_keyWidget->setItem(i, 2, new QTableWidgetItem(""));
}
ui->MF_keyWidget->verticalHeader()->setVisible(false);
ui->MF_keyWidget->setColumnWidth(0, 35);
ui->MF_keyWidget->setColumnWidth(1, 110);
ui->MF_keyWidget->setColumnWidth(2, 110);
2020-04-09 09:10:47 +08:00
for(int i = 0; i < 64; i++)
{
ui->MF_RW_blockBox->addItem(QString::number(i));
}
on_Raw_CMDHistoryBox_stateChanged(Qt::Unchecked);
on_PM3_refreshPortButton_clicked();
2020-04-09 09:10:47 +08:00
}
void MainWindow::signalInit()
{
2020-04-22 21:14:33 +08:00
connect(pm3, &PM3Process::newOutput, util, &Util::processOutput);
2020-04-22 23:13:00 +08:00
connect(util, &Util::refreshOutput, this, &MainWindow::refreshOutput);
2020-04-22 23:13:00 +08:00
connect(this, &MainWindow::connectPM3, pm3, &PM3Process::connectPM3);
connect(pm3, &PM3Process::PM3StatedChanged, this, &MainWindow::onPM3StateChanged);
2020-04-22 23:13:00 +08:00
connect(this, &MainWindow::killPM3, pm3, &PM3Process::kill);
2020-04-22 16:00:56 +08:00
2020-04-22 23:13:00 +08:00
connect(util, &Util::write, pm3, &PM3Process::write);
}
2020-04-16 00:39:10 +08:00
void MainWindow::setStatusBar(QLabel* target, const QString & text)
{
2020-04-16 00:39:10 +08:00
if(target == PM3VersionBar)
target->setText("HW Version:" + text);
2020-04-16 00:39:10 +08:00
else if(target == connectStatusBar)
2020-04-23 20:46:27 +08:00
target->setText("PM3:" + text);
2020-04-16 00:39:10 +08:00
else if(target == programStatusBar)
2020-04-23 20:46:27 +08:00
target->setText("State:" + text);
}
// ***********************************************