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;