diff --git a/config/config.qrc b/config/config.qrc
index 6d3107c..1dc106c 100644
--- a/config/config.qrc
+++ b/config/config.qrc
@@ -3,5 +3,6 @@
config_official.json
config_rrgv4.13441.json
config_rrgv4.15864.json
+ config_rrgv4.16717.json
diff --git a/config/config_official.json b/config/config_official.json
index b28c942..c0ccf90 100644
--- a/config/config_official.json
+++ b/config/config_official.json
@@ -1,5 +1,5 @@
{
- "//": "Based on Proxmark3 official repo v3.1.0, commit 6116334",
+ "//": "Based on Proxmark3 official repo v3.1.0, commit 6116334485",
"//": "You can change this file if the command format of client changes",
"mifare classic": {
"nested": {
diff --git a/config/config_rrgv4.13441.json b/config/config_rrgv4.13441.json
index 40784b4..5fb731e 100644
--- a/config/config_rrgv4.13441.json
+++ b/config/config_rrgv4.13441.json
@@ -1,5 +1,5 @@
{
- "//": "Based on Proxmark3 rrg repo v4.13441, commit 35ddebc",
+ "//": "Based on Proxmark3 rrg repo v4.13441, commit 35ddebc03c",
"//": "You can change this file if the command format of client changes",
"mifare classic": {
"nested": {
@@ -238,4 +238,4 @@
"t55x7 flag": ""
}
}
-}
\ No newline at end of file
+}
diff --git a/config/config_rrgv4.15864.json b/config/config_rrgv4.15864.json
index a64729d..6f99923 100644
--- a/config/config_rrgv4.15864.json
+++ b/config/config_rrgv4.15864.json
@@ -1,5 +1,5 @@
{
- "//": "Based on Proxmark3 rrg repo v4.15864, commit 1f75adc",
+ "//": "Based on Proxmark3 rrg repo v4.15864, commit 1f75adcf6d",
"//": "You can change this file if the command format of client changes",
"mifare classic": {
"nested": {
diff --git a/config/config_rrgv4.16717.json b/config/config_rrgv4.16717.json
new file mode 100644
index 0000000..28bca3b
--- /dev/null
+++ b/config/config_rrgv4.16717.json
@@ -0,0 +1,241 @@
+{
+ "//": "Based on Proxmark3 rrg repo v4.16717, commit adfebd6510",
+ "//": "You can change this file if the command format of client changes",
+ "mifare classic": {
+ "nested": {
+ "cmd": "hf mf nested -- --blk - -k ",
+ "static cmd": "hf mf staticnested -- --blk - -k ",
+ "card type": {
+ "mini": "mini",
+ "1k": "1k",
+ "2k": "2k",
+ "4k": "4k"
+ },
+ "key type": {
+ "A": "a",
+ "B": "b"
+ },
+ "//": "[+] -----+-----+--------------+---+--------------+----",
+ "//": "[+] Sec | Blk | key A |res| key B |res",
+ "//": "[+] -----+-----+--------------+---+--------------+----",
+ "//": "[+] 000 | 003 | FFFFFFFFFFFF | 1 | FFFFFFFFFFFF | 1",
+ "//": "......",
+ "//": "[+] -----+-----+--------------+---+--------------+----",
+ "//": "[+] ( 0:Failed / 1:Success )",
+ "key pattern": "\\s*\\d{3}\\s*\\|\\s*\\d{3}\\s*\\|\\s*.+?\\s*\\|\\s*.+?\\s*\\|\\s*.+?\\s*\\|\\s*.+?\\s*$",
+ "key A index": 2,
+ "key B index": 4
+ },
+ "check": {
+ "cmd": "hf mf chk --",
+ "card type": {
+ "mini": "mini",
+ "1k": "1k",
+ "2k": "2k",
+ "4k": "4k"
+ },
+ "//": "[+] -----+-----+--------------+---+--------------+----",
+ "//": "[+] Sec | Blk | key A |res| key B |res",
+ "//": "[+] -----+-----+--------------+---+--------------+----",
+ "//": "[+] 000 | 003 | FFFFFFFFFFFF | 1 | FFFFFFFFFFFF | 1",
+ "//": "......",
+ "//": "[+] 004 | 019 | ------------ | 0 | ------------ | 0",
+ "//": "......",
+ "//": "[+] -----+-----+--------------+---+--------------+----",
+ "//": "[+] ( 0:Failed / 1:Success )",
+ "key pattern": "\\s*\\d{3}\\s*\\|\\s*\\d{3}\\s*\\|\\s*.+?\\s*\\|\\s*.+?\\s*\\|\\s*.+?\\s*\\|\\s*.+?\\s*$",
+ "key A index": 2,
+ "key B index": 4
+ },
+ "info": {
+ "cmd": "hf 14a info -nsv"
+ },
+ "sniff": {
+ "cmd": "hf sniff"
+ },
+ "sniff 14a": {
+ "cmd": "hf 14a sniff"
+ },
+ "list": {
+ "cmd": "trace list -t mf"
+ },
+ "dump": {
+ "cmd": "hf mf dump --",
+ "card type": {
+ "mini": "mini",
+ "1k": "1k",
+ "2k": "2k",
+ "4k": "4k"
+ }
+ },
+ "restore": {
+ "cmd": "hf mf restore -- --force",
+ "card type": {
+ "mini": "mini",
+ "1k": "1k",
+ "2k": "2k",
+ "4k": "4k"
+ }
+ },
+ "emulator wipe": {
+ "cmd": "hf mf eclr"
+ },
+ "Magic Card wipe": {
+ "cmd": "hf mf cwipe"
+ },
+ "emulator read block": {
+ "cmd": "hf mf egetblk --blk ",
+ "data pattern": "([0-9a-fA-F]{2} ){15}[0-9a-fA-F]{2}"
+ },
+ "Magic Card read block": {
+ "cmd": "hf mf cgetblk --blk ",
+ "data pattern": "([0-9a-fA-F]{2} ){15}[0-9a-fA-F]{2}"
+ },
+ "normal read block": {
+ "cmd": "hf mf rdbl --blk - -k ",
+ "key type": {
+ "A": "a",
+ "B": "b"
+ },
+ "data pattern": "([0-9a-fA-F]{2} ){15}[0-9a-fA-F]{2}"
+ },
+ "darkside": {
+ "cmd": "hf mf darkside"
+ },
+ "save sniff": {
+ "cmd": "trace save -f "
+ },
+ "load sniff": {
+ "cmd": "trace load -f ",
+ "show cmd": "trace list --buffer -t mf"
+ },
+ "hardnested": {
+ "cmd": "hf mf hardnested --blk - -k --tblk --t",
+ "known key type": {
+ "A": "a",
+ "B": "b"
+ },
+ "target key type": {
+ "A": "a",
+ "B": "b"
+ }
+ },
+ "normal read sector": {
+ "cmd": "hf mf rdsc --sec - -k ",
+ "key type": {
+ "A": "a",
+ "B": "b"
+ },
+ "data pattern": "([0-9a-fA-F]{2} ){15}[0-9a-fA-F]{2}"
+ },
+ "Magic Card read sector": {
+ "cmd": "hf mf cgetsc --sec ",
+ "data pattern": "([0-9a-fA-F]{2} ){15}[0-9a-fA-F]{2}"
+ },
+ "//": "When writing a block, if the result is not empty and doesn't contain the failed flag, the function will return true",
+ "normal write block": {
+ "cmd": "hf mf wrbl --blk - -k -d --force",
+ "key type": {
+ "A": "a",
+ "B": "b"
+ },
+ "failed flag": [
+ "fail",
+ "error"
+ ]
+ },
+ "Magic Card write block": {
+ "cmd": "hf mf csetblk --blk -d ",
+ "failed flag": [
+ "fail",
+ "error"
+ ]
+ },
+ "emulator write block": {
+ "cmd": "hf mf esetblk --blk -d "
+ },
+ "Magic Card lock": {
+ "cmd": "hf 14a raw ",
+ "sequence": [
+ "-ak -b 7 40",
+ "-ak 43",
+ "-ak E0 00 39 F7",
+ "-ak E1 00 E1 EE",
+ "-ak 85 00 00 00 00 00 00 00 00 00 00 00 00 00 00 08 18 47",
+ "-a 52"
+ ]
+ },
+ "Magic Card set parameter": {
+ "cmd": "hf mf csetuid --uid --atqa --sak "
+ }
+ },
+ "lf": {
+ "read": {
+ "cmd": "lf read -v",
+ "show cmd": "data plot"
+ },
+ "sniff": {
+ "cmd": "lf sniff -v",
+ "show cmd": "data plot"
+ },
+ "search": {
+ "cmd": "lf search -u"
+ },
+ "tune": {
+ "cmd": "lf tune --divisor "
+ },
+ "get config": {
+ "cmd": "hw status",
+ "field start": "LF Sampling config",
+ "field end": "\\[#\\] \\S",
+ "divisor": {
+ "flag": "divisor",
+ "pattern": "\\d+"
+ },
+ "bits per sample": {
+ "flag": "bits per sample",
+ "pattern": "\\d+"
+ },
+ "decimation": {
+ "flag": "decimation",
+ "pattern": "\\d+"
+ },
+ "averaging": {
+ "flag": "averaging",
+ "pattern": "\\d+",
+ "replace": {
+ "yes": "1",
+ "no": "0",
+ "Yes": "1",
+ "No": "0"
+ }
+ },
+ "trigger threshold": {
+ "flag": "trigger threshold",
+ "pattern": "\\d+"
+ },
+ "samples to skip": {
+ "flag": "samples to skip",
+ "pattern": "\\d+"
+ },
+ "//": "execute 'cmd' then find parameters between 'field stard' and 'field end'",
+ "//": "for each line, if the line doesn't have any flag, skip",
+ "//": "otherwise, delete characters before 'flag' and 'flag' itself, then use 'pattern' to get the parameter",
+ "//": "If 'replace' dict exists, replace all keys with respective values before getting parameters"
+ },
+ "set config": {
+ "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": ""
+ }
+ }
+}
diff --git a/doc/tutorial/Work_With_ProxSpace/work_with_proxspace.md b/doc/tutorial/Work_With_ProxSpace/work_with_proxspace.md
index a6f08da..f8dd29e 100644
--- a/doc/tutorial/Work_With_ProxSpace/work_with_proxspace.md
+++ b/doc/tutorial/Work_With_ProxSpace/work_with_proxspace.md
@@ -1,4 +1,6 @@
# Work with ProxSpace
+
+[中文教程](work_with_proxspace_zh_CN.md)
This GUI supports clients built from ProxSpace, making it easier to use the latest client with this GUI.
## 1. Set up ProxSpace
diff --git a/doc/tutorial/Work_With_ProxSpace/work_with_proxspace_zh_CN.md b/doc/tutorial/Work_With_ProxSpace/work_with_proxspace_zh_CN.md
index 81c86db..3c709d1 100644
--- a/doc/tutorial/Work_With_ProxSpace/work_with_proxspace_zh_CN.md
+++ b/doc/tutorial/Work_With_ProxSpace/work_with_proxspace_zh_CN.md
@@ -1,4 +1,6 @@
# 使用ProxSpace编译的客户端
+
+[English](work_with_proxspace.md)
此GUI可以和ProxSpace编译出来的客户端配合运行,满足一部分用户使用最新版客户端的需求
## 1. 搭建ProxSpace环境
diff --git a/src/ui/mainwindow.cpp b/src/ui/mainwindow.cpp
index 2100451..3ac32da 100644
--- a/src/ui/mainwindow.cpp
+++ b/src/ui/mainwindow.cpp
@@ -1157,13 +1157,17 @@ void MainWindow::uiInit()
settings->endGroup();
ui->Set_Client_keepClientActiveBox->setChecked(keepClientActive);
- QDirIterator configFiles(":/config/");
+ QDir configFiles(":/config/");
+ configFiles.setSorting(QDir::Name);
+ const QFileInfoList configFileList = configFiles.entryInfoList();
ui->Set_Client_configFileBox->blockSignals(true);
- while(configFiles.hasNext())
+ for(const auto& file : configFileList)
{
- configFiles.next();
- ui->Set_Client_configFileBox->addItem(configFiles.fileName(), configFiles.filePath());
+ ui->Set_Client_configFileBox->addItem(file.fileName(), file.filePath());
}
+
+ // Use the last one as the default one
+ ui->Set_Client_configFileBox->setCurrentIndex(ui->Set_Client_configFileBox->count() - 1);
ui->Set_Client_configFileBox->addItem(tr("External file"), "(ext)");
int configId = -1;