diff --git a/Proxmark3GUI.pro b/Proxmark3GUI.pro
index 872d42e..926190c 100644
--- a/Proxmark3GUI.pro
+++ b/Proxmark3GUI.pro
@@ -46,7 +46,7 @@ qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target
-VERSION = 0.0.1
+VERSION = 0.1
QMAKE_TARGET_PRODUCT = "Proxmark3GUI"
QMAKE_TARGET_DESCRIPTION = "Proxmark3GUI"
QMAKE_TARGET_COMPANY = "wh201906"
diff --git a/lang/en_US.ts b/lang/en_US.ts
index 80fd2cf..729872e 100644
--- a/lang/en_US.ts
+++ b/lang/en_US.ts
@@ -33,7 +33,7 @@
-
+
@@ -41,7 +41,7 @@
MF_UID_parameterDialog
-
+
@@ -59,410 +59,550 @@
-
-
-
-
-
MainWindow
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
+
+
+
+
+
-
+
-
+
-
+
-
+
-
+
-
-
+
+
-
-
+
+
-
-
+
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
-
+
+
-
-
+
+
-
-
-
+
+
+
-
-
+
+
-
+
-
+
-
+
-
+
-
+
+
-
+
-
+
-
-
+
+
-
+
-
+
+
-
-
+
+
-
+
-
+
-
-
+
+
-
+
-
+
-
+
-
-
-
-
+
+
+
+
+
+
+
+
+
-
+
-
+
-
-
+
+
-
-
+
+
-
-
+
+
+
-
-
+
+
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
+
+
-
+
-
+
-
+
-
+
-
+
-
+
+
+
+
+
+
Mifare
-
-
+
+
-
-
-
-
+
+
+
+
+
-
-
+
+
+
+
+
+
+
diff --git a/lang/zh_CN.ts b/lang/zh_CN.ts
index eb7e8a3..921ff20 100644
--- a/lang/zh_CN.ts
+++ b/lang/zh_CN.ts
@@ -37,16 +37,24 @@
-
+
目标块:
+
+
+ 目标块:
+
MF_UID_parameterDialog
-
- 对话框
+ 对话框
+
+
+
+
+ 设置卡参数
@@ -64,387 +72,546 @@
-
- 如果留空,则对应参数将保持不变
+ 如果留空,则对应参数将保持不变
MainWindow
-
+
-
+
路径:
-
+
刷新端口
-
+
连接
-
+
断开
-
+
- Mifare卡
+ Mifare(IC)卡
-
+
-
+
-
+
+
+
+
+
+
卡类型
-
+
-
+
-
+
-
+
-
+
文件
-
-
+
+
加载
-
-
+
+
保存
-
-
+
+
-
+
-
+
破解
-
+
读卡片信息
-
+
验证默认密码
-
+
Nested攻击
-
+
Hardested攻击
-
+
读/写
-
+
-
+
-
+
Key类型:
-
+
-
+
-
+
普通卡(需要密码)
-
-
+
+
读单个块
-
-
+
+
写单个块
-
-
-
+
+
+
读所有块
-
-
+
+
写所有块
-
+
Dump命令
-
+
Restore命令
-
+
UID卡(不需要密码)
-
+
锁定UFUID卡
-
+
+
关于UID卡
-
+
设置卡参数
-
+
擦除
-
-
+
+
模拟
-
+
从上方数据导入
-
+
+
清空
-
-
+
+
嗅探
-
+
列出嗅探数据
-
+
原始命令
-
-
+
+
命令历史:
-
+
清空历史
-
+
发送
-
+
清空输出
-
-
-
-
+
+
+
+
+
+
+
+
+
信息
-
+
请先选择端口
-
+
已连接
-
-
+
+
未连接
-
- 更改卡容量后,窗口中的data和key会被清空\n要继续吗?
+ 更改卡容量后,窗口中的data和key会被清空\n要继续吗?
-
- 请选择data文件:
+ 请选择data文件:
-
+
二进制Data文件(*.bin *.dump);;文本Data文件(*.txt *.eml);;所有文件(*.*)
-
-
+
+
- 打开失败:
+ 无法打开
-
- 请选择key文件:
+ 请选择key文件:
-
- 二进制Key文件(*.bin *.dump);;所有文件(*.*)
+ 二进制Key文件(*.bin *.dump);;所有文件(*.*)
-
- 保存数据至
+ 保存数据至
+
+
+
+
+ 卡片容量改变后,上方的所有Data和Key会被清空。
+
+
+
+
+ 确定?
-
-
-
+
+
+ 请选择Data窗口和Key窗口的字体
-
+
+
+ Data必须由32个十六进制字符组成(中间可含有空格)
+
+
+
+
+
+ Key必须由12个十六进制字符组成(中间可含有空格)
+
+
+
+
+ 请选择data文件:
+
+
+
+
+ 请选择key文件:
+
+
+
+
+ 二进制Key文件(*.bin *.dump)二进制Data文件(*.bin *.dump);;所有文件(*.*)
+
+
+
+
+ 请选择文件保存的位置:
+
+
+
+
+ 二进制Data文件(*.bin *.dump);;文本Data文件(*.txt *.eml)
+
+
+
+
+
+ 无法保存至
+
+
+
+
+ 请选择key文件保存的位置:
+
+
+
+
+ 二进制Key文件(*.bin *.dump)
+
+
+
+
+ 普通Mifare卡的Block0无法写入,UID也不能更改
+
+
+
+
+ UID卡(在国外叫Chinese Magic Card)的Block0可写,UID可变
+
+
+
+
+ 国外把UID卡分为Chinese Magic Card Gen1和Gen2
+
+
+
+
+
+
+
+
+
+ 指通常所说的UID卡,可以通过后门指令直接读写块而无需密码,在PM3和此GUI中有特殊命令处理这类卡片
+
+
+
+
+
+
+
+
+
+ 这个叫法在国内比较罕见,在国外指CUID/FUID/UFUID这类对后门指令不响应的卡(防火墙卡)
+
+
+
+
+ 以下是Gen2卡的详细介绍
+
+
+
+
+ CUID卡:
+
+
+
+
+ 可通过普通的写块命令来写Block0,可重复擦写
+
+
+
+
+ (hf mf wrbl 0 A FFFFFFFFFFFF <待写入数据>)
+
+
+
+
+ FUID卡:
+
+
+
+
+ Block0只能写入一次
+
+
+
+
+ (更高级的穿防火墙卡,可以过一些能识别出CUID卡的读卡器)
+
+
+
+
+ UFUID卡:
+
+
+
+
+ 锁卡前和普通UID/CUID卡一样可以反复读写Block0,用特殊命令锁卡后就和FUID卡一样了
+
+
+
+
+ 所有UID卡都似乎更容易被Nested攻击破解
+
+
+
+
空闲
-
-
+
+
-
+
-
+
-
+
-
+
固件版本:
-
+
连接状态:
-
+
运行状态:
+
+
+
+ 运行中
+
Mifare
@@ -453,24 +620,30 @@ Continue?
信息:
-
-
+
+
成功!
-
-
-
-
+
+
+
+
+
信息
-
-
+
+
失败!
+
+
+
+ 读卡失败。
+
diff --git a/ui/mainwindow.cpp b/ui/mainwindow.cpp
index f631bcb..042c840 100644
--- a/ui/mainwindow.cpp
+++ b/ui/mainwindow.cpp
@@ -8,6 +8,11 @@ MainWindow::MainWindow(QWidget *parent)
ui->setupUi(this);
ui->MF_simGroupBox->setVisible(false); // developing...
ui->MF_sniffGroupBox->setVisible(false); // developing...
+ myInfo = new QAction("wh201906", this);
+ connect(myInfo, &QAction::triggered, [ = ]() {
+ QDesktopServices::openUrl(QUrl("https://github.com/wh201906"));
+ });
+ this->addAction(myInfo);
pm3Thread = new QThread(this);
pm3 = new PM3Process(pm3Thread);
@@ -171,7 +176,7 @@ void MainWindow::MF_onTypeChanged(int id, bool st)
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);
+ int result = QMessageBox::question(this, tr("Info"), tr("When Changeing card type, the data and keys in this app will be cleard.") + "\n" + tr("Continue?"), QMessageBox::Yes | QMessageBox::No);
if(result == QMessageBox::Yes)
{
qDebug() << "Yes";
@@ -438,21 +443,21 @@ void MainWindow::on_MF_UID_wipeButton_clicked()
void MainWindow::on_MF_UID_aboutUIDButton_clicked()
{
QString msg;
- msg += tr(" Normally, the Block 0 of a typical Mifare card, which contains the UID, is locked during the manufacture. Users cannot write anything to Block 0 or set a new UID to a normal Mifare card.\n");
- msg += tr(" Chinese Magic Cards(aka UID Cards) are some special cards whose Block 0 are writeable. And you can change UID by writing to it.\n");
+ msg += tr(" Normally, the Block 0 of a typical Mifare card, which contains the UID, is locked during the manufacture. Users cannot write anything to Block 0 or set a new UID to a normal Mifare card.") + "\n";
+ msg += tr(" Chinese Magic Cards(aka UID Cards) are some special cards whose Block 0 are writeable. And you can change UID by writing to it.") + "\n";
msg += "\n";
- msg += tr("There are two versions of Chinese Magic Cards, the Gen1 and the Gen2.\n");
- msg += tr(" Gen1:\n also called UID card in China. It responses to some backdoor commands so you can access any blocks without password. The Proxmark3 has a bunch of related commands(csetblk, cgetblk, ...) to deal with this type of card, and my GUI also support these commands.\n");
- msg += tr(" Gen2:\n doesn't response to the backdoor commands, which means that a reader cannot detect whether it is a Chinese Magic Card or not by sending backdoor commands.\n");
+ msg += tr("There are two versions of Chinese Magic Cards, the Gen1 and the Gen2.") + "\n";
+ msg += tr(" Gen1:") + "\n" + tr(" also called UID card in China. It responses to some backdoor commands so you can access any blocks without password. The Proxmark3 has a bunch of related commands(csetblk, cgetblk, ...) to deal with this type of card, and my GUI also support these commands.") + "\n";
+ msg += tr(" Gen2:") + "\n" + tr(" doesn't response to the backdoor commands, which means that a reader cannot detect whether it is a Chinese Magic Card or not by sending backdoor commands.") + "\n";
msg += "\n";
- msg += tr("There are some types of Chinese Magic Card Gen2.\n");
- msg += tr(" CUID Card:\n the Block 0 is writeable, you can write to this block repeatedly by normal wrbl command.\n");
- msg += tr(" (hf mf wrbl 0 A FFFFFFFFFFFF )\n");
- msg += tr(" FUID Card:\n you can only write to Block 0 once. After that, it seems like a typical Mifare card(Block 0 cannot be written to).\n");
- msg += tr(" (some readers might try changing the Block 0, which could detect the CUID Card. In that case, you should use FUID card.)\n");
- msg += tr(" UFUID Card:\n It behaves like a CUID card(or UID card? I'm not sure) before you send some special command to lock it. Once it is locked, you cannot change its Block 0(just like a typical Mifare card).\n");
+ msg += tr("There are some types of Chinese Magic Card Gen2.") + "\n";
+ msg += tr(" CUID Card:") + "\n" + tr(" the Block 0 is writeable, you can write to this block repeatedly by normal wrbl command.") + "\n";
+ msg += tr(" (hf mf wrbl 0 A FFFFFFFFFFFF )") + "\n";
+ msg += tr(" FUID Card:") + "\n" + tr(" you can only write to Block 0 once. After that, it seems like a typical Mifare card(Block 0 cannot be written to).") + "\n";
+ msg += tr(" (some readers might try changing the Block 0, which could detect the CUID Card. In that case, you should use FUID card.)") + "\n";
+ msg += tr(" UFUID Card:") + "\n" + tr(" It behaves like a CUID card(or UID card? I'm not sure) before you send some special command to lock it. Once it is locked, you cannot change its Block 0(just like a typical Mifare card).") + "\n";
msg += "\n";
- msg += tr(" Seemingly, these Chinese Magic Cards are more easily to be compromised by Nested Attack(it takes little time to get an unknown key).\n");
+ msg += tr(" Seemingly, these Chinese Magic Cards are more easily to be compromised by Nested Attack(it takes little time to get an unknown key).") + "\n";
QMessageBox::information(this, tr("About UID Card"), msg);
}
diff --git a/ui/mainwindow.h b/ui/mainwindow.h
index 1d892ac..17dcf8f 100644
--- a/ui/mainwindow.h
+++ b/ui/mainwindow.h
@@ -14,6 +14,8 @@
#include
#include
#include
+#include
+#include
#include "common/pm3process.h"
#include "module/mifare.h"
@@ -123,6 +125,7 @@ private:
QLabel* connectStatusBar;
QLabel* programStatusBar;
QLabel* PM3VersionBar;
+ QAction* myInfo;
void uiInit();
diff --git a/ui/mainwindow.ui b/ui/mainwindow.ui
index 356256a..9e0722d 100644
--- a/ui/mainwindow.ui
+++ b/ui/mainwindow.ui
@@ -16,6 +16,9 @@
770
+
+ Qt::ActionsContextMenu
+
Proxmark3GUI
@@ -103,7 +106,7 @@
- 0
+ 1
@@ -144,6 +147,9 @@
12
+
+ Qt::PreventContextMenu
+
true
@@ -287,6 +293,9 @@
12
+
+ Qt::PreventContextMenu
+
true
@@ -1033,6 +1042,9 @@
0
+
+ Qt::PreventContextMenu
+
-
diff --git a/ui/mf_attack_hardnesteddialog.ui b/ui/mf_attack_hardnesteddialog.ui
index d6af01d..9463564 100644
--- a/ui/mf_attack_hardnesteddialog.ui
+++ b/ui/mf_attack_hardnesteddialog.ui
@@ -92,7 +92,7 @@
-
- Target Block:
+ Target Block: