Some changes

Refactor execCMDWithOutput
Add UI for advanced settings
Add stop button(reconnect)
Update translations
pull/14/head
wh201906 4 years ago
parent a56a503b23
commit 5330ed8d14

@ -22,13 +22,16 @@ void Util::processOutput(const QString& output)
void Util::execCMD(const QString& cmd) void Util::execCMD(const QString& cmd)
{ {
qDebug() << cmd; qDebug() << "executing: " << cmd;
if(isRunning) if(isRunning)
emit write(cmd + "\r\n"); emit write(cmd + "\r\n");
} }
QString Util::execCMDWithOutput(const QString& cmd, ReturnTrigger trigger) QString Util::execCMDWithOutput(const QString& cmd, ReturnTrigger trigger)
{ {
// if the trigger is empty, this function will wait trigger.waitTime then return all outputs during the wait time.
// otherwise, this function will return empty string if no trigger is detected, or return outputs if any trigger is detected.
// the waitTime will be refreshed if the client have new outputs
bool isResultFound = false; bool isResultFound = false;
QRegularExpression re; QRegularExpression re;
re.setPatternOptions(QRegularExpression::DotMatchesEverythingOption); re.setPatternOptions(QRegularExpression::DotMatchesEverythingOption);
@ -42,27 +45,32 @@ QString Util::execCMDWithOutput(const QString& cmd, ReturnTrigger trigger)
execCMD(cmd); execCMD(cmd);
while(QTime::currentTime() < targetTime) while(QTime::currentTime() < targetTime)
{ {
if(!isRunning)
break;
QApplication::processEvents(); QApplication::processEvents();
for(QString otpt : trigger.expectedOutputs) for(QString otpt : trigger.expectedOutputs)
{ {
re.setPattern(otpt); re.setPattern(otpt);
isResultFound = re.match(*requiredOutput).hasMatch(); isResultFound = re.match(*requiredOutput).hasMatch();
if(requiredOutput->contains(otpt)) if(isResultFound)
{
qDebug() << "output Matched: " << *requiredOutput;
break; break;
} }
}
if(isResultFound) if(isResultFound)
{ {
delay(200); delay(200);
break; break;
} }
if(timeStamp > currTime) if(timeStamp > currTime) //has new output
{ {
currTime = timeStamp; currTime = timeStamp;
targetTime = timeStamp.addMSecs(trigger.waitTime); targetTime = timeStamp.addMSecs(trigger.waitTime);
} }
} }
isRequiringOutput = false; isRequiringOutput = false;
return *requiredOutput; return (isResultFound || trigger.expectedOutputs.isEmpty() ? *requiredOutput : "");
} }
void Util::delay(unsigned int msec) void Util::delay(unsigned int msec)

@ -50,6 +50,7 @@ public:
QString execCMDWithOutput(const QString& cmd, ReturnTrigger trigger = 10000); QString execCMDWithOutput(const QString& cmd, ReturnTrigger trigger = 10000);
void delay(unsigned int msec); void delay(unsigned int msec);
ClientType getClientType(); ClientType getClientType();
static const int rawTabIndex = 1;
public slots: public slots:
void processOutput(const QString& output); void processOutput(const QString& output);
void setClientType(Util::ClientType clientType); void setClientType(Util::ClientType clientType);

@ -310,534 +310,681 @@ It could make the whole sector blocked irreversibly!</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.ui" line="209"/> <location filename="../ui/mainwindow.ui" line="215"/>
<source>Select Trailer</source> <source>Select Trailer</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.ui" line="347"/> <location filename="../ui/mainwindow.ui" line="356"/>
<source>Card Type</source> <source>Card Type</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.ui" line="368"/> <location filename="../ui/mainwindow.ui" line="377"/>
<source>MINI</source> <source>MINI</source>
<extracomment>320</extracomment> <extracomment>320</extracomment>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.ui" line="381"/> <location filename="../ui/mainwindow.ui" line="390"/>
<source>1K</source> <source>1K</source>
<extracomment>1024</extracomment> <extracomment>1024</extracomment>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.ui" line="397"/> <location filename="../ui/mainwindow.ui" line="406"/>
<source>2K</source> <source>2K</source>
<extracomment>2048</extracomment> <extracomment>2048</extracomment>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.ui" line="410"/> <location filename="../ui/mainwindow.ui" line="419"/>
<source>4K</source> <source>4K</source>
<extracomment>4096</extracomment> <extracomment>4096</extracomment>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.ui" line="420"/> <location filename="../ui/mainwindow.ui" line="429"/>
<source>File</source> <source>File</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.ui" line="441"/> <location filename="../ui/mainwindow.ui" line="450"/>
<location filename="../ui/mainwindow.ui" line="1134"/> <location filename="../ui/mainwindow.ui" line="1156"/>
<source>Load</source> <source>Load</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.ui" line="454"/> <location filename="../ui/mainwindow.ui" line="463"/>
<location filename="../ui/mainwindow.ui" line="1147"/> <location filename="../ui/mainwindow.ui" line="1169"/>
<location filename="../ui/mainwindow.ui" line="1598"/>
<source>Save</source> <source>Save</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.ui" line="474"/> <location filename="../ui/mainwindow.ui" line="483"/>
<location filename="../ui/mainwindow.cpp" line="814"/> <location filename="../ui/mainwindow.cpp" line="880"/>
<source>Data</source> <source>Data</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.ui" line="484"/> <location filename="../ui/mainwindow.ui" line="493"/>
<location filename="../ui/mainwindow.ui" line="1562"/>
<source>Key</source> <source>Key</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.ui" line="494"/> <location filename="../ui/mainwindow.ui" line="503"/>
<source>Attack</source> <source>Attack</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.ui" line="528"/> <location filename="../ui/mainwindow.ui" line="537"/>
<source>Card Info</source> <source>Card Info</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.ui" line="541"/> <location filename="../ui/mainwindow.ui" line="550"/>
<source>Check Default</source> <source>Check Default</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.ui" line="554"/> <location filename="../ui/mainwindow.ui" line="563"/>
<source>Nested</source> <source>Nested</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.ui" line="567"/> <location filename="../ui/mainwindow.ui" line="576"/>
<source>Hardnested</source> <source>Hardnested</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.ui" line="592"/> <location filename="../ui/mainwindow.ui" line="589"/>
<source>Darkside</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ui/mainwindow.ui" line="614"/>
<source>Read/Write</source> <source>Read/Write</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.ui" line="605"/> <location filename="../ui/mainwindow.ui" line="627"/>
<source>Block:</source> <source>Block:</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.ui" line="637"/> <location filename="../ui/mainwindow.ui" line="659"/>
<source>Key:</source> <source>Key:</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.ui" line="656"/> <location filename="../ui/mainwindow.ui" line="678"/>
<source>Key Type:</source> <source>Key Type:</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.ui" line="1108"/> <location filename="../ui/mainwindow.ui" line="1130"/>
<source>Snoop</source> <source>Snoop</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.ui" line="1121"/> <location filename="../ui/mainwindow.ui" line="1143"/>
<source>List Data</source> <source>List Data</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.ui" line="679"/> <location filename="../ui/mainwindow.ui" line="701"/>
<source>Data:</source> <source>Data:</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.ui" line="701"/> <location filename="../ui/mainwindow.ui" line="723"/>
<source>Normal(Require Password)</source> <source>Normal(Require Password)</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.ui" line="783"/> <location filename="../ui/mainwindow.ui" line="805"/>
<source>Dump</source> <source>Dump</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.ui" line="802"/> <location filename="../ui/mainwindow.ui" line="824"/>
<source>Restore</source> <source>Restore</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.ui" line="812"/> <location filename="../ui/mainwindow.ui" line="834"/>
<source>Chinese Magic Card(Without Password)</source> <source>Chinese Magic Card(Without Password)</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.ui" line="833"/> <location filename="../ui/mainwindow.ui" line="855"/>
<source>Lock UFUID Card</source> <source>Lock UFUID Card</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.ui" line="846"/> <location filename="../ui/mainwindow.ui" line="868"/>
<location filename="../ui/mainwindow.cpp" line="651"/> <location filename="../ui/mainwindow.cpp" line="713"/>
<source>About UID Card</source> <source>About UID Card</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.ui" line="917"/> <location filename="../ui/mainwindow.ui" line="939"/>
<source>Set Parameter</source> <source>Set Parameter</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.ui" line="936"/> <location filename="../ui/mainwindow.ui" line="958"/>
<source>Wipe</source> <source>Wipe</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.ui" line="962"/> <location filename="../ui/mainwindow.ui" line="984"/>
<location filename="../ui/mainwindow.ui" line="1038"/> <location filename="../ui/mainwindow.ui" line="1060"/>
<source>Simulate</source> <source>Simulate</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.ui" line="467"/> <location filename="../ui/mainwindow.ui" line="476"/>
<location filename="../ui/mainwindow.ui" line="1025"/> <location filename="../ui/mainwindow.ui" line="1047"/>
<location filename="../ui/mainwindow.ui" line="1591"/>
<source>Clear</source> <source>Clear</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.ui" line="202"/> <location filename="../ui/mainwindow.ui" line="208"/>
<source>Select All</source> <source>Select All</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.ui" line="238"/> <location filename="../ui/mainwindow.ui" line="244"/>
<source>KeyBlocks-&gt;Key</source> <source>KeyBlocks-&gt;Key</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.ui" line="251"/> <location filename="../ui/mainwindow.ui" line="257"/>
<source>KeyBlocks&lt;-Key</source> <source>KeyBlocks&lt;-Key</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.ui" line="264"/> <location filename="../ui/mainwindow.ui" line="270"/>
<source>Fill Keys</source> <source>Fill Keys</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.ui" line="277"/> <location filename="../ui/mainwindow.ui" line="283"/>
<source>Trailer Decoder</source> <source>Trailer Decoder</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.ui" line="290"/> <location filename="../ui/mainwindow.ui" line="296"/>
<source>Set Fonts</source> <source>Set Fonts</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.ui" line="725"/> <location filename="../ui/mainwindow.ui" line="747"/>
<location filename="../ui/mainwindow.ui" line="859"/> <location filename="../ui/mainwindow.ui" line="881"/>
<source>Read One</source> <source>Read One</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.ui" line="738"/> <location filename="../ui/mainwindow.ui" line="760"/>
<location filename="../ui/mainwindow.ui" line="872"/> <location filename="../ui/mainwindow.ui" line="894"/>
<source>Write One</source> <source>Write One</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.ui" line="751"/> <location filename="../ui/mainwindow.ui" line="773"/>
<location filename="../ui/mainwindow.ui" line="885"/> <location filename="../ui/mainwindow.ui" line="907"/>
<location filename="../ui/mainwindow.ui" line="1012"/> <location filename="../ui/mainwindow.ui" line="1034"/>
<source>Read Selected</source> <source>Read Selected</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.ui" line="764"/> <location filename="../ui/mainwindow.ui" line="786"/>
<location filename="../ui/mainwindow.ui" line="898"/> <location filename="../ui/mainwindow.ui" line="920"/>
<location filename="../ui/mainwindow.ui" line="999"/> <location filename="../ui/mainwindow.ui" line="1021"/>
<source>Write Selected</source> <source>Write Selected</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.ui" line="1061"/> <location filename="../ui/mainwindow.ui" line="1083"/>
<location filename="../ui/mainwindow.ui" line="1095"/> <location filename="../ui/mainwindow.ui" line="1117"/>
<source>Sniff</source> <source>Sniff</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.ui" line="1173"/> <location filename="../ui/mainwindow.ui" line="1198"/>
<source>LF/Data</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ui/mainwindow.ui" line="1210"/>
<source>LF Config</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ui/mainwindow.ui" line="1231"/>
<source>Frequency</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ui/mainwindow.ui" line="1258"/>
<source>125k</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ui/mainwindow.ui" line="1271"/>
<source>134k</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ui/mainwindow.ui" line="1283"/>
<source>BitRate:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ui/mainwindow.ui" line="1290"/>
<source>Decimation:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ui/mainwindow.ui" line="1300"/>
<source>Averaging:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ui/mainwindow.ui" line="1314"/>
<source>Threshold:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ui/mainwindow.ui" line="1324"/>
<source>Skips:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ui/mainwindow.ui" line="1353"/>
<source>Get</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ui/mainwindow.ui" line="1385"/>
<source>Set</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ui/mainwindow.ui" line="1396"/>
<source>T55xx</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ui/mainwindow.ui" line="1411"/>
<source>RawCommand</source> <source>RawCommand</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.ui" line="1220"/> <location filename="../ui/mainwindow.ui" line="1461"/>
<location filename="../ui/mainwindow.cpp" line="149"/> <location filename="../ui/mainwindow.cpp" line="171"/>
<source>History:</source> <source>History:</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.ui" line="1252"/> <location filename="../ui/mainwindow.ui" line="1493"/>
<source>ClearHistory</source> <source>ClearHistory</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.ui" line="1271"/> <location filename="../ui/mainwindow.ui" line="1512"/>
<source>Send</source> <source>Send</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.ui" line="1278"/> <location filename="../ui/mainwindow.ui" line="1519"/>
<source>ClearOutput</source> <source>ClearOutput</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.cpp" line="81"/> <location filename="../ui/mainwindow.ui" line="1529"/>
<location filename="../ui/mainwindow.cpp" line="188"/> <source>Settings</source>
<location filename="../ui/mainwindow.cpp" line="414"/> <translation type="unfinished"></translation>
<location filename="../ui/mainwindow.cpp" line="434"/> </message>
<location filename="../ui/mainwindow.cpp" line="447"/> <message>
<location filename="../ui/mainwindow.cpp" line="466"/> <location filename="../ui/mainwindow.ui" line="1537"/>
<location filename="../ui/mainwindow.cpp" line="479"/> <source>Client</source>
<location filename="../ui/mainwindow.cpp" line="502"/> <translation type="unfinished"></translation>
<location filename="../ui/mainwindow.cpp" line="515"/> </message>
<location filename="../ui/mainwindow.cpp" line="709"/> <message>
<location filename="../ui/mainwindow.cpp" line="728"/> <location filename="../ui/mainwindow.ui" line="1543"/>
<source>Preload environment variables</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ui/mainwindow.ui" line="1567"/>
<source>Value</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ui/mainwindow.ui" line="1577"/>
<source>Add</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ui/mainwindow.ui" line="1584"/>
<source>Delete</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ui/mainwindow.ui" line="1622"/>
<source>Note:
If the variable name already exists, this app will add the new value to the head of the existing one, so these new values have higher priority when calling Proxmark3 client.
The environment variables added here won&apos;t affect other apps.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ui/mainwindow.ui" line="1641"/>
<source>Start arguments</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ui/mainwindow.ui" line="1648"/>
<source>&lt;port&gt; -f</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ui/mainwindow.ui" line="1655"/>
<source>Note:
-f is necessary because the GUI need to handle the output in time
In some cases the arguments should be set to &quot;-p /dev/&lt;port&gt; -f&quot;
or &quot;-p &lt;port&gt; -f&quot;</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ui/mainwindow.ui" line="1702"/>
<source>Keep buttons enabled even the client is running or disconnected</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ui/mainwindow.ui" line="1714"/>
<source>GUI</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ui/mainwindow.ui" line="1720"/>
<source>Language</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ui/mainwindow.cpp" line="89"/>
<location filename="../ui/mainwindow.cpp" line="252"/>
<location filename="../ui/mainwindow.cpp" line="478"/>
<location filename="../ui/mainwindow.cpp" line="498"/>
<location filename="../ui/mainwindow.cpp" line="511"/>
<location filename="../ui/mainwindow.cpp" line="530"/>
<location filename="../ui/mainwindow.cpp" line="543"/>
<location filename="../ui/mainwindow.cpp" line="566"/>
<location filename="../ui/mainwindow.cpp" line="579"/>
<location filename="../ui/mainwindow.cpp" line="770"/>
<location filename="../ui/mainwindow.cpp" line="789"/>
<source>Info</source> <source>Info</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.cpp" line="81"/> <location filename="../ui/mainwindow.cpp" line="89"/>
<source>Plz choose a port first</source> <source>Plz choose a port first</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.cpp" line="96"/> <location filename="../ui/mainwindow.cpp" line="107"/>
<source>Connected</source> <source>Connected</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.cpp" line="101"/> <location filename="../ui/mainwindow.cpp" line="112"/>
<location filename="../ui/mainwindow.cpp" line="111"/> <location filename="../ui/mainwindow.cpp" line="868"/>
<location filename="../ui/mainwindow.cpp" line="804"/>
<source>Not Connected</source> <source>Not Connected</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.cpp" line="460"/> <location filename="../ui/mainwindow.cpp" line="524"/>
<source>Binary Data Files(*.bin *.dump);;Text Data Files(*.txt *.eml);;All Files(*.*)</source> <source>Binary Data Files(*.bin *.dump);;Text Data Files(*.txt *.eml);;All Files(*.*)</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.cpp" line="466"/> <location filename="../ui/mainwindow.cpp" line="530"/>
<location filename="../ui/mainwindow.cpp" line="479"/> <location filename="../ui/mainwindow.cpp" line="543"/>
<location filename="../ui/mainwindow.cpp" line="709"/> <location filename="../ui/mainwindow.cpp" line="770"/>
<source>Failed to open</source> <source>Failed to open</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.cpp" line="188"/> <location filename="../ui/mainwindow.cpp" line="252"/>
<source>Continue?</source> <source>Continue?</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.cpp" line="10"/> <location filename="../ui/mainwindow.cpp" line="11"/>
<source>Check Update</source> <source>Check Update</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.cpp" line="188"/> <location filename="../ui/mainwindow.cpp" line="252"/>
<source>Some of the data and key will be cleared.</source> <source>Some of the data and key will be cleared.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.cpp" line="301"/> <location filename="../ui/mainwindow.cpp" line="365"/>
<source>Plz select the font of data widget and key widget</source> <source>Plz select the font of data widget and key widget</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.cpp" line="414"/> <location filename="../ui/mainwindow.cpp" line="478"/>
<source>Data must consists of 32 Hex symbols(Whitespace is allowed)</source> <source>Data must consists of 32 Hex symbols(Whitespace is allowed)</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.cpp" line="434"/> <location filename="../ui/mainwindow.cpp" line="498"/>
<location filename="../ui/mainwindow.cpp" line="447"/> <location filename="../ui/mainwindow.cpp" line="511"/>
<source>Key must consists of 12 Hex symbols(Whitespace is allowed)</source> <source>Key must consists of 12 Hex symbols(Whitespace is allowed)</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.cpp" line="459"/> <location filename="../ui/mainwindow.cpp" line="523"/>
<source>Plz select the data file:</source> <source>Plz select the data file:</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.cpp" line="472"/> <location filename="../ui/mainwindow.cpp" line="536"/>
<source>Plz select the key file:</source> <source>Plz select the key file:</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.cpp" line="473"/> <location filename="../ui/mainwindow.cpp" line="537"/>
<source>Binary Key Files(*.bin *.dump);;Binary Data Files(*.bin *.dump);;All Files(*.*)</source> <source>Binary Key Files(*.bin *.dump);;Binary Data Files(*.bin *.dump);;All Files(*.*)</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.cpp" line="495"/> <location filename="../ui/mainwindow.cpp" line="559"/>
<source>Plz select the location to save data file:</source> <source>Plz select the location to save data file:</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.cpp" line="496"/> <location filename="../ui/mainwindow.cpp" line="560"/>
<source>Binary Data Files(*.bin *.dump);;Text Data Files(*.txt *.eml)</source> <source>Binary Data Files(*.bin *.dump);;Text Data Files(*.txt *.eml)</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.cpp" line="502"/> <location filename="../ui/mainwindow.cpp" line="566"/>
<location filename="../ui/mainwindow.cpp" line="515"/> <location filename="../ui/mainwindow.cpp" line="579"/>
<location filename="../ui/mainwindow.cpp" line="728"/> <location filename="../ui/mainwindow.cpp" line="789"/>
<source>Failed to save to</source> <source>Failed to save to</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.cpp" line="508"/> <location filename="../ui/mainwindow.cpp" line="572"/>
<source>Plz select the location to save key file:</source> <source>Plz select the location to save key file:</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.cpp" line="509"/> <location filename="../ui/mainwindow.cpp" line="573"/>
<source>Binary Key Files(*.bin *.dump)</source> <source>Binary Key Files(*.bin *.dump)</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.cpp" line="636"/> <location filename="../ui/mainwindow.cpp" line="698"/>
<source> Normally, the Block 0 of a typical Mifare card, which contains the UID, is locked during the manufacture. Users cannot write anything to Block 0 or set a new UID to a normal Mifare card.</source> <source> Normally, the Block 0 of a typical Mifare card, which contains the UID, is locked during the manufacture. Users cannot write anything to Block 0 or set a new UID to a normal Mifare card.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.cpp" line="637"/> <location filename="../ui/mainwindow.cpp" line="699"/>
<source> Chinese Magic Cards(aka UID Cards) are some special cards whose Block 0 are writeable. And you can change UID by writing to it.</source> <source> Chinese Magic Cards(aka UID Cards) are some special cards whose Block 0 are writeable. And you can change UID by writing to it.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.cpp" line="639"/> <location filename="../ui/mainwindow.cpp" line="701"/>
<source>There are two versions of Chinese Magic Cards, the Gen1 and the Gen2.</source> <source>There are two versions of Chinese Magic Cards, the Gen1 and the Gen2.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.cpp" line="640"/> <location filename="../ui/mainwindow.cpp" line="702"/>
<source> Gen1:</source> <source> Gen1:</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.cpp" line="640"/> <location filename="../ui/mainwindow.cpp" line="702"/>
<source> also called UID card in China. It responses to some backdoor commands so you can access any blocks without password. The Proxmark3 has a bunch of related commands(csetblk, cgetblk, ...) to deal with this type of card, and my GUI also support these commands.</source> <source> also called UID card in China. It responses to some backdoor commands so you can access any blocks without password. The Proxmark3 has a bunch of related commands(csetblk, cgetblk, ...) to deal with this type of card, and my GUI also support these commands.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.cpp" line="641"/> <location filename="../ui/mainwindow.cpp" line="703"/>
<source> Gen2:</source> <source> Gen2:</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.cpp" line="641"/> <location filename="../ui/mainwindow.cpp" line="703"/>
<source> doesn&apos;t response to the backdoor commands, which means that a reader cannot detect whether it is a Chinese Magic Card or not by sending backdoor commands.</source> <source> doesn&apos;t response to the backdoor commands, which means that a reader cannot detect whether it is a Chinese Magic Card or not by sending backdoor commands.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.cpp" line="643"/> <location filename="../ui/mainwindow.cpp" line="705"/>
<source>There are some types of Chinese Magic Card Gen2.</source> <source>There are some types of Chinese Magic Card Gen2.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.cpp" line="644"/> <location filename="../ui/mainwindow.cpp" line="706"/>
<source> CUID Card:</source> <source> CUID Card:</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.cpp" line="644"/> <location filename="../ui/mainwindow.cpp" line="706"/>
<source> the Block 0 is writeable, you can write to this block repeatedly by normal wrbl command.</source> <source> the Block 0 is writeable, you can write to this block repeatedly by normal wrbl command.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.cpp" line="645"/> <location filename="../ui/mainwindow.cpp" line="707"/>
<source> (hf mf wrbl 0 A FFFFFFFFFFFF &lt;the data you want to write&gt;)</source> <source> (hf mf wrbl 0 A FFFFFFFFFFFF &lt;the data you want to write&gt;)</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.cpp" line="646"/> <location filename="../ui/mainwindow.cpp" line="708"/>
<source> FUID Card:</source> <source> FUID Card:</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.cpp" line="646"/> <location filename="../ui/mainwindow.cpp" line="708"/>
<source> you can only write to Block 0 once. After that, it seems like a typical Mifare card(Block 0 cannot be written to).</source> <source> you can only write to Block 0 once. After that, it seems like a typical Mifare card(Block 0 cannot be written to).</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.cpp" line="647"/> <location filename="../ui/mainwindow.cpp" line="709"/>
<source> (some readers might try changing the Block 0, which could detect the CUID Card. In that case, you should use FUID card.)</source> <source> (some readers might try changing the Block 0, which could detect the CUID Card. In that case, you should use FUID card.)</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.cpp" line="648"/> <location filename="../ui/mainwindow.cpp" line="710"/>
<source> UFUID Card:</source> <source> UFUID Card:</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.cpp" line="648"/> <location filename="../ui/mainwindow.cpp" line="710"/>
<source> It behaves like a CUID card(or UID card? I&apos;m not sure) before you send some special command to lock it. Once it is locked, you cannot change its Block 0(just like a typical Mifare card).</source> <source> It behaves like a CUID card(or UID card? I&apos;m not sure) before you send some special command to lock it. Once it is locked, you cannot change its Block 0(just like a typical Mifare card).</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.cpp" line="650"/> <location filename="../ui/mainwindow.cpp" line="712"/>
<source> Seemingly, these Chinese Magic Cards are more easily to be compromised by Nested Attack(it takes little time to get an unknown key).</source> <source> Seemingly, these Chinese Magic Cards are more easily to be compromised by Nested Attack(it takes little time to get an unknown key).</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.cpp" line="696"/> <location filename="../ui/mainwindow.cpp" line="757"/>
<source>Plz select the trace file:</source> <source>Plz select the trace file:</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.cpp" line="697"/> <location filename="../ui/mainwindow.cpp" line="758"/>
<source>Trace Files(*.trc);;All Files(*.*)</source> <source>Trace Files(*.trc);;All Files(*.*)</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.cpp" line="719"/> <location filename="../ui/mainwindow.cpp" line="780"/>
<source>Plz select the location to save trace file:</source> <source>Plz select the location to save trace file:</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.cpp" line="720"/> <location filename="../ui/mainwindow.cpp" line="781"/>
<source>Trace Files(*.trc)</source> <source>Trace Files(*.trc)</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.cpp" line="805"/> <location filename="../ui/mainwindow.cpp" line="869"/>
<location filename="../ui/mainwindow.cpp" line="960"/> <location filename="../ui/mainwindow.cpp" line="1037"/>
<source>Idle</source> <source>Idle</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.cpp" line="812"/> <location filename="../ui/mainwindow.cpp" line="871"/>
<location filename="../ui/mainwindow.cpp" line="821"/> <source>Stop</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ui/mainwindow.cpp" line="878"/>
<location filename="../ui/mainwindow.cpp" line="886"/>
<source>Sec</source> <source>Sec</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.cpp" line="813"/> <location filename="../ui/mainwindow.cpp" line="879"/>
<source>Blk</source> <source>Blk</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.cpp" line="822"/> <location filename="../ui/mainwindow.cpp" line="887"/>
<source>KeyA</source> <source>KeyA</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.cpp" line="823"/> <location filename="../ui/mainwindow.cpp" line="888"/>
<source>KeyB</source> <source>KeyB</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.cpp" line="897"/> <location filename="../ui/mainwindow.cpp" line="974"/>
<source>HW Version:</source> <source>HW Version:</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.cpp" line="899"/> <location filename="../ui/mainwindow.cpp" line="976"/>
<source>PM3:</source> <source>PM3:</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.cpp" line="901"/> <location filename="../ui/mainwindow.cpp" line="978"/>
<source>State:</source> <source>State:</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.cpp" line="956"/> <location filename="../ui/mainwindow.cpp" line="1033"/>
<source>Running</source> <source>Running</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -845,31 +992,56 @@ It could make the whole sector blocked irreversibly!</source>
<context> <context>
<name>Mifare</name> <name>Mifare</name>
<message> <message>
<location filename="../module/mifare.cpp" line="592"/> <location filename="../module/mifare.cpp" line="613"/>
<source>Success!</source> <source>Success!</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../module/mifare.cpp" line="219"/> <location filename="../module/mifare.cpp" line="225"/>
<location filename="../module/mifare.cpp" line="592"/> <location filename="../module/mifare.cpp" line="613"/>
<location filename="../module/mifare.cpp" line="596"/> <location filename="../module/mifare.cpp" line="617"/>
<location filename="../module/mifare.cpp" line="661"/> <location filename="../module/mifare.cpp" line="641"/>
<location filename="../module/mifare.cpp" line="680"/>
<location filename="../module/mifare.cpp" line="693"/>
<location filename="../module/mifare.cpp" line="739"/>
<source>Info</source> <source>Info</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../module/mifare.cpp" line="219"/> <location filename="../module/mifare.cpp" line="225"/>
<source>Plz provide at least one known key</source> <source>Plz provide at least one known key</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../module/mifare.cpp" line="443"/> <location filename="../module/mifare.cpp" line="464"/>
<location filename="../module/mifare.cpp" line="596"/> <location filename="../module/mifare.cpp" line="617"/>
<source>Failed!</source> <source>Failed!</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../module/mifare.cpp" line="661"/> <location filename="../module/mifare.cpp" line="642"/>
<source>The Access Bits is invalid!
It could make the whole sector blocked irreversibly!
Continue to write?</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../module/mifare.cpp" line="680"/>
<source>Successful!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../module/mifare.cpp" line="693"/>
<source>Failed to write to these blocks:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../module/mifare.cpp" line="697"/>
<source>Select them?</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../module/mifare.cpp" line="739"/>
<source>Failed to read card.</source> <source>Failed to read card.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>

@ -314,534 +314,690 @@ It could make the whole sector blocked irreversibly!</source>
<translation>Mifare(IC)</translation> <translation>Mifare(IC)</translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.ui" line="209"/> <location filename="../ui/mainwindow.ui" line="215"/>
<source>Select Trailer</source> <source>Select Trailer</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.ui" line="347"/> <location filename="../ui/mainwindow.ui" line="356"/>
<source>Card Type</source> <source>Card Type</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.ui" line="368"/> <location filename="../ui/mainwindow.ui" line="377"/>
<source>MINI</source> <source>MINI</source>
<extracomment>320</extracomment> <extracomment>320</extracomment>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.ui" line="381"/> <location filename="../ui/mainwindow.ui" line="390"/>
<source>1K</source> <source>1K</source>
<extracomment>1024</extracomment> <extracomment>1024</extracomment>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.ui" line="397"/> <location filename="../ui/mainwindow.ui" line="406"/>
<source>2K</source> <source>2K</source>
<extracomment>2048</extracomment> <extracomment>2048</extracomment>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.ui" line="410"/> <location filename="../ui/mainwindow.ui" line="419"/>
<source>4K</source> <source>4K</source>
<extracomment>4096</extracomment> <extracomment>4096</extracomment>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.ui" line="420"/> <location filename="../ui/mainwindow.ui" line="429"/>
<source>File</source> <source>File</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.ui" line="441"/> <location filename="../ui/mainwindow.ui" line="450"/>
<location filename="../ui/mainwindow.ui" line="1134"/> <location filename="../ui/mainwindow.ui" line="1156"/>
<source>Load</source> <source>Load</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.ui" line="454"/> <location filename="../ui/mainwindow.ui" line="463"/>
<location filename="../ui/mainwindow.ui" line="1147"/> <location filename="../ui/mainwindow.ui" line="1169"/>
<location filename="../ui/mainwindow.ui" line="1598"/>
<source>Save</source> <source>Save</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.ui" line="474"/> <location filename="../ui/mainwindow.ui" line="483"/>
<location filename="../ui/mainwindow.cpp" line="814"/> <location filename="../ui/mainwindow.cpp" line="880"/>
<source>Data</source> <source>Data</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.ui" line="484"/> <location filename="../ui/mainwindow.ui" line="493"/>
<location filename="../ui/mainwindow.ui" line="1562"/>
<source>Key</source> <source>Key</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.ui" line="494"/> <location filename="../ui/mainwindow.ui" line="503"/>
<source>Attack</source> <source>Attack</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.ui" line="528"/> <location filename="../ui/mainwindow.ui" line="537"/>
<source>Card Info</source> <source>Card Info</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.ui" line="541"/> <location filename="../ui/mainwindow.ui" line="550"/>
<source>Check Default</source> <source>Check Default</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.ui" line="554"/> <location filename="../ui/mainwindow.ui" line="563"/>
<source>Nested</source> <source>Nested</source>
<translation>Nested</translation> <translation>Nested</translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.ui" line="567"/> <location filename="../ui/mainwindow.ui" line="576"/>
<source>Hardnested</source> <source>Hardnested</source>
<translation>Hardested</translation> <translation>Hardested</translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.ui" line="592"/> <location filename="../ui/mainwindow.ui" line="589"/>
<source>Darkside</source>
<translation>Darkside</translation>
</message>
<message>
<location filename="../ui/mainwindow.ui" line="614"/>
<source>Read/Write</source> <source>Read/Write</source>
<translation>/</translation> <translation>/</translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.ui" line="605"/> <location filename="../ui/mainwindow.ui" line="627"/>
<source>Block:</source> <source>Block:</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.ui" line="637"/> <location filename="../ui/mainwindow.ui" line="659"/>
<source>Key:</source> <source>Key:</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.ui" line="656"/> <location filename="../ui/mainwindow.ui" line="678"/>
<source>Key Type:</source> <source>Key Type:</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.ui" line="1108"/> <location filename="../ui/mainwindow.ui" line="1130"/>
<source>Snoop</source> <source>Snoop</source>
<translation>(Snoop)</translation> <translation>(Snoop)</translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.ui" line="1121"/> <location filename="../ui/mainwindow.ui" line="1143"/>
<source>List Data</source> <source>List Data</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.ui" line="679"/> <location filename="../ui/mainwindow.ui" line="701"/>
<source>Data:</source> <source>Data:</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.ui" line="701"/> <location filename="../ui/mainwindow.ui" line="723"/>
<source>Normal(Require Password)</source> <source>Normal(Require Password)</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.ui" line="783"/> <location filename="../ui/mainwindow.ui" line="805"/>
<source>Dump</source> <source>Dump</source>
<translation>Dump</translation> <translation>Dump</translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.ui" line="802"/> <location filename="../ui/mainwindow.ui" line="824"/>
<source>Restore</source> <source>Restore</source>
<translation>Restore</translation> <translation>Restore</translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.ui" line="812"/> <location filename="../ui/mainwindow.ui" line="834"/>
<source>Chinese Magic Card(Without Password)</source> <source>Chinese Magic Card(Without Password)</source>
<translation>UID</translation> <translation>UID</translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.ui" line="833"/> <location filename="../ui/mainwindow.ui" line="855"/>
<source>Lock UFUID Card</source> <source>Lock UFUID Card</source>
<translation>UFUID</translation> <translation>UFUID</translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.ui" line="846"/> <location filename="../ui/mainwindow.ui" line="868"/>
<location filename="../ui/mainwindow.cpp" line="651"/> <location filename="../ui/mainwindow.cpp" line="713"/>
<source>About UID Card</source> <source>About UID Card</source>
<translation>UID</translation> <translation>UID</translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.ui" line="917"/> <location filename="../ui/mainwindow.ui" line="939"/>
<source>Set Parameter</source> <source>Set Parameter</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.ui" line="936"/> <location filename="../ui/mainwindow.ui" line="958"/>
<source>Wipe</source> <source>Wipe</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.ui" line="962"/> <location filename="../ui/mainwindow.ui" line="984"/>
<location filename="../ui/mainwindow.ui" line="1038"/> <location filename="../ui/mainwindow.ui" line="1060"/>
<source>Simulate</source> <source>Simulate</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.ui" line="467"/> <location filename="../ui/mainwindow.ui" line="476"/>
<location filename="../ui/mainwindow.ui" line="1025"/> <location filename="../ui/mainwindow.ui" line="1047"/>
<location filename="../ui/mainwindow.ui" line="1591"/>
<source>Clear</source> <source>Clear</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.ui" line="202"/> <location filename="../ui/mainwindow.ui" line="208"/>
<source>Select All</source> <source>Select All</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.ui" line="238"/> <location filename="../ui/mainwindow.ui" line="244"/>
<source>KeyBlocks-&gt;Key</source> <source>KeyBlocks-&gt;Key</source>
<translation>-&gt;</translation> <translation>-&gt;</translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.ui" line="251"/> <location filename="../ui/mainwindow.ui" line="257"/>
<source>KeyBlocks&lt;-Key</source> <source>KeyBlocks&lt;-Key</source>
<translation>&lt;-</translation> <translation>&lt;-</translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.ui" line="264"/> <location filename="../ui/mainwindow.ui" line="270"/>
<source>Fill Keys</source> <source>Fill Keys</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.ui" line="277"/> <location filename="../ui/mainwindow.ui" line="283"/>
<source>Trailer Decoder</source> <source>Trailer Decoder</source>
<translation>Trailer</translation> <translation>Trailer</translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.ui" line="290"/> <location filename="../ui/mainwindow.ui" line="296"/>
<source>Set Fonts</source> <source>Set Fonts</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.ui" line="725"/> <location filename="../ui/mainwindow.ui" line="747"/>
<location filename="../ui/mainwindow.ui" line="859"/> <location filename="../ui/mainwindow.ui" line="881"/>
<source>Read One</source> <source>Read One</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.ui" line="738"/> <location filename="../ui/mainwindow.ui" line="760"/>
<location filename="../ui/mainwindow.ui" line="872"/> <location filename="../ui/mainwindow.ui" line="894"/>
<source>Write One</source> <source>Write One</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.ui" line="751"/> <location filename="../ui/mainwindow.ui" line="773"/>
<location filename="../ui/mainwindow.ui" line="885"/> <location filename="../ui/mainwindow.ui" line="907"/>
<location filename="../ui/mainwindow.ui" line="1012"/> <location filename="../ui/mainwindow.ui" line="1034"/>
<source>Read Selected</source> <source>Read Selected</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.ui" line="764"/> <location filename="../ui/mainwindow.ui" line="786"/>
<location filename="../ui/mainwindow.ui" line="898"/> <location filename="../ui/mainwindow.ui" line="920"/>
<location filename="../ui/mainwindow.ui" line="999"/> <location filename="../ui/mainwindow.ui" line="1021"/>
<source>Write Selected</source> <source>Write Selected</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.ui" line="1061"/> <location filename="../ui/mainwindow.ui" line="1083"/>
<location filename="../ui/mainwindow.ui" line="1095"/> <location filename="../ui/mainwindow.ui" line="1117"/>
<source>Sniff</source> <source>Sniff</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.ui" line="1173"/> <location filename="../ui/mainwindow.ui" line="1198"/>
<source>LF/Data</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ui/mainwindow.ui" line="1210"/>
<source>LF Config</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ui/mainwindow.ui" line="1231"/>
<source>Frequency</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ui/mainwindow.ui" line="1258"/>
<source>125k</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ui/mainwindow.ui" line="1271"/>
<source>134k</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ui/mainwindow.ui" line="1283"/>
<source>BitRate:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ui/mainwindow.ui" line="1290"/>
<source>Decimation:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ui/mainwindow.ui" line="1300"/>
<source>Averaging:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ui/mainwindow.ui" line="1314"/>
<source>Threshold:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ui/mainwindow.ui" line="1324"/>
<source>Skips:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ui/mainwindow.ui" line="1353"/>
<source>Get</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ui/mainwindow.ui" line="1385"/>
<source>Set</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ui/mainwindow.ui" line="1396"/>
<source>T55xx</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ui/mainwindow.ui" line="1411"/>
<source>RawCommand</source> <source>RawCommand</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.ui" line="1220"/> <location filename="../ui/mainwindow.ui" line="1461"/>
<location filename="../ui/mainwindow.cpp" line="149"/> <location filename="../ui/mainwindow.cpp" line="171"/>
<source>History:</source> <source>History:</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.ui" line="1252"/> <location filename="../ui/mainwindow.ui" line="1493"/>
<source>ClearHistory</source> <source>ClearHistory</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.ui" line="1271"/> <location filename="../ui/mainwindow.ui" line="1512"/>
<source>Send</source> <source>Send</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.ui" line="1278"/> <location filename="../ui/mainwindow.ui" line="1519"/>
<source>ClearOutput</source> <source>ClearOutput</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.cpp" line="81"/> <location filename="../ui/mainwindow.ui" line="1529"/>
<location filename="../ui/mainwindow.cpp" line="188"/> <source>Settings</source>
<location filename="../ui/mainwindow.cpp" line="414"/> <translation></translation>
<location filename="../ui/mainwindow.cpp" line="434"/> </message>
<location filename="../ui/mainwindow.cpp" line="447"/> <message>
<location filename="../ui/mainwindow.cpp" line="466"/> <location filename="../ui/mainwindow.ui" line="1537"/>
<location filename="../ui/mainwindow.cpp" line="479"/> <source>Client</source>
<location filename="../ui/mainwindow.cpp" line="502"/> <translation></translation>
<location filename="../ui/mainwindow.cpp" line="515"/> </message>
<location filename="../ui/mainwindow.cpp" line="709"/> <message>
<location filename="../ui/mainwindow.cpp" line="728"/> <location filename="../ui/mainwindow.ui" line="1543"/>
<source>Preload environment variables</source>
<translation></translation>
</message>
<message>
<location filename="../ui/mainwindow.ui" line="1567"/>
<source>Value</source>
<translation></translation>
</message>
<message>
<location filename="../ui/mainwindow.ui" line="1577"/>
<source>Add</source>
<translation></translation>
</message>
<message>
<location filename="../ui/mainwindow.ui" line="1584"/>
<source>Delete</source>
<translation></translation>
</message>
<message>
<location filename="../ui/mainwindow.ui" line="1622"/>
<source>Note:
If the variable name already exists, this app will add the new value to the head of the existing one, so these new values have higher priority when calling Proxmark3 client.
The environment variables added here won&apos;t affect other apps.</source>
<translation>
使
</translation>
</message>
<message>
<location filename="../ui/mainwindow.ui" line="1641"/>
<source>Start arguments</source>
<translation></translation>
</message>
<message>
<location filename="../ui/mainwindow.ui" line="1648"/>
<source>&lt;port&gt; -f</source>
<translation></translation>
</message>
<message>
<location filename="../ui/mainwindow.ui" line="1655"/>
<source>Note:
-f is necessary because the GUI need to handle the output in time
In some cases the arguments should be set to &quot;-p /dev/&lt;port&gt; -f&quot;
or &quot;-p &lt;port&gt; -f&quot;</source>
<translation>
-f使
&quot;-p /dev/&lt;port&gt; -f&quot;
&quot;-p &lt;port&gt; -f&quot;</translation>
</message>
<message>
<source>Note: -f is necessary because the GUI need to handle the output in time</source>
<translation type="vanished">-f使</translation>
</message>
<message>
<location filename="../ui/mainwindow.ui" line="1702"/>
<source>Keep buttons enabled even the client is running or disconnected</source>
<translation>使</translation>
</message>
<message>
<location filename="../ui/mainwindow.ui" line="1714"/>
<source>GUI</source>
<translation></translation>
</message>
<message>
<location filename="../ui/mainwindow.ui" line="1720"/>
<source>Language</source>
<translation></translation>
</message>
<message>
<location filename="../ui/mainwindow.cpp" line="89"/>
<location filename="../ui/mainwindow.cpp" line="252"/>
<location filename="../ui/mainwindow.cpp" line="478"/>
<location filename="../ui/mainwindow.cpp" line="498"/>
<location filename="../ui/mainwindow.cpp" line="511"/>
<location filename="../ui/mainwindow.cpp" line="530"/>
<location filename="../ui/mainwindow.cpp" line="543"/>
<location filename="../ui/mainwindow.cpp" line="566"/>
<location filename="../ui/mainwindow.cpp" line="579"/>
<location filename="../ui/mainwindow.cpp" line="770"/>
<location filename="../ui/mainwindow.cpp" line="789"/>
<source>Info</source> <source>Info</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.cpp" line="81"/> <location filename="../ui/mainwindow.cpp" line="89"/>
<source>Plz choose a port first</source> <source>Plz choose a port first</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.cpp" line="96"/> <location filename="../ui/mainwindow.cpp" line="107"/>
<source>Connected</source> <source>Connected</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.cpp" line="101"/> <location filename="../ui/mainwindow.cpp" line="112"/>
<location filename="../ui/mainwindow.cpp" line="111"/> <location filename="../ui/mainwindow.cpp" line="868"/>
<location filename="../ui/mainwindow.cpp" line="804"/>
<source>Not Connected</source> <source>Not Connected</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.cpp" line="460"/> <location filename="../ui/mainwindow.cpp" line="524"/>
<source>Binary Data Files(*.bin *.dump);;Text Data Files(*.txt *.eml);;All Files(*.*)</source> <source>Binary Data Files(*.bin *.dump);;Text Data Files(*.txt *.eml);;All Files(*.*)</source>
<translation>(*.bin *.dump);;(*.txt *.eml);;(*.*)</translation> <translation>(*.bin *.dump);;(*.txt *.eml);;(*.*)</translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.cpp" line="466"/> <location filename="../ui/mainwindow.cpp" line="530"/>
<location filename="../ui/mainwindow.cpp" line="479"/> <location filename="../ui/mainwindow.cpp" line="543"/>
<location filename="../ui/mainwindow.cpp" line="709"/> <location filename="../ui/mainwindow.cpp" line="770"/>
<source>Failed to open</source> <source>Failed to open</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.cpp" line="188"/> <location filename="../ui/mainwindow.cpp" line="252"/>
<source>Continue?</source> <source>Continue?</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.cpp" line="10"/> <location filename="../ui/mainwindow.cpp" line="11"/>
<source>Check Update</source> <source>Check Update</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.cpp" line="188"/> <location filename="../ui/mainwindow.cpp" line="252"/>
<source>Some of the data and key will be cleared.</source> <source>Some of the data and key will be cleared.</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.cpp" line="301"/> <location filename="../ui/mainwindow.cpp" line="365"/>
<source>Plz select the font of data widget and key widget</source> <source>Plz select the font of data widget and key widget</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.cpp" line="414"/> <location filename="../ui/mainwindow.cpp" line="478"/>
<source>Data must consists of 32 Hex symbols(Whitespace is allowed)</source> <source>Data must consists of 32 Hex symbols(Whitespace is allowed)</source>
<translation>32</translation> <translation>32</translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.cpp" line="434"/> <location filename="../ui/mainwindow.cpp" line="498"/>
<location filename="../ui/mainwindow.cpp" line="447"/> <location filename="../ui/mainwindow.cpp" line="511"/>
<source>Key must consists of 12 Hex symbols(Whitespace is allowed)</source> <source>Key must consists of 12 Hex symbols(Whitespace is allowed)</source>
<translation>12</translation> <translation>12</translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.cpp" line="459"/> <location filename="../ui/mainwindow.cpp" line="523"/>
<source>Plz select the data file:</source> <source>Plz select the data file:</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.cpp" line="472"/> <location filename="../ui/mainwindow.cpp" line="536"/>
<source>Plz select the key file:</source> <source>Plz select the key file:</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.cpp" line="473"/> <location filename="../ui/mainwindow.cpp" line="537"/>
<source>Binary Key Files(*.bin *.dump);;Binary Data Files(*.bin *.dump);;All Files(*.*)</source> <source>Binary Key Files(*.bin *.dump);;Binary Data Files(*.bin *.dump);;All Files(*.*)</source>
<translation>(*.bin *.dump)(*.bin *.dump);(*.*)</translation> <translation>(*.bin *.dump)(*.bin *.dump);(*.*)</translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.cpp" line="495"/> <location filename="../ui/mainwindow.cpp" line="559"/>
<source>Plz select the location to save data file:</source> <source>Plz select the location to save data file:</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.cpp" line="496"/> <location filename="../ui/mainwindow.cpp" line="560"/>
<source>Binary Data Files(*.bin *.dump);;Text Data Files(*.txt *.eml)</source> <source>Binary Data Files(*.bin *.dump);;Text Data Files(*.txt *.eml)</source>
<translation>(*.bin *.dump);(*.txt *.eml)</translation> <translation>(*.bin *.dump);(*.txt *.eml)</translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.cpp" line="502"/> <location filename="../ui/mainwindow.cpp" line="566"/>
<location filename="../ui/mainwindow.cpp" line="515"/> <location filename="../ui/mainwindow.cpp" line="579"/>
<location filename="../ui/mainwindow.cpp" line="728"/> <location filename="../ui/mainwindow.cpp" line="789"/>
<source>Failed to save to</source> <source>Failed to save to</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.cpp" line="508"/> <location filename="../ui/mainwindow.cpp" line="572"/>
<source>Plz select the location to save key file:</source> <source>Plz select the location to save key file:</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.cpp" line="509"/> <location filename="../ui/mainwindow.cpp" line="573"/>
<source>Binary Key Files(*.bin *.dump)</source> <source>Binary Key Files(*.bin *.dump)</source>
<translation>(*.bin *.dump)</translation> <translation>(*.bin *.dump)</translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.cpp" line="636"/> <location filename="../ui/mainwindow.cpp" line="698"/>
<source> Normally, the Block 0 of a typical Mifare card, which contains the UID, is locked during the manufacture. Users cannot write anything to Block 0 or set a new UID to a normal Mifare card.</source> <source> Normally, the Block 0 of a typical Mifare card, which contains the UID, is locked during the manufacture. Users cannot write anything to Block 0 or set a new UID to a normal Mifare card.</source>
<translation> Mifare0</translation> <translation> Mifare0</translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.cpp" line="637"/> <location filename="../ui/mainwindow.cpp" line="699"/>
<source> Chinese Magic Cards(aka UID Cards) are some special cards whose Block 0 are writeable. And you can change UID by writing to it.</source> <source> Chinese Magic Cards(aka UID Cards) are some special cards whose Block 0 are writeable. And you can change UID by writing to it.</source>
<translation> UIDChinese Magic Card0</translation> <translation> UIDChinese Magic Card0</translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.cpp" line="639"/> <location filename="../ui/mainwindow.cpp" line="701"/>
<source>There are two versions of Chinese Magic Cards, the Gen1 and the Gen2.</source> <source>There are two versions of Chinese Magic Cards, the Gen1 and the Gen2.</source>
<translation>UIDChinese Magic Card Gen1Gen2</translation> <translation>UIDChinese Magic Card Gen1Gen2</translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.cpp" line="640"/> <location filename="../ui/mainwindow.cpp" line="702"/>
<source> Gen1:</source> <source> Gen1:</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.cpp" line="640"/> <location filename="../ui/mainwindow.cpp" line="702"/>
<source> also called UID card in China. It responses to some backdoor commands so you can access any blocks without password. The Proxmark3 has a bunch of related commands(csetblk, cgetblk, ...) to deal with this type of card, and my GUI also support these commands.</source> <source> also called UID card in China. It responses to some backdoor commands so you can access any blocks without password. The Proxmark3 has a bunch of related commands(csetblk, cgetblk, ...) to deal with this type of card, and my GUI also support these commands.</source>
<translation> UIDPM3GUI</translation> <translation> UIDPM3GUI</translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.cpp" line="641"/> <location filename="../ui/mainwindow.cpp" line="703"/>
<source> Gen2:</source> <source> Gen2:</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.cpp" line="641"/> <location filename="../ui/mainwindow.cpp" line="703"/>
<source> doesn&apos;t response to the backdoor commands, which means that a reader cannot detect whether it is a Chinese Magic Card or not by sending backdoor commands.</source> <source> doesn&apos;t response to the backdoor commands, which means that a reader cannot detect whether it is a Chinese Magic Card or not by sending backdoor commands.</source>
<translation> CUID/FUID/UFUID</translation> <translation> CUID/FUID/UFUID</translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.cpp" line="643"/> <location filename="../ui/mainwindow.cpp" line="705"/>
<source>There are some types of Chinese Magic Card Gen2.</source> <source>There are some types of Chinese Magic Card Gen2.</source>
<translation>Gen2</translation> <translation>Gen2</translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.cpp" line="644"/> <location filename="../ui/mainwindow.cpp" line="706"/>
<source> CUID Card:</source> <source> CUID Card:</source>
<translation> CUID</translation> <translation> CUID</translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.cpp" line="644"/> <location filename="../ui/mainwindow.cpp" line="706"/>
<source> the Block 0 is writeable, you can write to this block repeatedly by normal wrbl command.</source> <source> the Block 0 is writeable, you can write to this block repeatedly by normal wrbl command.</source>
<translation> 0</translation> <translation> 0</translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.cpp" line="645"/> <location filename="../ui/mainwindow.cpp" line="707"/>
<source> (hf mf wrbl 0 A FFFFFFFFFFFF &lt;the data you want to write&gt;)</source> <source> (hf mf wrbl 0 A FFFFFFFFFFFF &lt;the data you want to write&gt;)</source>
<translation> (hf mf wrbl 0 A FFFFFFFFFFFF &lt;&gt;)</translation> <translation> (hf mf wrbl 0 A FFFFFFFFFFFF &lt;&gt;)</translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.cpp" line="646"/> <location filename="../ui/mainwindow.cpp" line="708"/>
<source> FUID Card:</source> <source> FUID Card:</source>
<translation> FUID</translation> <translation> FUID</translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.cpp" line="646"/> <location filename="../ui/mainwindow.cpp" line="708"/>
<source> you can only write to Block 0 once. After that, it seems like a typical Mifare card(Block 0 cannot be written to).</source> <source> you can only write to Block 0 once. After that, it seems like a typical Mifare card(Block 0 cannot be written to).</source>
<translation> 0</translation> <translation> 0</translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.cpp" line="647"/> <location filename="../ui/mainwindow.cpp" line="709"/>
<source> (some readers might try changing the Block 0, which could detect the CUID Card. In that case, you should use FUID card.)</source> <source> (some readers might try changing the Block 0, which could detect the CUID Card. In that case, you should use FUID card.)</source>
<translation> (穿CUID)</translation> <translation> (穿CUID)</translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.cpp" line="648"/> <location filename="../ui/mainwindow.cpp" line="710"/>
<source> UFUID Card:</source> <source> UFUID Card:</source>
<translation> UFUID</translation> <translation> UFUID</translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.cpp" line="648"/> <location filename="../ui/mainwindow.cpp" line="710"/>
<source> It behaves like a CUID card(or UID card? I&apos;m not sure) before you send some special command to lock it. Once it is locked, you cannot change its Block 0(just like a typical Mifare card).</source> <source> It behaves like a CUID card(or UID card? I&apos;m not sure) before you send some special command to lock it. Once it is locked, you cannot change its Block 0(just like a typical Mifare card).</source>
<translation> UID/CUID0FUID</translation> <translation> UID/CUID0FUID</translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.cpp" line="650"/> <location filename="../ui/mainwindow.cpp" line="712"/>
<source> Seemingly, these Chinese Magic Cards are more easily to be compromised by Nested Attack(it takes little time to get an unknown key).</source> <source> Seemingly, these Chinese Magic Cards are more easily to be compromised by Nested Attack(it takes little time to get an unknown key).</source>
<translation> UIDNested</translation> <translation> UIDNested</translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.cpp" line="696"/> <location filename="../ui/mainwindow.cpp" line="757"/>
<source>Plz select the trace file:</source> <source>Plz select the trace file:</source>
<translation>trace</translation> <translation>trace</translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.cpp" line="697"/> <location filename="../ui/mainwindow.cpp" line="758"/>
<source>Trace Files(*.trc);;All Files(*.*)</source> <source>Trace Files(*.trc);;All Files(*.*)</source>
<translation>Trace(*.trc);;(*.*)</translation> <translation>Trace(*.trc);;(*.*)</translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.cpp" line="719"/> <location filename="../ui/mainwindow.cpp" line="780"/>
<source>Plz select the location to save trace file:</source> <source>Plz select the location to save trace file:</source>
<translation>trace</translation> <translation>trace</translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.cpp" line="720"/> <location filename="../ui/mainwindow.cpp" line="781"/>
<source>Trace Files(*.trc)</source> <source>Trace Files(*.trc)</source>
<translation>Trace(*.trc)</translation> <translation>Trace(*.trc)</translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.cpp" line="805"/> <location filename="../ui/mainwindow.cpp" line="869"/>
<location filename="../ui/mainwindow.cpp" line="960"/> <location filename="../ui/mainwindow.cpp" line="1037"/>
<source>Idle</source> <source>Idle</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.cpp" line="812"/> <location filename="../ui/mainwindow.cpp" line="871"/>
<location filename="../ui/mainwindow.cpp" line="821"/> <source>Stop</source>
<translation></translation>
</message>
<message>
<location filename="../ui/mainwindow.cpp" line="878"/>
<location filename="../ui/mainwindow.cpp" line="886"/>
<source>Sec</source> <source>Sec</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.cpp" line="813"/> <location filename="../ui/mainwindow.cpp" line="879"/>
<source>Blk</source> <source>Blk</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.cpp" line="822"/> <location filename="../ui/mainwindow.cpp" line="887"/>
<source>KeyA</source> <source>KeyA</source>
<translation>A</translation> <translation>A</translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.cpp" line="823"/> <location filename="../ui/mainwindow.cpp" line="888"/>
<source>KeyB</source> <source>KeyB</source>
<translation>B</translation> <translation>B</translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.cpp" line="897"/> <location filename="../ui/mainwindow.cpp" line="974"/>
<source>HW Version:</source> <source>HW Version:</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.cpp" line="899"/> <location filename="../ui/mainwindow.cpp" line="976"/>
<source>PM3:</source> <source>PM3:</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.cpp" line="901"/> <location filename="../ui/mainwindow.cpp" line="978"/>
<source>State:</source> <source>State:</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.cpp" line="956"/> <location filename="../ui/mainwindow.cpp" line="1033"/>
<source>Running</source> <source>Running</source>
<translation></translation> <translation></translation>
</message> </message>
@ -849,31 +1005,58 @@ It could make the whole sector blocked irreversibly!</source>
<context> <context>
<name>Mifare</name> <name>Mifare</name>
<message> <message>
<location filename="../module/mifare.cpp" line="592"/> <location filename="../module/mifare.cpp" line="613"/>
<source>Success!</source> <source>Success!</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../module/mifare.cpp" line="219"/> <location filename="../module/mifare.cpp" line="225"/>
<location filename="../module/mifare.cpp" line="592"/> <location filename="../module/mifare.cpp" line="613"/>
<location filename="../module/mifare.cpp" line="596"/> <location filename="../module/mifare.cpp" line="617"/>
<location filename="../module/mifare.cpp" line="661"/> <location filename="../module/mifare.cpp" line="641"/>
<location filename="../module/mifare.cpp" line="680"/>
<location filename="../module/mifare.cpp" line="693"/>
<location filename="../module/mifare.cpp" line="739"/>
<source>Info</source> <source>Info</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../module/mifare.cpp" line="219"/> <location filename="../module/mifare.cpp" line="225"/>
<source>Plz provide at least one known key</source> <source>Plz provide at least one known key</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../module/mifare.cpp" line="443"/> <location filename="../module/mifare.cpp" line="464"/>
<location filename="../module/mifare.cpp" line="596"/> <location filename="../module/mifare.cpp" line="617"/>
<source>Failed!</source> <source>Failed!</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../module/mifare.cpp" line="661"/> <location filename="../module/mifare.cpp" line="642"/>
<source>The Access Bits is invalid!
It could make the whole sector blocked irreversibly!
Continue to write?</source>
<translation>
使
</translation>
</message>
<message>
<location filename="../module/mifare.cpp" line="680"/>
<source>Successful!</source>
<translation></translation>
</message>
<message>
<location filename="../module/mifare.cpp" line="693"/>
<source>Failed to write to these blocks:</source>
<translation></translation>
</message>
<message>
<location filename="../module/mifare.cpp" line="697"/>
<source>Select them?</source>
<translation></translation>
</message>
<message>
<location filename="../module/mifare.cpp" line="739"/>
<source>Failed to read card.</source> <source>Failed to read card.</source>
<translation></translation> <translation></translation>
</message> </message>

@ -106,7 +106,7 @@ QString Mifare::info(bool isRequiringOutput)
else else
{ {
util->execCMD("hf 14a info"); util->execCMD("hf 14a info");
ui->funcTab->setCurrentIndex(1); ui->funcTab->setCurrentIndex(Util::rawTabIndex);
return ""; return "";
} }
} }
@ -115,17 +115,16 @@ QString Mifare::info(bool isRequiringOutput)
void Mifare::chk() void Mifare::chk()
{ {
QRegularExpressionMatch reMatch; QRegularExpressionMatch reMatch;
QString result = util->execCMDWithOutput( QString result;
"hf mf chk *"
+ QString::number(cardType.type)
+ " ?",
Util::ReturnTrigger(1000 + cardType.sector_size * 200, {"No valid", "\\|---\\|----------------\\|----------------\\|"}));
qDebug() << result;
int offset = 0; int offset = 0;
QString data; QString data;
if(util->getClientType() == Util::CLIENTTYPE_OFFICIAL) if(util->getClientType() == Util::CLIENTTYPE_OFFICIAL)
{ {
result = util->execCMDWithOutput(
"hf mf chk *"
+ QString::number(cardType.type)
+ " ?",
Util::ReturnTrigger(1000 + cardType.sector_size * 200, {"No valid", "\\|---\\|----------------\\|----------------\\|"}));
for(int i = 0; i < cardType.sector_size; i++) for(int i = 0; i < cardType.sector_size; i++)
{ {
reMatch = keyPattern->match(result, offset); reMatch = keyPattern->match(result, offset);
@ -148,6 +147,11 @@ void Mifare::chk()
} }
else if(util->getClientType() == Util::CLIENTTYPE_ICEMAN) else if(util->getClientType() == Util::CLIENTTYPE_ICEMAN)
{ {
result = util->execCMDWithOutput(
"hf mf chk *"
+ QString::number(cardType.type)
+ " ?",
Util::ReturnTrigger(1000 + cardType.sector_size * 200, {"No valid", "\\|---\\|----------------\\|---\\|----------------\\|"}));
for(int i = 0; i < cardType.sector_size; i++) for(int i = 0; i < cardType.sector_size; i++)
{ {
reMatch = keyPattern_res->match(result, offset); reMatch = keyPattern_res->match(result, offset);
@ -213,7 +217,8 @@ void Mifare::nested()
result = util->execCMDWithOutput( result = util->execCMDWithOutput(
"hf mf nested " "hf mf nested "
+ QString::number(cardType.type) + QString::number(cardType.type)
+ knownKeyInfo, 10000); + knownKeyInfo,
Util::ReturnTrigger(10000, {"key is wrong", "\\|000\\|"}));
} }
else else
{ {
@ -249,7 +254,7 @@ void Mifare::hardnested()
MF_Attack_hardnestedDialog dialog(cardType.block_size); MF_Attack_hardnestedDialog dialog(cardType.block_size);
connect(&dialog, &MF_Attack_hardnestedDialog::sendCMD, util, &Util::execCMD); connect(&dialog, &MF_Attack_hardnestedDialog::sendCMD, util, &Util::execCMD);
if(dialog.exec() == QDialog::Accepted) if(dialog.exec() == QDialog::Accepted)
ui->funcTab->setCurrentIndex(1); ui->funcTab->setCurrentIndex(Util::rawTabIndex);
} }
void Mifare::darkside() void Mifare::darkside()
@ -257,12 +262,12 @@ void Mifare::darkside()
if(util->getClientType() == Util::CLIENTTYPE_OFFICIAL) if(util->getClientType() == Util::CLIENTTYPE_OFFICIAL)
{ {
util->execCMD("hf mf mifare"); util->execCMD("hf mf mifare");
ui->funcTab->setCurrentIndex(1); ui->funcTab->setCurrentIndex(Util::rawTabIndex);
} }
else if(util->getClientType() == Util::CLIENTTYPE_ICEMAN) else if(util->getClientType() == Util::CLIENTTYPE_ICEMAN)
{ {
util->execCMD("hf mf darkside"); util->execCMD("hf mf darkside");
ui->funcTab->setCurrentIndex(1); ui->funcTab->setCurrentIndex(Util::rawTabIndex);
} }
} }
@ -270,19 +275,19 @@ void Mifare::darkside()
void Mifare::sniff() void Mifare::sniff()
{ {
util->execCMD("hf mf sniff"); util->execCMD("hf mf sniff");
ui->funcTab->setCurrentIndex(1); ui->funcTab->setCurrentIndex(Util::rawTabIndex);
} }
void Mifare::snoop() void Mifare::snoop()
{ {
util->execCMD("hf 14a snoop"); util->execCMD("hf 14a snoop");
ui->funcTab->setCurrentIndex(1); ui->funcTab->setCurrentIndex(Util::rawTabIndex);
} }
void Mifare::list() void Mifare::list()
{ {
util->execCMD("hf list mf"); util->execCMD("hf list mf");
ui->funcTab->setCurrentIndex(1); ui->funcTab->setCurrentIndex(Util::rawTabIndex);
} }
QString Mifare::_readblk(int blockId, KeyType keyType, const QString& key, TargetType targetType, int waitTime) QString Mifare::_readblk(int blockId, KeyType keyType, const QString& key, TargetType targetType, int waitTime)
@ -709,13 +714,13 @@ void Mifare::writeSelected(TargetType targetType)
void Mifare::dump() void Mifare::dump()
{ {
util->execCMD("hf mf dump"); util->execCMD("hf mf dump");
ui->funcTab->setCurrentIndex(1); ui->funcTab->setCurrentIndex(Util::rawTabIndex);
} }
void Mifare::restore() void Mifare::restore()
{ {
util->execCMD("hf mf restore"); util->execCMD("hf mf restore");
ui->funcTab->setCurrentIndex(1); ui->funcTab->setCurrentIndex(Util::rawTabIndex);
} }
void Mifare::wipeC() void Mifare::wipeC()
@ -724,7 +729,7 @@ void Mifare::wipeC()
"hf mf cwipe " "hf mf cwipe "
+ QString::number(cardType.type) + QString::number(cardType.type)
+ " f"); + " f");
ui->funcTab->setCurrentIndex(1); ui->funcTab->setCurrentIndex(Util::rawTabIndex);
} }
void Mifare::setParameterC() void Mifare::setParameterC()
@ -741,7 +746,7 @@ void Mifare::setParameterC()
MF_UID_parameterDialog dialog(lis[0].toUpper(), lis[1].toUpper(), lis[2].mid(0, 2).toUpper()); MF_UID_parameterDialog dialog(lis[0].toUpper(), lis[1].toUpper(), lis[2].mid(0, 2).toUpper());
connect(&dialog, &MF_UID_parameterDialog::sendCMD, util, &Util::execCMD); connect(&dialog, &MF_UID_parameterDialog::sendCMD, util, &Util::execCMD);
if(dialog.exec() == QDialog::Accepted) if(dialog.exec() == QDialog::Accepted)
ui->funcTab->setCurrentIndex(1); ui->funcTab->setCurrentIndex(Util::rawTabIndex);
} }
} }
@ -765,19 +770,19 @@ void Mifare::simulate()
MF_Sim_simDialog dialog(cardType.type); MF_Sim_simDialog dialog(cardType.type);
connect(&dialog, &MF_Sim_simDialog::sendCMD, util, &Util::execCMD); connect(&dialog, &MF_Sim_simDialog::sendCMD, util, &Util::execCMD);
if(dialog.exec() == QDialog::Accepted) if(dialog.exec() == QDialog::Accepted)
ui->funcTab->setCurrentIndex(1); ui->funcTab->setCurrentIndex(Util::rawTabIndex);
} }
void Mifare::loadSniff(const QString& file) void Mifare::loadSniff(const QString& file)
{ {
util->execCMD("hf list mf -l " + file); util->execCMD("hf list mf -l " + file);
ui->funcTab->setCurrentIndex(1); ui->funcTab->setCurrentIndex(Util::rawTabIndex);
} }
void Mifare::saveSniff(const QString& file) void Mifare::saveSniff(const QString& file)
{ {
util->execCMD("hf list mf -s " + file); util->execCMD("hf list mf -s " + file);
ui->funcTab->setCurrentIndex(1); ui->funcTab->setCurrentIndex(Util::rawTabIndex);
} }
void Mifare::data_syncWithDataWidget(bool syncAll, int block) void Mifare::data_syncWithDataWidget(bool syncAll, int block)

@ -92,6 +92,9 @@ void MainWindow::on_PM3_connectButton_clicked()
saveClientPath(ui->PM3_pathEdit->text()); saveClientPath(ui->PM3_pathEdit->text());
emit connectPM3(ui->PM3_pathEdit->text(), port); emit connectPM3(ui->PM3_pathEdit->text(), port);
} }
QProcess proc;
QProcessEnvironment env = QProcessEnvironment::systemEnvironment();
//env.insert();
} }
void MainWindow::onPM3StateChanged(bool st, const QString& info) void MainWindow::onPM3StateChanged(bool st, const QString& info)
@ -112,11 +115,8 @@ void MainWindow::onPM3StateChanged(bool st, const QString& info)
void MainWindow::on_PM3_disconnectButton_clicked() void MainWindow::on_PM3_disconnectButton_clicked()
{ {
pm3state = false;
setState(false);
emit killPM3(); emit killPM3();
emit setSerialListener("", false); emit setSerialListener("", false);
setStatusBar(connectStatusBar, tr("Not Connected"));
} }
void MainWindow::refreshOutput(const QString& output) void MainWindow::refreshOutput(const QString& output)
@ -128,7 +128,19 @@ void MainWindow::refreshOutput(const QString& output)
void MainWindow::on_stopButton_clicked() void MainWindow::on_stopButton_clicked()
{ {
if(!pm3state)
on_PM3_disconnectButton_clicked();
else
{
on_PM3_disconnectButton_clicked();
for(int i = 0; i < 10; i++)
{
util->delay(200);
if(!pm3state)
break;
}
on_PM3_connectButton_clicked();
}
} }
// ********************************************************* // *********************************************************
@ -866,7 +878,6 @@ void MainWindow::uiInit()
ui->MF_dataWidget->setHorizontalHeaderItem(0, new QTableWidgetItem(tr("Sec"))); ui->MF_dataWidget->setHorizontalHeaderItem(0, new QTableWidgetItem(tr("Sec")));
ui->MF_dataWidget->setHorizontalHeaderItem(1, new QTableWidgetItem(tr("Blk"))); ui->MF_dataWidget->setHorizontalHeaderItem(1, new QTableWidgetItem(tr("Blk")));
ui->MF_dataWidget->setHorizontalHeaderItem(2, new QTableWidgetItem(tr("Data"))); ui->MF_dataWidget->setHorizontalHeaderItem(2, new QTableWidgetItem(tr("Data")));
ui->MF_dataWidget->verticalHeader()->setVisible(false);
ui->MF_dataWidget->setColumnWidth(0, 55); ui->MF_dataWidget->setColumnWidth(0, 55);
ui->MF_dataWidget->setColumnWidth(1, 55); ui->MF_dataWidget->setColumnWidth(1, 55);
ui->MF_dataWidget->setColumnWidth(2, 450); ui->MF_dataWidget->setColumnWidth(2, 450);
@ -875,7 +886,6 @@ void MainWindow::uiInit()
ui->MF_keyWidget->setHorizontalHeaderItem(0, new QTableWidgetItem(tr("Sec"))); ui->MF_keyWidget->setHorizontalHeaderItem(0, new QTableWidgetItem(tr("Sec")));
ui->MF_keyWidget->setHorizontalHeaderItem(1, new QTableWidgetItem(tr("KeyA"))); ui->MF_keyWidget->setHorizontalHeaderItem(1, new QTableWidgetItem(tr("KeyA")));
ui->MF_keyWidget->setHorizontalHeaderItem(2, new QTableWidgetItem(tr("KeyB"))); ui->MF_keyWidget->setHorizontalHeaderItem(2, new QTableWidgetItem(tr("KeyB")));
ui->MF_keyWidget->verticalHeader()->setVisible(false);
ui->MF_keyWidget->setColumnWidth(0, 35); ui->MF_keyWidget->setColumnWidth(0, 35);
ui->MF_keyWidget->setColumnWidth(1, 125); ui->MF_keyWidget->setColumnWidth(1, 125);
ui->MF_keyWidget->setColumnWidth(2, 125); ui->MF_keyWidget->setColumnWidth(2, 125);
@ -917,11 +927,21 @@ void MainWindow::uiInit()
ui->PM3_pathEdit->setText(settings->value("path", "proxmark3").toString()); ui->PM3_pathEdit->setText(settings->value("path", "proxmark3").toString());
settings->endGroup(); settings->endGroup();
settings->beginGroup("Client_Args");
ui->Set_Client_startArgsEdit->setText(settings->value("args", "<port> -f").toString());
settings->endGroup();
settings->beginGroup("Client_forceButtonsEnabled");
ui->Set_Client_forceEnabledBox->setChecked(settings->value("state", false).toBool());
settings->endGroup();
ui->MF_RW_keyTypeBox->addItem("A", Mifare::KEY_A); ui->MF_RW_keyTypeBox->addItem("A", Mifare::KEY_A);
ui->MF_RW_keyTypeBox->addItem("B", Mifare::KEY_B); ui->MF_RW_keyTypeBox->addItem("B", Mifare::KEY_B);
on_Raw_CMDHistoryBox_stateChanged(Qt::Unchecked); on_Raw_CMDHistoryBox_stateChanged(Qt::Unchecked);
on_PM3_refreshPortButton_clicked(); on_PM3_refreshPortButton_clicked();
loadClientPreloadEnv();
} }
void MainWindow::signalInit() void MainWindow::signalInit()
@ -1059,3 +1079,65 @@ void MainWindow::on_MF_Attack_darksideButton_clicked()
mifare->darkside(); mifare->darkside();
setState(true); setState(true);
} }
void MainWindow::on_Set_Client_envDeleteButton_clicked()
{
ui->Set_Client_envTable->removeRow(ui->Set_Client_envTable->currentRow());
}
void MainWindow::on_Set_Client_envAddButton_clicked()
{
ui->Set_Client_envTable->insertRow(ui->Set_Client_envTable->rowCount());
}
void MainWindow::on_Set_Client_envClearButton_clicked()
{
ui->Set_Client_envTable->clearContents();
ui->Set_Client_envTable->setRowCount(0);
}
void MainWindow::on_Set_Client_envSaveButton_clicked()
{
settings->beginGroup("Client_Env");
for(int i = 0; i < ui->Set_Client_envTable->rowCount(); i++)
{
QTableWidgetItem* key = ui->Set_Client_envTable->item(i, 0);
QTableWidgetItem* val = ui->Set_Client_envTable->item(i, 1);
if(key == nullptr || val == nullptr || key->text().isEmpty() || val->text().isEmpty())
continue;
settings->setValue(key->text(), val->text());
qDebug() << "Env saved: " << i << key->text() << val->text();
}
settings->endGroup();
}
void MainWindow::loadClientPreloadEnv()
{
ui->Set_Client_envTable->clearContents();
settings->beginGroup("Client_Env");
QStringList keyList = settings->allKeys();
ui->Set_Client_envTable->setRowCount(keyList.size());
for(int i = 0; i < keyList.size(); i++)
{
ui->Set_Client_envTable->setItem(i, 0, new QTableWidgetItem(keyList[i]));
ui->Set_Client_envTable->setItem(i, 1, new QTableWidgetItem(settings->value(keyList[i]).toString()));
}
settings->endGroup();
}
void MainWindow::on_Set_Client_startArgsEdit_editingFinished()
{
settings->beginGroup("Client_Args");
settings->setValue("args", ui->Set_Client_startArgsEdit->text());
settings->endGroup();
}
void MainWindow::on_Set_Client_forceEnabledBox_stateChanged(int arg1)
{
settings->beginGroup("Client_forceButtonsEnabled");
settings->setValue("state", arg1 == Qt::Checked);
settings->endGroup();
}

@ -20,6 +20,7 @@
#include <QSizePolicy> #include <QSizePolicy>
#include <QSettings> #include <QSettings>
#include <QPushButton> #include <QPushButton>
#include <QProcessEnvironment>
#include "common/myeventfilter.h" #include "common/myeventfilter.h"
#include "common/pm3process.h" #include "common/pm3process.h"
@ -90,7 +91,6 @@ private slots:
void on_MF_RW_writeSelectedButton_clicked(); void on_MF_RW_writeSelectedButton_clicked();
void on_MF_RW_dumpButton_clicked(); void on_MF_RW_dumpButton_clicked();
void on_MF_RW_restoreButton_clicked(); void on_MF_RW_restoreButton_clicked();
@ -156,6 +156,20 @@ private slots:
void on_MF_Attack_darksideButton_clicked(); void on_MF_Attack_darksideButton_clicked();
void on_Set_Client_envDeleteButton_clicked();
void on_Set_Client_envAddButton_clicked();
void on_Set_Client_envSaveButton_clicked();
void loadClientPreloadEnv();
void on_Set_Client_startArgsEdit_editingFinished();
void on_Set_Client_forceEnabledBox_stateChanged(int arg1);
void on_Set_Client_envClearButton_clicked();
private: private:
Ui::MainWindow* ui; Ui::MainWindow* ui;
QButtonGroup* typeBtnGroup; QButtonGroup* typeBtnGroup;

@ -6,7 +6,7 @@
<rect> <rect>
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>970</width> <width>1029</width>
<height>770</height> <height>770</height>
</rect> </rect>
</property> </property>
@ -120,7 +120,7 @@
</sizepolicy> </sizepolicy>
</property> </property>
<property name="currentIndex"> <property name="currentIndex">
<number>0</number> <number>4</number>
</property> </property>
<widget class="QWidget" name="mifareTab"> <widget class="QWidget" name="mifareTab">
<attribute name="title"> <attribute name="title">
@ -170,6 +170,12 @@
<property name="selectionMode"> <property name="selectionMode">
<enum>QAbstractItemView::SingleSelection</enum> <enum>QAbstractItemView::SingleSelection</enum>
</property> </property>
<attribute name="horizontalHeaderStretchLastSection">
<bool>true</bool>
</attribute>
<attribute name="verticalHeaderVisible">
<bool>false</bool>
</attribute>
<attribute name="verticalHeaderMinimumSectionSize"> <attribute name="verticalHeaderMinimumSectionSize">
<number>20</number> <number>20</number>
</attribute> </attribute>
@ -329,6 +335,9 @@
<property name="selectionMode"> <property name="selectionMode">
<enum>QAbstractItemView::SingleSelection</enum> <enum>QAbstractItemView::SingleSelection</enum>
</property> </property>
<attribute name="verticalHeaderVisible">
<bool>false</bool>
</attribute>
<attribute name="verticalHeaderMinimumSectionSize"> <attribute name="verticalHeaderMinimumSectionSize">
<number>20</number> <number>20</number>
</attribute> </attribute>
@ -1515,6 +1524,259 @@
</item> </item>
</layout> </layout>
</widget> </widget>
<widget class="QWidget" name="settingsTab">
<attribute name="title">
<string>Settings</string>
</attribute>
<layout class="QHBoxLayout" name="horizontalLayout_18">
<item>
<layout class="QVBoxLayout" name="verticalLayout_12">
<item>
<widget class="QGroupBox" name="Set_clientGroupBox">
<property name="title">
<string>Client</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_10">
<item>
<widget class="QLabel" name="label_11">
<property name="text">
<string>Preload environment variables</string>
</property>
</widget>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_15">
<item>
<widget class="QTableWidget" name="Set_Client_envTable">
<property name="selectionBehavior">
<enum>QAbstractItemView::SelectRows</enum>
</property>
<attribute name="horizontalHeaderStretchLastSection">
<bool>true</bool>
</attribute>
<attribute name="verticalHeaderVisible">
<bool>false</bool>
</attribute>
<column>
<property name="text">
<string>Key</string>
</property>
</column>
<column>
<property name="text">
<string>Value</string>
</property>
</column>
</widget>
</item>
<item>
<layout class="QVBoxLayout" name="verticalLayout_8">
<item>
<widget class="QPushButton" name="Set_Client_envAddButton">
<property name="text">
<string>Add</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="Set_Client_envDeleteButton">
<property name="text">
<string>Delete</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="Set_Client_envClearButton">
<property name="text">
<string>Clear</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="Set_Client_envSaveButton">
<property name="text">
<string>Save</string>
</property>
</widget>
</item>
<item>
<spacer name="verticalSpacer_4">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
</layout>
</item>
</layout>
</item>
<item>
<widget class="QLabel" name="label_13">
<property name="text">
<string>Note:
If the variable name already exists, this app will add the new value to the head of the existing one, so these new values have higher priority when calling Proxmark3 client.
The environment variables added here won't affect other apps.</string>
</property>
<property name="wordWrap">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="Line" name="line">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="label_12">
<property name="text">
<string>Start arguments</string>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="Set_Client_startArgsEdit">
<property name="text">
<string>&lt;port&gt; -f</string>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="label_14">
<property name="text">
<string>Note:
-f is necessary because the GUI need to handle the output in time
In some cases the arguments should be set to &quot;-p /dev/&lt;port&gt; -f&quot;
or &quot;-p &lt;port&gt; -f&quot;</string>
</property>
<property name="wordWrap">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="Line" name="line_2">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</widget>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_16">
<item>
<widget class="QCheckBox" name="Set_Client_forceEnabledBox">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>0</width>
<height>0</height>
</size>
</property>
<property name="text">
<string/>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="label_15">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>Keep buttons enabled even the client is running or disconnected</string>
</property>
<property name="wordWrap">
<bool>true</bool>
</property>
</widget>
</item>
</layout>
</item>
<item>
<widget class="QGroupBox" name="groupBox_2">
<property name="title">
<string>GUI</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_11">
<item>
<widget class="QLabel" name="label_16">
<property name="text">
<string>Language</string>
</property>
</widget>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_17">
<item>
<widget class="QComboBox" name="Set_GUI_languageBox"/>
</item>
<item>
<spacer name="horizontalSpacer_9">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
</item>
</layout>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<spacer name="verticalSpacer_5">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
</layout>
</item>
<item>
<spacer name="horizontalSpacer_10">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
</widget> </widget>
</item> </item>
</layout> </layout>

Loading…
Cancel
Save