From 1e728c891c786e8e1da1c84340bd52bbdaadacd2 Mon Sep 17 00:00:00 2001 From: wh201906 Date: Tue, 1 Mar 2022 18:47:33 +0800 Subject: [PATCH] EM410x clone support --- .gitignore | 3 +- config/config_official.json | 10 ++ config/config_rrgv4.13.json | 10 ++ src/common/util.cpp | 8 +- src/i18n/en_US.ts | 221 +++++++++++++++++++++--------------- src/i18n/zh_CN.qm | Bin 21545 -> 21891 bytes src/i18n/zh_CN.ts | 221 +++++++++++++++++++++--------------- src/module/lf.cpp | 1 - src/module/mifare.cpp | 1 - src/module/t55xxtab.cpp | 58 +++++++++- src/module/t55xxtab.h | 20 +++- src/ui/mainwindow.cpp | 19 ++-- src/ui/mainwindow.h | 4 +- src/ui/mainwindow.ui | 6 +- src/ui/t55xxtab.ui | 100 ++++++++++++++-- 15 files changed, 472 insertions(+), 210 deletions(-) diff --git a/.gitignore b/.gitignore index 28ed25c..a3c9a94 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ -/build* \ No newline at end of file +/build* +/data \ No newline at end of file diff --git a/config/config_official.json b/config/config_official.json index 37ed8e2..0438ed8 100644 --- a/config/config_official.json +++ b/config/config_official.json @@ -191,5 +191,15 @@ "cmd": "lf config q b d a t s ", "divisor cmd": "hw setlfdivisor " } + }, + "t55xx":{ + "clone em410x":{ + "read":"lf search", + "successful read flag":"Valid EM410x ID", + "pattern":"EM TAG ID\\s*:\\s\\K[0-9a-fA-F]{10}", + "clone cmd":"lf em 410xwrite ", + "t5555 flag":"0", + "t55x7 flag":"1" + } } } \ No newline at end of file diff --git a/config/config_rrgv4.13.json b/config/config_rrgv4.13.json index eab77c1..8d5680d 100644 --- a/config/config_rrgv4.13.json +++ b/config/config_rrgv4.13.json @@ -199,5 +199,15 @@ "cmd": "lf config --divisor --bps --dec --avg --trig --skip ", "divisor cmd": "hw setlfdivisor -d " } + }, + "t55xx":{ + "clone em410x":{ + "read":"lf em 410x reader", + "successful read flag":"EM 410x ID", + "pattern":"EM 410x ID\\s*\\K[0-9a-fA-F]{10}", + "clone cmd":"lf em 410x clone --id ", + "t5555 flag":"--q5", + "t55x7 flag":"" + } } } \ No newline at end of file diff --git a/src/common/util.cpp b/src/common/util.cpp index 93657b9..9f3199b 100644 --- a/src/common/util.cpp +++ b/src/common/util.cpp @@ -78,7 +78,13 @@ QString Util::execCMDWithOutput(const QString& cmd, ReturnTrigger trigger, bool } } isRequiringOutput = false; - return (isResultFound || trigger.expectedOutputs.isEmpty() || rawOutput ? *requiredOutput : ""); + + // For functions without expected outputs in the return trigger, the result is the raw output. + // For functions with expected outputs in the return trigger, + // if rawOutput=true, the result is the raw output, + // otherwise, if the raw output contains one of the expected outputs, the result is the raw output, + // otherwise, the result is empty(as a failed flag). + return (trigger.expectedOutputs.isEmpty() || isResultFound || rawOutput ? *requiredOutput : ""); } void Util::delay(unsigned int msec) diff --git a/src/i18n/en_US.ts b/src/i18n/en_US.ts index a4224b7..ab3a8ae 100644 --- a/src/i18n/en_US.ts +++ b/src/i18n/en_US.ts @@ -536,7 +536,7 @@ It could make the whole sector blocked irreversibly! - + About UID Card @@ -738,6 +738,7 @@ or the communication between a tag and a reader. + T55xx @@ -939,7 +940,7 @@ or the communication between a tag and a reader. - + History: @@ -1054,46 +1055,46 @@ or the communication between a tag and a reader. - - - - - - - - - - - - + + + + + + + + + + + + Info - + Plz choose a port first - + Connected - - + + Not Connected - - - + + + Failed to open - + Continue? @@ -1113,194 +1114,194 @@ or the communication between a tag and a reader. - + Failed to load config file - + Some of the data and key will be cleared. - + Plz select the font of data widget and key widget - + Data must consists of 32 Hex symbols(Whitespace is allowed) - - + + Key must consists of 12 Hex symbols(Whitespace is allowed) - + Plz select the data file: - - - + + + Binary Data Files(*.bin *.dump) - - - + + + All Files(*.*) - + Plz select the key file: - + Plz select the location to save data file: - - - + + + Failed to save to - + Plz select the location to save key file: - - - + + + Binary Key Files(*.bin *.dump) - - + + Text Data Files(*.txt *.eml) - + 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. - + Chinese Magic Cards(aka UID Cards) are some special cards whose Block 0 are writeable. And you can change UID by writing to it. - + There are two versions of Chinese Magic Cards, the Gen1 and the Gen2. - + Gen1: - + 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. - + Gen2: - + 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. - + There are some types of Chinese Magic Card Gen2. - + CUID Card: - + the Block 0 is writeable, you can write to this block repeatedly by normal wrbl command. - + (hf mf wrbl 0 A FFFFFFFFFFFF <the data you want to write>) - + FUID Card: - + you can only write to Block 0 once. After that, it seems like a typical Mifare card(Block 0 cannot be written to). - + (some readers might try changing the Block 0, which could detect the CUID Card. In that case, you should use FUID card.) - + UFUID Card: - + 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). - + Seemingly, these Chinese Magic Cards are more easily to be compromised by Nested Attack(it takes little time to get an unknown key). - + Plz select the trace file: - + Plz select the location to save trace file: - - + + Trace Files(*.trc) - - + + Idle - + Stop @@ -1326,27 +1327,27 @@ or the communication between a tag and a reader. - + HW Version: - + PM3: - + State: - + Running - + Actural Freq: @@ -1354,58 +1355,96 @@ or the communication between a tag and a reader. Mifare - + Success! - - - - - - - + + + + + + + Info - + Plz provide at least one known key - - + + Failed! - + The Access Bits is invalid! It could make the whole sector blocked irreversibly! Continue to write? - + Successful! - + Failed to write to these blocks: - + Select them? - + Failed to read card. + + T55xxTab + + + Clone to T55xx + + + + + Target Type: + + + + + T5555 + + + + + T55x7 + + + + + EM410x + + + + + Read + + + + + Clone + + + diff --git a/src/i18n/zh_CN.qm b/src/i18n/zh_CN.qm index bf66fd3677528d675a08d876b893dcd39ae4069a..f2a033678e184c8d6b6529e42bbf79963578aeff 100644 GIT binary patch delta 1187 zcmZ8fe@s(X7(MT`_r10}iXF2})mWMc3>kuKg}|VNAtHq;)Vc~`YRMYLGISzi#W^rK zGXp5P>oS2EV3RmS2?o*Vma%Mh0iAI_bY{+N{9|GazuXYF`3L)eg~;B^%ei0PIp25g zx%cF!!rm_7(9=TC;f4J|&EcEtgljxfa1{Lv_U3&+I|8#kBERbeX}91_4J5 z*hi~?3>Db1oq(g5hL9h} z07)~8nNjeTQ>!!v@BV$%s$>>jcES@>?}oSW0^r(0_!rg3v2pM+U{6Kyx^IBYLX_;8 z0KzpW34TeVo3ZIoC)Mfj#f}2$wXjroe??yYM$?W#V5J)EE)@{lixbb@B*8GR5G_I% zKOma4HA1I91xPO7XGD|G#Dk*6&@3iO#eiW@d~WI!5u?rDi@){X29mCeciq%2 z4&w0L9b`-5ajIxxDc_)q*Ji0E8feR|J$#>Pvtf<8y(&QZNp;6}A5wPdXZUE0XSpKPVElV8uvC z^YsTnUUkSPcNFs2#$A#{c$Zg5(YZe;yJM}CRj1OZrL5u-l!K##l!;OKU~C0tdR4h( zp-h~`%4foKMvs-tA2$Q6N4c^6Ht`=Sf0k~i-fjF>$z&K0J@$xv%Bi7`!U@xka3)&} zSM@E{A|P>6-}P1*kjCQ@y5!O_Y3uxX6yHmFbc=5Gzx)c|C z-r zz(#KXf%U#QjebTGQMD~%M)E)L6g_iPDckk@%7nmwl-MT*s2d(X(NgX9`(ByXh(E|P xYv(*s6`m7Fp2wK+sjnV=RbKC_%-Qv}w_$40++fAyt1RT@qLTjxzg(bGU4hN?pme{074u7YswgSZ2(AhfuG3$7AxTOdjM@Kc>8)FBN_Zg zCXiJEKDe1Qh>)^sU}>4S$r8(}ygy-a;x2QROS0qmc7U1cqiUdh|4 zstAL|FNKZLT#=mpstic?%gdrD$Kp-0f3%nKJeF7AqrO=Y^0wtYfauppCeK%*|9vU? znvy+*E_c6Ca?_Us5s#DxjWqMMa$$o+JDwRV=L!MG6GPaWU%;Xf;ovsbBQm*7tv2*t zrCHAwQN)u}pBh+UrRuEc;8xZm0@Sxc3~{IZo>n*73P|1B`G`pJ4%IHGmjUyz*6AV7 zWKFo_gqWbQAkRxrxn(Tz2Pn}L+BzqKVn?A#x$C~jfW+^X_FY?v_G3|`I3qJGzaPdD x^YM^5xgUTD(IM%HoxqYcqC>ID+X?~S$*x|-zJS$;;gq?0|F7apT~Y2d>tDO0^IQM` diff --git a/src/i18n/zh_CN.ts b/src/i18n/zh_CN.ts index 7b6098b..ba372a9 100644 --- a/src/i18n/zh_CN.ts +++ b/src/i18n/zh_CN.ts @@ -500,7 +500,7 @@ It could make the whole sector blocked irreversibly! - + About UID Card 关于UID卡 @@ -708,6 +708,7 @@ or the communication between a tag and a reader. + T55xx @@ -909,7 +910,7 @@ or the communication between a tag and a reader. - + History: 命令历史: @@ -1064,46 +1065,46 @@ or the communication between a tag and a reader. 图形化界面 - - - - - - - - - - - - + + + + + + + + + + + + Info 信息 - + Plz choose a port first 请先选择端口 - + Connected 已连接 - - + + Not Connected 未连接 - - - + + + Failed to open 无法打开 - + Continue? 确定? @@ -1123,82 +1124,82 @@ or the communication between a tag and a reader. 检查更新 - + Failed to load config file 无法打开配置文件 - + Some of the data and key will be cleared. 部分数据和密码将被清除 - + Plz select the font of data widget and key widget 请选择数据窗口和密钥窗口的字体 - + Data must consists of 32 Hex symbols(Whitespace is allowed) 数据必须由32个十六进制字符组成(中间可含有空格) - - + + Key must consists of 12 Hex symbols(Whitespace is allowed) 密钥必须由12个十六进制字符组成(中间可含有空格) - + Plz select the data file: 请选择数据文件: - - - + + + Binary Data Files(*.bin *.dump) 二进制数据文件(*.bin *.dump) - - - + + + All Files(*.*) 所有文件(*.*) - + Plz select the key file: 请选择密钥文件: - + Plz select the location to save data file: 请选择数据文件保存的位置: - - - + + + Failed to save to 无法保存至 - + Plz select the location to save key file: 请选择密钥文件保存的位置: - - - + + + Binary Key Files(*.bin *.dump) 二进制密码文件(*.bin *.dump) - - + + Text Data Files(*.txt *.eml) 文本数据文件(*.txt *.eml) @@ -1207,114 +1208,114 @@ or the communication between a tag and a reader. 文本密码文件(*.txt *.eml) - + 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. 普通Mifare卡的块0无法写入,卡号也不能更改 - + Chinese Magic Cards(aka UID Cards) are some special cards whose Block 0 are writeable. And you can change UID by writing to it. UID卡(在国外叫Chinese Magic Card)的块0可写,卡号可变。 - + There are two versions of Chinese Magic Cards, the Gen1 and the Gen2. 国外把UID卡分为Chinese Magic Card Gen1和Gen2 - + Gen1: - + 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. 指通常所说的UID卡,可以通过后门指令直接读写块而无需密码,在PM3和此GUI中有特殊命令处理这类卡片 - + Gen2: - + 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. 这个叫法在国内比较罕见,在国外指CUID/FUID/UFUID这类对后门指令不响应的卡(防火墙卡) - + There are some types of Chinese Magic Card Gen2. 以下是Gen2卡的详细介绍 - + CUID Card: CUID卡: - + the Block 0 is writeable, you can write to this block repeatedly by normal wrbl command. 可通过普通的写块命令来写块0,可重复擦写 - + (hf mf wrbl 0 A FFFFFFFFFFFF <the data you want to write>) (hf mf wrbl 0 A FFFFFFFFFFFF <待写入数据>) - + FUID Card: FUID卡: - + you can only write to Block 0 once. After that, it seems like a typical Mifare card(Block 0 cannot be written to). 块0只能写入一次 - + (some readers might try changing the Block 0, which could detect the CUID Card. In that case, you should use FUID card.) (更高级的穿防火墙卡,可以过一些能识别出CUID卡的读卡器) - + UFUID Card: UFUID卡: - + 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). 锁卡前和普通UID/CUID卡一样可以反复读写块0,用特殊命令锁卡后就和FUID卡一样了 - + Seemingly, these Chinese Magic Cards are more easily to be compromised by Nested Attack(it takes little time to get an unknown key). 所有UID卡都似乎更容易被Nested攻击破解 - + Plz select the trace file: 请选择trace文件: - + Plz select the location to save trace file: 请选择trace文件保存的位置: - - + + Trace Files(*.trc) Trace文件(*.trc) - - + + Idle 空闲 - + Stop 停止 @@ -1340,27 +1341,27 @@ or the communication between a tag and a reader. 密钥B - + HW Version: 固件版本: - + PM3: 连接状态: - + State: 运行状态: - + Running 正在运行 - + Actural Freq: 实际频率: @@ -1368,34 +1369,34 @@ or the communication between a tag and a reader. Mifare - + Success! 成功! - - - - - - - + + + + + + + Info 信息 - + Plz provide at least one known key 请至少提供一个已知密码 - - + + Failed! 失败! - + The Access Bits is invalid! It could make the whole sector blocked irreversibly! Continue to write? @@ -1404,24 +1405,62 @@ Continue to write? 确定要写入吗? - + Successful! 成功! - + Failed to write to these blocks: 写入以下块失败: - + Select them? 选中这些块? - + Failed to read card. 读卡失败。 + + T55xxTab + + + Clone to T55xx + 复制到T55xx卡 + + + + Target Type: + 目标卡片类型: + + + + T5555 + + + + + T55x7 + + + + + EM410x + + + + + Read + 读卡 + + + + Clone + 复制 + + diff --git a/src/module/lf.cpp b/src/module/lf.cpp index 97f6dd3..758f0f8 100644 --- a/src/module/lf.cpp +++ b/src/module/lf.cpp @@ -154,5 +154,4 @@ void LF::syncWithUI() void LF::setConfigMap(const QVariantMap& configMap) { this->configMap = configMap; - qDebug() << configMap; } diff --git a/src/module/mifare.cpp b/src/module/mifare.cpp index 0cdb019..7f7398e 100644 --- a/src/module/mifare.cpp +++ b/src/module/mifare.cpp @@ -91,7 +91,6 @@ Mifare::Mifare(Ui::MainWindow *ui, Util *addr, QWidget *parent): QObject(parent) void Mifare::setConfigMap(const QVariantMap& configMap) { this->configMap = configMap; - qDebug() << configMap; } QMap Mifare::info(bool isRequiringOutput) diff --git a/src/module/t55xxtab.cpp b/src/module/t55xxtab.cpp index d4247ef..5101d77 100644 --- a/src/module/t55xxtab.cpp +++ b/src/module/t55xxtab.cpp @@ -1,14 +1,68 @@ -#include "t55xxtab.h" +#include "t55xxtab.h" #include "ui_t55xxtab.h" -T55xxTab::T55xxTab(QWidget *parent) : +T55xxTab::T55xxTab(Util *addr, QWidget *parent) : QWidget(parent), ui(new Ui::T55xxTab) { ui->setupUi(this); + util = addr; } T55xxTab::~T55xxTab() { delete ui; } + +void T55xxTab::setConfigMap(const QVariantMap &configMap) +{ + this->configMap = configMap; +} + +void T55xxTab::setGUIState(bool st) +{ + ui->cloneGroupBox->setEnabled(st); + emit setParentGUIState(st); +} + +void T55xxTab::on_Clone_EM410xReadButton_clicked() +{ + setGUIState(false); + + QVariantMap config = configMap["clone em410x"].toMap(); + QString result; + QRegularExpressionMatch reMatch; + + result = util->execCMDWithOutput( + config["read"].toString(), + Util::ReturnTrigger(6000, {config["successful read flag"].toString()})); + if(result.isEmpty()) + { + setGUIState(true); + return; + } + reMatch = QRegularExpression(config["pattern"].toString()).match(result); + ui->Clone_EM410xIDEdit->setText(reMatch.captured()); + + setGUIState(true); +} + +void T55xxTab::on_Clone_EM410xCloneButton_clicked() +{ + if(ui->Clone_EM410xIDEdit->text().isEmpty()) + return; + setGUIState(false); + + QVariantMap config = configMap["clone em410x"].toMap(); + QString cmd = config["clone cmd"].toString(); + cmd.replace("", ui->Clone_EM410xIDEdit->text()); + if(ui->Clone_T5555Button->isChecked()) + cmd.replace("", config["t5555 flag"].toString()); + else + cmd.replace("", config["t55x7 flag"].toString()); + util->execCMD(cmd); + Util::gotoRawTab(); + + setGUIState(true); +} + diff --git a/src/module/t55xxtab.h b/src/module/t55xxtab.h index 49abd95..5fbec81 100644 --- a/src/module/t55xxtab.h +++ b/src/module/t55xxtab.h @@ -1,9 +1,11 @@ -#ifndef T55XXTAB_H +#ifndef T55XXTAB_H #define T55XXTAB_H +#include "common/util.h" #include -namespace Ui { +namespace Ui +{ class T55xxTab; } @@ -12,11 +14,23 @@ class T55xxTab : public QWidget Q_OBJECT public: - explicit T55xxTab(QWidget *parent = nullptr); + explicit T55xxTab(Util *addr, QWidget *parent = nullptr); ~T55xxTab(); + void setConfigMap(const QVariantMap& configMap); +private slots: + void on_Clone_EM410xReadButton_clicked(); + + void on_Clone_EM410xCloneButton_clicked(); + private: Ui::T55xxTab *ui; + Util* util; + QVariantMap configMap; + + void setGUIState(bool st); +signals: + void setParentGUIState(bool st); }; #endif // T55XXTAB_H diff --git a/src/ui/mainwindow.cpp b/src/ui/mainwindow.cpp index 3321520..35584ea 100644 --- a/src/ui/mainwindow.cpp +++ b/src/ui/mainwindow.cpp @@ -39,13 +39,16 @@ MainWindow::MainWindow(QWidget *parent): Util::setUI(ui); mifare = new Mifare(ui, util, this); lf = new LF(ui, util, this); + t55xxTab = new T55xxTab(util); + connect(t55xxTab, &T55xxTab::setParentGUIState, this, &MainWindow::setState); + ui->funcTab->insertTab(2, t55xxTab, tr("T55xx")); keyEventFilter = new MyEventFilter(QEvent::KeyPress); resizeEventFilter = new MyEventFilter(QEvent::Resize); // hide unused tabs // ui->funcTab->removeTab(1); - ui->funcTab->removeTab(2); + ui->funcTab->removeTab(3); portSearchTimer = new QTimer(this); portSearchTimer->setInterval(2000); @@ -85,7 +88,7 @@ void MainWindow::loadConfig() QJsonDocument configJson(QJsonDocument::fromJson(configData)); mifare->setConfigMap(configJson.object()["mifare classic"].toObject().toVariantMap()); lf->setConfigMap(configJson.object()["lf"].toObject().toVariantMap()); - + t55xxTab->setConfigMap(configJson.object()["t55xx"].toObject().toVariantMap()); } void MainWindow::initUI() // will be called by main.app @@ -636,7 +639,7 @@ void MainWindow::on_MF_File_loadButton_clicked() { QString title = ""; QString filename = ""; - if(ui->MF_File_dataBox->isChecked()) + if(ui->MF_File_dataButton->isChecked()) { title = tr("Plz select the data file:"); filename = QFileDialog::getOpenFileName(this, title, "./", tr("Binary Data Files(*.bin *.dump)") + ";;" + tr("Text Data Files(*.txt *.eml)") + ";;" + tr("All Files(*.*)")); @@ -649,7 +652,7 @@ void MainWindow::on_MF_File_loadButton_clicked() } } } - else if(ui->MF_File_keyBox->isChecked()) + else if(ui->MF_File_keyButton->isChecked()) { title = tr("Plz select the key file:"); filename = QFileDialog::getOpenFileName(this, title, "./", tr("Binary Key Files(*.bin *.dump)") + ";;" + tr("All Files(*.*)")); @@ -676,7 +679,7 @@ void MainWindow::on_MF_File_saveButton_clicked() defaultName += "_"; defaultName += QDateTime::currentDateTime().toString("yyyy-MM-dd-hh-mm-ss"); - if(ui->MF_File_dataBox->isChecked()) + if(ui->MF_File_dataButton->isChecked()) { title = tr("Plz select the location to save data file:"); filename = QFileDialog::getSaveFileName(this, title, "./data_" + defaultName, tr("Binary Data Files(*.bin *.dump)") + ";;" + tr("Text Data Files(*.txt *.eml)"), &selectedType); @@ -689,7 +692,7 @@ void MainWindow::on_MF_File_saveButton_clicked() } } } - else if(ui->MF_File_keyBox->isChecked()) + else if(ui->MF_File_keyButton->isChecked()) { title = tr("Plz select the location to save key file:"); filename = QFileDialog::getSaveFileName(this, title, "./key_" + defaultName, tr("Binary Key Files(*.bin *.dump)"), &selectedType); @@ -707,12 +710,12 @@ void MainWindow::on_MF_File_saveButton_clicked() void MainWindow::on_MF_File_clearButton_clicked() { - if(ui->MF_File_keyBox->isChecked()) + if(ui->MF_File_keyButton->isChecked()) { mifare->data_clearKey(); mifare->data_syncWithKeyWidget(); } - else if(ui->MF_File_dataBox->isChecked()) + else if(ui->MF_File_keyButton->isChecked()) { mifare->data_clearData(); mifare->data_syncWithDataWidget(); diff --git a/src/ui/mainwindow.h b/src/ui/mainwindow.h index 43a4c34..5eaef2f 100644 --- a/src/ui/mainwindow.h +++ b/src/ui/mainwindow.h @@ -31,6 +31,7 @@ #include "common/pm3process.h" #include "module/mifare.h" #include "module/lf.h" +#include "module/t55xxtab.h" #include "common/util.h" #include "ui/mf_trailerdecoderdialog.h" @@ -205,6 +206,7 @@ private slots: void on_Set_Client_configPathEdit_editingFinished(); + void setState(bool st); private: Ui::MainWindow* ui; QButtonGroup* MFCardTypeBtnGroup; @@ -235,6 +237,7 @@ private: QStringList clientEnv; QDir* clientWorkingDir; + T55xxTab* t55xxTab; Mifare* mifare; LF* lf; Util* util; @@ -247,7 +250,6 @@ private: void signalInit(); void MF_widgetReset(); void setTableItem(QTableWidget *widget, int row, int column, const QString& text); - void setState(bool st); void saveClientPath(const QString& path); void onLFfreqConfChanged(int value, bool isCustomized); void dockInit(); diff --git a/src/ui/mainwindow.ui b/src/ui/mainwindow.ui index 0138a0a..df5e334 100644 --- a/src/ui/mainwindow.ui +++ b/src/ui/mainwindow.ui @@ -136,7 +136,7 @@ - 2 + 0 @@ -524,7 +524,7 @@ - + Data @@ -534,7 +534,7 @@ - + Key diff --git a/src/ui/t55xxtab.ui b/src/ui/t55xxtab.ui index e770b68..7ead35a 100644 --- a/src/ui/t55xxtab.ui +++ b/src/ui/t55xxtab.ui @@ -1,7 +1,5 @@ + - - - T55xxTab @@ -12,10 +10,98 @@ 300 - - Form - + + + + + Clone to T55xx + + + + + + + + Target Type: + + + + + + + T5555 + + + + + + + T55x7 + + + true + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + EM410x + + + + + + Read + + + + + + + + + + Clone + + + + + + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + - +