mirror of
				https://github.com/wh201906/Proxmark3GUI.git
				synced 2025-11-04 08:13:22 +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;
 | 
			
		||||
@ -9,15 +9,13 @@ Mifare::Mifare(Ui::MainWindow *ui, Util *addr, QWidget *parent) : QObject(parent
 | 
			
		||||
    keyAList = new QStringList();
 | 
			
		||||
    keyBList = new QStringList();
 | 
			
		||||
    dataList = new QStringList();
 | 
			
		||||
    data_clearKey(); // fill with blank Qstring
 | 
			
		||||
    data_clearKey();  // fill with blank Qstring
 | 
			
		||||
    data_clearData(); // fill with blank Qstring
 | 
			
		||||
    dataPattern = new QRegExp("([0-9a-fA-F]{2} ){15}[0-9a-fA-F]{2}");
 | 
			
		||||
    chkKeyPattern = new QRegExp("\\|\\d{3}\\|.+\\|.+\\|");
 | 
			
		||||
    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::number(currblk)
 | 
			
		||||
                     + " "
 | 
			
		||||
                     + ui->MF_RW_keyTypeBox->currentText()
 | 
			
		||||
                     + " "
 | 
			
		||||
                     + ui->MF_RW_keyEdit->text(), waitTime);
 | 
			
		||||
    QString result = util->execCMDWithOutput(
 | 
			
		||||
                         "hf mf rdbl "
 | 
			
		||||
                         + QString::number(currblk)
 | 
			
		||||
                         + " "
 | 
			
		||||
                         + ui->MF_RW_keyTypeBox->currentText()
 | 
			
		||||
                         + " "
 | 
			
		||||
                         + 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 "
 | 
			
		||||
                                                 + ui->MF_RW_keyTypeBox->currentText()
 | 
			
		||||
                                                 + " B "
 | 
			
		||||
                                                 + tmpKey, waitTime);
 | 
			
		||||
                result = util->execCMDWithOutput(
 | 
			
		||||
                             "hf mf rdbl "
 | 
			
		||||
                             + ui->MF_RW_keyTypeBox->currentText()
 | 
			
		||||
                             + " B "
 | 
			
		||||
                             + 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 "
 | 
			
		||||
                                             + QString::number(i)
 | 
			
		||||
                                             + " A "
 | 
			
		||||
                                             + keyAList->at(i), waitTime);
 | 
			
		||||
            result = util->execCMDWithOutput(
 | 
			
		||||
                         "hf mf rdsc "
 | 
			
		||||
                         + QString::number(i)
 | 
			
		||||
                         + " A "
 | 
			
		||||
                         + 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 "
 | 
			
		||||
                                             + QString::number(i)
 | 
			
		||||
                                             + " B "
 | 
			
		||||
                                             + keyBList->at(i), waitTime);
 | 
			
		||||
            result = util->execCMDWithOutput(
 | 
			
		||||
                         "hf mf rdsc "
 | 
			
		||||
                         + QString::number(i)
 | 
			
		||||
                         + " B "
 | 
			
		||||
                         + 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)
 | 
			
		||||
@ -248,13 +269,16 @@ void Mifare::readAll()
 | 
			
		||||
                dataList->replace(cardType.blks[i] + cardType.blk[i] - 1, result);
 | 
			
		||||
                data_syncWithDataWidget(false, cardType.blks[i] + cardType.blk[i] - 1);
 | 
			
		||||
            }
 | 
			
		||||
            else // now isKeyAValid == true, the output might contains the KeyB
 | 
			
		||||
            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::number(cardType.blks[i] + cardType.blk[i] - 1)
 | 
			
		||||
                                                 + " B "
 | 
			
		||||
                                                 + tmpKey, waitTime);
 | 
			
		||||
                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);
 | 
			
		||||
                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)
 | 
			
		||||
                                                 + " A "
 | 
			
		||||
                                                 + keyAList->at(i)
 | 
			
		||||
                                                 + " "
 | 
			
		||||
                                                 + dataList->at(cardType.blks[i] + j), waitTime);
 | 
			
		||||
                result = util->execCMDWithOutput(
 | 
			
		||||
                             "hf mf wrbl " +
 | 
			
		||||
                             QString::number(cardType.blks[i] + j)
 | 
			
		||||
                             + " A "
 | 
			
		||||
                             + keyAList->at(i)
 | 
			
		||||
                             + " "
 | 
			
		||||
                             + 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 "
 | 
			
		||||
                                                 + QString::number(cardType.blks[i] + j)
 | 
			
		||||
                                                 + " B "
 | 
			
		||||
                                                 + keyBList->at(i)
 | 
			
		||||
                                                 + " "
 | 
			
		||||
                                                 + dataList->at(cardType.blks[i] + j), waitTime);
 | 
			
		||||
                result = util->execCMDWithOutput(
 | 
			
		||||
                             "hf mf wrbl "
 | 
			
		||||
                             + QString::number(cardType.blks[i] + j)
 | 
			
		||||
                             + " B "
 | 
			
		||||
                             + keyBList->at(i)
 | 
			
		||||
                             + " "
 | 
			
		||||
                             + 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 "
 | 
			
		||||
                     + ui->MF_RW_blockBox->currentText()
 | 
			
		||||
                     + " "
 | 
			
		||||
                     + ui->MF_RW_dataEdit->text().replace(" ", ""), waitTime);
 | 
			
		||||
    QString result = util->execCMDWithOutput(
 | 
			
		||||
                         "hf mf csetblk "
 | 
			
		||||
                         + ui->MF_RW_blockBox->currentText()
 | 
			
		||||
                         + " "
 | 
			
		||||
                         + ui->MF_RW_dataEdit->text().replace(" ", ""),
 | 
			
		||||
                         waitTime);
 | 
			
		||||
    if(result.indexOf("No chinese") == -1)
 | 
			
		||||
    {
 | 
			
		||||
        QMessageBox::information(parent, tr("Info"), tr("Success!"));
 | 
			
		||||
@ -399,22 +432,37 @@ 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 "
 | 
			
		||||
                                             + QString::number(cardType.blks[i] + j)
 | 
			
		||||
                                             + " "
 | 
			
		||||
                                             + dataList->at(cardType.blks[i] + j), waitTime);
 | 
			
		||||
            result = util->execCMDWithOutput(
 | 
			
		||||
                         "hf mf csetblk "
 | 
			
		||||
                         + QString::number(cardType.blks[i] + j)
 | 
			
		||||
                         + " "
 | 
			
		||||
                         + 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 "
 | 
			
		||||
                  + QString::number(cardType.type)
 | 
			
		||||
                  + " f");
 | 
			
		||||
    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::loadSniff(const QString& file)
 | 
			
		||||
{
 | 
			
		||||
    util->execCMD("hf list mf -l " + file);
 | 
			
		||||
    ui->funcTab->setCurrentIndex(1);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void Mifare::restore()
 | 
			
		||||
void Mifare::saveSniff(const QString& file)
 | 
			
		||||
{
 | 
			
		||||
    util->execCMD("hf mf restore");
 | 
			
		||||
    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))
 | 
			
		||||
@ -605,14 +730,10 @@ bool Mifare::data_loadDataFile(const QString& filename)
 | 
			
		||||
        QByteArray buff;
 | 
			
		||||
        buff = file.read(10000);
 | 
			
		||||
        bool isBin = false;
 | 
			
		||||
        for(int i = 0; i < cardType.blocks * 16; i++) // Detect the file type
 | 
			
		||||
        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