EM410x clone support

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

1
.gitignore vendored

@ -1 +1,2 @@
/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>",
"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>",
"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;
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)

@ -536,7 +536,7 @@ It could make the whole sector blocked irreversibly!</source>
</message>
<message>
<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>
<translation type="unfinished"></translation>
</message>
@ -738,6 +738,7 @@ or the communication between a tag and a reader.</source>
</message>
<message>
<location filename="../ui/mainwindow.ui" line="1883"/>
<location filename="../ui/mainwindow.cpp" line="44"/>
<source>T55xx</source>
<translation type="unfinished"></translation>
</message>
@ -939,7 +940,7 @@ or the communication between a tag and a reader.</source>
</message>
<message>
<location filename="../ui/mainwindow.ui" line="2570"/>
<location filename="../ui/mainwindow.cpp" line="267"/>
<location filename="../ui/mainwindow.cpp" line="270"/>
<source>History:</source>
<translation type="unfinished"></translation>
</message>
@ -1054,46 +1055,46 @@ or the communication between a tag and a reader.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ui/mainwindow.cpp" line="80"/>
<location filename="../ui/mainwindow.cpp" line="129"/>
<location filename="../ui/mainwindow.cpp" line="370"/>
<location filename="../ui/mainwindow.cpp" line="596"/>
<location filename="../ui/mainwindow.cpp" line="616"/>
<location filename="../ui/mainwindow.cpp" line="629"/>
<location filename="../ui/mainwindow.cpp" line="648"/>
<location filename="../ui/mainwindow.cpp" line="661"/>
<location filename="../ui/mainwindow.cpp" line="688"/>
<location filename="../ui/mainwindow.cpp" line="701"/>
<location filename="../ui/mainwindow.cpp" line="893"/>
<location filename="../ui/mainwindow.cpp" line="918"/>
<location filename="../ui/mainwindow.cpp" line="83"/>
<location filename="../ui/mainwindow.cpp" line="132"/>
<location filename="../ui/mainwindow.cpp" line="373"/>
<location filename="../ui/mainwindow.cpp" line="599"/>
<location filename="../ui/mainwindow.cpp" line="619"/>
<location filename="../ui/mainwindow.cpp" line="632"/>
<location filename="../ui/mainwindow.cpp" line="651"/>
<location filename="../ui/mainwindow.cpp" line="664"/>
<location filename="../ui/mainwindow.cpp" line="691"/>
<location filename="../ui/mainwindow.cpp" line="704"/>
<location filename="../ui/mainwindow.cpp" line="896"/>
<location filename="../ui/mainwindow.cpp" line="921"/>
<source>Info</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ui/mainwindow.cpp" line="129"/>
<location filename="../ui/mainwindow.cpp" line="132"/>
<source>Plz choose a port first</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ui/mainwindow.cpp" line="201"/>
<location filename="../ui/mainwindow.cpp" line="204"/>
<source>Connected</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ui/mainwindow.cpp" line="207"/>
<location filename="../ui/mainwindow.cpp" line="1003"/>
<location filename="../ui/mainwindow.cpp" line="210"/>
<location filename="../ui/mainwindow.cpp" line="1006"/>
<source>Not Connected</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ui/mainwindow.cpp" line="648"/>
<location filename="../ui/mainwindow.cpp" line="661"/>
<location filename="../ui/mainwindow.cpp" line="893"/>
<location filename="../ui/mainwindow.cpp" line="651"/>
<location filename="../ui/mainwindow.cpp" line="664"/>
<location filename="../ui/mainwindow.cpp" line="896"/>
<source>Failed to open</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ui/mainwindow.cpp" line="370"/>
<location filename="../ui/mainwindow.cpp" line="373"/>
<source>Continue?</source>
<translation type="unfinished"></translation>
</message>
@ -1113,194 +1114,194 @@ or the communication between a tag and a reader.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ui/mainwindow.cpp" line="80"/>
<location filename="../ui/mainwindow.cpp" line="83"/>
<source>Failed to load config file</source>
<translation type="unfinished"></translation>
</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>
<translation type="unfinished"></translation>
</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>
<translation type="unfinished"></translation>
</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>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ui/mainwindow.cpp" line="616"/>
<location filename="../ui/mainwindow.cpp" line="629"/>
<location filename="../ui/mainwindow.cpp" line="619"/>
<location filename="../ui/mainwindow.cpp" line="632"/>
<source>Key must consists of 12 Hex symbols(Whitespace is allowed)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ui/mainwindow.cpp" line="641"/>
<location filename="../ui/mainwindow.cpp" line="644"/>
<source>Plz select the data file:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ui/mainwindow.cpp" line="642"/>
<location filename="../ui/mainwindow.cpp" line="682"/>
<location filename="../ui/mainwindow.cpp" line="686"/>
<location filename="../ui/mainwindow.cpp" line="645"/>
<location filename="../ui/mainwindow.cpp" line="685"/>
<location filename="../ui/mainwindow.cpp" line="689"/>
<source>Binary Data Files(*.bin *.dump)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ui/mainwindow.cpp" line="642"/>
<location filename="../ui/mainwindow.cpp" line="655"/>
<location filename="../ui/mainwindow.cpp" line="880"/>
<location filename="../ui/mainwindow.cpp" line="645"/>
<location filename="../ui/mainwindow.cpp" line="658"/>
<location filename="../ui/mainwindow.cpp" line="883"/>
<source>All Files(*.*)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ui/mainwindow.cpp" line="654"/>
<location filename="../ui/mainwindow.cpp" line="657"/>
<source>Plz select the key file:</source>
<translation type="unfinished"></translation>
</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>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ui/mainwindow.cpp" line="688"/>
<location filename="../ui/mainwindow.cpp" line="701"/>
<location filename="../ui/mainwindow.cpp" line="918"/>
<location filename="../ui/mainwindow.cpp" line="691"/>
<location filename="../ui/mainwindow.cpp" line="704"/>
<location filename="../ui/mainwindow.cpp" line="921"/>
<source>Failed to save to</source>
<translation type="unfinished"></translation>
</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>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ui/mainwindow.cpp" line="655"/>
<location filename="../ui/mainwindow.cpp" line="695"/>
<location filename="../ui/mainwindow.cpp" line="699"/>
<location filename="../ui/mainwindow.cpp" line="658"/>
<location filename="../ui/mainwindow.cpp" line="698"/>
<location filename="../ui/mainwindow.cpp" line="702"/>
<source>Binary Key Files(*.bin *.dump)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ui/mainwindow.cpp" line="642"/>
<location filename="../ui/mainwindow.cpp" line="682"/>
<location filename="../ui/mainwindow.cpp" line="645"/>
<location filename="../ui/mainwindow.cpp" line="685"/>
<source>Text Data Files(*.txt *.eml)</source>
<translation type="unfinished"></translation>
</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>
<translation type="unfinished"></translation>
</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>
<translation type="unfinished"></translation>
</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>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ui/mainwindow.cpp" line="824"/>
<location filename="../ui/mainwindow.cpp" line="827"/>
<source> Gen1:</source>
<translation type="unfinished"></translation>
</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>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ui/mainwindow.cpp" line="825"/>
<location filename="../ui/mainwindow.cpp" line="828"/>
<source> Gen2:</source>
<translation type="unfinished"></translation>
</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>
<translation type="unfinished"></translation>
</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>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ui/mainwindow.cpp" line="828"/>
<location filename="../ui/mainwindow.cpp" line="831"/>
<source> CUID Card:</source>
<translation type="unfinished"></translation>
</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>
<translation type="unfinished"></translation>
</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>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ui/mainwindow.cpp" line="830"/>
<location filename="../ui/mainwindow.cpp" line="833"/>
<source> FUID Card:</source>
<translation type="unfinished"></translation>
</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>
<translation type="unfinished"></translation>
</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>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ui/mainwindow.cpp" line="832"/>
<location filename="../ui/mainwindow.cpp" line="835"/>
<source> UFUID Card:</source>
<translation type="unfinished"></translation>
</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>
<translation type="unfinished"></translation>
</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>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ui/mainwindow.cpp" line="879"/>
<location filename="../ui/mainwindow.cpp" line="882"/>
<source>Plz select the trace file:</source>
<translation type="unfinished"></translation>
</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>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ui/mainwindow.cpp" line="880"/>
<location filename="../ui/mainwindow.cpp" line="904"/>
<location filename="../ui/mainwindow.cpp" line="883"/>
<location filename="../ui/mainwindow.cpp" line="907"/>
<source>Trace Files(*.trc)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ui/mainwindow.cpp" line="1004"/>
<location filename="../ui/mainwindow.cpp" line="1176"/>
<location filename="../ui/mainwindow.cpp" line="1007"/>
<location filename="../ui/mainwindow.cpp" line="1179"/>
<source>Idle</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ui/mainwindow.cpp" line="1006"/>
<location filename="../ui/mainwindow.cpp" line="1009"/>
<source>Stop</source>
<translation type="unfinished"></translation>
</message>
@ -1326,27 +1327,27 @@ or the communication between a tag and a reader.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ui/mainwindow.cpp" line="1113"/>
<location filename="../ui/mainwindow.cpp" line="1116"/>
<source>HW Version:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ui/mainwindow.cpp" line="1115"/>
<location filename="../ui/mainwindow.cpp" line="1118"/>
<source>PM3:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ui/mainwindow.cpp" line="1117"/>
<location filename="../ui/mainwindow.cpp" line="1120"/>
<source>State:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ui/mainwindow.cpp" line="1172"/>
<location filename="../ui/mainwindow.cpp" line="1175"/>
<source>Running</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ui/mainwindow.cpp" line="1299"/>
<location filename="../ui/mainwindow.cpp" line="1302"/>
<source>Actural Freq: </source>
<translation type="unfinished"></translation>
</message>
@ -1354,58 +1355,96 @@ or the communication between a tag and a reader.</source>
<context>
<name>Mifare</name>
<message>
<location filename="../module/mifare.cpp" line="643"/>
<location filename="../module/mifare.cpp" line="642"/>
<source>Success!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../module/mifare.cpp" line="209"/>
<location filename="../module/mifare.cpp" line="643"/>
<location filename="../module/mifare.cpp" line="647"/>
<location filename="../module/mifare.cpp" line="671"/>
<location filename="../module/mifare.cpp" line="710"/>
<location filename="../module/mifare.cpp" line="723"/>
<location filename="../module/mifare.cpp" line="774"/>
<location filename="../module/mifare.cpp" line="208"/>
<location filename="../module/mifare.cpp" line="642"/>
<location filename="../module/mifare.cpp" line="646"/>
<location filename="../module/mifare.cpp" line="670"/>
<location filename="../module/mifare.cpp" line="709"/>
<location filename="../module/mifare.cpp" line="722"/>
<location filename="../module/mifare.cpp" line="773"/>
<source>Info</source>
<translation type="unfinished"></translation>
</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>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../module/mifare.cpp" line="468"/>
<location filename="../module/mifare.cpp" line="647"/>
<location filename="../module/mifare.cpp" line="467"/>
<location filename="../module/mifare.cpp" line="646"/>
<source>Failed!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../module/mifare.cpp" line="672"/>
<location filename="../module/mifare.cpp" line="671"/>
<source>The Access Bits is invalid!
It could make the whole sector blocked irreversibly!
Continue to write?</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../module/mifare.cpp" line="710"/>
<location filename="../module/mifare.cpp" line="709"/>
<source>Successful!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../module/mifare.cpp" line="723"/>
<location filename="../module/mifare.cpp" line="722"/>
<source>Failed to write to these blocks:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../module/mifare.cpp" line="727"/>
<location filename="../module/mifare.cpp" line="726"/>
<source>Select them?</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../module/mifare.cpp" line="774"/>
<location filename="../module/mifare.cpp" line="773"/>
<source>Failed to read card.</source>
<translation type="unfinished"></translation>
</message>
</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>

Binary file not shown.

@ -500,7 +500,7 @@ It could make the whole sector blocked irreversibly!</source>
</message>
<message>
<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>
<translation>UID</translation>
</message>
@ -708,6 +708,7 @@ or the communication between a tag and a reader.</source>
</message>
<message>
<location filename="../ui/mainwindow.ui" line="1883"/>
<location filename="../ui/mainwindow.cpp" line="44"/>
<source>T55xx</source>
<translation></translation>
</message>
@ -909,7 +910,7 @@ or the communication between a tag and a reader.</source>
</message>
<message>
<location filename="../ui/mainwindow.ui" line="2570"/>
<location filename="../ui/mainwindow.cpp" line="267"/>
<location filename="../ui/mainwindow.cpp" line="270"/>
<source>History:</source>
<translation></translation>
</message>
@ -1064,46 +1065,46 @@ or the communication between a tag and a reader.</source>
<translation></translation>
</message>
<message>
<location filename="../ui/mainwindow.cpp" line="80"/>
<location filename="../ui/mainwindow.cpp" line="129"/>
<location filename="../ui/mainwindow.cpp" line="370"/>
<location filename="../ui/mainwindow.cpp" line="596"/>
<location filename="../ui/mainwindow.cpp" line="616"/>
<location filename="../ui/mainwindow.cpp" line="629"/>
<location filename="../ui/mainwindow.cpp" line="648"/>
<location filename="../ui/mainwindow.cpp" line="661"/>
<location filename="../ui/mainwindow.cpp" line="688"/>
<location filename="../ui/mainwindow.cpp" line="701"/>
<location filename="../ui/mainwindow.cpp" line="893"/>
<location filename="../ui/mainwindow.cpp" line="918"/>
<location filename="../ui/mainwindow.cpp" line="83"/>
<location filename="../ui/mainwindow.cpp" line="132"/>
<location filename="../ui/mainwindow.cpp" line="373"/>
<location filename="../ui/mainwindow.cpp" line="599"/>
<location filename="../ui/mainwindow.cpp" line="619"/>
<location filename="../ui/mainwindow.cpp" line="632"/>
<location filename="../ui/mainwindow.cpp" line="651"/>
<location filename="../ui/mainwindow.cpp" line="664"/>
<location filename="../ui/mainwindow.cpp" line="691"/>
<location filename="../ui/mainwindow.cpp" line="704"/>
<location filename="../ui/mainwindow.cpp" line="896"/>
<location filename="../ui/mainwindow.cpp" line="921"/>
<source>Info</source>
<translation></translation>
</message>
<message>
<location filename="../ui/mainwindow.cpp" line="129"/>
<location filename="../ui/mainwindow.cpp" line="132"/>
<source>Plz choose a port first</source>
<translation></translation>
</message>
<message>
<location filename="../ui/mainwindow.cpp" line="201"/>
<location filename="../ui/mainwindow.cpp" line="204"/>
<source>Connected</source>
<translation></translation>
</message>
<message>
<location filename="../ui/mainwindow.cpp" line="207"/>
<location filename="../ui/mainwindow.cpp" line="1003"/>
<location filename="../ui/mainwindow.cpp" line="210"/>
<location filename="../ui/mainwindow.cpp" line="1006"/>
<source>Not Connected</source>
<translation></translation>
</message>
<message>
<location filename="../ui/mainwindow.cpp" line="648"/>
<location filename="../ui/mainwindow.cpp" line="661"/>
<location filename="../ui/mainwindow.cpp" line="893"/>
<location filename="../ui/mainwindow.cpp" line="651"/>
<location filename="../ui/mainwindow.cpp" line="664"/>
<location filename="../ui/mainwindow.cpp" line="896"/>
<source>Failed to open</source>
<translation></translation>
</message>
<message>
<location filename="../ui/mainwindow.cpp" line="370"/>
<location filename="../ui/mainwindow.cpp" line="373"/>
<source>Continue?</source>
<translation></translation>
</message>
@ -1123,82 +1124,82 @@ or the communication between a tag and a reader.</source>
<translation></translation>
</message>
<message>
<location filename="../ui/mainwindow.cpp" line="80"/>
<location filename="../ui/mainwindow.cpp" line="83"/>
<source>Failed to load config file</source>
<translation></translation>
</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>
<translation></translation>
</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>
<translation></translation>
</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>
<translation>32</translation>
</message>
<message>
<location filename="../ui/mainwindow.cpp" line="616"/>
<location filename="../ui/mainwindow.cpp" line="629"/>
<location filename="../ui/mainwindow.cpp" line="619"/>
<location filename="../ui/mainwindow.cpp" line="632"/>
<source>Key must consists of 12 Hex symbols(Whitespace is allowed)</source>
<translation>12</translation>
</message>
<message>
<location filename="../ui/mainwindow.cpp" line="641"/>
<location filename="../ui/mainwindow.cpp" line="644"/>
<source>Plz select the data file:</source>
<translation></translation>
</message>
<message>
<location filename="../ui/mainwindow.cpp" line="642"/>
<location filename="../ui/mainwindow.cpp" line="682"/>
<location filename="../ui/mainwindow.cpp" line="686"/>
<location filename="../ui/mainwindow.cpp" line="645"/>
<location filename="../ui/mainwindow.cpp" line="685"/>
<location filename="../ui/mainwindow.cpp" line="689"/>
<source>Binary Data Files(*.bin *.dump)</source>
<translation>(*.bin *.dump)</translation>
</message>
<message>
<location filename="../ui/mainwindow.cpp" line="642"/>
<location filename="../ui/mainwindow.cpp" line="655"/>
<location filename="../ui/mainwindow.cpp" line="880"/>
<location filename="../ui/mainwindow.cpp" line="645"/>
<location filename="../ui/mainwindow.cpp" line="658"/>
<location filename="../ui/mainwindow.cpp" line="883"/>
<source>All Files(*.*)</source>
<translation>(*.*)</translation>
</message>
<message>
<location filename="../ui/mainwindow.cpp" line="654"/>
<location filename="../ui/mainwindow.cpp" line="657"/>
<source>Plz select the key file:</source>
<translation></translation>
</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>
<translation></translation>
</message>
<message>
<location filename="../ui/mainwindow.cpp" line="688"/>
<location filename="../ui/mainwindow.cpp" line="701"/>
<location filename="../ui/mainwindow.cpp" line="918"/>
<location filename="../ui/mainwindow.cpp" line="691"/>
<location filename="../ui/mainwindow.cpp" line="704"/>
<location filename="../ui/mainwindow.cpp" line="921"/>
<source>Failed to save to</source>
<translation></translation>
</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>
<translation></translation>
</message>
<message>
<location filename="../ui/mainwindow.cpp" line="655"/>
<location filename="../ui/mainwindow.cpp" line="695"/>
<location filename="../ui/mainwindow.cpp" line="699"/>
<location filename="../ui/mainwindow.cpp" line="658"/>
<location filename="../ui/mainwindow.cpp" line="698"/>
<location filename="../ui/mainwindow.cpp" line="702"/>
<source>Binary Key Files(*.bin *.dump)</source>
<translation>(*.bin *.dump)</translation>
</message>
<message>
<location filename="../ui/mainwindow.cpp" line="642"/>
<location filename="../ui/mainwindow.cpp" line="682"/>
<location filename="../ui/mainwindow.cpp" line="645"/>
<location filename="../ui/mainwindow.cpp" line="685"/>
<source>Text Data Files(*.txt *.eml)</source>
<translation>(*.txt *.eml)</translation>
</message>
@ -1207,114 +1208,114 @@ or the communication between a tag and a reader.</source>
<translation type="vanished">(*.txt *.eml)</translation>
</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>
<translation> Mifare0</translation>
</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>
<translation> UIDChinese Magic Card0</translation>
</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>
<translation>UIDChinese Magic Card Gen1Gen2</translation>
</message>
<message>
<location filename="../ui/mainwindow.cpp" line="824"/>
<location filename="../ui/mainwindow.cpp" line="827"/>
<source> Gen1:</source>
<translation></translation>
</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>
<translation> UIDPM3GUI</translation>
</message>
<message>
<location filename="../ui/mainwindow.cpp" line="825"/>
<location filename="../ui/mainwindow.cpp" line="828"/>
<source> Gen2:</source>
<translation></translation>
</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>
<translation> CUID/FUID/UFUID</translation>
</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>
<translation>Gen2</translation>
</message>
<message>
<location filename="../ui/mainwindow.cpp" line="828"/>
<location filename="../ui/mainwindow.cpp" line="831"/>
<source> CUID Card:</source>
<translation> CUID</translation>
</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>
<translation> 0</translation>
</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>
<translation> (hf mf wrbl 0 A FFFFFFFFFFFF &lt;&gt;)</translation>
</message>
<message>
<location filename="../ui/mainwindow.cpp" line="830"/>
<location filename="../ui/mainwindow.cpp" line="833"/>
<source> FUID Card:</source>
<translation> FUID</translation>
</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>
<translation> 0</translation>
</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>
<translation> (穿CUID)</translation>
</message>
<message>
<location filename="../ui/mainwindow.cpp" line="832"/>
<location filename="../ui/mainwindow.cpp" line="835"/>
<source> UFUID Card:</source>
<translation> UFUID</translation>
</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>
<translation> UID/CUID0FUID</translation>
</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>
<translation> UIDNested</translation>
</message>
<message>
<location filename="../ui/mainwindow.cpp" line="879"/>
<location filename="../ui/mainwindow.cpp" line="882"/>
<source>Plz select the trace file:</source>
<translation>trace</translation>
</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>
<translation>trace</translation>
</message>
<message>
<location filename="../ui/mainwindow.cpp" line="880"/>
<location filename="../ui/mainwindow.cpp" line="904"/>
<location filename="../ui/mainwindow.cpp" line="883"/>
<location filename="../ui/mainwindow.cpp" line="907"/>
<source>Trace Files(*.trc)</source>
<translation>Trace(*.trc)</translation>
</message>
<message>
<location filename="../ui/mainwindow.cpp" line="1004"/>
<location filename="../ui/mainwindow.cpp" line="1176"/>
<location filename="../ui/mainwindow.cpp" line="1007"/>
<location filename="../ui/mainwindow.cpp" line="1179"/>
<source>Idle</source>
<translation></translation>
</message>
<message>
<location filename="../ui/mainwindow.cpp" line="1006"/>
<location filename="../ui/mainwindow.cpp" line="1009"/>
<source>Stop</source>
<translation></translation>
</message>
@ -1340,27 +1341,27 @@ or the communication between a tag and a reader.</source>
<translation>B</translation>
</message>
<message>
<location filename="../ui/mainwindow.cpp" line="1113"/>
<location filename="../ui/mainwindow.cpp" line="1116"/>
<source>HW Version:</source>
<translation></translation>
</message>
<message>
<location filename="../ui/mainwindow.cpp" line="1115"/>
<location filename="../ui/mainwindow.cpp" line="1118"/>
<source>PM3:</source>
<translation></translation>
</message>
<message>
<location filename="../ui/mainwindow.cpp" line="1117"/>
<location filename="../ui/mainwindow.cpp" line="1120"/>
<source>State:</source>
<translation></translation>
</message>
<message>
<location filename="../ui/mainwindow.cpp" line="1172"/>
<location filename="../ui/mainwindow.cpp" line="1175"/>
<source>Running</source>
<translation></translation>
</message>
<message>
<location filename="../ui/mainwindow.cpp" line="1299"/>
<location filename="../ui/mainwindow.cpp" line="1302"/>
<source>Actural Freq: </source>
<translation> </translation>
</message>
@ -1368,34 +1369,34 @@ or the communication between a tag and a reader.</source>
<context>
<name>Mifare</name>
<message>
<location filename="../module/mifare.cpp" line="643"/>
<location filename="../module/mifare.cpp" line="642"/>
<source>Success!</source>
<translation></translation>
</message>
<message>
<location filename="../module/mifare.cpp" line="209"/>
<location filename="../module/mifare.cpp" line="643"/>
<location filename="../module/mifare.cpp" line="647"/>
<location filename="../module/mifare.cpp" line="671"/>
<location filename="../module/mifare.cpp" line="710"/>
<location filename="../module/mifare.cpp" line="723"/>
<location filename="../module/mifare.cpp" line="774"/>
<location filename="../module/mifare.cpp" line="208"/>
<location filename="../module/mifare.cpp" line="642"/>
<location filename="../module/mifare.cpp" line="646"/>
<location filename="../module/mifare.cpp" line="670"/>
<location filename="../module/mifare.cpp" line="709"/>
<location filename="../module/mifare.cpp" line="722"/>
<location filename="../module/mifare.cpp" line="773"/>
<source>Info</source>
<translation></translation>
</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>
<translation></translation>
</message>
<message>
<location filename="../module/mifare.cpp" line="468"/>
<location filename="../module/mifare.cpp" line="647"/>
<location filename="../module/mifare.cpp" line="467"/>
<location filename="../module/mifare.cpp" line="646"/>
<source>Failed!</source>
<translation></translation>
</message>
<message>
<location filename="../module/mifare.cpp" line="672"/>
<location filename="../module/mifare.cpp" line="671"/>
<source>The Access Bits is invalid!
It could make the whole sector blocked irreversibly!
Continue to write?</source>
@ -1404,24 +1405,62 @@ Continue to write?</source>
</translation>
</message>
<message>
<location filename="../module/mifare.cpp" line="710"/>
<location filename="../module/mifare.cpp" line="709"/>
<source>Successful!</source>
<translation></translation>
</message>
<message>
<location filename="../module/mifare.cpp" line="723"/>
<location filename="../module/mifare.cpp" line="722"/>
<source>Failed to write to these blocks:</source>
<translation></translation>
</message>
<message>
<location filename="../module/mifare.cpp" line="727"/>
<location filename="../module/mifare.cpp" line="726"/>
<source>Select them?</source>
<translation></translation>
</message>
<message>
<location filename="../module/mifare.cpp" line="774"/>
<location filename="../module/mifare.cpp" line="773"/>
<source>Failed to read card.</source>
<translation></translation>
</message>
</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>

@ -154,5 +154,4 @@ void LF::syncWithUI()
void LF::setConfigMap(const QVariantMap& 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)
{
this->configMap = configMap;
qDebug() << configMap;
}
QMap<QString, QString> Mifare::info(bool isRequiringOutput)

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

@ -39,13 +39,16 @@ MainWindow::MainWindow(QWidget *parent):
Util::setUI(ui);
mifare = new Mifare(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);
resizeEventFilter = new MyEventFilter(QEvent::Resize);
// hide unused tabs
// ui->funcTab->removeTab(1);
ui->funcTab->removeTab(2);
ui->funcTab->removeTab(3);
portSearchTimer = new QTimer(this);
portSearchTimer->setInterval(2000);
@ -85,7 +88,7 @@ void MainWindow::loadConfig()
QJsonDocument configJson(QJsonDocument::fromJson(configData));
mifare->setConfigMap(configJson.object()["mifare classic"].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
@ -636,7 +639,7 @@ void MainWindow::on_MF_File_loadButton_clicked()
{
QString title = "";
QString filename = "";
if(ui->MF_File_dataBox->isChecked())
if(ui->MF_File_dataButton->isChecked())
{
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(*.*)"));
@ -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:");
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 += 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:");
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:");
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()
{
if(ui->MF_File_keyBox->isChecked())
if(ui->MF_File_keyButton->isChecked())
{
mifare->data_clearKey();
mifare->data_syncWithKeyWidget();
}
else if(ui->MF_File_dataBox->isChecked())
else if(ui->MF_File_keyButton->isChecked())
{
mifare->data_clearData();
mifare->data_syncWithDataWidget();

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

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

@ -1,7 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<author/>
<comment/>
<exportmacro/>
<class>T55xxTab</class>
<widget class="QWidget" name="T55xxTab">
<property name="geometry">
@ -12,10 +10,98 @@
<height>300</height>
</rect>
</property>
<property name="windowTitle">
<string>Form</string>
</property>
<layout class="QVBoxLayout">
<item>
<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>
<pixmapfunction/>
<resources/>
<connections/>
</ui>

Loading…
Cancel
Save