mirror of
https://github.com/wh201906/Proxmark3GUI.git
synced 2025-04-21 03:56:19 +08:00
Fix saving/loading trace(sniff) files
Fix file extension for RRG repo Fix overwriting existing file Add support for RRG v4.16717(path in prefs)
This commit is contained in:
parent
0738aff2bf
commit
184a9ed5f2
@ -104,7 +104,9 @@
|
|||||||
"cmd": "hf mf darkside"
|
"cmd": "hf mf darkside"
|
||||||
},
|
},
|
||||||
"save sniff": {
|
"save sniff": {
|
||||||
"cmd": "trace save -f <filename>"
|
"cmd": "trace save -f <filename>",
|
||||||
|
"path cmd":"prefs show",
|
||||||
|
"path pattern":"trace save path\\.+\\s*(.+)$"
|
||||||
},
|
},
|
||||||
"load sniff": {
|
"load sniff": {
|
||||||
"cmd": "trace load -f <filename>",
|
"cmd": "trace load -f <filename>",
|
||||||
|
@ -1375,3 +1375,18 @@ quint16 Mifare::getTrailerBlockId(quint8 sectorId, qint8 cardTypeId)
|
|||||||
// other cardTypeId: use current cardtype(include default -1)
|
// other cardTypeId: use current cardtype(include default -1)
|
||||||
return (cardType.blks[sectorId] + cardType.blk[sectorId] - 1);
|
return (cardType.blks[sectorId] + cardType.blk[sectorId] - 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QString Mifare::getTraceSavePath()
|
||||||
|
{
|
||||||
|
QVariantMap config = configMap["save sniff"].toMap();
|
||||||
|
QString pathCmd = config["path cmd"].toString();
|
||||||
|
QString patternText = config["path pattern"].toString();
|
||||||
|
QRegularExpression pattern = QRegularExpression(patternText, QRegularExpression::MultilineOption);
|
||||||
|
if(pathCmd.isEmpty() || patternText.isEmpty())
|
||||||
|
return QString();
|
||||||
|
QString result = util->execCMDWithOutput(pathCmd, 500);
|
||||||
|
QRegularExpressionMatch reMatch = pattern.match(result);
|
||||||
|
if(!reMatch.hasMatch())
|
||||||
|
return QString();
|
||||||
|
return reMatch.captured(1).trimmed();
|
||||||
|
}
|
||||||
|
@ -115,6 +115,7 @@ public:
|
|||||||
QString data_getUID();
|
QString data_getUID();
|
||||||
quint16 getTrailerBlockId(quint8 sectorId, qint8 cardTypeId = -1); // -1: use current cardtype
|
quint16 getTrailerBlockId(quint8 sectorId, qint8 cardTypeId = -1); // -1: use current cardtype
|
||||||
void setConfigMap(const QVariantMap& configMap);
|
void setConfigMap(const QVariantMap& configMap);
|
||||||
|
QString getTraceSavePath();
|
||||||
public slots:
|
public slots:
|
||||||
signals:
|
signals:
|
||||||
|
|
||||||
|
@ -956,18 +956,31 @@ void MainWindow::on_MF_Sniff_loadButton_clicked() // use a tmp file to support c
|
|||||||
{
|
{
|
||||||
QString title = "";
|
QString title = "";
|
||||||
QString filename = "";
|
QString filename = "";
|
||||||
|
QString defaultExtension;
|
||||||
|
QDir clientTracePath;
|
||||||
|
|
||||||
|
if(Util::getClientType() == Util::CLIENTTYPE_OFFICIAL)
|
||||||
|
defaultExtension = ".trc";
|
||||||
|
else if(Util::getClientType() == Util::CLIENTTYPE_ICEMAN)
|
||||||
|
defaultExtension = ".trace";
|
||||||
|
|
||||||
|
QString userTraceSavePath = mifare->getTraceSavePath();
|
||||||
|
if(userTraceSavePath.isEmpty())
|
||||||
|
clientTracePath = *clientWorkingDir;
|
||||||
|
else
|
||||||
|
clientTracePath = QDir(userTraceSavePath); // For v4.16717 and later
|
||||||
|
|
||||||
title = tr("Plz select the trace file:");
|
title = tr("Plz select the trace file:");
|
||||||
filename = QFileDialog::getOpenFileName(this, title, clientWorkingDir->absolutePath(), tr("Trace Files(*.trc)") + ";;" + tr("All Files(*.*)"));
|
filename = QFileDialog::getOpenFileName(this, title, clientTracePath.absolutePath(), tr("Trace Files") + "(*" + defaultExtension + ")" + ";;" + tr("All Files(*.*)"));
|
||||||
qDebug() << filename;
|
qDebug() << filename;
|
||||||
if(filename != "")
|
if(filename != "")
|
||||||
{
|
{
|
||||||
QString tmpFile = "tmp" + QString::number(QDateTime::currentDateTime().toTime_t()) + ".trc";
|
QString tmpFile = "tmp" + QString::number(QDateTime::currentDateTimeUtc().toTime_t()) + defaultExtension;
|
||||||
if(QFile::copy(filename, clientWorkingDir->absolutePath() + "/" + tmpFile))
|
if(QFile::copy(filename, clientTracePath.absolutePath() + "/" + tmpFile))
|
||||||
{
|
{
|
||||||
mifare->loadSniff(tmpFile);
|
mifare->loadSniff(tmpFile);
|
||||||
util->delay(3000);
|
util->delay(3000);
|
||||||
QFile::remove(clientWorkingDir->absolutePath() + "/" + tmpFile);
|
QFile::remove(clientTracePath.absolutePath() + "/" + tmpFile);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -980,25 +993,41 @@ void MainWindow::on_MF_Sniff_saveButton_clicked()
|
|||||||
{
|
{
|
||||||
QString title = "";
|
QString title = "";
|
||||||
QString filename = "";
|
QString filename = "";
|
||||||
|
QString defaultExtension;
|
||||||
|
QDir clientTracePath;
|
||||||
|
|
||||||
|
if(Util::getClientType() == Util::CLIENTTYPE_OFFICIAL)
|
||||||
|
defaultExtension = ".trc";
|
||||||
|
else if(Util::getClientType() == Util::CLIENTTYPE_ICEMAN)
|
||||||
|
defaultExtension = ".trace";
|
||||||
|
|
||||||
|
QString userTraceSavePath = mifare->getTraceSavePath();
|
||||||
|
if(userTraceSavePath.isEmpty())
|
||||||
|
clientTracePath = *clientWorkingDir;
|
||||||
|
else
|
||||||
|
clientTracePath = QDir(userTraceSavePath); // For v4.16717 and later
|
||||||
|
|
||||||
title = tr("Plz select the location to save trace file:");
|
title = tr("Plz select the location to save trace file:");
|
||||||
filename = QFileDialog::getSaveFileName(this, title, clientWorkingDir->absolutePath(), tr("Trace Files(*.trc)"));
|
filename = QFileDialog::getSaveFileName(this, title, clientTracePath.absolutePath(), tr("Trace Files") + "(*" + defaultExtension + ")");
|
||||||
qDebug() << filename;
|
qDebug() << filename;
|
||||||
if(filename != "")
|
if(filename != "")
|
||||||
{
|
{
|
||||||
QString tmpFile = "tmp" + QString::number(QDateTime::currentDateTime().toTime_t()) + ".trc";
|
QString tmpFile = "tmp" + QString::number(QDateTime::currentDateTimeUtc().toTime_t()) + defaultExtension;
|
||||||
mifare->saveSniff(tmpFile);
|
mifare->saveSniff(tmpFile);
|
||||||
for(int i = 0; i < 100; i++)
|
for(int i = 0; i < 100; i++)
|
||||||
{
|
{
|
||||||
util->delay(100);
|
util->delay(100);
|
||||||
if(QFile::exists(clientWorkingDir->absolutePath() + "/" + tmpFile))
|
if(QFile::exists(clientTracePath.absolutePath() + "/" + tmpFile))
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if(!QFile::copy(clientWorkingDir->absolutePath() + "/" + tmpFile, filename))
|
// filename is not empty -> the user has chosen to overwrite the existing file
|
||||||
|
if(QFile::exists(filename))
|
||||||
|
QFile::remove(filename);
|
||||||
|
if(!QFile::copy(clientTracePath.absolutePath() + "/" + tmpFile, filename))
|
||||||
{
|
{
|
||||||
QMessageBox::information(this, tr("Info"), tr("Failed to save to") + "\n" + filename);
|
QMessageBox::information(this, tr("Info"), tr("Failed to save to") + "\n" + filename);
|
||||||
}
|
}
|
||||||
QFile::remove(clientWorkingDir->absolutePath() + "/" + tmpFile);
|
QFile::remove(clientTracePath.absolutePath() + "/" + tmpFile);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user