diff --git a/src/module/mifare.cpp b/src/module/mifare.cpp index 7f7398e..0531a0c 100644 --- a/src/module/mifare.cpp +++ b/src/module/mifare.cpp @@ -691,10 +691,14 @@ void Mifare::writeSelected(TargetType targetType) { result = _writeblk(item, KEY_B, keyBList->at(data_b2s(item)), dataList->at(item), TARGET_MIFARE); } - if(!result) + if(!result && keyAList->at(data_b2s(item)) != "FFFFFFFFFFFF") { result = _writeblk(item, KEY_A, "FFFFFFFFFFFF", dataList->at(item), TARGET_MIFARE); } + if(!result && keyBList->at(data_b2s(item)) != "FFFFFFFFFFFF") // for access bits like "80 f7 87", the block can only be written with keyB + { + result = _writeblk(item, KEY_B, "FFFFFFFFFFFF", dataList->at(item), TARGET_MIFARE); + } } else // key doesn't matter when writing to Chinese Magic Card and Emulator Memory { diff --git a/src/ui/mainwindow.cpp b/src/ui/mainwindow.cpp index d2e338b..59efc1d 100644 --- a/src/ui/mainwindow.cpp +++ b/src/ui/mainwindow.cpp @@ -30,7 +30,9 @@ MainWindow::MainWindow(QWidget *parent): settings->setIniCodec("UTF-8"); pm3Thread = new QThread(this); + connect(QApplication::instance(), &QApplication::aboutToQuit, pm3Thread, &QThread::quit); pm3 = new PM3Process(pm3Thread); + connect(pm3Thread, &QThread::finished, pm3, &PM3Process::deleteLater); pm3Thread->start(); pm3state = false; clientWorkingDir = new QDir;