EM410x clone support

pull/33/head
wh201906 3 years ago
parent f86cba8d56
commit 1e728c891c

3
.gitignore vendored

@ -1 +1,2 @@
/build* /build*
/data

@ -191,5 +191,15 @@
"cmd": "lf config q <divisor> b <bits per sample> d <decimation> a <averaging> t <trigger threshold> s <samples to skip>", "cmd": "lf config q <divisor> b <bits per sample> d <decimation> a <averaging> t <trigger threshold> s <samples to skip>",
"divisor cmd": "hw setlfdivisor <divisor>" "divisor cmd": "hw setlfdivisor <divisor>"
} }
},
"t55xx":{
"clone em410x":{
"read":"lf search",
"successful read flag":"Valid EM410x ID",
"pattern":"EM TAG ID\\s*:\\s\\K[0-9a-fA-F]{10}",
"clone cmd":"lf em 410xwrite <id> <type>",
"t5555 flag":"0",
"t55x7 flag":"1"
}
} }
} }

@ -199,5 +199,15 @@
"cmd": "lf config --divisor <divisor> --bps <bits per sample> --dec <decimation> --avg <averaging> --trig <trigger threshold> --skip <samples to skip>", "cmd": "lf config --divisor <divisor> --bps <bits per sample> --dec <decimation> --avg <averaging> --trig <trigger threshold> --skip <samples to skip>",
"divisor cmd": "hw setlfdivisor -d <divisor>" "divisor cmd": "hw setlfdivisor -d <divisor>"
} }
},
"t55xx":{
"clone em410x":{
"read":"lf em 410x reader",
"successful read flag":"EM 410x ID",
"pattern":"EM 410x ID\\s*\\K[0-9a-fA-F]{10}",
"clone cmd":"lf em 410x clone --id <id> <type>",
"t5555 flag":"--q5",
"t55x7 flag":""
}
} }
} }

@ -78,7 +78,13 @@ QString Util::execCMDWithOutput(const QString& cmd, ReturnTrigger trigger, bool
} }
} }
isRequiringOutput = false; isRequiringOutput = false;
return (isResultFound || trigger.expectedOutputs.isEmpty() || rawOutput ? *requiredOutput : "");
// For functions without expected outputs in the return trigger, the result is the raw output.
// For functions with expected outputs in the return trigger,
// if rawOutput=true, the result is the raw output,
// otherwise, if the raw output contains one of the expected outputs, the result is the raw output,
// otherwise, the result is empty(as a failed flag).
return (trigger.expectedOutputs.isEmpty() || isResultFound || rawOutput ? *requiredOutput : "");
} }
void Util::delay(unsigned int msec) void Util::delay(unsigned int msec)

@ -536,7 +536,7 @@ It could make the whole sector blocked irreversibly!</source>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.ui" line="914"/> <location filename="../ui/mainwindow.ui" line="914"/>
<location filename="../ui/mainwindow.cpp" line="835"/> <location filename="../ui/mainwindow.cpp" line="838"/>
<source>About UID Card</source> <source>About UID Card</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -738,6 +738,7 @@ or the communication between a tag and a reader.</source>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.ui" line="1883"/> <location filename="../ui/mainwindow.ui" line="1883"/>
<location filename="../ui/mainwindow.cpp" line="44"/>
<source>T55xx</source> <source>T55xx</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -939,7 +940,7 @@ or the communication between a tag and a reader.</source>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.ui" line="2570"/> <location filename="../ui/mainwindow.ui" line="2570"/>
<location filename="../ui/mainwindow.cpp" line="267"/> <location filename="../ui/mainwindow.cpp" line="270"/>
<source>History:</source> <source>History:</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -1054,46 +1055,46 @@ or the communication between a tag and a reader.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.cpp" line="80"/> <location filename="../ui/mainwindow.cpp" line="83"/>
<location filename="../ui/mainwindow.cpp" line="129"/> <location filename="../ui/mainwindow.cpp" line="132"/>
<location filename="../ui/mainwindow.cpp" line="370"/> <location filename="../ui/mainwindow.cpp" line="373"/>
<location filename="../ui/mainwindow.cpp" line="596"/> <location filename="../ui/mainwindow.cpp" line="599"/>
<location filename="../ui/mainwindow.cpp" line="616"/> <location filename="../ui/mainwindow.cpp" line="619"/>
<location filename="../ui/mainwindow.cpp" line="629"/> <location filename="../ui/mainwindow.cpp" line="632"/>
<location filename="../ui/mainwindow.cpp" line="648"/> <location filename="../ui/mainwindow.cpp" line="651"/>
<location filename="../ui/mainwindow.cpp" line="661"/> <location filename="../ui/mainwindow.cpp" line="664"/>
<location filename="../ui/mainwindow.cpp" line="688"/> <location filename="../ui/mainwindow.cpp" line="691"/>
<location filename="../ui/mainwindow.cpp" line="701"/> <location filename="../ui/mainwindow.cpp" line="704"/>
<location filename="../ui/mainwindow.cpp" line="893"/> <location filename="../ui/mainwindow.cpp" line="896"/>
<location filename="../ui/mainwindow.cpp" line="918"/> <location filename="../ui/mainwindow.cpp" line="921"/>
<source>Info</source> <source>Info</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.cpp" line="129"/> <location filename="../ui/mainwindow.cpp" line="132"/>
<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="201"/> <location filename="../ui/mainwindow.cpp" line="204"/>
<source>Connected</source> <source>Connected</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.cpp" line="207"/> <location filename="../ui/mainwindow.cpp" line="210"/>
<location filename="../ui/mainwindow.cpp" line="1003"/> <location filename="../ui/mainwindow.cpp" line="1006"/>
<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="648"/> <location filename="../ui/mainwindow.cpp" line="651"/>
<location filename="../ui/mainwindow.cpp" line="661"/> <location filename="../ui/mainwindow.cpp" line="664"/>
<location filename="../ui/mainwindow.cpp" line="893"/> <location filename="../ui/mainwindow.cpp" line="896"/>
<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="370"/> <location filename="../ui/mainwindow.cpp" line="373"/>
<source>Continue?</source> <source>Continue?</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -1113,194 +1114,194 @@ or the communication between a tag and a reader.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.cpp" line="80"/> <location filename="../ui/mainwindow.cpp" line="83"/>
<source>Failed to load config file</source> <source>Failed to load config file</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.cpp" line="370"/> <location filename="../ui/mainwindow.cpp" line="373"/>
<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="483"/> <location filename="../ui/mainwindow.cpp" line="486"/>
<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="596"/> <location filename="../ui/mainwindow.cpp" line="599"/>
<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="616"/> <location filename="../ui/mainwindow.cpp" line="619"/>
<location filename="../ui/mainwindow.cpp" line="629"/> <location filename="../ui/mainwindow.cpp" line="632"/>
<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="641"/> <location filename="../ui/mainwindow.cpp" line="644"/>
<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="642"/> <location filename="../ui/mainwindow.cpp" line="645"/>
<location filename="../ui/mainwindow.cpp" line="682"/> <location filename="../ui/mainwindow.cpp" line="685"/>
<location filename="../ui/mainwindow.cpp" line="686"/> <location filename="../ui/mainwindow.cpp" line="689"/>
<source>Binary Data Files(*.bin *.dump)</source> <source>Binary Data Files(*.bin *.dump)</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.cpp" line="642"/> <location filename="../ui/mainwindow.cpp" line="645"/>
<location filename="../ui/mainwindow.cpp" line="655"/> <location filename="../ui/mainwindow.cpp" line="658"/>
<location filename="../ui/mainwindow.cpp" line="880"/> <location filename="../ui/mainwindow.cpp" line="883"/>
<source>All Files(*.*)</source> <source>All Files(*.*)</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.cpp" line="654"/> <location filename="../ui/mainwindow.cpp" line="657"/>
<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="681"/> <location filename="../ui/mainwindow.cpp" line="684"/>
<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="688"/> <location filename="../ui/mainwindow.cpp" line="691"/>
<location filename="../ui/mainwindow.cpp" line="701"/> <location filename="../ui/mainwindow.cpp" line="704"/>
<location filename="../ui/mainwindow.cpp" line="918"/> <location filename="../ui/mainwindow.cpp" line="921"/>
<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="694"/> <location filename="../ui/mainwindow.cpp" line="697"/>
<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="655"/> <location filename="../ui/mainwindow.cpp" line="658"/>
<location filename="../ui/mainwindow.cpp" line="695"/> <location filename="../ui/mainwindow.cpp" line="698"/>
<location filename="../ui/mainwindow.cpp" line="699"/> <location filename="../ui/mainwindow.cpp" line="702"/>
<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="642"/> <location filename="../ui/mainwindow.cpp" line="645"/>
<location filename="../ui/mainwindow.cpp" line="682"/> <location filename="../ui/mainwindow.cpp" line="685"/>
<source>Text Data Files(*.txt *.eml)</source> <source>Text Data Files(*.txt *.eml)</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.cpp" line="820"/> <location filename="../ui/mainwindow.cpp" line="823"/>
<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="821"/> <location filename="../ui/mainwindow.cpp" line="824"/>
<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="823"/> <location filename="../ui/mainwindow.cpp" line="826"/>
<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="824"/> <location filename="../ui/mainwindow.cpp" line="827"/>
<source> Gen1:</source> <source> Gen1:</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.cpp" line="824"/> <location filename="../ui/mainwindow.cpp" line="827"/>
<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="825"/> <location filename="../ui/mainwindow.cpp" line="828"/>
<source> Gen2:</source> <source> Gen2:</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.cpp" line="825"/> <location filename="../ui/mainwindow.cpp" line="828"/>
<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="827"/> <location filename="../ui/mainwindow.cpp" line="830"/>
<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="828"/> <location filename="../ui/mainwindow.cpp" line="831"/>
<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="828"/> <location filename="../ui/mainwindow.cpp" line="831"/>
<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="829"/> <location filename="../ui/mainwindow.cpp" line="832"/>
<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="830"/> <location filename="../ui/mainwindow.cpp" line="833"/>
<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="830"/> <location filename="../ui/mainwindow.cpp" line="833"/>
<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="831"/> <location filename="../ui/mainwindow.cpp" line="834"/>
<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="832"/> <location filename="../ui/mainwindow.cpp" line="835"/>
<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="832"/> <location filename="../ui/mainwindow.cpp" line="835"/>
<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="834"/> <location filename="../ui/mainwindow.cpp" line="837"/>
<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="879"/> <location filename="../ui/mainwindow.cpp" line="882"/>
<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="903"/> <location filename="../ui/mainwindow.cpp" line="906"/>
<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="880"/> <location filename="../ui/mainwindow.cpp" line="883"/>
<location filename="../ui/mainwindow.cpp" line="904"/> <location filename="../ui/mainwindow.cpp" line="907"/>
<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="1004"/> <location filename="../ui/mainwindow.cpp" line="1007"/>
<location filename="../ui/mainwindow.cpp" line="1176"/> <location filename="../ui/mainwindow.cpp" line="1179"/>
<source>Idle</source> <source>Idle</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.cpp" line="1006"/> <location filename="../ui/mainwindow.cpp" line="1009"/>
<source>Stop</source> <source>Stop</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -1326,27 +1327,27 @@ or the communication between a tag and a reader.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.cpp" line="1113"/> <location filename="../ui/mainwindow.cpp" line="1116"/>
<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="1115"/> <location filename="../ui/mainwindow.cpp" line="1118"/>
<source>PM3:</source> <source>PM3:</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.cpp" line="1117"/> <location filename="../ui/mainwindow.cpp" line="1120"/>
<source>State:</source> <source>State:</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.cpp" line="1172"/> <location filename="../ui/mainwindow.cpp" line="1175"/>
<source>Running</source> <source>Running</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.cpp" line="1299"/> <location filename="../ui/mainwindow.cpp" line="1302"/>
<source>Actural Freq: </source> <source>Actural Freq: </source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -1354,58 +1355,96 @@ or the communication between a tag and a reader.</source>
<context> <context>
<name>Mifare</name> <name>Mifare</name>
<message> <message>
<location filename="../module/mifare.cpp" line="643"/> <location filename="../module/mifare.cpp" line="642"/>
<source>Success!</source> <source>Success!</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../module/mifare.cpp" line="209"/> <location filename="../module/mifare.cpp" line="208"/>
<location filename="../module/mifare.cpp" line="643"/> <location filename="../module/mifare.cpp" line="642"/>
<location filename="../module/mifare.cpp" line="647"/> <location filename="../module/mifare.cpp" line="646"/>
<location filename="../module/mifare.cpp" line="671"/> <location filename="../module/mifare.cpp" line="670"/>
<location filename="../module/mifare.cpp" line="710"/> <location filename="../module/mifare.cpp" line="709"/>
<location filename="../module/mifare.cpp" line="723"/> <location filename="../module/mifare.cpp" line="722"/>
<location filename="../module/mifare.cpp" line="774"/> <location filename="../module/mifare.cpp" line="773"/>
<source>Info</source> <source>Info</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../module/mifare.cpp" line="209"/> <location filename="../module/mifare.cpp" line="208"/>
<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="468"/> <location filename="../module/mifare.cpp" line="467"/>
<location filename="../module/mifare.cpp" line="647"/> <location filename="../module/mifare.cpp" line="646"/>
<source>Failed!</source> <source>Failed!</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../module/mifare.cpp" line="672"/> <location filename="../module/mifare.cpp" line="671"/>
<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="710"/> <location filename="../module/mifare.cpp" line="709"/>
<source>Successful!</source> <source>Successful!</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../module/mifare.cpp" line="723"/> <location filename="../module/mifare.cpp" line="722"/>
<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="727"/> <location filename="../module/mifare.cpp" line="726"/>
<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="774"/> <location filename="../module/mifare.cpp" line="773"/>
<source>Failed to read card.</source> <source>Failed to read card.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
</context> </context>
<context>
<name>T55xxTab</name>
<message>
<location filename="../ui/t55xxtab.ui" line="17"/>
<source>Clone to T55xx</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ui/t55xxtab.ui" line="25"/>
<source>Target Type:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ui/t55xxtab.ui" line="32"/>
<source>T5555</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ui/t55xxtab.ui" line="39"/>
<source>T55x7</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ui/t55xxtab.ui" line="64"/>
<source>EM410x</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ui/t55xxtab.ui" line="70"/>
<source>Read</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ui/t55xxtab.ui" line="80"/>
<source>Clone</source>
<translation type="unfinished"></translation>
</message>
</context>
</TS> </TS>

Binary file not shown.

@ -500,7 +500,7 @@ It could make the whole sector blocked irreversibly!</source>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.ui" line="914"/> <location filename="../ui/mainwindow.ui" line="914"/>
<location filename="../ui/mainwindow.cpp" line="835"/> <location filename="../ui/mainwindow.cpp" line="838"/>
<source>About UID Card</source> <source>About UID Card</source>
<translation>UID</translation> <translation>UID</translation>
</message> </message>
@ -708,6 +708,7 @@ or the communication between a tag and a reader.</source>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.ui" line="1883"/> <location filename="../ui/mainwindow.ui" line="1883"/>
<location filename="../ui/mainwindow.cpp" line="44"/>
<source>T55xx</source> <source>T55xx</source>
<translation></translation> <translation></translation>
</message> </message>
@ -909,7 +910,7 @@ or the communication between a tag and a reader.</source>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.ui" line="2570"/> <location filename="../ui/mainwindow.ui" line="2570"/>
<location filename="../ui/mainwindow.cpp" line="267"/> <location filename="../ui/mainwindow.cpp" line="270"/>
<source>History:</source> <source>History:</source>
<translation></translation> <translation></translation>
</message> </message>
@ -1064,46 +1065,46 @@ or the communication between a tag and a reader.</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.cpp" line="80"/> <location filename="../ui/mainwindow.cpp" line="83"/>
<location filename="../ui/mainwindow.cpp" line="129"/> <location filename="../ui/mainwindow.cpp" line="132"/>
<location filename="../ui/mainwindow.cpp" line="370"/> <location filename="../ui/mainwindow.cpp" line="373"/>
<location filename="../ui/mainwindow.cpp" line="596"/> <location filename="../ui/mainwindow.cpp" line="599"/>
<location filename="../ui/mainwindow.cpp" line="616"/> <location filename="../ui/mainwindow.cpp" line="619"/>
<location filename="../ui/mainwindow.cpp" line="629"/> <location filename="../ui/mainwindow.cpp" line="632"/>
<location filename="../ui/mainwindow.cpp" line="648"/> <location filename="../ui/mainwindow.cpp" line="651"/>
<location filename="../ui/mainwindow.cpp" line="661"/> <location filename="../ui/mainwindow.cpp" line="664"/>
<location filename="../ui/mainwindow.cpp" line="688"/> <location filename="../ui/mainwindow.cpp" line="691"/>
<location filename="../ui/mainwindow.cpp" line="701"/> <location filename="../ui/mainwindow.cpp" line="704"/>
<location filename="../ui/mainwindow.cpp" line="893"/> <location filename="../ui/mainwindow.cpp" line="896"/>
<location filename="../ui/mainwindow.cpp" line="918"/> <location filename="../ui/mainwindow.cpp" line="921"/>
<source>Info</source> <source>Info</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.cpp" line="129"/> <location filename="../ui/mainwindow.cpp" line="132"/>
<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="201"/> <location filename="../ui/mainwindow.cpp" line="204"/>
<source>Connected</source> <source>Connected</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.cpp" line="207"/> <location filename="../ui/mainwindow.cpp" line="210"/>
<location filename="../ui/mainwindow.cpp" line="1003"/> <location filename="../ui/mainwindow.cpp" line="1006"/>
<source>Not Connected</source> <source>Not Connected</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.cpp" line="648"/> <location filename="../ui/mainwindow.cpp" line="651"/>
<location filename="../ui/mainwindow.cpp" line="661"/> <location filename="../ui/mainwindow.cpp" line="664"/>
<location filename="../ui/mainwindow.cpp" line="893"/> <location filename="../ui/mainwindow.cpp" line="896"/>
<source>Failed to open</source> <source>Failed to open</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.cpp" line="370"/> <location filename="../ui/mainwindow.cpp" line="373"/>
<source>Continue?</source> <source>Continue?</source>
<translation></translation> <translation></translation>
</message> </message>
@ -1123,82 +1124,82 @@ or the communication between a tag and a reader.</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.cpp" line="80"/> <location filename="../ui/mainwindow.cpp" line="83"/>
<source>Failed to load config file</source> <source>Failed to load config file</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.cpp" line="370"/> <location filename="../ui/mainwindow.cpp" line="373"/>
<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="483"/> <location filename="../ui/mainwindow.cpp" line="486"/>
<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="596"/> <location filename="../ui/mainwindow.cpp" line="599"/>
<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="616"/> <location filename="../ui/mainwindow.cpp" line="619"/>
<location filename="../ui/mainwindow.cpp" line="629"/> <location filename="../ui/mainwindow.cpp" line="632"/>
<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="641"/> <location filename="../ui/mainwindow.cpp" line="644"/>
<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="642"/> <location filename="../ui/mainwindow.cpp" line="645"/>
<location filename="../ui/mainwindow.cpp" line="682"/> <location filename="../ui/mainwindow.cpp" line="685"/>
<location filename="../ui/mainwindow.cpp" line="686"/> <location filename="../ui/mainwindow.cpp" line="689"/>
<source>Binary Data Files(*.bin *.dump)</source> <source>Binary Data Files(*.bin *.dump)</source>
<translation>(*.bin *.dump)</translation> <translation>(*.bin *.dump)</translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.cpp" line="642"/> <location filename="../ui/mainwindow.cpp" line="645"/>
<location filename="../ui/mainwindow.cpp" line="655"/> <location filename="../ui/mainwindow.cpp" line="658"/>
<location filename="../ui/mainwindow.cpp" line="880"/> <location filename="../ui/mainwindow.cpp" line="883"/>
<source>All Files(*.*)</source> <source>All Files(*.*)</source>
<translation>(*.*)</translation> <translation>(*.*)</translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.cpp" line="654"/> <location filename="../ui/mainwindow.cpp" line="657"/>
<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="681"/> <location filename="../ui/mainwindow.cpp" line="684"/>
<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="688"/> <location filename="../ui/mainwindow.cpp" line="691"/>
<location filename="../ui/mainwindow.cpp" line="701"/> <location filename="../ui/mainwindow.cpp" line="704"/>
<location filename="../ui/mainwindow.cpp" line="918"/> <location filename="../ui/mainwindow.cpp" line="921"/>
<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="694"/> <location filename="../ui/mainwindow.cpp" line="697"/>
<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="655"/> <location filename="../ui/mainwindow.cpp" line="658"/>
<location filename="../ui/mainwindow.cpp" line="695"/> <location filename="../ui/mainwindow.cpp" line="698"/>
<location filename="../ui/mainwindow.cpp" line="699"/> <location filename="../ui/mainwindow.cpp" line="702"/>
<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="642"/> <location filename="../ui/mainwindow.cpp" line="645"/>
<location filename="../ui/mainwindow.cpp" line="682"/> <location filename="../ui/mainwindow.cpp" line="685"/>
<source>Text Data Files(*.txt *.eml)</source> <source>Text Data Files(*.txt *.eml)</source>
<translation>(*.txt *.eml)</translation> <translation>(*.txt *.eml)</translation>
</message> </message>
@ -1207,114 +1208,114 @@ or the communication between a tag and a reader.</source>
<translation type="vanished">(*.txt *.eml)</translation> <translation type="vanished">(*.txt *.eml)</translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.cpp" line="820"/> <location filename="../ui/mainwindow.cpp" line="823"/>
<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="821"/> <location filename="../ui/mainwindow.cpp" line="824"/>
<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="823"/> <location filename="../ui/mainwindow.cpp" line="826"/>
<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="824"/> <location filename="../ui/mainwindow.cpp" line="827"/>
<source> Gen1:</source> <source> Gen1:</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.cpp" line="824"/> <location filename="../ui/mainwindow.cpp" line="827"/>
<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="825"/> <location filename="../ui/mainwindow.cpp" line="828"/>
<source> Gen2:</source> <source> Gen2:</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.cpp" line="825"/> <location filename="../ui/mainwindow.cpp" line="828"/>
<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="827"/> <location filename="../ui/mainwindow.cpp" line="830"/>
<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="828"/> <location filename="../ui/mainwindow.cpp" line="831"/>
<source> CUID Card:</source> <source> CUID Card:</source>
<translation> CUID</translation> <translation> CUID</translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.cpp" line="828"/> <location filename="../ui/mainwindow.cpp" line="831"/>
<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="829"/> <location filename="../ui/mainwindow.cpp" line="832"/>
<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="830"/> <location filename="../ui/mainwindow.cpp" line="833"/>
<source> FUID Card:</source> <source> FUID Card:</source>
<translation> FUID</translation> <translation> FUID</translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.cpp" line="830"/> <location filename="../ui/mainwindow.cpp" line="833"/>
<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="831"/> <location filename="../ui/mainwindow.cpp" line="834"/>
<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="832"/> <location filename="../ui/mainwindow.cpp" line="835"/>
<source> UFUID Card:</source> <source> UFUID Card:</source>
<translation> UFUID</translation> <translation> UFUID</translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.cpp" line="832"/> <location filename="../ui/mainwindow.cpp" line="835"/>
<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="834"/> <location filename="../ui/mainwindow.cpp" line="837"/>
<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="879"/> <location filename="../ui/mainwindow.cpp" line="882"/>
<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="903"/> <location filename="../ui/mainwindow.cpp" line="906"/>
<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="880"/> <location filename="../ui/mainwindow.cpp" line="883"/>
<location filename="../ui/mainwindow.cpp" line="904"/> <location filename="../ui/mainwindow.cpp" line="907"/>
<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="1004"/> <location filename="../ui/mainwindow.cpp" line="1007"/>
<location filename="../ui/mainwindow.cpp" line="1176"/> <location filename="../ui/mainwindow.cpp" line="1179"/>
<source>Idle</source> <source>Idle</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.cpp" line="1006"/> <location filename="../ui/mainwindow.cpp" line="1009"/>
<source>Stop</source> <source>Stop</source>
<translation></translation> <translation></translation>
</message> </message>
@ -1340,27 +1341,27 @@ or the communication between a tag and a reader.</source>
<translation>B</translation> <translation>B</translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.cpp" line="1113"/> <location filename="../ui/mainwindow.cpp" line="1116"/>
<source>HW Version:</source> <source>HW Version:</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.cpp" line="1115"/> <location filename="../ui/mainwindow.cpp" line="1118"/>
<source>PM3:</source> <source>PM3:</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.cpp" line="1117"/> <location filename="../ui/mainwindow.cpp" line="1120"/>
<source>State:</source> <source>State:</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.cpp" line="1172"/> <location filename="../ui/mainwindow.cpp" line="1175"/>
<source>Running</source> <source>Running</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../ui/mainwindow.cpp" line="1299"/> <location filename="../ui/mainwindow.cpp" line="1302"/>
<source>Actural Freq: </source> <source>Actural Freq: </source>
<translation> </translation> <translation> </translation>
</message> </message>
@ -1368,34 +1369,34 @@ or the communication between a tag and a reader.</source>
<context> <context>
<name>Mifare</name> <name>Mifare</name>
<message> <message>
<location filename="../module/mifare.cpp" line="643"/> <location filename="../module/mifare.cpp" line="642"/>
<source>Success!</source> <source>Success!</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../module/mifare.cpp" line="209"/> <location filename="../module/mifare.cpp" line="208"/>
<location filename="../module/mifare.cpp" line="643"/> <location filename="../module/mifare.cpp" line="642"/>
<location filename="../module/mifare.cpp" line="647"/> <location filename="../module/mifare.cpp" line="646"/>
<location filename="../module/mifare.cpp" line="671"/> <location filename="../module/mifare.cpp" line="670"/>
<location filename="../module/mifare.cpp" line="710"/> <location filename="../module/mifare.cpp" line="709"/>
<location filename="../module/mifare.cpp" line="723"/> <location filename="../module/mifare.cpp" line="722"/>
<location filename="../module/mifare.cpp" line="774"/> <location filename="../module/mifare.cpp" line="773"/>
<source>Info</source> <source>Info</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../module/mifare.cpp" line="209"/> <location filename="../module/mifare.cpp" line="208"/>
<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="468"/> <location filename="../module/mifare.cpp" line="467"/>
<location filename="../module/mifare.cpp" line="647"/> <location filename="../module/mifare.cpp" line="646"/>
<source>Failed!</source> <source>Failed!</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../module/mifare.cpp" line="672"/> <location filename="../module/mifare.cpp" line="671"/>
<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>
@ -1404,24 +1405,62 @@ Continue to write?</source>
</translation> </translation>
</message> </message>
<message> <message>
<location filename="../module/mifare.cpp" line="710"/> <location filename="../module/mifare.cpp" line="709"/>
<source>Successful!</source> <source>Successful!</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../module/mifare.cpp" line="723"/> <location filename="../module/mifare.cpp" line="722"/>
<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="727"/> <location filename="../module/mifare.cpp" line="726"/>
<source>Select them?</source> <source>Select them?</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../module/mifare.cpp" line="774"/> <location filename="../module/mifare.cpp" line="773"/>
<source>Failed to read card.</source> <source>Failed to read card.</source>
<translation></translation> <translation></translation>
</message> </message>
</context> </context>
<context>
<name>T55xxTab</name>
<message>
<location filename="../ui/t55xxtab.ui" line="17"/>
<source>Clone to T55xx</source>
<translation>T55xx</translation>
</message>
<message>
<location filename="../ui/t55xxtab.ui" line="25"/>
<source>Target Type:</source>
<translation></translation>
</message>
<message>
<location filename="../ui/t55xxtab.ui" line="32"/>
<source>T5555</source>
<translation></translation>
</message>
<message>
<location filename="../ui/t55xxtab.ui" line="39"/>
<source>T55x7</source>
<translation></translation>
</message>
<message>
<location filename="../ui/t55xxtab.ui" line="64"/>
<source>EM410x</source>
<translation></translation>
</message>
<message>
<location filename="../ui/t55xxtab.ui" line="70"/>
<source>Read</source>
<translation></translation>
</message>
<message>
<location filename="../ui/t55xxtab.ui" line="80"/>
<source>Clone</source>
<translation></translation>
</message>
</context>
</TS> </TS>

@ -154,5 +154,4 @@ void LF::syncWithUI()
void LF::setConfigMap(const QVariantMap& configMap) void LF::setConfigMap(const QVariantMap& configMap)
{ {
this->configMap = configMap; this->configMap = configMap;
qDebug() << configMap;
} }

@ -91,7 +91,6 @@ Mifare::Mifare(Ui::MainWindow *ui, Util *addr, QWidget *parent): QObject(parent)
void Mifare::setConfigMap(const QVariantMap& configMap) void Mifare::setConfigMap(const QVariantMap& configMap)
{ {
this->configMap = configMap; this->configMap = configMap;
qDebug() << configMap;
} }
QMap<QString, QString> Mifare::info(bool isRequiringOutput) QMap<QString, QString> Mifare::info(bool isRequiringOutput)

@ -1,14 +1,68 @@
#include "t55xxtab.h" #include "t55xxtab.h"
#include "ui_t55xxtab.h" #include "ui_t55xxtab.h"
T55xxTab::T55xxTab(QWidget *parent) : T55xxTab::T55xxTab(Util *addr, QWidget *parent) :
QWidget(parent), QWidget(parent),
ui(new Ui::T55xxTab) ui(new Ui::T55xxTab)
{ {
ui->setupUi(this); ui->setupUi(this);
util = addr;
} }
T55xxTab::~T55xxTab() T55xxTab::~T55xxTab()
{ {
delete ui; delete ui;
} }
void T55xxTab::setConfigMap(const QVariantMap &configMap)
{
this->configMap = configMap;
}
void T55xxTab::setGUIState(bool st)
{
ui->cloneGroupBox->setEnabled(st);
emit setParentGUIState(st);
}
void T55xxTab::on_Clone_EM410xReadButton_clicked()
{
setGUIState(false);
QVariantMap config = configMap["clone em410x"].toMap();
QString result;
QRegularExpressionMatch reMatch;
result = util->execCMDWithOutput(
config["read"].toString(),
Util::ReturnTrigger(6000, {config["successful read flag"].toString()}));
if(result.isEmpty())
{
setGUIState(true);
return;
}
reMatch = QRegularExpression(config["pattern"].toString()).match(result);
ui->Clone_EM410xIDEdit->setText(reMatch.captured());
setGUIState(true);
}
void T55xxTab::on_Clone_EM410xCloneButton_clicked()
{
if(ui->Clone_EM410xIDEdit->text().isEmpty())
return;
setGUIState(false);
QVariantMap config = configMap["clone em410x"].toMap();
QString cmd = config["clone cmd"].toString();
cmd.replace("<id>", ui->Clone_EM410xIDEdit->text());
if(ui->Clone_T5555Button->isChecked())
cmd.replace("<type>", config["t5555 flag"].toString());
else
cmd.replace("<type>", config["t55x7 flag"].toString());
util->execCMD(cmd);
Util::gotoRawTab();
setGUIState(true);
}

@ -1,9 +1,11 @@
#ifndef T55XXTAB_H #ifndef T55XXTAB_H
#define T55XXTAB_H #define T55XXTAB_H
#include "common/util.h"
#include <QWidget> #include <QWidget>
namespace Ui { namespace Ui
{
class T55xxTab; class T55xxTab;
} }
@ -12,11 +14,23 @@ class T55xxTab : public QWidget
Q_OBJECT Q_OBJECT
public: public:
explicit T55xxTab(QWidget *parent = nullptr); explicit T55xxTab(Util *addr, QWidget *parent = nullptr);
~T55xxTab(); ~T55xxTab();
void setConfigMap(const QVariantMap& configMap);
private slots:
void on_Clone_EM410xReadButton_clicked();
void on_Clone_EM410xCloneButton_clicked();
private: private:
Ui::T55xxTab *ui; Ui::T55xxTab *ui;
Util* util;
QVariantMap configMap;
void setGUIState(bool st);
signals:
void setParentGUIState(bool st);
}; };
#endif // T55XXTAB_H #endif // T55XXTAB_H

@ -39,13 +39,16 @@ MainWindow::MainWindow(QWidget *parent):
Util::setUI(ui); Util::setUI(ui);
mifare = new Mifare(ui, util, this); mifare = new Mifare(ui, util, this);
lf = new LF(ui, util, this); lf = new LF(ui, util, this);
t55xxTab = new T55xxTab(util);
connect(t55xxTab, &T55xxTab::setParentGUIState, this, &MainWindow::setState);
ui->funcTab->insertTab(2, t55xxTab, tr("T55xx"));
keyEventFilter = new MyEventFilter(QEvent::KeyPress); keyEventFilter = new MyEventFilter(QEvent::KeyPress);
resizeEventFilter = new MyEventFilter(QEvent::Resize); resizeEventFilter = new MyEventFilter(QEvent::Resize);
// hide unused tabs // hide unused tabs
// ui->funcTab->removeTab(1); // ui->funcTab->removeTab(1);
ui->funcTab->removeTab(2); ui->funcTab->removeTab(3);
portSearchTimer = new QTimer(this); portSearchTimer = new QTimer(this);
portSearchTimer->setInterval(2000); portSearchTimer->setInterval(2000);
@ -85,7 +88,7 @@ void MainWindow::loadConfig()
QJsonDocument configJson(QJsonDocument::fromJson(configData)); QJsonDocument configJson(QJsonDocument::fromJson(configData));
mifare->setConfigMap(configJson.object()["mifare classic"].toObject().toVariantMap()); mifare->setConfigMap(configJson.object()["mifare classic"].toObject().toVariantMap());
lf->setConfigMap(configJson.object()["lf"].toObject().toVariantMap()); lf->setConfigMap(configJson.object()["lf"].toObject().toVariantMap());
t55xxTab->setConfigMap(configJson.object()["t55xx"].toObject().toVariantMap());
} }
void MainWindow::initUI() // will be called by main.app void MainWindow::initUI() // will be called by main.app
@ -636,7 +639,7 @@ void MainWindow::on_MF_File_loadButton_clicked()
{ {
QString title = ""; QString title = "";
QString filename = ""; QString filename = "";
if(ui->MF_File_dataBox->isChecked()) if(ui->MF_File_dataButton->isChecked())
{ {
title = tr("Plz select the data file:"); title = tr("Plz select the data file:");
filename = QFileDialog::getOpenFileName(this, title, "./", tr("Binary Data Files(*.bin *.dump)") + ";;" + tr("Text Data Files(*.txt *.eml)") + ";;" + tr("All Files(*.*)")); filename = QFileDialog::getOpenFileName(this, title, "./", tr("Binary Data Files(*.bin *.dump)") + ";;" + tr("Text Data Files(*.txt *.eml)") + ";;" + tr("All Files(*.*)"));
@ -649,7 +652,7 @@ void MainWindow::on_MF_File_loadButton_clicked()
} }
} }
} }
else if(ui->MF_File_keyBox->isChecked()) else if(ui->MF_File_keyButton->isChecked())
{ {
title = tr("Plz select the key file:"); title = tr("Plz select the key file:");
filename = QFileDialog::getOpenFileName(this, title, "./", tr("Binary Key Files(*.bin *.dump)") + ";;" + tr("All Files(*.*)")); filename = QFileDialog::getOpenFileName(this, title, "./", tr("Binary Key Files(*.bin *.dump)") + ";;" + tr("All Files(*.*)"));
@ -676,7 +679,7 @@ void MainWindow::on_MF_File_saveButton_clicked()
defaultName += "_"; defaultName += "_";
defaultName += QDateTime::currentDateTime().toString("yyyy-MM-dd-hh-mm-ss"); defaultName += QDateTime::currentDateTime().toString("yyyy-MM-dd-hh-mm-ss");
if(ui->MF_File_dataBox->isChecked()) if(ui->MF_File_dataButton->isChecked())
{ {
title = tr("Plz select the location to save data file:"); title = tr("Plz select the location to save data file:");
filename = QFileDialog::getSaveFileName(this, title, "./data_" + defaultName, tr("Binary Data Files(*.bin *.dump)") + ";;" + tr("Text Data Files(*.txt *.eml)"), &selectedType); filename = QFileDialog::getSaveFileName(this, title, "./data_" + defaultName, tr("Binary Data Files(*.bin *.dump)") + ";;" + tr("Text Data Files(*.txt *.eml)"), &selectedType);
@ -689,7 +692,7 @@ void MainWindow::on_MF_File_saveButton_clicked()
} }
} }
} }
else if(ui->MF_File_keyBox->isChecked()) else if(ui->MF_File_keyButton->isChecked())
{ {
title = tr("Plz select the location to save key file:"); title = tr("Plz select the location to save key file:");
filename = QFileDialog::getSaveFileName(this, title, "./key_" + defaultName, tr("Binary Key Files(*.bin *.dump)"), &selectedType); filename = QFileDialog::getSaveFileName(this, title, "./key_" + defaultName, tr("Binary Key Files(*.bin *.dump)"), &selectedType);
@ -707,12 +710,12 @@ void MainWindow::on_MF_File_saveButton_clicked()
void MainWindow::on_MF_File_clearButton_clicked() void MainWindow::on_MF_File_clearButton_clicked()
{ {
if(ui->MF_File_keyBox->isChecked()) if(ui->MF_File_keyButton->isChecked())
{ {
mifare->data_clearKey(); mifare->data_clearKey();
mifare->data_syncWithKeyWidget(); mifare->data_syncWithKeyWidget();
} }
else if(ui->MF_File_dataBox->isChecked()) else if(ui->MF_File_keyButton->isChecked())
{ {
mifare->data_clearData(); mifare->data_clearData();
mifare->data_syncWithDataWidget(); mifare->data_syncWithDataWidget();

@ -31,6 +31,7 @@
#include "common/pm3process.h" #include "common/pm3process.h"
#include "module/mifare.h" #include "module/mifare.h"
#include "module/lf.h" #include "module/lf.h"
#include "module/t55xxtab.h"
#include "common/util.h" #include "common/util.h"
#include "ui/mf_trailerdecoderdialog.h" #include "ui/mf_trailerdecoderdialog.h"
@ -205,6 +206,7 @@ private slots:
void on_Set_Client_configPathEdit_editingFinished(); void on_Set_Client_configPathEdit_editingFinished();
void setState(bool st);
private: private:
Ui::MainWindow* ui; Ui::MainWindow* ui;
QButtonGroup* MFCardTypeBtnGroup; QButtonGroup* MFCardTypeBtnGroup;
@ -235,6 +237,7 @@ private:
QStringList clientEnv; QStringList clientEnv;
QDir* clientWorkingDir; QDir* clientWorkingDir;
T55xxTab* t55xxTab;
Mifare* mifare; Mifare* mifare;
LF* lf; LF* lf;
Util* util; Util* util;
@ -247,7 +250,6 @@ private:
void signalInit(); void signalInit();
void MF_widgetReset(); void MF_widgetReset();
void setTableItem(QTableWidget *widget, int row, int column, const QString& text); void setTableItem(QTableWidget *widget, int row, int column, const QString& text);
void setState(bool st);
void saveClientPath(const QString& path); void saveClientPath(const QString& path);
void onLFfreqConfChanged(int value, bool isCustomized); void onLFfreqConfChanged(int value, bool isCustomized);
void dockInit(); void dockInit();

@ -136,7 +136,7 @@
</sizepolicy> </sizepolicy>
</property> </property>
<property name="currentIndex"> <property name="currentIndex">
<number>2</number> <number>0</number>
</property> </property>
<widget class="QWidget" name="mifareTab"> <widget class="QWidget" name="mifareTab">
<attribute name="title"> <attribute name="title">
@ -524,7 +524,7 @@
</widget> </widget>
</item> </item>
<item> <item>
<widget class="QRadioButton" name="MF_File_dataBox"> <widget class="QRadioButton" name="MF_File_dataButton">
<property name="text"> <property name="text">
<string>Data</string> <string>Data</string>
</property> </property>
@ -534,7 +534,7 @@
</widget> </widget>
</item> </item>
<item> <item>
<widget class="QRadioButton" name="MF_File_keyBox"> <widget class="QRadioButton" name="MF_File_keyButton">
<property name="text"> <property name="text">
<string>Key</string> <string>Key</string>
</property> </property>

@ -1,7 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0"> <ui version="4.0">
<author/>
<comment/>
<exportmacro/>
<class>T55xxTab</class> <class>T55xxTab</class>
<widget class="QWidget" name="T55xxTab"> <widget class="QWidget" name="T55xxTab">
<property name="geometry"> <property name="geometry">
@ -12,10 +10,98 @@
<height>300</height> <height>300</height>
</rect> </rect>
</property> </property>
<property name="windowTitle"> <layout class="QVBoxLayout">
<string>Form</string> <item>
</property> <widget class="QGroupBox" name="cloneGroupBox">
<property name="title">
<string>Clone to T55xx</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<layout class="QHBoxLayout" name="horizontalLayout_3">
<item>
<widget class="QLabel" name="label">
<property name="text">
<string>Target Type:</string>
</property>
</widget>
</item>
<item>
<widget class="QRadioButton" name="Clone_T5555Button">
<property name="text">
<string>T5555</string>
</property>
</widget>
</item>
<item>
<widget class="QRadioButton" name="Clone_T55x7Button">
<property name="text">
<string>T55x7</string>
</property>
<property name="checked">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer">
<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>
<item>
<widget class="QGroupBox" name="Clone_EM410xGroupBox">
<property name="title">
<string>EM410x</string>
</property>
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QPushButton" name="Clone_EM410xReadButton">
<property name="text">
<string>Read</string>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="Clone_EM410xIDEdit"/>
</item>
<item>
<widget class="QPushButton" name="Clone_EM410xCloneButton">
<property name="text">
<string>Clone</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget> </widget>
<pixmapfunction/> <resources/>
<connections/> <connections/>
</ui> </ui>

Loading…
Cancel
Save