A small patch

Support specifying client working directory
Clean all compile warnings
pull/33/head V0.1.4
wh201906 4 years ago
parent 7f96c061dc
commit aa6b93984c

@ -72,6 +72,7 @@ Great thanks to him.
+ Support configuring environment variables by script + Support configuring environment variables by script
(Useful when the client requires specific environment variables) (Useful when the client requires specific environment variables)
+ All functions are compatible with Iceman/RRG repo(tested on v4.9237) + All functions are compatible with Iceman/RRG repo(tested on v4.9237)
+ Support specifying client working directory
+ Fix some bugs + Fix some bugs
### V0.1.3 ### V0.1.3

@ -71,6 +71,7 @@ release页面中有含客户端的GUI。这个GUI也可以搭配你自己的客
+ 可通过外部脚本配置环境变量 + 可通过外部脚本配置环境变量
(在客户端需要配置环境变量时很有用) (在客户端需要配置环境变量时很有用)
+ 全功能兼容冰人版在v4.9237上测试通过) + 全功能兼容冰人版在v4.9237上测试通过)
+ 支持指定客户端工作路径
+ 修复部分bug + 修复部分bug
### V0.1.3 ### V0.1.3

@ -55,6 +55,10 @@ void PM3Process::connectPM3(const QString& path, const QString& port, const QStr
result = result.left(result.indexOf("\r\n")); result = result.left(result.indexOf("\r\n"));
result = result.mid(3, result.lastIndexOf(" ") - 3); result = result.mid(3, result.lastIndexOf(" ") - 3);
emit PM3StatedChanged(true, result); emit PM3StatedChanged(true, result);
// if the arguments don't contain <port>, then disable the port listener
// useful when using offline sniff
if(args.indexOf(port) != -1)
setSerialListener(port, true); setSerialListener(port, true);
} }
else else
@ -134,3 +138,9 @@ void PM3Process::setProcEnv(const QStringList* env)
this->setEnvironment(*env); this->setEnvironment(*env);
// qDebug() << "final Env List" << processEnvironment().toStringList(); // qDebug() << "final Env List" << processEnvironment().toStringList();
} }
void PM3Process::setWorkingDir(const QString& dir)
{
// the working directory cannot be the default, or the client will failed to load the dll
this->setWorkingDirectory(dir);
}

@ -9,6 +9,7 @@
#include <QtSerialPort/QSerialPortInfo> #include <QtSerialPort/QSerialPortInfo>
#include <QtSerialPort/QSerialPort> #include <QtSerialPort/QSerialPort>
#include <QProcessEnvironment> #include <QProcessEnvironment>
#include <QDir>
#include "util.h" #include "util.h"
@ -27,6 +28,7 @@ public slots:
qint64 write(QString data); qint64 write(QString data);
void reconnectPM3(); void reconnectPM3();
void setProcEnv(const QStringList* env); void setProcEnv(const QStringList* env);
void setWorkingDir(const QString& dir);
private slots: private slots:
void onTimeout(); void onTimeout();
void onReadyRead(); void onReadyRead();

@ -377,12 +377,13 @@ It could make the whole sector blocked irreversibly!</source>
<message> <message>
<location filename="../ui/mainwindow.ui" line="473"/> <location filename="../ui/mainwindow.ui" line="473"/>
<location filename="../ui/mainwindow.ui" line="1179"/> <location filename="../ui/mainwindow.ui" line="1179"/>
<location filename="../ui/mainwindow.ui" line="1602"/>
<source>Save</source> <source>Save</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.ui" line="493"/> <location filename="../ui/mainwindow.ui" line="493"/>
<location filename="../ui/mainwindow.cpp" line="921"/> <location filename="../ui/mainwindow.cpp" line="932"/>
<source>Data</source> <source>Data</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -478,7 +479,7 @@ It could make the whole sector blocked irreversibly!</source>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.ui" line="878"/> <location filename="../ui/mainwindow.ui" line="878"/>
<location filename="../ui/mainwindow.cpp" line="749"/> <location filename="../ui/mainwindow.cpp" line="760"/>
<source>About UID Card</source> <source>About UID Card</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -658,7 +659,7 @@ It could make the whole sector blocked irreversibly!</source>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.ui" line="1471"/> <location filename="../ui/mainwindow.ui" line="1471"/>
<location filename="../ui/mainwindow.cpp" line="193"/> <location filename="../ui/mainwindow.cpp" line="204"/>
<source>History:</source> <source>History:</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -701,16 +702,32 @@ then put the path of the script there</source>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.ui" line="1586"/> <location filename="../ui/mainwindow.ui" line="1586"/>
<source>Client working directory:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ui/mainwindow.ui" line="1595"/>
<source>../data</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ui/mainwindow.ui" line="1611"/>
<source>Note:
On Windows, the client working directory should not be identical to the path of GUI, otherwise the client will use the wrong .dll file.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ui/mainwindow.ui" line="1629"/>
<source>Start arguments</source> <source>Start arguments</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.ui" line="1593"/> <location filename="../ui/mainwindow.ui" line="1636"/>
<source>&lt;port&gt; -f</source> <source>&lt;port&gt; -f</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.ui" line="1600"/> <location filename="../ui/mainwindow.ui" line="1643"/>
<source>Note: <source>Note:
-f is necessary because the GUI need to handle the output in time -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; In some cases the arguments should be set to &quot;-p /dev/&lt;port&gt; -f&quot;
@ -718,75 +735,75 @@ or &quot;-p &lt;port&gt; -f&quot;</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.ui" line="1647"/> <location filename="../ui/mainwindow.ui" line="1690"/>
<source>Keep buttons enabled even the client is running or disconnected</source> <source>Keep buttons enabled even the client is running or disconnected</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.ui" line="1669"/> <location filename="../ui/mainwindow.ui" line="1712"/>
<source>GUI</source> <source>GUI</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.ui" line="1677"/> <location filename="../ui/mainwindow.ui" line="1720"/>
<source>Language: </source> <source>Language: </source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.ui" line="1684"/> <location filename="../ui/mainwindow.ui" line="1727"/>
<source>Choose Language</source> <source>Choose Language</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.ui" line="1691"/> <location filename="../ui/mainwindow.ui" line="1734"/>
<source>(Restart this app to use new language)</source> <source>(Restart this app to use new language)</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.cpp" line="92"/> <location filename="../ui/mainwindow.cpp" line="93"/>
<location filename="../ui/mainwindow.cpp" line="288"/> <location filename="../ui/mainwindow.cpp" line="299"/>
<location filename="../ui/mainwindow.cpp" line="514"/> <location filename="../ui/mainwindow.cpp" line="525"/>
<location filename="../ui/mainwindow.cpp" line="534"/> <location filename="../ui/mainwindow.cpp" line="545"/>
<location filename="../ui/mainwindow.cpp" line="547"/> <location filename="../ui/mainwindow.cpp" line="558"/>
<location filename="../ui/mainwindow.cpp" line="566"/> <location filename="../ui/mainwindow.cpp" line="577"/>
<location filename="../ui/mainwindow.cpp" line="579"/> <location filename="../ui/mainwindow.cpp" line="590"/>
<location filename="../ui/mainwindow.cpp" line="602"/> <location filename="../ui/mainwindow.cpp" line="613"/>
<location filename="../ui/mainwindow.cpp" line="615"/> <location filename="../ui/mainwindow.cpp" line="626"/>
<location filename="../ui/mainwindow.cpp" line="806"/> <location filename="../ui/mainwindow.cpp" line="817"/>
<location filename="../ui/mainwindow.cpp" line="825"/> <location filename="../ui/mainwindow.cpp" line="836"/>
<source>Info</source> <source>Info</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.cpp" line="92"/> <location filename="../ui/mainwindow.cpp" line="93"/>
<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="128"/> <location filename="../ui/mainwindow.cpp" line="139"/>
<source>Connected</source> <source>Connected</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.cpp" line="134"/> <location filename="../ui/mainwindow.cpp" line="145"/>
<location filename="../ui/mainwindow.cpp" line="909"/> <location filename="../ui/mainwindow.cpp" line="920"/>
<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="560"/> <location filename="../ui/mainwindow.cpp" line="571"/>
<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="566"/> <location filename="../ui/mainwindow.cpp" line="577"/>
<location filename="../ui/mainwindow.cpp" line="579"/> <location filename="../ui/mainwindow.cpp" line="590"/>
<location filename="../ui/mainwindow.cpp" line="806"/> <location filename="../ui/mainwindow.cpp" line="817"/>
<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="288"/> <location filename="../ui/mainwindow.cpp" line="299"/>
<source>Continue?</source> <source>Continue?</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -796,222 +813,222 @@ or &quot;-p &lt;port&gt; -f&quot;</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.cpp" line="288"/> <location filename="../ui/mainwindow.cpp" line="299"/>
<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="401"/> <location filename="../ui/mainwindow.cpp" line="412"/>
<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="514"/> <location filename="../ui/mainwindow.cpp" line="525"/>
<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="534"/> <location filename="../ui/mainwindow.cpp" line="545"/>
<location filename="../ui/mainwindow.cpp" line="547"/> <location filename="../ui/mainwindow.cpp" line="558"/>
<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="559"/> <location filename="../ui/mainwindow.cpp" line="570"/>
<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="572"/> <location filename="../ui/mainwindow.cpp" line="583"/>
<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="573"/> <location filename="../ui/mainwindow.cpp" line="584"/>
<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="595"/> <location filename="../ui/mainwindow.cpp" line="606"/>
<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="596"/> <location filename="../ui/mainwindow.cpp" line="607"/>
<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="602"/> <location filename="../ui/mainwindow.cpp" line="613"/>
<location filename="../ui/mainwindow.cpp" line="615"/> <location filename="../ui/mainwindow.cpp" line="626"/>
<location filename="../ui/mainwindow.cpp" line="825"/> <location filename="../ui/mainwindow.cpp" line="836"/>
<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="608"/> <location filename="../ui/mainwindow.cpp" line="619"/>
<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="609"/> <location filename="../ui/mainwindow.cpp" line="620"/>
<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="734"/> <location filename="../ui/mainwindow.cpp" line="745"/>
<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="735"/> <location filename="../ui/mainwindow.cpp" line="746"/>
<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="737"/> <location filename="../ui/mainwindow.cpp" line="748"/>
<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="738"/> <location filename="../ui/mainwindow.cpp" line="749"/>
<source> Gen1:</source> <source> Gen1:</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.cpp" line="738"/> <location filename="../ui/mainwindow.cpp" line="749"/>
<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="739"/> <location filename="../ui/mainwindow.cpp" line="750"/>
<source> Gen2:</source> <source> Gen2:</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.cpp" line="739"/> <location filename="../ui/mainwindow.cpp" line="750"/>
<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="741"/> <location filename="../ui/mainwindow.cpp" line="752"/>
<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="742"/> <location filename="../ui/mainwindow.cpp" line="753"/>
<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="742"/> <location filename="../ui/mainwindow.cpp" line="753"/>
<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="743"/> <location filename="../ui/mainwindow.cpp" line="754"/>
<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="744"/> <location filename="../ui/mainwindow.cpp" line="755"/>
<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="744"/> <location filename="../ui/mainwindow.cpp" line="755"/>
<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="745"/> <location filename="../ui/mainwindow.cpp" line="756"/>
<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="746"/> <location filename="../ui/mainwindow.cpp" line="757"/>
<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="746"/> <location filename="../ui/mainwindow.cpp" line="757"/>
<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="748"/> <location filename="../ui/mainwindow.cpp" line="759"/>
<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="793"/> <location filename="../ui/mainwindow.cpp" line="804"/>
<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="794"/> <location filename="../ui/mainwindow.cpp" line="805"/>
<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="816"/> <location filename="../ui/mainwindow.cpp" line="827"/>
<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="817"/> <location filename="../ui/mainwindow.cpp" line="828"/>
<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="910"/> <location filename="../ui/mainwindow.cpp" line="921"/>
<location filename="../ui/mainwindow.cpp" line="1079"/> <location filename="../ui/mainwindow.cpp" line="1092"/>
<source>Idle</source> <source>Idle</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.cpp" line="912"/> <location filename="../ui/mainwindow.cpp" line="923"/>
<source>Stop</source> <source>Stop</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.cpp" line="919"/> <location filename="../ui/mainwindow.cpp" line="930"/>
<location filename="../ui/mainwindow.cpp" line="926"/> <location filename="../ui/mainwindow.cpp" line="937"/>
<source>Sec</source> <source>Sec</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.cpp" line="920"/> <location filename="../ui/mainwindow.cpp" line="931"/>
<source>Blk</source> <source>Blk</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.cpp" line="927"/> <location filename="../ui/mainwindow.cpp" line="938"/>
<source>KeyA</source> <source>KeyA</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.cpp" line="928"/> <location filename="../ui/mainwindow.cpp" line="939"/>
<source>KeyB</source> <source>KeyB</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.cpp" line="1016"/> <location filename="../ui/mainwindow.cpp" line="1029"/>
<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="1018"/> <location filename="../ui/mainwindow.cpp" line="1031"/>
<source>PM3:</source> <source>PM3:</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.cpp" line="1020"/> <location filename="../ui/mainwindow.cpp" line="1033"/>
<source>State:</source> <source>State:</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.cpp" line="1075"/> <location filename="../ui/mainwindow.cpp" line="1088"/>
<source>Running</source> <source>Running</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -1019,56 +1036,56 @@ or &quot;-p &lt;port&gt; -f&quot;</source>
<context> <context>
<name>Mifare</name> <name>Mifare</name>
<message> <message>
<location filename="../module/mifare.cpp" line="641"/> <location filename="../module/mifare.cpp" line="640"/>
<source>Success!</source> <source>Success!</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../module/mifare.cpp" line="228"/> <location filename="../module/mifare.cpp" line="226"/>
<location filename="../module/mifare.cpp" line="641"/> <location filename="../module/mifare.cpp" line="640"/>
<location filename="../module/mifare.cpp" line="645"/> <location filename="../module/mifare.cpp" line="644"/>
<location filename="../module/mifare.cpp" line="669"/> <location filename="../module/mifare.cpp" line="668"/>
<location filename="../module/mifare.cpp" line="708"/> <location filename="../module/mifare.cpp" line="707"/>
<location filename="../module/mifare.cpp" line="721"/> <location filename="../module/mifare.cpp" line="720"/>
<location filename="../module/mifare.cpp" line="776"/> <location filename="../module/mifare.cpp" line="775"/>
<source>Info</source> <source>Info</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../module/mifare.cpp" line="228"/> <location filename="../module/mifare.cpp" line="226"/>
<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="492"/> <location filename="../module/mifare.cpp" line="490"/>
<location filename="../module/mifare.cpp" line="645"/> <location filename="../module/mifare.cpp" line="644"/>
<source>Failed!</source> <source>Failed!</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../module/mifare.cpp" line="670"/> <location filename="../module/mifare.cpp" line="669"/>
<source>The Access Bits is invalid! <source>The Access Bits is invalid!
It could make the whole sector blocked irreversibly! It could make the whole sector blocked irreversibly!
Continue to write?</source> Continue to write?</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../module/mifare.cpp" line="708"/> <location filename="../module/mifare.cpp" line="707"/>
<source>Successful!</source> <source>Successful!</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../module/mifare.cpp" line="721"/> <location filename="../module/mifare.cpp" line="720"/>
<source>Failed to write to these blocks:</source> <source>Failed to write to these blocks:</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../module/mifare.cpp" line="725"/> <location filename="../module/mifare.cpp" line="724"/>
<source>Select them?</source> <source>Select them?</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../module/mifare.cpp" line="776"/> <location filename="../module/mifare.cpp" line="775"/>
<source>Failed to read card.</source> <source>Failed to read card.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>

Binary file not shown.

@ -381,12 +381,13 @@ It could make the whole sector blocked irreversibly!</source>
<message> <message>
<location filename="../ui/mainwindow.ui" line="473"/> <location filename="../ui/mainwindow.ui" line="473"/>
<location filename="../ui/mainwindow.ui" line="1179"/> <location filename="../ui/mainwindow.ui" line="1179"/>
<location filename="../ui/mainwindow.ui" line="1602"/>
<source>Save</source> <source>Save</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.ui" line="493"/> <location filename="../ui/mainwindow.ui" line="493"/>
<location filename="../ui/mainwindow.cpp" line="921"/> <location filename="../ui/mainwindow.cpp" line="932"/>
<source>Data</source> <source>Data</source>
<translation></translation> <translation></translation>
</message> </message>
@ -482,7 +483,7 @@ It could make the whole sector blocked irreversibly!</source>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.ui" line="878"/> <location filename="../ui/mainwindow.ui" line="878"/>
<location filename="../ui/mainwindow.cpp" line="749"/> <location filename="../ui/mainwindow.cpp" line="760"/>
<source>About UID Card</source> <source>About UID Card</source>
<translation>UID</translation> <translation>UID</translation>
</message> </message>
@ -662,7 +663,7 @@ It could make the whole sector blocked irreversibly!</source>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.ui" line="1471"/> <location filename="../ui/mainwindow.ui" line="1471"/>
<location filename="../ui/mainwindow.cpp" line="193"/> <location filename="../ui/mainwindow.cpp" line="204"/>
<source>History:</source> <source>History:</source>
<translation></translation> <translation></translation>
</message> </message>
@ -706,16 +707,33 @@ then put the path of the script there</source>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.ui" line="1586"/> <location filename="../ui/mainwindow.ui" line="1586"/>
<source>Client working directory:</source>
<translation></translation>
</message>
<message>
<location filename="../ui/mainwindow.ui" line="1595"/>
<source>../data</source>
<translation></translation>
</message>
<message>
<location filename="../ui/mainwindow.ui" line="1611"/>
<source>Note:
On Windows, the client working directory should not be identical to the path of GUI, otherwise the client will use the wrong .dll file.</source>
<translation>
WindowsGUI使.dll</translation>
</message>
<message>
<location filename="../ui/mainwindow.ui" line="1629"/>
<source>Start arguments</source> <source>Start arguments</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.ui" line="1593"/> <location filename="../ui/mainwindow.ui" line="1636"/>
<source>&lt;port&gt; -f</source> <source>&lt;port&gt; -f</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.ui" line="1600"/> <location filename="../ui/mainwindow.ui" line="1643"/>
<source>Note: <source>Note:
-f is necessary because the GUI need to handle the output in time -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; In some cases the arguments should be set to &quot;-p /dev/&lt;port&gt; -f&quot;
@ -726,75 +744,75 @@ or &quot;-p &lt;port&gt; -f&quot;</source>
&quot;-p &lt;port&gt; -f&quot;</translation> &quot;-p &lt;port&gt; -f&quot;</translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.ui" line="1677"/> <location filename="../ui/mainwindow.ui" line="1720"/>
<source>Language: </source> <source>Language: </source>
<translation> </translation> <translation> </translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.ui" line="1684"/> <location filename="../ui/mainwindow.ui" line="1727"/>
<source>Choose Language</source> <source>Choose Language</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.ui" line="1691"/> <location filename="../ui/mainwindow.ui" line="1734"/>
<source>(Restart this app to use new language)</source> <source>(Restart this app to use new language)</source>
<translation>使</translation> <translation>使</translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.ui" line="1647"/> <location filename="../ui/mainwindow.ui" line="1690"/>
<source>Keep buttons enabled even the client is running or disconnected</source> <source>Keep buttons enabled even the client is running or disconnected</source>
<translation>使</translation> <translation>使</translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.ui" line="1669"/> <location filename="../ui/mainwindow.ui" line="1712"/>
<source>GUI</source> <source>GUI</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.cpp" line="92"/> <location filename="../ui/mainwindow.cpp" line="93"/>
<location filename="../ui/mainwindow.cpp" line="288"/> <location filename="../ui/mainwindow.cpp" line="299"/>
<location filename="../ui/mainwindow.cpp" line="514"/> <location filename="../ui/mainwindow.cpp" line="525"/>
<location filename="../ui/mainwindow.cpp" line="534"/> <location filename="../ui/mainwindow.cpp" line="545"/>
<location filename="../ui/mainwindow.cpp" line="547"/> <location filename="../ui/mainwindow.cpp" line="558"/>
<location filename="../ui/mainwindow.cpp" line="566"/> <location filename="../ui/mainwindow.cpp" line="577"/>
<location filename="../ui/mainwindow.cpp" line="579"/> <location filename="../ui/mainwindow.cpp" line="590"/>
<location filename="../ui/mainwindow.cpp" line="602"/> <location filename="../ui/mainwindow.cpp" line="613"/>
<location filename="../ui/mainwindow.cpp" line="615"/> <location filename="../ui/mainwindow.cpp" line="626"/>
<location filename="../ui/mainwindow.cpp" line="806"/> <location filename="../ui/mainwindow.cpp" line="817"/>
<location filename="../ui/mainwindow.cpp" line="825"/> <location filename="../ui/mainwindow.cpp" line="836"/>
<source>Info</source> <source>Info</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.cpp" line="92"/> <location filename="../ui/mainwindow.cpp" line="93"/>
<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="128"/> <location filename="../ui/mainwindow.cpp" line="139"/>
<source>Connected</source> <source>Connected</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.cpp" line="134"/> <location filename="../ui/mainwindow.cpp" line="145"/>
<location filename="../ui/mainwindow.cpp" line="909"/> <location filename="../ui/mainwindow.cpp" line="920"/>
<source>Not Connected</source> <source>Not Connected</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.cpp" line="560"/> <location filename="../ui/mainwindow.cpp" line="571"/>
<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="566"/> <location filename="../ui/mainwindow.cpp" line="577"/>
<location filename="../ui/mainwindow.cpp" line="579"/> <location filename="../ui/mainwindow.cpp" line="590"/>
<location filename="../ui/mainwindow.cpp" line="806"/> <location filename="../ui/mainwindow.cpp" line="817"/>
<source>Failed to open</source> <source>Failed to open</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.cpp" line="288"/> <location filename="../ui/mainwindow.cpp" line="299"/>
<source>Continue?</source> <source>Continue?</source>
<translation></translation> <translation></translation>
</message> </message>
@ -804,222 +822,222 @@ or &quot;-p &lt;port&gt; -f&quot;</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.cpp" line="288"/> <location filename="../ui/mainwindow.cpp" line="299"/>
<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="401"/> <location filename="../ui/mainwindow.cpp" line="412"/>
<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="514"/> <location filename="../ui/mainwindow.cpp" line="525"/>
<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="534"/> <location filename="../ui/mainwindow.cpp" line="545"/>
<location filename="../ui/mainwindow.cpp" line="547"/> <location filename="../ui/mainwindow.cpp" line="558"/>
<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="559"/> <location filename="../ui/mainwindow.cpp" line="570"/>
<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="572"/> <location filename="../ui/mainwindow.cpp" line="583"/>
<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="573"/> <location filename="../ui/mainwindow.cpp" line="584"/>
<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="595"/> <location filename="../ui/mainwindow.cpp" line="606"/>
<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="596"/> <location filename="../ui/mainwindow.cpp" line="607"/>
<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="602"/> <location filename="../ui/mainwindow.cpp" line="613"/>
<location filename="../ui/mainwindow.cpp" line="615"/> <location filename="../ui/mainwindow.cpp" line="626"/>
<location filename="../ui/mainwindow.cpp" line="825"/> <location filename="../ui/mainwindow.cpp" line="836"/>
<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="608"/> <location filename="../ui/mainwindow.cpp" line="619"/>
<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="609"/> <location filename="../ui/mainwindow.cpp" line="620"/>
<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="734"/> <location filename="../ui/mainwindow.cpp" line="745"/>
<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="735"/> <location filename="../ui/mainwindow.cpp" line="746"/>
<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="737"/> <location filename="../ui/mainwindow.cpp" line="748"/>
<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="738"/> <location filename="../ui/mainwindow.cpp" line="749"/>
<source> Gen1:</source> <source> Gen1:</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.cpp" line="738"/> <location filename="../ui/mainwindow.cpp" line="749"/>
<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="739"/> <location filename="../ui/mainwindow.cpp" line="750"/>
<source> Gen2:</source> <source> Gen2:</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.cpp" line="739"/> <location filename="../ui/mainwindow.cpp" line="750"/>
<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="741"/> <location filename="../ui/mainwindow.cpp" line="752"/>
<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="742"/> <location filename="../ui/mainwindow.cpp" line="753"/>
<source> CUID Card:</source> <source> CUID Card:</source>
<translation> CUID</translation> <translation> CUID</translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.cpp" line="742"/> <location filename="../ui/mainwindow.cpp" line="753"/>
<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="743"/> <location filename="../ui/mainwindow.cpp" line="754"/>
<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="744"/> <location filename="../ui/mainwindow.cpp" line="755"/>
<source> FUID Card:</source> <source> FUID Card:</source>
<translation> FUID</translation> <translation> FUID</translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.cpp" line="744"/> <location filename="../ui/mainwindow.cpp" line="755"/>
<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="745"/> <location filename="../ui/mainwindow.cpp" line="756"/>
<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="746"/> <location filename="../ui/mainwindow.cpp" line="757"/>
<source> UFUID Card:</source> <source> UFUID Card:</source>
<translation> UFUID</translation> <translation> UFUID</translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.cpp" line="746"/> <location filename="../ui/mainwindow.cpp" line="757"/>
<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="748"/> <location filename="../ui/mainwindow.cpp" line="759"/>
<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="793"/> <location filename="../ui/mainwindow.cpp" line="804"/>
<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="794"/> <location filename="../ui/mainwindow.cpp" line="805"/>
<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="816"/> <location filename="../ui/mainwindow.cpp" line="827"/>
<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="817"/> <location filename="../ui/mainwindow.cpp" line="828"/>
<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="910"/> <location filename="../ui/mainwindow.cpp" line="921"/>
<location filename="../ui/mainwindow.cpp" line="1079"/> <location filename="../ui/mainwindow.cpp" line="1092"/>
<source>Idle</source> <source>Idle</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.cpp" line="912"/> <location filename="../ui/mainwindow.cpp" line="923"/>
<source>Stop</source> <source>Stop</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.cpp" line="919"/> <location filename="../ui/mainwindow.cpp" line="930"/>
<location filename="../ui/mainwindow.cpp" line="926"/> <location filename="../ui/mainwindow.cpp" line="937"/>
<source>Sec</source> <source>Sec</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.cpp" line="920"/> <location filename="../ui/mainwindow.cpp" line="931"/>
<source>Blk</source> <source>Blk</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.cpp" line="927"/> <location filename="../ui/mainwindow.cpp" line="938"/>
<source>KeyA</source> <source>KeyA</source>
<translation>A</translation> <translation>A</translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.cpp" line="928"/> <location filename="../ui/mainwindow.cpp" line="939"/>
<source>KeyB</source> <source>KeyB</source>
<translation>B</translation> <translation>B</translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.cpp" line="1016"/> <location filename="../ui/mainwindow.cpp" line="1029"/>
<source>HW Version:</source> <source>HW Version:</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.cpp" line="1018"/> <location filename="../ui/mainwindow.cpp" line="1031"/>
<source>PM3:</source> <source>PM3:</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.cpp" line="1020"/> <location filename="../ui/mainwindow.cpp" line="1033"/>
<source>State:</source> <source>State:</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.cpp" line="1075"/> <location filename="../ui/mainwindow.cpp" line="1088"/>
<source>Running</source> <source>Running</source>
<translation></translation> <translation></translation>
</message> </message>
@ -1027,34 +1045,34 @@ or &quot;-p &lt;port&gt; -f&quot;</source>
<context> <context>
<name>Mifare</name> <name>Mifare</name>
<message> <message>
<location filename="../module/mifare.cpp" line="641"/> <location filename="../module/mifare.cpp" line="640"/>
<source>Success!</source> <source>Success!</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../module/mifare.cpp" line="228"/> <location filename="../module/mifare.cpp" line="226"/>
<location filename="../module/mifare.cpp" line="641"/> <location filename="../module/mifare.cpp" line="640"/>
<location filename="../module/mifare.cpp" line="645"/> <location filename="../module/mifare.cpp" line="644"/>
<location filename="../module/mifare.cpp" line="669"/> <location filename="../module/mifare.cpp" line="668"/>
<location filename="../module/mifare.cpp" line="708"/> <location filename="../module/mifare.cpp" line="707"/>
<location filename="../module/mifare.cpp" line="721"/> <location filename="../module/mifare.cpp" line="720"/>
<location filename="../module/mifare.cpp" line="776"/> <location filename="../module/mifare.cpp" line="775"/>
<source>Info</source> <source>Info</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../module/mifare.cpp" line="228"/> <location filename="../module/mifare.cpp" line="226"/>
<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="492"/> <location filename="../module/mifare.cpp" line="490"/>
<location filename="../module/mifare.cpp" line="645"/> <location filename="../module/mifare.cpp" line="644"/>
<source>Failed!</source> <source>Failed!</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../module/mifare.cpp" line="670"/> <location filename="../module/mifare.cpp" line="669"/>
<source>The Access Bits is invalid! <source>The Access Bits is invalid!
It could make the whole sector blocked irreversibly! It could make the whole sector blocked irreversibly!
Continue to write?</source> Continue to write?</source>
@ -1063,22 +1081,22 @@ Continue to write?</source>
</translation> </translation>
</message> </message>
<message> <message>
<location filename="../module/mifare.cpp" line="708"/> <location filename="../module/mifare.cpp" line="707"/>
<source>Successful!</source> <source>Successful!</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../module/mifare.cpp" line="721"/> <location filename="../module/mifare.cpp" line="720"/>
<source>Failed to write to these blocks:</source> <source>Failed to write to these blocks:</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../module/mifare.cpp" line="725"/> <location filename="../module/mifare.cpp" line="724"/>
<source>Select them?</source> <source>Select them?</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../module/mifare.cpp" line="776"/> <location filename="../module/mifare.cpp" line="775"/>
<source>Failed to read card.</source> <source>Failed to read card.</source>
<translation></translation> <translation></translation>
</message> </message>

@ -102,16 +102,14 @@ QString Mifare::info(bool isRequiringOutput)
end = result.indexOf("\n", end); end = result.indexOf("\n", end);
return result.mid(begin, end - begin + 1); return result.mid(begin, end - begin + 1);
} }
else
return "";
} }
else else
{ {
util->execCMD("hf 14a info"); util->execCMD("hf 14a info");
ui->funcTab->setCurrentIndex(Util::rawTabIndex); ui->funcTab->setCurrentIndex(Util::rawTabIndex);
return "";
} }
} }
return "";
} }
void Mifare::chk() void Mifare::chk()
@ -629,6 +627,7 @@ bool Mifare::_writeblk(int blockId, KeyType keyType, const QString& key, const Q
return true; return true;
} }
} }
return false;
} }
void Mifare::writeOne(TargetType targetType) void Mifare::writeOne(TargetType targetType)

@ -28,6 +28,7 @@ MainWindow::MainWindow(QWidget *parent):
pm3 = new PM3Process(pm3Thread); pm3 = new PM3Process(pm3Thread);
pm3Thread->start(); pm3Thread->start();
pm3state = false; pm3state = false;
clientWorkingDir = new QDir;
util = new Util(this); util = new Util(this);
mifare = new Mifare(ui, util, this); mifare = new Mifare(ui, util, this);
@ -94,6 +95,7 @@ void MainWindow::on_PM3_connectButton_clicked()
{ {
QStringList args = ui->Set_Client_startArgsEdit->text().replace("<port>", port).split(' '); QStringList args = ui->Set_Client_startArgsEdit->text().replace("<port>", port).split(' ');
saveClientPath(ui->PM3_pathEdit->text()); saveClientPath(ui->PM3_pathEdit->text());
QProcess envSetProcess; QProcess envSetProcess;
QFileInfo envScriptPath(ui->Set_Client_envScriptEdit->text()); QFileInfo envScriptPath(ui->Set_Client_envScriptEdit->text());
if(envScriptPath.exists()) if(envScriptPath.exists())
@ -113,6 +115,15 @@ void MainWindow::on_PM3_connectButton_clicked()
else else
clientEnv.clear(); clientEnv.clear();
emit setProcEnv(&clientEnv); emit setProcEnv(&clientEnv);
clientWorkingDir->setPath(QApplication::applicationDirPath());
qDebug() << clientWorkingDir->absolutePath();
clientWorkingDir->mkpath(ui->Set_Client_workingDirEdit->text());
qDebug() << clientWorkingDir->absolutePath();
clientWorkingDir->cd(ui->Set_Client_workingDirEdit->text());
qDebug() << clientWorkingDir->absolutePath();
emit setWorkingDir(clientWorkingDir->absolutePath());
emit connectPM3(ui->PM3_pathEdit->text(), port, args); emit connectPM3(ui->PM3_pathEdit->text(), port, args);
} }
} }
@ -976,6 +987,7 @@ void MainWindow::uiInit()
settings->beginGroup("Client_Env"); settings->beginGroup("Client_Env");
ui->Set_Client_envScriptEdit->setText(settings->value("scriptPath").toString()); ui->Set_Client_envScriptEdit->setText(settings->value("scriptPath").toString());
ui->Set_Client_workingDirEdit->setText(settings->value("workingDir", "../data").toString());
settings->endGroup(); settings->endGroup();
ui->MF_RW_keyTypeBox->addItem("A", Mifare::KEY_A); ui->MF_RW_keyTypeBox->addItem("A", Mifare::KEY_A);
@ -996,6 +1008,7 @@ void MainWindow::signalInit()
connect(pm3, &PM3Process::PM3StatedChanged, util, &Util::setRunningState); connect(pm3, &PM3Process::PM3StatedChanged, util, &Util::setRunningState);
connect(this, &MainWindow::killPM3, pm3, &PM3Process::kill); connect(this, &MainWindow::killPM3, pm3, &PM3Process::kill);
connect(this, &MainWindow::setProcEnv, pm3, &PM3Process::setProcEnv); connect(this, &MainWindow::setProcEnv, pm3, &PM3Process::setProcEnv);
connect(this, &MainWindow::setWorkingDir, pm3, &PM3Process::setWorkingDir);
connect(util, &Util::write, pm3, &PM3Process::write); connect(util, &Util::write, pm3, &PM3Process::write);
@ -1160,3 +1173,10 @@ void MainWindow::on_Set_Client_envScriptEdit_editingFinished()
settings->setValue("scriptPath", ui->Set_Client_envScriptEdit->text()); settings->setValue("scriptPath", ui->Set_Client_envScriptEdit->text());
settings->endGroup(); settings->endGroup();
} }
void MainWindow::on_Set_Client_saveWorkingDirButton_clicked()
{
settings->beginGroup("Client_Env");
settings->setValue("workingDir", ui->Set_Client_workingDirEdit->text());
settings->endGroup();
}

@ -173,6 +173,8 @@ private slots:
void on_Set_Client_envScriptEdit_editingFinished(); void on_Set_Client_envScriptEdit_editingFinished();
void on_Set_Client_saveWorkingDirButton_clicked();
private: private:
Ui::MainWindow* ui; Ui::MainWindow* ui;
QButtonGroup* MFCardTypeBtnGroup; QButtonGroup* MFCardTypeBtnGroup;
@ -199,6 +201,7 @@ private:
QTimer* portSearchTimer; QTimer* portSearchTimer;
QStringList portList; QStringList portList;
QStringList clientEnv; QStringList clientEnv;
QDir* clientWorkingDir;
Mifare* mifare; Mifare* mifare;
Util* util; Util* util;
@ -217,5 +220,6 @@ signals:
void killPM3(); void killPM3();
void setSerialListener(const QString& name, bool state); void setSerialListener(const QString& name, bool state);
void setProcEnv(const QStringList *env); void setProcEnv(const QStringList *env);
void setWorkingDir(const QString& dir);
}; };
#endif // MAINWINDOW_H #endif // MAINWINDOW_H

@ -130,7 +130,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">
@ -1538,7 +1538,7 @@
<attribute name="title"> <attribute name="title">
<string>Settings</string> <string>Settings</string>
</attribute> </attribute>
<layout class="QHBoxLayout" name="horizontalLayout_15"> <layout class="QHBoxLayout" name="horizontalLayout_18">
<item> <item>
<layout class="QVBoxLayout" name="verticalLayout_12"> <layout class="QVBoxLayout" name="verticalLayout_12">
<item> <item>
@ -1573,6 +1573,49 @@ then put the path of the script there</string>
</property> </property>
</widget> </widget>
</item> </item>
<item>
<widget class="Line" name="line_4">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="label_19">
<property name="text">
<string>Client working directory:</string>
</property>
</widget>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_15">
<item>
<widget class="QLineEdit" name="Set_Client_workingDirEdit">
<property name="text">
<string>../data</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="Set_Client_saveWorkingDirButton">
<property name="text">
<string>Save</string>
</property>
</widget>
</item>
</layout>
</item>
<item>
<widget class="QLabel" name="label_20">
<property name="text">
<string>Note:
On Windows, the client working directory should not be identical to the path of GUI, otherwise the client will use the wrong .dll file.</string>
</property>
<property name="wordWrap">
<bool>true</bool>
</property>
</widget>
</item>
<item> <item>
<widget class="Line" name="line"> <widget class="Line" name="line">
<property name="orientation"> <property name="orientation">

@ -123,7 +123,7 @@ void MF_trailerDecoderDialog::setTableItem(QTableWidget* widget, int row, int co
widget->item(row, column)->setText(text); widget->item(row, column)->setText(text);
} }
void MF_trailerDecoderDialog::on_boxChanged(int arg1) void MF_trailerDecoderDialog::on_boxChanged()
{ {
quint8 ACBits[4]; quint8 ACBits[4];
ACBits[0] = ui->C0Box->value(); ACBits[0] = ui->C0Box->value();

@ -27,7 +27,7 @@ private slots:
void on_blockSizeChanged(int id, bool st); void on_blockSizeChanged(int id, bool st);
void on_boxChanged(int arg1); void on_boxChanged();
private: private:
Ui::MF_trailerDecoderDialog *ui; Ui::MF_trailerDecoderDialog *ui;
QRegularExpressionValidator* validator; QRegularExpressionValidator* validator;

Loading…
Cancel
Save