mirror of
https://github.com/wh201906/Proxmark3GUI.git
synced 2026-07-14 22:55:32 +08:00
Support Mifare MINI, 1k, 2k and 4k card
This commit is contained in:
+71
-19
@@ -156,6 +156,27 @@ void MainWindow::sendMSG() // send command when pressing Enter
|
||||
// *****************************************************
|
||||
|
||||
// ******************** mifare ********************
|
||||
void MainWindow::MF_onTypeChanged(int id, bool st)
|
||||
{
|
||||
typeBtnGroup->blockSignals(true);
|
||||
qDebug() << id << typeBtnGroup->checkedId();
|
||||
if(!st)
|
||||
{
|
||||
int result = QMessageBox::question(this, tr("info"), tr("When Changeing card type, the data and keys in this app will be cleard.\nContinue?"), QMessageBox::Yes | QMessageBox::No);
|
||||
if(result == QMessageBox::Yes)
|
||||
{
|
||||
qDebug() << "Yes";
|
||||
mifare->setCardType(typeBtnGroup->checkedId());
|
||||
MF_widgetReset();
|
||||
}
|
||||
else
|
||||
{
|
||||
qDebug() << "No";
|
||||
typeBtnGroup->button(id)->setChecked(true);
|
||||
}
|
||||
}
|
||||
typeBtnGroup->blockSignals(false);
|
||||
}
|
||||
|
||||
void MainWindow::on_MF_Attack_infoButton_clicked()
|
||||
{
|
||||
@@ -217,6 +238,30 @@ void MainWindow::on_MF_RW_restoreButton_clicked()
|
||||
mifare->restore();
|
||||
}
|
||||
|
||||
void MainWindow::MF_widgetReset()
|
||||
{
|
||||
int secs = mifare->cardType.sectors;
|
||||
int blks = mifare->cardType.blks[secs - 1] + mifare->cardType.blk[secs - 1];
|
||||
ui->MF_RW_blockBox->clear();
|
||||
ui->MF_keyWidget->setRowCount(secs);
|
||||
ui->MF_dataWidget->setRowCount(blks);
|
||||
|
||||
for(int i = 0; i < blks; i++)
|
||||
{
|
||||
setTableItem(ui->MF_dataWidget, i, 0, "");
|
||||
setTableItem(ui->MF_dataWidget, i, 1, QString::number(i));
|
||||
setTableItem(ui->MF_dataWidget, i, 2, "");
|
||||
ui->MF_RW_blockBox->addItem(QString::number(i));
|
||||
}
|
||||
|
||||
for(int i = 0; i < secs; i++)
|
||||
{
|
||||
setTableItem(ui->MF_keyWidget, i, 0, QString::number(i));
|
||||
setTableItem(ui->MF_keyWidget, i, 1, "");
|
||||
setTableItem(ui->MF_keyWidget, i, 2, "");
|
||||
setTableItem(ui->MF_dataWidget, mifare->cardType.blks[i], 0, QString::number(i));
|
||||
}
|
||||
}
|
||||
// ************************************************
|
||||
|
||||
|
||||
@@ -237,42 +282,42 @@ void MainWindow::uiInit()
|
||||
ui->statusbar->addPermanentWidget(programStatusBar, 1);
|
||||
|
||||
ui->MF_dataWidget->setColumnCount(3);
|
||||
ui->MF_dataWidget->setRowCount(64);
|
||||
ui->MF_dataWidget->setHorizontalHeaderItem(0, new QTableWidgetItem(tr("Sec")));
|
||||
ui->MF_dataWidget->setHorizontalHeaderItem(1, new QTableWidgetItem(tr("Blk")));
|
||||
ui->MF_dataWidget->setHorizontalHeaderItem(2, new QTableWidgetItem(tr("Data")));
|
||||
for(int i = 0; i < 64; i++)
|
||||
{
|
||||
ui->MF_dataWidget->setItem(i, 1, new QTableWidgetItem(QString::number(i)));
|
||||
ui->MF_dataWidget->setItem(i, 2, new QTableWidgetItem(""));
|
||||
}
|
||||
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);
|
||||
ui->MF_dataWidget->setColumnWidth(2, 400);
|
||||
// for(int i = 0; i < 256; i++)
|
||||
// {
|
||||
// ui->MF_dataWidget->setItem(i, 0, new QTableWidgetItem());
|
||||
// ui->MF_dataWidget->setItem(i, 1, new QTableWidgetItem());
|
||||
// ui->MF_dataWidget->setItem(i, 2, new QTableWidgetItem());
|
||||
// }
|
||||
|
||||
ui->MF_keyWidget->setColumnCount(3);
|
||||
ui->MF_keyWidget->setRowCount(16);
|
||||
ui->MF_keyWidget->setHorizontalHeaderItem(0, new QTableWidgetItem(tr("Sec")));
|
||||
ui->MF_keyWidget->setHorizontalHeaderItem(1, new QTableWidgetItem(tr("KeyA")));
|
||||
ui->MF_keyWidget->setHorizontalHeaderItem(2, new QTableWidgetItem(tr("KeyB")));
|
||||
for(int i = 0; i < 16; i++)
|
||||
{
|
||||
ui->MF_keyWidget->setItem(i, 0, new QTableWidgetItem(QString::number(i)));
|
||||
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);
|
||||
// for(int i = 0; i < 40; i++)
|
||||
// {
|
||||
// ui->MF_keyWidget->setItem(i, 0, new QTableWidgetItem());
|
||||
// ui->MF_keyWidget->setItem(i, 1, new QTableWidgetItem());
|
||||
// ui->MF_keyWidget->setItem(i, 2, new QTableWidgetItem());
|
||||
// }
|
||||
|
||||
for(int i = 0; i < 64; i++)
|
||||
{
|
||||
ui->MF_RW_blockBox->addItem(QString::number(i));
|
||||
}
|
||||
MF_widgetReset();
|
||||
typeBtnGroup = new QButtonGroup(this);
|
||||
typeBtnGroup->addButton(ui->MF_Type_miniButton, 0);
|
||||
typeBtnGroup->addButton(ui->MF_Type_1kButton, 1);
|
||||
typeBtnGroup->addButton(ui->MF_Type_2kButton, 2);
|
||||
typeBtnGroup->addButton(ui->MF_Type_4kButton, 4);
|
||||
connect(typeBtnGroup, QOverload<int, bool>::of(&QButtonGroup::buttonToggled), this, &MainWindow::MF_onTypeChanged);
|
||||
|
||||
on_Raw_CMDHistoryBox_stateChanged(Qt::Unchecked);
|
||||
on_PM3_refreshPortButton_clicked();
|
||||
@@ -299,5 +344,12 @@ void MainWindow::setStatusBar(QLabel* target, const QString & text)
|
||||
else if(target == programStatusBar)
|
||||
target->setText(tr("State:") + text);
|
||||
}
|
||||
|
||||
void MainWindow::setTableItem(QTableWidget* widget, int row, int column, const QString& text)
|
||||
{
|
||||
if(widget->item(row, column) == nullptr)
|
||||
widget->setItem(row, column, new QTableWidgetItem());
|
||||
widget->item(row, column)->setText(text);
|
||||
}
|
||||
// ***********************************************
|
||||
|
||||
|
||||
+16
-7
@@ -7,6 +7,8 @@
|
||||
#include <QDebug>
|
||||
#include <QMessageBox>
|
||||
#include <QListWidgetItem>
|
||||
#include <QButtonGroup>
|
||||
#include <QRadioButton>
|
||||
#include <QtSerialPort/QSerialPortInfo>
|
||||
#include <QtSerialPort/QSerialPort>
|
||||
|
||||
@@ -28,12 +30,12 @@ public:
|
||||
MainWindow(QWidget *parent = nullptr);
|
||||
~MainWindow();
|
||||
|
||||
bool MF_isKeyValid(const QString key);
|
||||
public slots:
|
||||
void refreshOutput(const QString &output);
|
||||
void refreshCMD(const QString &cmd);
|
||||
void setStatusBar(QLabel* target, const QString & text);
|
||||
void onPM3StateChanged(bool st, QString info);
|
||||
void MF_onTypeChanged(int id, bool st);
|
||||
private slots:
|
||||
|
||||
void on_PM3_connectButton_clicked();
|
||||
@@ -80,16 +82,23 @@ private slots:
|
||||
|
||||
private:
|
||||
Ui::MainWindow *ui;
|
||||
PM3Process* pm3;
|
||||
bool pm3state;
|
||||
QThread* pm3Thread;
|
||||
Mifare* mifare;
|
||||
Util* util;
|
||||
void uiInit();
|
||||
QButtonGroup* typeBtnGroup;
|
||||
QLabel* connectStatusBar;
|
||||
QLabel* programStatusBar;
|
||||
QLabel* PM3VersionBar;
|
||||
void uiInit();
|
||||
|
||||
PM3Process* pm3;
|
||||
bool pm3state;
|
||||
QThread* pm3Thread;
|
||||
|
||||
Mifare* mifare;
|
||||
Util* util;
|
||||
|
||||
|
||||
void signalInit();
|
||||
void MF_widgetReset();
|
||||
void setTableItem(QTableWidget *widget, int row, int column, const QString &text);
|
||||
signals:
|
||||
void connectPM3(const QString path, const QString port);
|
||||
void killPM3();
|
||||
|
||||
+22
-12
@@ -236,10 +236,13 @@
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_9">
|
||||
<item>
|
||||
<widget class="QGroupBox" name="groupBox_2">
|
||||
<widget class="QGroupBox" name="MF_typeGroupBox">
|
||||
<property name="title">
|
||||
<string>Card Type</string>
|
||||
</property>
|
||||
<property name="checkable">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_10">
|
||||
<property name="topMargin">
|
||||
<number>5</number>
|
||||
@@ -248,7 +251,14 @@
|
||||
<number>5</number>
|
||||
</property>
|
||||
<item>
|
||||
<widget class="QRadioButton" name="radioButton">
|
||||
<widget class="QRadioButton" name="MF_Type_miniButton">
|
||||
<property name="text">
|
||||
<string>MINI</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QRadioButton" name="MF_Type_1kButton">
|
||||
<property name="text">
|
||||
<string>1K</string>
|
||||
</property>
|
||||
@@ -258,14 +268,14 @@
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QRadioButton" name="radioButton_2">
|
||||
<widget class="QRadioButton" name="MF_Type_2kButton">
|
||||
<property name="text">
|
||||
<string>2K</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QRadioButton" name="radioButton_3">
|
||||
<widget class="QRadioButton" name="MF_Type_4kButton">
|
||||
<property name="text">
|
||||
<string>4K</string>
|
||||
</property>
|
||||
@@ -275,7 +285,7 @@
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QGroupBox" name="groupBox">
|
||||
<widget class="QGroupBox" name="MF_fileGroupBox">
|
||||
<property name="title">
|
||||
<string>File</string>
|
||||
</property>
|
||||
@@ -287,7 +297,7 @@
|
||||
<number>5</number>
|
||||
</property>
|
||||
<item>
|
||||
<widget class="QPushButton" name="pushButton_3">
|
||||
<widget class="QPushButton" name="MF_File_loadButton">
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>40</width>
|
||||
@@ -300,7 +310,7 @@
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="pushButton_4">
|
||||
<widget class="QPushButton" name="MF_File_saveButton">
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>40</width>
|
||||
@@ -313,7 +323,7 @@
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QCheckBox" name="checkBox">
|
||||
<widget class="QCheckBox" name="MF_File_dataBox">
|
||||
<property name="text">
|
||||
<string>Data</string>
|
||||
</property>
|
||||
@@ -323,7 +333,7 @@
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QCheckBox" name="checkBox_2">
|
||||
<widget class="QCheckBox" name="MF_File_keyBox">
|
||||
<property name="text">
|
||||
<string>Key</string>
|
||||
</property>
|
||||
@@ -439,13 +449,13 @@
|
||||
<widget class="QComboBox" name="MF_RW_blockBox">
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>40</width>
|
||||
<width>60</width>
|
||||
<height>0</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="maximumSize">
|
||||
<size>
|
||||
<width>40</width>
|
||||
<width>60</width>
|
||||
<height>16777215</height>
|
||||
</size>
|
||||
</property>
|
||||
@@ -453,7 +463,7 @@
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="currentText">
|
||||
<string>0</string>
|
||||
<string/>
|
||||
</property>
|
||||
<property name="currentIndex">
|
||||
<number>-1</number>
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
#include "mf_attack_hardnesteddialog.h"
|
||||
#include "ui_mf_attack_hardnesteddialog.h"
|
||||
|
||||
MF_Attack_hardnestedDialog::MF_Attack_hardnestedDialog(QWidget *parent) :
|
||||
MF_Attack_hardnestedDialog::MF_Attack_hardnestedDialog(int blocks, QWidget *parent) :
|
||||
QDialog(parent),
|
||||
ui(new Ui::MF_Attack_hardnestedDialog)
|
||||
{
|
||||
ui->setupUi(this);
|
||||
for(int i = 0; i < 64; i++)
|
||||
for(int i = 0; i < blocks; i++)
|
||||
{
|
||||
ui->knownKeySectorBox->addItem(QString::number(i));
|
||||
ui->targetKeySectorBox->addItem(QString::number(i));
|
||||
|
||||
@@ -12,7 +12,7 @@ class MF_Attack_hardnestedDialog : public QDialog
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
explicit MF_Attack_hardnestedDialog(QWidget *parent = nullptr);
|
||||
explicit MF_Attack_hardnestedDialog(int blocks, QWidget *parent = nullptr);
|
||||
~MF_Attack_hardnestedDialog();
|
||||
|
||||
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>Dialog</string>
|
||||
<string>Hardnested Attack</string>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout">
|
||||
<item>
|
||||
@@ -34,13 +34,13 @@
|
||||
<widget class="QComboBox" name="knownKeySectorBox">
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>40</width>
|
||||
<width>60</width>
|
||||
<height>0</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="maximumSize">
|
||||
<size>
|
||||
<width>40</width>
|
||||
<width>60</width>
|
||||
<height>16777215</height>
|
||||
</size>
|
||||
</property>
|
||||
@@ -109,13 +109,13 @@
|
||||
<widget class="QComboBox" name="targetKeySectorBox">
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>40</width>
|
||||
<width>60</width>
|
||||
<height>0</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="maximumSize">
|
||||
<size>
|
||||
<width>40</width>
|
||||
<width>60</width>
|
||||
<height>16777215</height>
|
||||
</size>
|
||||
</property>
|
||||
|
||||
Reference in New Issue
Block a user