mirror of
https://github.com/wh201906/Proxmark3GUI.git
synced 2025-02-16 22:21:30 +08:00
commit
5cccb7b8bb
@ -20,6 +20,7 @@ SOURCES += \
|
||||
common/pm3process.cpp \
|
||||
common/util.cpp \
|
||||
module/mifare.cpp \
|
||||
ui/mf_sim_simdialog.cpp \
|
||||
ui/mf_uid_parameterdialog.cpp \
|
||||
ui/mainwindow.cpp \
|
||||
ui/mf_attack_hardnesteddialog.cpp \
|
||||
@ -28,11 +29,13 @@ HEADERS += \
|
||||
common/pm3process.h \
|
||||
common/util.h \
|
||||
module/mifare.h \
|
||||
ui/mf_sim_simdialog.h \
|
||||
ui/mf_uid_parameterdialog.h \
|
||||
ui/mainwindow.h \
|
||||
ui/mf_attack_hardnesteddialog.h \
|
||||
|
||||
FORMS += \
|
||||
ui/mf_sim_simdialog.ui \
|
||||
ui/mf_uid_parameterdialog.ui \
|
||||
ui/mainwindow.ui \
|
||||
ui/mf_attack_hardnesteddialog.ui
|
||||
@ -46,7 +49,7 @@ qnx: target.path = /tmp/$${TARGET}/bin
|
||||
else: unix:!android: target.path = /opt/$${TARGET}/bin
|
||||
!isEmpty(target.path): INSTALLS += target
|
||||
|
||||
VERSION = 0.1
|
||||
VERSION = 0.1.1
|
||||
QMAKE_TARGET_PRODUCT = "Proxmark3GUI"
|
||||
QMAKE_TARGET_DESCRIPTION = "Proxmark3GUI"
|
||||
QMAKE_TARGET_COMPANY = "wh201906"
|
||||
|
@ -28,6 +28,9 @@ A GUI for [Proxmark3](https://github.com/Proxmark/proxmark3) client
|
||||
|
||||
## Update Log:
|
||||
|
||||
### V0.1.1
|
||||
+ Complete Mifare module(support simulate and sniff)
|
||||
|
||||
### V0.1
|
||||
+ Able to deal with Mifare card and related files
|
||||
|
||||
|
@ -28,6 +28,9 @@
|
||||
|
||||
## 更新日志:
|
||||
|
||||
### V0.1.1
|
||||
+ 完成整个Mifare模块(支持模拟卡和嗅探功能)
|
||||
|
||||
### V0.1
|
||||
+ 支持处理Mifare卡片及相关数据文件
|
||||
|
||||
|
267
lang/en_US.ts
267
lang/en_US.ts
@ -37,6 +37,84 @@
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>MF_Sim_simDialog</name>
|
||||
<message>
|
||||
<location filename="../ui/mf_sim_simdialog.ui" line="14"/>
|
||||
<source>Simulate</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ui/mf_sim_simdialog.ui" line="37"/>
|
||||
<source>u</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ui/mf_sim_simdialog.ui" line="66"/>
|
||||
<source>UID 4 or 7 bytes. If not specified, the UID 4B from emulator memory will be used</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ui/mf_sim_simdialog.ui" line="87"/>
|
||||
<source>n</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ui/mf_sim_simdialog.ui" line="116"/>
|
||||
<source>Automatically exit simulation after <numreads> blocks have been read by reader. 0 = infinite</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ui/mf_sim_simdialog.ui" line="137"/>
|
||||
<source>i</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ui/mf_sim_simdialog.ui" line="150"/>
|
||||
<source>Interactive, means that console will not be returned until simulation finishes or is aborted</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ui/mf_sim_simdialog.ui" line="171"/>
|
||||
<source>x</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ui/mf_sim_simdialog.ui" line="184"/>
|
||||
<source>Crack, performs the 'reader attack', nr/ar attack against a legitimate reader, fishes out the key(s)</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ui/mf_sim_simdialog.ui" line="205"/>
|
||||
<source>e</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ui/mf_sim_simdialog.ui" line="218"/>
|
||||
<source>set keys found from 'reader attack' to emulator memory (implies x and i)</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ui/mf_sim_simdialog.ui" line="239"/>
|
||||
<source>f</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ui/mf_sim_simdialog.ui" line="268"/>
|
||||
<source>get UIDs to use for 'reader attack' from file 'f <filename.txt>' (implies x and i)</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ui/mf_sim_simdialog.ui" line="289"/>
|
||||
<source>r</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ui/mf_sim_simdialog.ui" line="302"/>
|
||||
<source>Generate random nonces instead of sequential nonces. Standard reader attack won't work with this option, only moebius attack works</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>MF_UID_parameterDialog</name>
|
||||
<message>
|
||||
@ -88,250 +166,255 @@
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ui/mainwindow.ui" line="113"/>
|
||||
<location filename="../ui/mainwindow.ui" line="110"/>
|
||||
<source>Mifare</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ui/mainwindow.ui" line="206"/>
|
||||
<location filename="../ui/mainwindow.ui" line="203"/>
|
||||
<source>>></source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ui/mainwindow.ui" line="231"/>
|
||||
<location filename="../ui/mainwindow.ui" line="228"/>
|
||||
<source><<</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ui/mainwindow.ui" line="263"/>
|
||||
<location filename="../ui/mainwindow.ui" line="260"/>
|
||||
<source>F</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ui/mainwindow.ui" line="320"/>
|
||||
<location filename="../ui/mainwindow.ui" line="317"/>
|
||||
<source>Card Type</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ui/mainwindow.ui" line="335"/>
|
||||
<location filename="../ui/mainwindow.ui" line="332"/>
|
||||
<source>MINI</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ui/mainwindow.ui" line="342"/>
|
||||
<location filename="../ui/mainwindow.ui" line="339"/>
|
||||
<source>1K</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ui/mainwindow.ui" line="352"/>
|
||||
<location filename="../ui/mainwindow.ui" line="349"/>
|
||||
<source>2K</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ui/mainwindow.ui" line="359"/>
|
||||
<location filename="../ui/mainwindow.ui" line="356"/>
|
||||
<source>4K</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ui/mainwindow.ui" line="369"/>
|
||||
<location filename="../ui/mainwindow.ui" line="366"/>
|
||||
<source>File</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ui/mainwindow.ui" line="387"/>
|
||||
<location filename="../ui/mainwindow.ui" line="944"/>
|
||||
<location filename="../ui/mainwindow.ui" line="384"/>
|
||||
<location filename="../ui/mainwindow.ui" line="948"/>
|
||||
<source>Load</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ui/mainwindow.ui" line="400"/>
|
||||
<location filename="../ui/mainwindow.ui" line="957"/>
|
||||
<location filename="../ui/mainwindow.ui" line="397"/>
|
||||
<location filename="../ui/mainwindow.ui" line="961"/>
|
||||
<source>Save</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ui/mainwindow.ui" line="420"/>
|
||||
<location filename="../ui/mainwindow.cpp" line="534"/>
|
||||
<location filename="../ui/mainwindow.ui" line="417"/>
|
||||
<location filename="../ui/mainwindow.cpp" line="602"/>
|
||||
<source>Data</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ui/mainwindow.ui" line="430"/>
|
||||
<location filename="../ui/mainwindow.ui" line="427"/>
|
||||
<source>Key</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ui/mainwindow.ui" line="440"/>
|
||||
<location filename="../ui/mainwindow.ui" line="437"/>
|
||||
<source>Attack</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ui/mainwindow.ui" line="465"/>
|
||||
<location filename="../ui/mainwindow.ui" line="462"/>
|
||||
<source>Card Info</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ui/mainwindow.ui" line="478"/>
|
||||
<location filename="../ui/mainwindow.ui" line="475"/>
|
||||
<source>Check Default</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ui/mainwindow.ui" line="491"/>
|
||||
<location filename="../ui/mainwindow.ui" line="488"/>
|
||||
<source>Nested</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ui/mainwindow.ui" line="498"/>
|
||||
<location filename="../ui/mainwindow.ui" line="495"/>
|
||||
<source>Hardnested</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ui/mainwindow.ui" line="523"/>
|
||||
<location filename="../ui/mainwindow.ui" line="520"/>
|
||||
<source>Read/Write</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ui/mainwindow.ui" line="533"/>
|
||||
<location filename="../ui/mainwindow.ui" line="530"/>
|
||||
<source>Block:</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ui/mainwindow.ui" line="565"/>
|
||||
<location filename="../ui/mainwindow.ui" line="562"/>
|
||||
<source>Key:</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ui/mainwindow.ui" line="584"/>
|
||||
<location filename="../ui/mainwindow.ui" line="581"/>
|
||||
<source>Key Type:</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ui/mainwindow.ui" line="604"/>
|
||||
<location filename="../ui/mainwindow.ui" line="601"/>
|
||||
<source>A</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ui/mainwindow.ui" line="609"/>
|
||||
<location filename="../ui/mainwindow.ui" line="606"/>
|
||||
<source>B</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ui/mainwindow.ui" line="632"/>
|
||||
<location filename="../ui/mainwindow.ui" line="614"/>
|
||||
<source>Data:</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ui/mainwindow.ui" line="636"/>
|
||||
<source>Normal(Require Password)</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ui/mainwindow.ui" line="647"/>
|
||||
<location filename="../ui/mainwindow.ui" line="736"/>
|
||||
<location filename="../ui/mainwindow.ui" line="651"/>
|
||||
<location filename="../ui/mainwindow.ui" line="740"/>
|
||||
<source>Read Block</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ui/mainwindow.ui" line="654"/>
|
||||
<location filename="../ui/mainwindow.ui" line="743"/>
|
||||
<location filename="../ui/mainwindow.ui" line="658"/>
|
||||
<location filename="../ui/mainwindow.ui" line="747"/>
|
||||
<source>Write Block</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ui/mainwindow.ui" line="661"/>
|
||||
<location filename="../ui/mainwindow.ui" line="750"/>
|
||||
<location filename="../ui/mainwindow.ui" line="850"/>
|
||||
<location filename="../ui/mainwindow.ui" line="665"/>
|
||||
<location filename="../ui/mainwindow.ui" line="754"/>
|
||||
<location filename="../ui/mainwindow.ui" line="854"/>
|
||||
<source>Read All</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ui/mainwindow.ui" line="668"/>
|
||||
<location filename="../ui/mainwindow.ui" line="757"/>
|
||||
<location filename="../ui/mainwindow.ui" line="672"/>
|
||||
<location filename="../ui/mainwindow.ui" line="761"/>
|
||||
<source>Write All</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ui/mainwindow.ui" line="687"/>
|
||||
<location filename="../ui/mainwindow.ui" line="691"/>
|
||||
<source>Dump</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ui/mainwindow.ui" line="700"/>
|
||||
<location filename="../ui/mainwindow.ui" line="704"/>
|
||||
<source>Restore</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ui/mainwindow.ui" line="710"/>
|
||||
<location filename="../ui/mainwindow.ui" line="714"/>
|
||||
<source>Chinese Magic Card(Without Password)</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ui/mainwindow.ui" line="722"/>
|
||||
<location filename="../ui/mainwindow.ui" line="726"/>
|
||||
<source>Lock UFUID Card</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ui/mainwindow.ui" line="729"/>
|
||||
<location filename="../ui/mainwindow.ui" line="733"/>
|
||||
<location filename="../ui/mainwindow.cpp" line="461"/>
|
||||
<source>About UID Card</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ui/mainwindow.ui" line="770"/>
|
||||
<location filename="../ui/mainwindow.ui" line="774"/>
|
||||
<source>Set Parameter</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ui/mainwindow.ui" line="789"/>
|
||||
<location filename="../ui/mainwindow.ui" line="793"/>
|
||||
<source>Wipe</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ui/mainwindow.ui" line="815"/>
|
||||
<location filename="../ui/mainwindow.ui" line="870"/>
|
||||
<location filename="../ui/mainwindow.ui" line="819"/>
|
||||
<location filename="../ui/mainwindow.ui" line="874"/>
|
||||
<source>Simulate</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ui/mainwindow.ui" line="843"/>
|
||||
<location filename="../ui/mainwindow.ui" line="847"/>
|
||||
<source>Load from data above</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ui/mainwindow.ui" line="413"/>
|
||||
<location filename="../ui/mainwindow.ui" line="863"/>
|
||||
<location filename="../ui/mainwindow.ui" line="410"/>
|
||||
<location filename="../ui/mainwindow.ui" line="867"/>
|
||||
<source>Clear</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ui/mainwindow.ui" line="893"/>
|
||||
<location filename="../ui/mainwindow.ui" line="924"/>
|
||||
<location filename="../ui/mainwindow.ui" line="897"/>
|
||||
<location filename="../ui/mainwindow.ui" line="928"/>
|
||||
<source>Sniff</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ui/mainwindow.ui" line="931"/>
|
||||
<location filename="../ui/mainwindow.ui" line="935"/>
|
||||
<source>List Sniff Data</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ui/mainwindow.ui" line="983"/>
|
||||
<location filename="../ui/mainwindow.ui" line="987"/>
|
||||
<source>RawCommand</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ui/mainwindow.ui" line="1030"/>
|
||||
<location filename="../ui/mainwindow.ui" line="1034"/>
|
||||
<location filename="../ui/mainwindow.cpp" line="143"/>
|
||||
<source>History:</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ui/mainwindow.ui" line="1062"/>
|
||||
<location filename="../ui/mainwindow.ui" line="1066"/>
|
||||
<source>ClearHistory</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ui/mainwindow.ui" line="1081"/>
|
||||
<location filename="../ui/mainwindow.ui" line="1085"/>
|
||||
<source>Send</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ui/mainwindow.ui" line="1088"/>
|
||||
<location filename="../ui/mainwindow.ui" line="1092"/>
|
||||
<source>ClearOutput</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@ -345,6 +428,8 @@
|
||||
<location filename="../ui/mainwindow.cpp" line="291"/>
|
||||
<location filename="../ui/mainwindow.cpp" line="314"/>
|
||||
<location filename="../ui/mainwindow.cpp" line="327"/>
|
||||
<location filename="../ui/mainwindow.cpp" line="518"/>
|
||||
<location filename="../ui/mainwindow.cpp" line="537"/>
|
||||
<source>Info</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@ -361,7 +446,7 @@
|
||||
<message>
|
||||
<location filename="../ui/mainwindow.cpp" line="95"/>
|
||||
<location filename="../ui/mainwindow.cpp" line="105"/>
|
||||
<location filename="../ui/mainwindow.cpp" line="524"/>
|
||||
<location filename="../ui/mainwindow.cpp" line="592"/>
|
||||
<source>Not Connected</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@ -373,6 +458,7 @@
|
||||
<message>
|
||||
<location filename="../ui/mainwindow.cpp" line="278"/>
|
||||
<location filename="../ui/mainwindow.cpp" line="291"/>
|
||||
<location filename="../ui/mainwindow.cpp" line="518"/>
|
||||
<source>Failed to open</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@ -430,6 +516,7 @@
|
||||
<message>
|
||||
<location filename="../ui/mainwindow.cpp" line="314"/>
|
||||
<location filename="../ui/mainwindow.cpp" line="327"/>
|
||||
<location filename="../ui/mainwindow.cpp" line="537"/>
|
||||
<source>Failed to save to</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@ -529,49 +616,69 @@
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ui/mainwindow.cpp" line="525"/>
|
||||
<location filename="../ui/mainwindow.cpp" line="642"/>
|
||||
<location filename="../ui/mainwindow.cpp" line="505"/>
|
||||
<source>Plz select the trace file:</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ui/mainwindow.cpp" line="506"/>
|
||||
<source>Trace Files(*.trc);;All Files(*.*)</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ui/mainwindow.cpp" line="528"/>
|
||||
<source>Plz select the location to save trace file:</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ui/mainwindow.cpp" line="529"/>
|
||||
<source>Trace Files(*.trc)</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ui/mainwindow.cpp" line="593"/>
|
||||
<location filename="../ui/mainwindow.cpp" line="710"/>
|
||||
<source>Idle</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ui/mainwindow.cpp" line="532"/>
|
||||
<location filename="../ui/mainwindow.cpp" line="541"/>
|
||||
<location filename="../ui/mainwindow.cpp" line="600"/>
|
||||
<location filename="../ui/mainwindow.cpp" line="609"/>
|
||||
<source>Sec</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ui/mainwindow.cpp" line="533"/>
|
||||
<location filename="../ui/mainwindow.cpp" line="601"/>
|
||||
<source>Blk</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ui/mainwindow.cpp" line="542"/>
|
||||
<location filename="../ui/mainwindow.cpp" line="610"/>
|
||||
<source>KeyA</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ui/mainwindow.cpp" line="543"/>
|
||||
<location filename="../ui/mainwindow.cpp" line="611"/>
|
||||
<source>KeyB</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ui/mainwindow.cpp" line="579"/>
|
||||
<location filename="../ui/mainwindow.cpp" line="647"/>
|
||||
<source>HW Version:</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ui/mainwindow.cpp" line="581"/>
|
||||
<location filename="../ui/mainwindow.cpp" line="649"/>
|
||||
<source>PM3:</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ui/mainwindow.cpp" line="583"/>
|
||||
<location filename="../ui/mainwindow.cpp" line="651"/>
|
||||
<source>State:</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ui/mainwindow.cpp" line="638"/>
|
||||
<location filename="../ui/mainwindow.cpp" line="706"/>
|
||||
<source>Running</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@ -579,28 +686,28 @@
|
||||
<context>
|
||||
<name>Mifare</name>
|
||||
<message>
|
||||
<location filename="../module/mifare.cpp" line="289"/>
|
||||
<location filename="../module/mifare.cpp" line="386"/>
|
||||
<location filename="../module/mifare.cpp" line="310"/>
|
||||
<location filename="../module/mifare.cpp" line="419"/>
|
||||
<source>Success!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../module/mifare.cpp" line="289"/>
|
||||
<location filename="../module/mifare.cpp" line="293"/>
|
||||
<location filename="../module/mifare.cpp" line="386"/>
|
||||
<location filename="../module/mifare.cpp" line="390"/>
|
||||
<location filename="../module/mifare.cpp" line="425"/>
|
||||
<location filename="../module/mifare.cpp" line="310"/>
|
||||
<location filename="../module/mifare.cpp" line="314"/>
|
||||
<location filename="../module/mifare.cpp" line="419"/>
|
||||
<location filename="../module/mifare.cpp" line="423"/>
|
||||
<location filename="../module/mifare.cpp" line="473"/>
|
||||
<source>Info</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../module/mifare.cpp" line="293"/>
|
||||
<location filename="../module/mifare.cpp" line="390"/>
|
||||
<location filename="../module/mifare.cpp" line="314"/>
|
||||
<location filename="../module/mifare.cpp" line="423"/>
|
||||
<source>Failed!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../module/mifare.cpp" line="425"/>
|
||||
<location filename="../module/mifare.cpp" line="473"/>
|
||||
<source>Failed to read card.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
275
lang/zh_CN.ts
275
lang/zh_CN.ts
@ -45,6 +45,92 @@
|
||||
<translation type="vanished">目标块:</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>MF_Sim_simDialog</name>
|
||||
<message>
|
||||
<source>Dialog</source>
|
||||
<translation type="obsolete">对话框</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ui/mf_sim_simdialog.ui" line="14"/>
|
||||
<source>Simulate</source>
|
||||
<translation>模拟</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ui/mf_sim_simdialog.ui" line="37"/>
|
||||
<source>u</source>
|
||||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ui/mf_sim_simdialog.ui" line="66"/>
|
||||
<source>UID 4 or 7 bytes. If not specified, the UID 4B from emulator memory will be used</source>
|
||||
<translation>4或7字节的UID,如果不指定,则使用模拟器内存中的4字节UID</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ui/mf_sim_simdialog.ui" line="87"/>
|
||||
<source>n</source>
|
||||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ui/mf_sim_simdialog.ui" line="116"/>
|
||||
<source>Automatically exit simulation after <numreads> blocks have been read by reader. 0 = infinite</source>
|
||||
<translation>在读卡器读取<n>个块后自动退出模拟,n为0或不指定时永远不退出</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ui/mf_sim_simdialog.ui" line="137"/>
|
||||
<source>i</source>
|
||||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ui/mf_sim_simdialog.ui" line="150"/>
|
||||
<source>Interactive, means that console will not be returned until simulation finishes or is aborted</source>
|
||||
<translation>交互模式,勾选后PM3客户端将在模拟完成或者模拟中断后才可继续使用</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ui/mf_sim_simdialog.ui" line="171"/>
|
||||
<source>x</source>
|
||||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ui/mf_sim_simdialog.ui" line="184"/>
|
||||
<source>Crack, performs the 'reader attack', nr/ar attack against a legitimate reader, fishes out the key(s)</source>
|
||||
<translation>破解,对读卡器进行攻击,通过nr/ar攻击来钓出密码(无卡嗅探)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ui/mf_sim_simdialog.ui" line="205"/>
|
||||
<source>e</source>
|
||||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ui/mf_sim_simdialog.ui" line="218"/>
|
||||
<source>set keys found from 'reader attack' to emulator memory (implies x and i)</source>
|
||||
<translation>在获得密码后自动将密码写入模拟器内存(自动勾选x和i)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ui/mf_sim_simdialog.ui" line="239"/>
|
||||
<source>f</source>
|
||||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ui/mf_sim_simdialog.ui" line="268"/>
|
||||
<source>get UIDs to use for 'reader attack' from file 'f <filename.txt>' (implies x and i)</source>
|
||||
<translation>从<filename.txt>当中获取用于破解读卡器的UID(批量模拟)(自动勾选x和i)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ui/mf_sim_simdialog.ui" line="289"/>
|
||||
<source>r</source>
|
||||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ui/mf_sim_simdialog.ui" line="302"/>
|
||||
<source>Generate random nonces instead of sequential nonces. Standard reader attack won't work with this option, only moebius attack works</source>
|
||||
<translation>生成随机nonce而不是顺序的nonce,这种情况下PM3将不对读卡器进行标准攻击,只进行moebius攻击</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source> Generate random nonces instead of sequential nonces. Standard reader attack won't work with this option, only moebius attack works.</source>
|
||||
<translation type="vanished">生成随机nonce而不是顺序的nonce,这种情况下PM3将不对读卡器进行标准攻击,只进行moebius攻击</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>MF_UID_parameterDialog</name>
|
||||
<message>
|
||||
@ -104,250 +190,255 @@
|
||||
<translation>断开</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ui/mainwindow.ui" line="113"/>
|
||||
<location filename="../ui/mainwindow.ui" line="110"/>
|
||||
<source>Mifare</source>
|
||||
<translation>Mifare(IC)卡</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ui/mainwindow.ui" line="206"/>
|
||||
<location filename="../ui/mainwindow.ui" line="203"/>
|
||||
<source>>></source>
|
||||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ui/mainwindow.ui" line="231"/>
|
||||
<location filename="../ui/mainwindow.ui" line="228"/>
|
||||
<source><<</source>
|
||||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ui/mainwindow.ui" line="263"/>
|
||||
<location filename="../ui/mainwindow.ui" line="260"/>
|
||||
<source>F</source>
|
||||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ui/mainwindow.ui" line="320"/>
|
||||
<location filename="../ui/mainwindow.ui" line="317"/>
|
||||
<source>Card Type</source>
|
||||
<translation>卡类型</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ui/mainwindow.ui" line="335"/>
|
||||
<location filename="../ui/mainwindow.ui" line="332"/>
|
||||
<source>MINI</source>
|
||||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ui/mainwindow.ui" line="342"/>
|
||||
<location filename="../ui/mainwindow.ui" line="339"/>
|
||||
<source>1K</source>
|
||||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ui/mainwindow.ui" line="352"/>
|
||||
<location filename="../ui/mainwindow.ui" line="349"/>
|
||||
<source>2K</source>
|
||||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ui/mainwindow.ui" line="359"/>
|
||||
<location filename="../ui/mainwindow.ui" line="356"/>
|
||||
<source>4K</source>
|
||||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ui/mainwindow.ui" line="369"/>
|
||||
<location filename="../ui/mainwindow.ui" line="366"/>
|
||||
<source>File</source>
|
||||
<translation>文件</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ui/mainwindow.ui" line="387"/>
|
||||
<location filename="../ui/mainwindow.ui" line="944"/>
|
||||
<location filename="../ui/mainwindow.ui" line="384"/>
|
||||
<location filename="../ui/mainwindow.ui" line="948"/>
|
||||
<source>Load</source>
|
||||
<translation>加载</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ui/mainwindow.ui" line="400"/>
|
||||
<location filename="../ui/mainwindow.ui" line="957"/>
|
||||
<location filename="../ui/mainwindow.ui" line="397"/>
|
||||
<location filename="../ui/mainwindow.ui" line="961"/>
|
||||
<source>Save</source>
|
||||
<translation>保存</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ui/mainwindow.ui" line="420"/>
|
||||
<location filename="../ui/mainwindow.cpp" line="534"/>
|
||||
<location filename="../ui/mainwindow.ui" line="417"/>
|
||||
<location filename="../ui/mainwindow.cpp" line="602"/>
|
||||
<source>Data</source>
|
||||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ui/mainwindow.ui" line="430"/>
|
||||
<location filename="../ui/mainwindow.ui" line="427"/>
|
||||
<source>Key</source>
|
||||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ui/mainwindow.ui" line="440"/>
|
||||
<location filename="../ui/mainwindow.ui" line="437"/>
|
||||
<source>Attack</source>
|
||||
<translation>破解</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ui/mainwindow.ui" line="465"/>
|
||||
<location filename="../ui/mainwindow.ui" line="462"/>
|
||||
<source>Card Info</source>
|
||||
<translation>读卡片信息</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ui/mainwindow.ui" line="478"/>
|
||||
<location filename="../ui/mainwindow.ui" line="475"/>
|
||||
<source>Check Default</source>
|
||||
<translation>验证默认密码</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ui/mainwindow.ui" line="491"/>
|
||||
<location filename="../ui/mainwindow.ui" line="488"/>
|
||||
<source>Nested</source>
|
||||
<translation>Nested攻击</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ui/mainwindow.ui" line="498"/>
|
||||
<location filename="../ui/mainwindow.ui" line="495"/>
|
||||
<source>Hardnested</source>
|
||||
<translation>Hardested攻击</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ui/mainwindow.ui" line="523"/>
|
||||
<location filename="../ui/mainwindow.ui" line="520"/>
|
||||
<source>Read/Write</source>
|
||||
<translation>读/写</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ui/mainwindow.ui" line="533"/>
|
||||
<location filename="../ui/mainwindow.ui" line="530"/>
|
||||
<source>Block:</source>
|
||||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ui/mainwindow.ui" line="565"/>
|
||||
<location filename="../ui/mainwindow.ui" line="562"/>
|
||||
<source>Key:</source>
|
||||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ui/mainwindow.ui" line="584"/>
|
||||
<location filename="../ui/mainwindow.ui" line="581"/>
|
||||
<source>Key Type:</source>
|
||||
<translation>Key类型:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ui/mainwindow.ui" line="604"/>
|
||||
<location filename="../ui/mainwindow.ui" line="601"/>
|
||||
<source>A</source>
|
||||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ui/mainwindow.ui" line="609"/>
|
||||
<location filename="../ui/mainwindow.ui" line="606"/>
|
||||
<source>B</source>
|
||||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ui/mainwindow.ui" line="632"/>
|
||||
<location filename="../ui/mainwindow.ui" line="614"/>
|
||||
<source>Data:</source>
|
||||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ui/mainwindow.ui" line="636"/>
|
||||
<source>Normal(Require Password)</source>
|
||||
<translation>普通卡(需要密码)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ui/mainwindow.ui" line="647"/>
|
||||
<location filename="../ui/mainwindow.ui" line="736"/>
|
||||
<location filename="../ui/mainwindow.ui" line="651"/>
|
||||
<location filename="../ui/mainwindow.ui" line="740"/>
|
||||
<source>Read Block</source>
|
||||
<translation>读单个块</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ui/mainwindow.ui" line="654"/>
|
||||
<location filename="../ui/mainwindow.ui" line="743"/>
|
||||
<location filename="../ui/mainwindow.ui" line="658"/>
|
||||
<location filename="../ui/mainwindow.ui" line="747"/>
|
||||
<source>Write Block</source>
|
||||
<translation>写单个块</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ui/mainwindow.ui" line="661"/>
|
||||
<location filename="../ui/mainwindow.ui" line="750"/>
|
||||
<location filename="../ui/mainwindow.ui" line="850"/>
|
||||
<location filename="../ui/mainwindow.ui" line="665"/>
|
||||
<location filename="../ui/mainwindow.ui" line="754"/>
|
||||
<location filename="../ui/mainwindow.ui" line="854"/>
|
||||
<source>Read All</source>
|
||||
<translation>读所有块</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ui/mainwindow.ui" line="668"/>
|
||||
<location filename="../ui/mainwindow.ui" line="757"/>
|
||||
<location filename="../ui/mainwindow.ui" line="672"/>
|
||||
<location filename="../ui/mainwindow.ui" line="761"/>
|
||||
<source>Write All</source>
|
||||
<translation>写所有块</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ui/mainwindow.ui" line="687"/>
|
||||
<location filename="../ui/mainwindow.ui" line="691"/>
|
||||
<source>Dump</source>
|
||||
<translation>Dump命令</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ui/mainwindow.ui" line="700"/>
|
||||
<location filename="../ui/mainwindow.ui" line="704"/>
|
||||
<source>Restore</source>
|
||||
<translation>Restore命令</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ui/mainwindow.ui" line="710"/>
|
||||
<location filename="../ui/mainwindow.ui" line="714"/>
|
||||
<source>Chinese Magic Card(Without Password)</source>
|
||||
<translation>UID卡(不需要密码)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ui/mainwindow.ui" line="722"/>
|
||||
<location filename="../ui/mainwindow.ui" line="726"/>
|
||||
<source>Lock UFUID Card</source>
|
||||
<translation>锁定UFUID卡</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ui/mainwindow.ui" line="729"/>
|
||||
<location filename="../ui/mainwindow.ui" line="733"/>
|
||||
<location filename="../ui/mainwindow.cpp" line="461"/>
|
||||
<source>About UID Card</source>
|
||||
<translation>关于UID卡</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ui/mainwindow.ui" line="770"/>
|
||||
<location filename="../ui/mainwindow.ui" line="774"/>
|
||||
<source>Set Parameter</source>
|
||||
<translation>设置卡参数</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ui/mainwindow.ui" line="789"/>
|
||||
<location filename="../ui/mainwindow.ui" line="793"/>
|
||||
<source>Wipe</source>
|
||||
<translation>擦除</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ui/mainwindow.ui" line="815"/>
|
||||
<location filename="../ui/mainwindow.ui" line="870"/>
|
||||
<location filename="../ui/mainwindow.ui" line="819"/>
|
||||
<location filename="../ui/mainwindow.ui" line="874"/>
|
||||
<source>Simulate</source>
|
||||
<translation>模拟</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ui/mainwindow.ui" line="843"/>
|
||||
<location filename="../ui/mainwindow.ui" line="847"/>
|
||||
<source>Load from data above</source>
|
||||
<translation>从上方数据导入</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ui/mainwindow.ui" line="413"/>
|
||||
<location filename="../ui/mainwindow.ui" line="863"/>
|
||||
<location filename="../ui/mainwindow.ui" line="410"/>
|
||||
<location filename="../ui/mainwindow.ui" line="867"/>
|
||||
<source>Clear</source>
|
||||
<translation>清空</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ui/mainwindow.ui" line="893"/>
|
||||
<location filename="../ui/mainwindow.ui" line="924"/>
|
||||
<location filename="../ui/mainwindow.ui" line="897"/>
|
||||
<location filename="../ui/mainwindow.ui" line="928"/>
|
||||
<source>Sniff</source>
|
||||
<translation>嗅探</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ui/mainwindow.ui" line="931"/>
|
||||
<location filename="../ui/mainwindow.ui" line="935"/>
|
||||
<source>List Sniff Data</source>
|
||||
<translation>列出嗅探数据</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ui/mainwindow.ui" line="983"/>
|
||||
<location filename="../ui/mainwindow.ui" line="987"/>
|
||||
<source>RawCommand</source>
|
||||
<translation>原始命令</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ui/mainwindow.ui" line="1030"/>
|
||||
<location filename="../ui/mainwindow.ui" line="1034"/>
|
||||
<location filename="../ui/mainwindow.cpp" line="143"/>
|
||||
<source>History:</source>
|
||||
<translation>命令历史:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ui/mainwindow.ui" line="1062"/>
|
||||
<location filename="../ui/mainwindow.ui" line="1066"/>
|
||||
<source>ClearHistory</source>
|
||||
<translation>清空历史</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ui/mainwindow.ui" line="1081"/>
|
||||
<location filename="../ui/mainwindow.ui" line="1085"/>
|
||||
<source>Send</source>
|
||||
<translation>发送</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ui/mainwindow.ui" line="1088"/>
|
||||
<location filename="../ui/mainwindow.ui" line="1092"/>
|
||||
<source>ClearOutput</source>
|
||||
<translation>清空输出</translation>
|
||||
</message>
|
||||
@ -361,6 +452,8 @@
|
||||
<location filename="../ui/mainwindow.cpp" line="291"/>
|
||||
<location filename="../ui/mainwindow.cpp" line="314"/>
|
||||
<location filename="../ui/mainwindow.cpp" line="327"/>
|
||||
<location filename="../ui/mainwindow.cpp" line="518"/>
|
||||
<location filename="../ui/mainwindow.cpp" line="537"/>
|
||||
<source>Info</source>
|
||||
<translation>信息</translation>
|
||||
</message>
|
||||
@ -377,7 +470,7 @@
|
||||
<message>
|
||||
<location filename="../ui/mainwindow.cpp" line="95"/>
|
||||
<location filename="../ui/mainwindow.cpp" line="105"/>
|
||||
<location filename="../ui/mainwindow.cpp" line="524"/>
|
||||
<location filename="../ui/mainwindow.cpp" line="592"/>
|
||||
<source>Not Connected</source>
|
||||
<translation>未连接</translation>
|
||||
</message>
|
||||
@ -398,6 +491,7 @@ Continue?</source>
|
||||
<message>
|
||||
<location filename="../ui/mainwindow.cpp" line="278"/>
|
||||
<location filename="../ui/mainwindow.cpp" line="291"/>
|
||||
<location filename="../ui/mainwindow.cpp" line="518"/>
|
||||
<source>Failed to open</source>
|
||||
<translation>无法打开</translation>
|
||||
</message>
|
||||
@ -467,6 +561,7 @@ Continue?</source>
|
||||
<message>
|
||||
<location filename="../ui/mainwindow.cpp" line="314"/>
|
||||
<location filename="../ui/mainwindow.cpp" line="327"/>
|
||||
<location filename="../ui/mainwindow.cpp" line="537"/>
|
||||
<source>Failed to save to</source>
|
||||
<translation>无法保存至</translation>
|
||||
</message>
|
||||
@ -566,49 +661,69 @@ Continue?</source>
|
||||
<translation> 所有UID卡都似乎更容易被Nested攻击破解</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ui/mainwindow.cpp" line="525"/>
|
||||
<location filename="../ui/mainwindow.cpp" line="642"/>
|
||||
<location filename="../ui/mainwindow.cpp" line="505"/>
|
||||
<source>Plz select the trace file:</source>
|
||||
<translation>请选择trace文件:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ui/mainwindow.cpp" line="506"/>
|
||||
<source>Trace Files(*.trc);;All Files(*.*)</source>
|
||||
<translation>Trace文件(*.trc);;所有文件(*.*)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ui/mainwindow.cpp" line="528"/>
|
||||
<source>Plz select the location to save trace file:</source>
|
||||
<translation>请选择trace文件保存的位置:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ui/mainwindow.cpp" line="529"/>
|
||||
<source>Trace Files(*.trc)</source>
|
||||
<translation>Trace文件(*.trc)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ui/mainwindow.cpp" line="593"/>
|
||||
<location filename="../ui/mainwindow.cpp" line="710"/>
|
||||
<source>Idle</source>
|
||||
<translation>空闲</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ui/mainwindow.cpp" line="532"/>
|
||||
<location filename="../ui/mainwindow.cpp" line="541"/>
|
||||
<location filename="../ui/mainwindow.cpp" line="600"/>
|
||||
<location filename="../ui/mainwindow.cpp" line="609"/>
|
||||
<source>Sec</source>
|
||||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ui/mainwindow.cpp" line="533"/>
|
||||
<location filename="../ui/mainwindow.cpp" line="601"/>
|
||||
<source>Blk</source>
|
||||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ui/mainwindow.cpp" line="542"/>
|
||||
<location filename="../ui/mainwindow.cpp" line="610"/>
|
||||
<source>KeyA</source>
|
||||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ui/mainwindow.cpp" line="543"/>
|
||||
<location filename="../ui/mainwindow.cpp" line="611"/>
|
||||
<source>KeyB</source>
|
||||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ui/mainwindow.cpp" line="579"/>
|
||||
<location filename="../ui/mainwindow.cpp" line="647"/>
|
||||
<source>HW Version:</source>
|
||||
<translation>固件版本:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ui/mainwindow.cpp" line="581"/>
|
||||
<location filename="../ui/mainwindow.cpp" line="649"/>
|
||||
<source>PM3:</source>
|
||||
<translation>连接状态:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ui/mainwindow.cpp" line="583"/>
|
||||
<location filename="../ui/mainwindow.cpp" line="651"/>
|
||||
<source>State:</source>
|
||||
<translation>运行状态:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ui/mainwindow.cpp" line="638"/>
|
||||
<location filename="../ui/mainwindow.cpp" line="706"/>
|
||||
<source>Running</source>
|
||||
<translation>运行中</translation>
|
||||
</message>
|
||||
@ -620,28 +735,28 @@ Continue?</source>
|
||||
<translation type="vanished">信息:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../module/mifare.cpp" line="289"/>
|
||||
<location filename="../module/mifare.cpp" line="386"/>
|
||||
<location filename="../module/mifare.cpp" line="310"/>
|
||||
<location filename="../module/mifare.cpp" line="419"/>
|
||||
<source>Success!</source>
|
||||
<translation>成功!</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../module/mifare.cpp" line="289"/>
|
||||
<location filename="../module/mifare.cpp" line="293"/>
|
||||
<location filename="../module/mifare.cpp" line="386"/>
|
||||
<location filename="../module/mifare.cpp" line="390"/>
|
||||
<location filename="../module/mifare.cpp" line="425"/>
|
||||
<location filename="../module/mifare.cpp" line="310"/>
|
||||
<location filename="../module/mifare.cpp" line="314"/>
|
||||
<location filename="../module/mifare.cpp" line="419"/>
|
||||
<location filename="../module/mifare.cpp" line="423"/>
|
||||
<location filename="../module/mifare.cpp" line="473"/>
|
||||
<source>Info</source>
|
||||
<translation>信息</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../module/mifare.cpp" line="293"/>
|
||||
<location filename="../module/mifare.cpp" line="390"/>
|
||||
<location filename="../module/mifare.cpp" line="314"/>
|
||||
<location filename="../module/mifare.cpp" line="423"/>
|
||||
<source>Failed!</source>
|
||||
<translation>失败!</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../module/mifare.cpp" line="425"/>
|
||||
<location filename="../module/mifare.cpp" line="473"/>
|
||||
<source>Failed to read card.</source>
|
||||
<translation>读卡失败。</translation>
|
||||
</message>
|
||||
|
@ -1,6 +1,6 @@
|
||||
#include "mifare.h"
|
||||
|
||||
Mifare::Mifare(Ui::MainWindow *ui, Util *addr, QWidget *parent) : QObject(parent)
|
||||
Mifare::Mifare(Ui::MainWindow *ui, Util *addr, QWidget *parent): QObject(parent)
|
||||
{
|
||||
this->parent = parent;
|
||||
util = addr;
|
||||
@ -16,8 +16,6 @@ Mifare::Mifare(Ui::MainWindow *ui, Util *addr, QWidget *parent) : QObject(parent
|
||||
nestedKeyPattern = new QRegExp("\\|\\d{3}\\|.+\\|.+\\|.+\\|.+\\|");
|
||||
}
|
||||
|
||||
|
||||
|
||||
QString Mifare::info(bool isRequiringOutput)
|
||||
{
|
||||
if(isRequiringOutput)
|
||||
@ -47,14 +45,19 @@ QString Mifare::info(bool isRequiringOutput)
|
||||
|
||||
void Mifare::chk()
|
||||
{
|
||||
QString result = util->execCMDWithOutput("hf mf chk *" + QString::number(cardType.type) + " ?", 1000 + cardType.type * 1000);
|
||||
QString result = util->execCMDWithOutput(
|
||||
"hf mf chk *"
|
||||
+ QString::number(cardType.type)
|
||||
+ " ?",
|
||||
1000 + cardType.type * 1000);
|
||||
qDebug() << result;
|
||||
|
||||
int offset = 0;
|
||||
QString tmp, tmp2;
|
||||
for(int i = 0; i < cardType.sectors; i++)
|
||||
{
|
||||
offset = result.indexOf(*chkKeyPattern, offset);
|
||||
offset = chkKeyPattern->indexIn(result, offset);
|
||||
// offset = result.indexOf(*chkKeyPattern, offset);
|
||||
tmp = result.mid(offset, 39).toUpper();
|
||||
offset += 39;
|
||||
qDebug() << tmp << offset;
|
||||
@ -70,13 +73,17 @@ void Mifare::chk()
|
||||
|
||||
void Mifare::nested()
|
||||
{
|
||||
QString result = util->execCMDWithOutput("hf mf nested " + QString::number(cardType.type) + " *");
|
||||
QString result = util->execCMDWithOutput(
|
||||
"hf mf nested "
|
||||
+ QString::number(cardType.type)
|
||||
+ " *");
|
||||
|
||||
int offset = 0;
|
||||
QString tmp;
|
||||
for(int i = 0; i < cardType.sectors; i++)
|
||||
{
|
||||
offset = result.indexOf(*nestedKeyPattern, offset);
|
||||
offset = nestedKeyPattern->indexIn(result, offset);
|
||||
// offset = result.indexOf(*nestedKeyPattern, offset);
|
||||
tmp = result.mid(offset, 47).toUpper();
|
||||
offset += 47;
|
||||
if(tmp.at(23) == '1')
|
||||
@ -111,15 +118,17 @@ void Mifare::read()
|
||||
{
|
||||
int waitTime = 300;
|
||||
int currblk = ui->MF_RW_blockBox->currentText().toInt();
|
||||
QString result = util->execCMDWithOutput("hf mf rdbl "
|
||||
QString result = util->execCMDWithOutput(
|
||||
"hf mf rdbl "
|
||||
+ QString::number(currblk)
|
||||
+ " "
|
||||
+ ui->MF_RW_keyTypeBox->currentText()
|
||||
+ " "
|
||||
+ ui->MF_RW_keyEdit->text(), waitTime);
|
||||
+ ui->MF_RW_keyEdit->text(),
|
||||
waitTime);
|
||||
if(result.indexOf("isOk:01") != -1)
|
||||
{
|
||||
result = result.mid(result.indexOf(*dataPattern, 0), 47).toUpper();
|
||||
result = result.mid(dataPattern->indexIn(result), 47).toUpper();
|
||||
if((currblk < 128 && ((currblk + 1) % 4 == 0)) || ((currblk + 1) % 8 == 0)) // process key block
|
||||
{
|
||||
if(ui->MF_RW_keyTypeBox->currentText() == "A")
|
||||
@ -130,10 +139,12 @@ void Mifare::read()
|
||||
}
|
||||
ui->MF_RW_dataEdit->setText(result);
|
||||
QString tmpKey = result.right(18).replace(" ", "");
|
||||
result = util->execCMDWithOutput("hf mf rdbl "
|
||||
result = util->execCMDWithOutput(
|
||||
"hf mf rdbl "
|
||||
+ ui->MF_RW_keyTypeBox->currentText()
|
||||
+ " B "
|
||||
+ tmpKey, waitTime);
|
||||
+ tmpKey,
|
||||
waitTime);
|
||||
if(result.indexOf("isOk:01") == -1)
|
||||
{
|
||||
result = ui->MF_RW_dataEdit->text();
|
||||
@ -145,7 +156,10 @@ void Mifare::read()
|
||||
{
|
||||
for(int i = 0; i < 6; i++)
|
||||
{
|
||||
result = result.replace(30 + i * 3, 2, ui->MF_RW_keyEdit->text().mid(i * 2, 2));
|
||||
result = result.replace(
|
||||
30 + i * 3,
|
||||
2,
|
||||
ui->MF_RW_keyEdit->text().mid(i * 2, 2));
|
||||
}
|
||||
result = result.replace(0, 18, "?? ?? ?? ?? ?? ?? ");
|
||||
ui->MF_RW_dataEdit->setText(result);
|
||||
@ -176,10 +190,12 @@ void Mifare::readAll()
|
||||
// check keys and read the first block of each sector
|
||||
if(data_isKeyValid(keyAList->at(i)))
|
||||
{
|
||||
result = util->execCMDWithOutput("hf mf rdsc "
|
||||
result = util->execCMDWithOutput(
|
||||
"hf mf rdsc "
|
||||
+ QString::number(i)
|
||||
+ " A "
|
||||
+ keyAList->at(i), waitTime);
|
||||
+ keyAList->at(i),
|
||||
waitTime);
|
||||
qDebug() << result;
|
||||
offset = result.indexOf("isOk:01");
|
||||
if(offset != -1)
|
||||
@ -187,7 +203,8 @@ void Mifare::readAll()
|
||||
isKeyAValid = true;
|
||||
for(int j = 0; j < cardType.blk[i]; j++)
|
||||
{
|
||||
offset = result.indexOf(*dataPattern, offset);
|
||||
offset = dataPattern->indexIn(result, offset);
|
||||
// offset = result.indexOf(*dataPattern, offset);
|
||||
tmp = result.mid(offset, 47).toUpper();
|
||||
offset += 47;
|
||||
qDebug() << tmp;
|
||||
@ -199,10 +216,12 @@ void Mifare::readAll()
|
||||
}
|
||||
if(data_isKeyValid(keyBList->at(i)))
|
||||
{
|
||||
result = util->execCMDWithOutput("hf mf rdsc "
|
||||
result = util->execCMDWithOutput(
|
||||
"hf mf rdsc "
|
||||
+ QString::number(i)
|
||||
+ " B "
|
||||
+ keyBList->at(i), waitTime);
|
||||
+ keyBList->at(i),
|
||||
waitTime);
|
||||
qDebug() << result;
|
||||
offset = result.indexOf("isOk:01");
|
||||
if(offset != -1)
|
||||
@ -210,7 +229,8 @@ void Mifare::readAll()
|
||||
isKeyBValid = true;
|
||||
for(int j = 0; j < cardType.blk[i]; j++)
|
||||
{
|
||||
offset = result.indexOf(*dataPattern, offset);
|
||||
offset = dataPattern->indexIn(result, offset);
|
||||
// offset = result.indexOf(*dataPattern, offset);
|
||||
tmp = result.mid(offset, 47).toUpper();
|
||||
offset += 47;
|
||||
qDebug() << tmp;
|
||||
@ -227,7 +247,8 @@ void Mifare::readAll()
|
||||
// fill the MF_dataWidget with the known valid key
|
||||
//
|
||||
// check whether the MF_dataWidget contains the valid key,
|
||||
// and fill MF_keyWidget(when you only have KeyA but the ReadBlock output contains the KeyB)
|
||||
// and fill MF_keyWidget(when you only have KeyA but the ReadBlock output
|
||||
// contains the KeyB)
|
||||
//
|
||||
// the structure is not symmetric, since you cannot get KeyA from output
|
||||
// this program will only process the provided KeyA(in MF_keyWidget)
|
||||
@ -250,11 +271,14 @@ void Mifare::readAll()
|
||||
}
|
||||
else // now isKeyAValid == true, the output might contains the KeyB
|
||||
{
|
||||
QString tmpKey = dataList->at(cardType.blks[i] + cardType.blk[i] - 1).right(12);
|
||||
result = util->execCMDWithOutput("hf mf rdbl "
|
||||
QString tmpKey =
|
||||
dataList->at(cardType.blks[i] + cardType.blk[i] - 1).right(12);
|
||||
result = util->execCMDWithOutput(
|
||||
"hf mf rdbl "
|
||||
+ QString::number(cardType.blks[i] + cardType.blk[i] - 1)
|
||||
+ " B "
|
||||
+ tmpKey, waitTime);
|
||||
+ tmpKey,
|
||||
waitTime);
|
||||
if(result.indexOf("isOk:01") != -1)
|
||||
{
|
||||
keyBList->replace(i, tmpKey);
|
||||
@ -265,7 +289,6 @@ void Mifare::readAll()
|
||||
result = dataList->at(cardType.blks[i] + cardType.blk[i] - 1);
|
||||
result = result.replace(20, 12, "????????????");
|
||||
dataList->replace(cardType.blks[i] + cardType.blk[i] - 1, result);
|
||||
|
||||
}
|
||||
}
|
||||
data_syncWithDataWidget(false, cardType.blks[i] + cardType.blk[i] - 1);
|
||||
@ -276,14 +299,12 @@ void Mifare::readAll()
|
||||
void Mifare::write()
|
||||
{
|
||||
int waitTime = 300;
|
||||
QString result = util->execCMDWithOutput("hf mf wrbl "
|
||||
+ ui->MF_RW_blockBox->currentText()
|
||||
+ " "
|
||||
+ ui->MF_RW_keyTypeBox->currentText()
|
||||
+ " "
|
||||
+ ui->MF_RW_keyEdit->text()
|
||||
+ " "
|
||||
+ ui->MF_RW_dataEdit->text().replace(" ", ""), waitTime);
|
||||
QString result = util->execCMDWithOutput(
|
||||
"hf mf wrbl " + ui->MF_RW_blockBox->currentText() + " " +
|
||||
ui->MF_RW_keyTypeBox->currentText() + " " +
|
||||
ui->MF_RW_keyEdit->text() + " " +
|
||||
ui->MF_RW_dataEdit->text().replace(" ", ""),
|
||||
waitTime);
|
||||
if(result.indexOf("isOk:01") != -1)
|
||||
{
|
||||
QMessageBox::information(parent, tr("Info"), tr("Success!"));
|
||||
@ -302,27 +323,32 @@ void Mifare::writeAll()
|
||||
{
|
||||
for(int j = 0; j < cardType.blk[i]; j++)
|
||||
{
|
||||
result = ""; // if the KeyA is invalid and the result is not empty, the KeyB will not be tested.
|
||||
result = ""; // if the KeyA is invalid and the result is not empty, the
|
||||
// KeyB will not be tested.
|
||||
if(data_isDataValid(dataList->at(cardType.blks[i] + j)) != DATA_NOSPACE || dataList->at(cardType.blks[i] + j).contains('?'))
|
||||
continue;
|
||||
if(data_isKeyValid(keyAList->at(i)))
|
||||
{
|
||||
result = util->execCMDWithOutput("hf mf wrbl "
|
||||
+ QString::number(cardType.blks[i] + j)
|
||||
result = util->execCMDWithOutput(
|
||||
"hf mf wrbl " +
|
||||
QString::number(cardType.blks[i] + j)
|
||||
+ " A "
|
||||
+ keyAList->at(i)
|
||||
+ " "
|
||||
+ dataList->at(cardType.blks[i] + j), waitTime);
|
||||
+ dataList->at(cardType.blks[i] + j),
|
||||
waitTime);
|
||||
}
|
||||
qDebug() << i << j << result.indexOf("isOk:01") << data_isKeyValid(keyBList->at(i));
|
||||
if(result.indexOf("isOk:01") == -1 && data_isKeyValid(keyBList->at(i)))
|
||||
{
|
||||
result = util->execCMDWithOutput("hf mf wrbl "
|
||||
result = util->execCMDWithOutput(
|
||||
"hf mf wrbl "
|
||||
+ QString::number(cardType.blks[i] + j)
|
||||
+ " B "
|
||||
+ keyBList->at(i)
|
||||
+ " "
|
||||
+ dataList->at(cardType.blks[i] + j), waitTime);
|
||||
+ dataList->at(cardType.blks[i] + j),
|
||||
waitTime);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -332,11 +358,13 @@ void Mifare::readC()
|
||||
{
|
||||
int waitTime = 300;
|
||||
int currblk = ui->MF_RW_blockBox->currentText().toInt();
|
||||
QString result = util->execCMDWithOutput("hf mf cgetblk "
|
||||
+ QString::number(currblk), waitTime);
|
||||
QString result = util->execCMDWithOutput(
|
||||
"hf mf cgetblk "
|
||||
+ QString::number(currblk),
|
||||
waitTime);
|
||||
if(result.indexOf("No chinese") == -1)
|
||||
{
|
||||
result = result.mid(result.indexOf(*dataPattern, 0), 47).toUpper();
|
||||
result = result.mid(dataPattern->indexIn(result), 47).toUpper();
|
||||
ui->MF_RW_dataEdit->setText(result);
|
||||
}
|
||||
}
|
||||
@ -350,15 +378,18 @@ void Mifare::readAllC()
|
||||
int offset = 0;
|
||||
for(int i = 0; i < cardType.sectors; i++)
|
||||
{
|
||||
result = util->execCMDWithOutput("hf mf cgetsc "
|
||||
+ QString::number(i), waitTime);
|
||||
result = util->execCMDWithOutput(
|
||||
"hf mf cgetsc "
|
||||
+ QString::number(i),
|
||||
waitTime);
|
||||
qDebug() << result;
|
||||
if(result.indexOf("No chinese") == -1)
|
||||
{
|
||||
offset = 0;
|
||||
for(int j = 0; j < cardType.blk[i]; j++)
|
||||
{
|
||||
offset = result.indexOf(*dataPattern, offset);
|
||||
offset = dataPattern->indexIn(result, offset);
|
||||
// offset = result.indexOf(*dataPattern, offset);
|
||||
tmp = result.mid(offset, 47).toUpper();
|
||||
offset += 47;
|
||||
qDebug() << tmp;
|
||||
@ -377,10 +408,12 @@ void Mifare::readAllC()
|
||||
void Mifare::writeC()
|
||||
{
|
||||
int waitTime = 150;
|
||||
QString result = util->execCMDWithOutput("hf mf csetblk "
|
||||
QString result = util->execCMDWithOutput(
|
||||
"hf mf csetblk "
|
||||
+ ui->MF_RW_blockBox->currentText()
|
||||
+ " "
|
||||
+ ui->MF_RW_dataEdit->text().replace(" ", ""), waitTime);
|
||||
+ ui->MF_RW_dataEdit->text().replace(" ", ""),
|
||||
waitTime);
|
||||
if(result.indexOf("No chinese") == -1)
|
||||
{
|
||||
QMessageBox::information(parent, tr("Info"), tr("Success!"));
|
||||
@ -399,20 +432,35 @@ void Mifare::writeAllC()
|
||||
{
|
||||
for(int j = 0; j < cardType.blk[i]; j++)
|
||||
{
|
||||
result = ""; // if the KeyA is invalid and the result is not empty, the KeyB will not be tested.
|
||||
result = "";
|
||||
if(data_isDataValid(dataList->at(cardType.blks[i] + j)) != DATA_NOSPACE || dataList->at(cardType.blks[i] + j).contains('?'))
|
||||
continue;
|
||||
result = util->execCMDWithOutput("hf mf csetblk "
|
||||
result = util->execCMDWithOutput(
|
||||
"hf mf csetblk "
|
||||
+ QString::number(cardType.blks[i] + j)
|
||||
+ " "
|
||||
+ dataList->at(cardType.blks[i] + j), waitTime);
|
||||
+ dataList->at(cardType.blks[i] + j),
|
||||
waitTime);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void Mifare::dump()
|
||||
{
|
||||
util->execCMD("hf mf dump");
|
||||
ui->funcTab->setCurrentIndex(1);
|
||||
}
|
||||
|
||||
void Mifare::restore()
|
||||
{
|
||||
util->execCMD("hf mf restore");
|
||||
ui->funcTab->setCurrentIndex(1);
|
||||
}
|
||||
|
||||
void Mifare::wipeC()
|
||||
{
|
||||
util->execCMD("hf mf cwipe "
|
||||
util->execCMD(
|
||||
"hf mf cwipe "
|
||||
+ QString::number(cardType.type)
|
||||
+ " f");
|
||||
ui->funcTab->setCurrentIndex(1);
|
||||
@ -446,15 +494,91 @@ void Mifare::lockC()
|
||||
util->execCMD("hf 14a raw 52");
|
||||
}
|
||||
|
||||
void Mifare::dump()
|
||||
void Mifare::writeAllE()
|
||||
{
|
||||
util->execCMD("hf mf dump");
|
||||
const int waitTime = 200;
|
||||
QString result;
|
||||
for(int i = 0; i < cardType.sectors; i++)
|
||||
{
|
||||
for(int j = 0; j < cardType.blk[i]; j++)
|
||||
{
|
||||
result = "";
|
||||
if(data_isDataValid(dataList->at(cardType.blks[i] + j)) != DATA_NOSPACE || dataList->at(cardType.blks[i] + j).contains('?'))
|
||||
continue;
|
||||
result = util->execCMDWithOutput(
|
||||
"hf mf eset "
|
||||
+ QString::number(cardType.blks[i] + j)
|
||||
+ " "
|
||||
+ dataList->at(cardType.blks[i] + j),
|
||||
waitTime);
|
||||
}
|
||||
}
|
||||
util->execCMDWithOutput("hf mf eget", waitTime); // to refresh output buffer;
|
||||
}
|
||||
|
||||
void Mifare::readAllE()
|
||||
{
|
||||
QString result;
|
||||
const int waitTime = 200;
|
||||
|
||||
QString tmp;
|
||||
int offset = 0;
|
||||
for(int i = 0; i < cardType.sectors; i++)
|
||||
{
|
||||
offset = 0;
|
||||
for(int j = 0; j < cardType.blk[i]; j++)
|
||||
{
|
||||
|
||||
qDebug() << "**********" ;
|
||||
result = util->execCMDWithOutput(
|
||||
"hf mf eget "
|
||||
+ QString::number(cardType.blks[i] + j),
|
||||
waitTime);
|
||||
qDebug() << result ;
|
||||
|
||||
offset = dataPattern->indexIn(result);
|
||||
// offset = result.indexOf(*dataPattern, offset); // When I find the data position in this way, the Regex might fail to match.
|
||||
|
||||
tmp = result.mid(offset, 47).toUpper();
|
||||
qDebug() << tmp << offset;
|
||||
qDebug() << "**********" ;
|
||||
|
||||
if(offset == -1)
|
||||
continue;
|
||||
tmp.replace(" ", "");
|
||||
dataList->replace(cardType.blks[i] + j, tmp);
|
||||
data_syncWithDataWidget(false, cardType.blks[i] + j);
|
||||
}
|
||||
keyAList->replace(i, dataList->at(cardType.blks[i] + cardType.blk[i] - 1).left(12));
|
||||
keyBList->replace(i, dataList->at(cardType.blks[i] + cardType.blk[i] - 1).right(12));
|
||||
data_syncWithKeyWidget(false, i, true);
|
||||
data_syncWithKeyWidget(false, i, false);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
void Mifare::wipeE()
|
||||
{
|
||||
util->execCMD("hf mf eclr");
|
||||
}
|
||||
|
||||
void Mifare::simulate()
|
||||
{
|
||||
MF_Sim_simDialog dialog(cardType.type);
|
||||
connect(&dialog, &MF_Sim_simDialog::sendCMD, util, &Util::execCMD);
|
||||
if(dialog.exec() == QDialog::Accepted)
|
||||
ui->funcTab->setCurrentIndex(1);
|
||||
}
|
||||
|
||||
void Mifare::restore()
|
||||
void Mifare::loadSniff(const QString& file)
|
||||
{
|
||||
util->execCMD("hf mf restore");
|
||||
util->execCMD("hf list mf -l " + file);
|
||||
ui->funcTab->setCurrentIndex(1);
|
||||
}
|
||||
|
||||
void Mifare::saveSniff(const QString& file)
|
||||
{
|
||||
util->execCMD("hf list mf -s " + file);
|
||||
ui->funcTab->setCurrentIndex(1);
|
||||
}
|
||||
|
||||
@ -531,7 +655,7 @@ void Mifare::data_clearKey()
|
||||
}
|
||||
}
|
||||
|
||||
bool Mifare::data_isKeyValid(const QString& key)
|
||||
bool Mifare::data_isKeyValid(const QString &key)
|
||||
{
|
||||
if(key.length() != 12)
|
||||
return false;
|
||||
@ -543,7 +667,8 @@ bool Mifare::data_isKeyValid(const QString& key)
|
||||
return true;
|
||||
}
|
||||
|
||||
Mifare::DataType Mifare::data_isDataValid(QString data) // "?" will not been processd there
|
||||
Mifare::DataType
|
||||
Mifare::data_isDataValid(QString data) // "?" will not been processd there
|
||||
{
|
||||
if(data.length() == 47)
|
||||
{
|
||||
@ -597,7 +722,7 @@ void Mifare::setCardType(int type)
|
||||
}
|
||||
}
|
||||
|
||||
bool Mifare::data_loadDataFile(const QString& filename)
|
||||
bool Mifare::data_loadDataFile(const QString &filename)
|
||||
{
|
||||
QFile file(filename, this);
|
||||
if(file.open(QIODevice::ReadOnly))
|
||||
@ -607,12 +732,8 @@ bool Mifare::data_loadDataFile(const QString& filename)
|
||||
bool isBin = false;
|
||||
for(int i = 0; i < cardType.blocks * 16; i++) // Detect the file type
|
||||
{
|
||||
// qDebug() << (unsigned char)buff[i];
|
||||
if(!((buff[i] >= 'A' && buff[i] <= 'F') ||
|
||||
(buff[i] >= 'a' && buff[i] <= 'f') ||
|
||||
(buff[i] >= '0' && buff[i] <= '9') ||
|
||||
buff[i] == '\n' ||
|
||||
buff[i] == '\r'))
|
||||
// qDebug() << (unsigned char)buff[i];
|
||||
if(!((buff[i] >= 'A' && buff[i] <= 'F') || (buff[i] >= 'a' && buff[i] <= 'f') || (buff[i] >= '0' && buff[i] <= '9') || buff[i] == '\n' || buff[i] == '\r'))
|
||||
{
|
||||
isBin = true;
|
||||
break;
|
||||
@ -648,7 +769,7 @@ bool Mifare::data_loadDataFile(const QString& filename)
|
||||
}
|
||||
}
|
||||
|
||||
bool Mifare::data_loadKeyFile(const QString& filename)
|
||||
bool Mifare::data_loadKeyFile(const QString &filename)
|
||||
{
|
||||
QFile file(filename, this);
|
||||
if(file.open(QIODevice::ReadOnly))
|
||||
@ -685,11 +806,13 @@ bool Mifare::data_loadKeyFile(const QString& filename)
|
||||
}
|
||||
}
|
||||
|
||||
QString Mifare::bin2text(const QByteArray& buff, int i, int length)
|
||||
QString Mifare::bin2text(const QByteArray &buff, int i, int length)
|
||||
{
|
||||
QString ret = "";
|
||||
char LByte, RByte;
|
||||
char map[16] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};
|
||||
char map[16] = {'0', '1', '2', '3', '4', '5', '6', '7',
|
||||
'8', '9', 'A', 'B', 'C', 'D', 'E', 'F'
|
||||
};
|
||||
for(int j = 0; j < length; j++)
|
||||
{
|
||||
LByte = map[(unsigned char)buff[i * length + j] >> 4];
|
||||
@ -701,7 +824,7 @@ QString Mifare::bin2text(const QByteArray& buff, int i, int length)
|
||||
return ret;
|
||||
}
|
||||
|
||||
bool Mifare::data_saveDataFile(const QString& filename, bool isBin)
|
||||
bool Mifare::data_saveDataFile(const QString &filename, bool isBin)
|
||||
{
|
||||
QFile file(filename, this);
|
||||
if(file.open(QIODevice::WriteOnly))
|
||||
@ -745,7 +868,7 @@ bool Mifare::data_saveDataFile(const QString& filename, bool isBin)
|
||||
}
|
||||
}
|
||||
|
||||
bool Mifare::data_saveKeyFile(const QString& filename, bool isBin)
|
||||
bool Mifare::data_saveKeyFile(const QString &filename, bool isBin)
|
||||
{
|
||||
QFile file(filename, this);
|
||||
if(file.open(QIODevice::WriteOnly))
|
||||
@ -786,7 +909,6 @@ bool Mifare::data_saveKeyFile(const QString& filename, bool isBin)
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
}
|
||||
bool ret = file.write(buff) != -1;
|
||||
file.close();
|
||||
@ -841,12 +963,12 @@ void Mifare::data_data2Key()
|
||||
}
|
||||
}
|
||||
|
||||
void Mifare::data_setData(int block, const QString& data)
|
||||
void Mifare::data_setData(int block, const QString &data)
|
||||
{
|
||||
dataList->replace(block, data);
|
||||
}
|
||||
|
||||
void Mifare::data_setKey(int sector, bool isKeyA, const QString& key)
|
||||
void Mifare::data_setKey(int sector, bool isKeyA, const QString &key)
|
||||
{
|
||||
if(isKeyA)
|
||||
keyAList->replace(sector, key);
|
||||
|
@ -5,6 +5,7 @@
|
||||
#include "ui_mainwindow.h"
|
||||
#include "ui/mf_attack_hardnesteddialog.h"
|
||||
#include "ui/mf_uid_parameterdialog.h"
|
||||
#include "ui/mf_sim_simdialog.h"
|
||||
#include <QObject>
|
||||
#include <QString>
|
||||
#include <QStringList>
|
||||
@ -105,6 +106,12 @@ public:
|
||||
void data_setData(int block, const QString &data);
|
||||
void data_setKey(int sector, bool isKeyA, const QString &key);
|
||||
void lockC();
|
||||
void writeAllE();
|
||||
void readAllE();
|
||||
void wipeE();
|
||||
void simulate();
|
||||
void loadSniff(const QString& file);
|
||||
void saveSniff(const QString& file);
|
||||
public slots:
|
||||
signals:
|
||||
|
||||
|
@ -1,15 +1,16 @@
|
||||
#include "mainwindow.h"
|
||||
#include "ui_mainwindow.h"
|
||||
|
||||
MainWindow::MainWindow(QWidget *parent)
|
||||
: QMainWindow(parent)
|
||||
MainWindow::MainWindow(QWidget *parent):
|
||||
QMainWindow(parent)
|
||||
, ui(new Ui::MainWindow)
|
||||
{
|
||||
ui->setupUi(this);
|
||||
ui->MF_simGroupBox->setVisible(false); // developing...
|
||||
ui->MF_sniffGroupBox->setVisible(false); // developing...
|
||||
// ui->MF_simGroupBox->setVisible(false); // developing...
|
||||
// ui->MF_sniffGroupBox->setVisible(false); // developing...
|
||||
myInfo = new QAction("wh201906", this);
|
||||
connect(myInfo, &QAction::triggered, [ = ]() {
|
||||
connect(myInfo, &QAction::triggered, [ = ]()
|
||||
{
|
||||
QDesktopServices::openUrl(QUrl("https://github.com/wh201906"));
|
||||
});
|
||||
this->addAction(myInfo);
|
||||
@ -49,7 +50,6 @@ void MainWindow::initUI() // will be called by main.app
|
||||
void MainWindow::on_PM3_refreshPortButton_clicked()
|
||||
{
|
||||
ui->PM3_portBox->clear();
|
||||
ui->PM3_portBox->addItem("");
|
||||
QSerialPort serial;
|
||||
QStringList serialList;
|
||||
foreach(const QSerialPortInfo &info, QSerialPortInfo::availablePorts())
|
||||
@ -473,6 +473,74 @@ void MainWindow::on_MF_UID_lockButton_clicked()
|
||||
mifare->lockC();
|
||||
}
|
||||
|
||||
void MainWindow::on_MF_Sim_loadDataButton_clicked()
|
||||
{
|
||||
setState(false);
|
||||
mifare->writeAllE();
|
||||
setState(true);
|
||||
}
|
||||
|
||||
void MainWindow::on_MF_Sim_writeAllButton_clicked()
|
||||
{
|
||||
setState(false);
|
||||
mifare->readAllE();
|
||||
setState(true);
|
||||
}
|
||||
|
||||
void MainWindow::on_MF_Sim_clearButton_clicked()
|
||||
{
|
||||
mifare->wipeE();
|
||||
}
|
||||
|
||||
void MainWindow::on_MF_Sim_simButton_clicked()
|
||||
{
|
||||
mifare->simulate();
|
||||
}
|
||||
|
||||
void MainWindow::on_MF_Sniff_loadButton_clicked() // use a tmp file to support complicated path
|
||||
{
|
||||
QString title = "";
|
||||
QString filename = "";
|
||||
|
||||
title = tr("Plz select the trace file:");
|
||||
filename = QFileDialog::getOpenFileName(this, title, "./", tr("Trace Files(*.trc);;All Files(*.*)"));
|
||||
qDebug() << filename;
|
||||
if(filename != "")
|
||||
{
|
||||
QString tmpFile = "tmp" + QString::number(QDateTime::currentDateTime().toTime_t()) + ".trc";
|
||||
if(QFile::copy(filename, "./" + tmpFile))
|
||||
{
|
||||
mifare->loadSniff(tmpFile);
|
||||
QFile::remove("./" + tmpFile);
|
||||
}
|
||||
else
|
||||
{
|
||||
QMessageBox::information(this, tr("Info"), tr("Failed to open") + "\n" + filename);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void MainWindow::on_MF_Sniff_saveButton_clicked()
|
||||
{
|
||||
QString title = "";
|
||||
QString filename = "";
|
||||
|
||||
title = tr("Plz select the location to save trace file:");
|
||||
filename = QFileDialog::getSaveFileName(this, title, "./", tr("Trace Files(*.trc)"));
|
||||
qDebug() << filename;
|
||||
if(filename != "")
|
||||
{
|
||||
QString tmpFile = "tmp" + QString::number(QDateTime::currentDateTime().toTime_t()) + ".trc";
|
||||
mifare->saveSniff(tmpFile);
|
||||
if(!QFile::copy("./" + tmpFile, filename))
|
||||
{
|
||||
QMessageBox::information(this, tr("Info"), tr("Failed to save to") + "\n" + filename);
|
||||
}
|
||||
QFile::remove("./" + tmpFile);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void MainWindow::on_MF_Sniff_sniffButton_clicked()
|
||||
{
|
||||
setState(false);
|
||||
@ -651,3 +719,7 @@ void MainWindow::setState(bool st)
|
||||
}
|
||||
|
||||
// ***********************************************
|
||||
|
||||
|
||||
|
||||
|
||||
|
@ -22,7 +22,8 @@
|
||||
#include "common/util.h"
|
||||
|
||||
QT_BEGIN_NAMESPACE
|
||||
namespace Ui {
|
||||
namespace Ui
|
||||
{
|
||||
class MainWindow;
|
||||
}
|
||||
QT_END_NAMESPACE
|
||||
@ -119,6 +120,18 @@ private slots:
|
||||
|
||||
void on_MF_UID_lockButton_clicked();
|
||||
|
||||
void on_MF_Sim_loadDataButton_clicked();
|
||||
|
||||
void on_MF_Sim_writeAllButton_clicked();
|
||||
|
||||
void on_MF_Sim_clearButton_clicked();
|
||||
|
||||
void on_MF_Sim_simButton_clicked();
|
||||
|
||||
void on_MF_Sniff_loadButton_clicked();
|
||||
|
||||
void on_MF_Sniff_saveButton_clicked();
|
||||
|
||||
private:
|
||||
Ui::MainWindow* ui;
|
||||
QButtonGroup* typeBtnGroup;
|
||||
|
@ -105,9 +105,6 @@
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="currentIndex">
|
||||
<number>1</number>
|
||||
</property>
|
||||
<widget class="QWidget" name="mifareTab">
|
||||
<attribute name="title">
|
||||
<string>Mifare</string>
|
||||
@ -611,6 +608,13 @@
|
||||
</item>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="label_2">
|
||||
<property name="text">
|
||||
<string>Data:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
|
66
ui/mf_sim_simdialog.cpp
Normal file
66
ui/mf_sim_simdialog.cpp
Normal file
@ -0,0 +1,66 @@
|
||||
#include "mf_sim_simdialog.h"
|
||||
#include "ui_mf_sim_simdialog.h"
|
||||
|
||||
MF_Sim_simDialog::MF_Sim_simDialog(int cardType, QWidget *parent) :
|
||||
QDialog(parent),
|
||||
ui(new Ui::MF_Sim_simDialog)
|
||||
{
|
||||
ui->setupUi(this);
|
||||
this->cardType = cardType;
|
||||
}
|
||||
|
||||
MF_Sim_simDialog::~MF_Sim_simDialog()
|
||||
{
|
||||
delete ui;
|
||||
}
|
||||
|
||||
void MF_Sim_simDialog::on_eBox_clicked(bool checked)
|
||||
{
|
||||
if(checked)
|
||||
{
|
||||
ui->iBox->setChecked(true);
|
||||
ui->xBox->setChecked(true);
|
||||
}
|
||||
if(!ui->eBox->isChecked() && !ui->fBox->isChecked())
|
||||
{
|
||||
ui->iBox->setEnabled(true);
|
||||
ui->xBox->setEnabled(true);
|
||||
}
|
||||
else
|
||||
{
|
||||
ui->iBox->setEnabled(false);
|
||||
ui->xBox->setEnabled(false);
|
||||
}
|
||||
}
|
||||
|
||||
void MF_Sim_simDialog::on_fBox_clicked(bool checked)
|
||||
{
|
||||
if(checked)
|
||||
{
|
||||
ui->iBox->setChecked(true);
|
||||
ui->xBox->setChecked(true);
|
||||
}
|
||||
if(!ui->eBox->isChecked() && !ui->fBox->isChecked())
|
||||
{
|
||||
ui->iBox->setEnabled(true);
|
||||
ui->xBox->setEnabled(true);
|
||||
}
|
||||
else
|
||||
{
|
||||
ui->iBox->setEnabled(false);
|
||||
ui->xBox->setEnabled(false);
|
||||
}
|
||||
}
|
||||
|
||||
void MF_Sim_simDialog::on_buttonBox_accepted()
|
||||
{
|
||||
QString paras;
|
||||
paras += (ui->uBox->isChecked() ? "u " + ui->uEdit->text() + " " : "");
|
||||
paras += (ui->nBox->isChecked() ? "n " + ui->nEdit->text() + " " : "");
|
||||
paras += (ui->iBox->isChecked() ? "i " : "");
|
||||
paras += (ui->xBox->isChecked() ? "x " : "");
|
||||
paras += (ui->eBox->isChecked() ? "e " : "");
|
||||
paras += (ui->fBox->isChecked() ? "f " + ui->fEdit->text() + " " : "");
|
||||
paras += (ui->rBox->isChecked() ? "r " : "");
|
||||
emit sendCMD(QString("hf mf sim ") + "*" + QString::number(cardType) + " " + paras.trimmed());
|
||||
}
|
34
ui/mf_sim_simdialog.h
Normal file
34
ui/mf_sim_simdialog.h
Normal file
@ -0,0 +1,34 @@
|
||||
#ifndef MF_SIM_SIMDIALOG_H
|
||||
#define MF_SIM_SIMDIALOG_H
|
||||
|
||||
#include <QDialog>
|
||||
#include <QDebug>
|
||||
|
||||
namespace Ui
|
||||
{
|
||||
class MF_Sim_simDialog;
|
||||
}
|
||||
|
||||
class MF_Sim_simDialog : public QDialog
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
explicit MF_Sim_simDialog(int cardType, QWidget *parent = nullptr);
|
||||
~MF_Sim_simDialog();
|
||||
|
||||
private slots:
|
||||
void on_eBox_clicked(bool checked);
|
||||
|
||||
void on_fBox_clicked(bool checked);
|
||||
|
||||
private:
|
||||
Ui::MF_Sim_simDialog *ui;
|
||||
int cardType;
|
||||
signals:
|
||||
void sendCMD(QString cmd);
|
||||
private slots:
|
||||
void on_buttonBox_accepted();
|
||||
};
|
||||
|
||||
#endif // MF_SIM_SIMDIALOG_H
|
378
ui/mf_sim_simdialog.ui
Normal file
378
ui/mf_sim_simdialog.ui
Normal file
@ -0,0 +1,378 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>MF_Sim_simDialog</class>
|
||||
<widget class="QDialog" name="MF_Sim_simDialog">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>461</width>
|
||||
<height>456</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>Simulate</string>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout">
|
||||
<property name="spacing">
|
||||
<number>5</number>
|
||||
</property>
|
||||
<property name="leftMargin">
|
||||
<number>5</number>
|
||||
</property>
|
||||
<property name="topMargin">
|
||||
<number>5</number>
|
||||
</property>
|
||||
<property name="rightMargin">
|
||||
<number>5</number>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<number>5</number>
|
||||
</property>
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout">
|
||||
<item>
|
||||
<widget class="QCheckBox" name="uBox">
|
||||
<property name="text">
|
||||
<string>u</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLineEdit" name="uEdit">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="maximumSize">
|
||||
<size>
|
||||
<width>100</width>
|
||||
<height>16777215</height>
|
||||
</size>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="label">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Expanding" vsizetype="Preferred">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>UID 4 or 7 bytes. If not specified, the UID 4B from emulator memory will be used</string>
|
||||
</property>
|
||||
<property name="wordWrap">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="Line" name="line_6">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_2">
|
||||
<item>
|
||||
<widget class="QCheckBox" name="nBox">
|
||||
<property name="text">
|
||||
<string>n</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLineEdit" name="nEdit">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="maximumSize">
|
||||
<size>
|
||||
<width>100</width>
|
||||
<height>16777215</height>
|
||||
</size>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="label_2">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Expanding" vsizetype="Preferred">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Automatically exit simulation after <numreads> blocks have been read by reader. 0 = infinite</string>
|
||||
</property>
|
||||
<property name="wordWrap">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="Line" name="line_5">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_4">
|
||||
<item>
|
||||
<widget class="QCheckBox" name="iBox">
|
||||
<property name="text">
|
||||
<string>i</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="label_3">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Expanding" vsizetype="Preferred">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Interactive, means that console will not be returned until simulation finishes or is aborted</string>
|
||||
</property>
|
||||
<property name="wordWrap">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="Line" name="line_4">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_5">
|
||||
<item>
|
||||
<widget class="QCheckBox" name="xBox">
|
||||
<property name="text">
|
||||
<string>x</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="label_4">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Expanding" vsizetype="Preferred">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Crack, performs the 'reader attack', nr/ar attack against a legitimate reader, fishes out the key(s)</string>
|
||||
</property>
|
||||
<property name="wordWrap">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="Line" name="line_3">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_6">
|
||||
<item>
|
||||
<widget class="QCheckBox" name="eBox">
|
||||
<property name="text">
|
||||
<string>e</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="label_5">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Expanding" vsizetype="Preferred">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>set keys found from 'reader attack' to emulator memory (implies x and i)</string>
|
||||
</property>
|
||||
<property name="wordWrap">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="Line" name="line_2">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_3">
|
||||
<item>
|
||||
<widget class="QCheckBox" name="fBox">
|
||||
<property name="text">
|
||||
<string>f</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLineEdit" name="fEdit">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="maximumSize">
|
||||
<size>
|
||||
<width>100</width>
|
||||
<height>16777215</height>
|
||||
</size>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="label_6">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Expanding" vsizetype="Preferred">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>get UIDs to use for 'reader attack' from file 'f <filename.txt>' (implies x and i)</string>
|
||||
</property>
|
||||
<property name="wordWrap">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="Line" name="line">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_7">
|
||||
<item>
|
||||
<widget class="QCheckBox" name="rBox">
|
||||
<property name="text">
|
||||
<string>r</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="label_7">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Expanding" vsizetype="Preferred">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Generate random nonces instead of sequential nonces. Standard reader attack won't work with this option, only moebius attack works</string>
|
||||
</property>
|
||||
<property name="wordWrap">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="Line" name="line_7">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="verticalSpacer">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Vertical</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>20</width>
|
||||
<height>40</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QDialogButtonBox" name="buttonBox">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="standardButtons">
|
||||
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<resources/>
|
||||
<connections>
|
||||
<connection>
|
||||
<sender>buttonBox</sender>
|
||||
<signal>accepted()</signal>
|
||||
<receiver>MF_Sim_simDialog</receiver>
|
||||
<slot>accept()</slot>
|
||||
<hints>
|
||||
<hint type="sourcelabel">
|
||||
<x>248</x>
|
||||
<y>254</y>
|
||||
</hint>
|
||||
<hint type="destinationlabel">
|
||||
<x>157</x>
|
||||
<y>274</y>
|
||||
</hint>
|
||||
</hints>
|
||||
</connection>
|
||||
<connection>
|
||||
<sender>buttonBox</sender>
|
||||
<signal>rejected()</signal>
|
||||
<receiver>MF_Sim_simDialog</receiver>
|
||||
<slot>reject()</slot>
|
||||
<hints>
|
||||
<hint type="sourcelabel">
|
||||
<x>316</x>
|
||||
<y>260</y>
|
||||
</hint>
|
||||
<hint type="destinationlabel">
|
||||
<x>286</x>
|
||||
<y>274</y>
|
||||
</hint>
|
||||
</hints>
|
||||
</connection>
|
||||
</connections>
|
||||
</ui>
|
Loading…
x
Reference in New Issue
Block a user