mirror of
https://github.com/wh201906/Proxmark3GUI.git
synced 2025-02-28 12:01:30 +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"
|
||||
},
|
||||
"save sniff": {
|
||||
"cmd": "trace save -f <filename>"
|
||||
"cmd": "trace save -f <filename>",
|
||||
"path cmd":"prefs show",
|
||||
"path pattern":"trace save path\\.+\\s*(.+)$"
|
||||
},
|
||||
"load sniff": {
|
||||
"cmd": "trace load -f <filename>",
|
||||
|
@ -1375,3 +1375,18 @@ quint16 Mifare::getTrailerBlockId(quint8 sectorId, qint8 cardTypeId)
|
||||
// other cardTypeId: use current cardtype(include default -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();
|
||||
quint16 getTrailerBlockId(quint8 sectorId, qint8 cardTypeId = -1); // -1: use current cardtype
|
||||
void setConfigMap(const QVariantMap& configMap);
|
||||
QString getTraceSavePath();
|
||||
public slots:
|
||||
signals:
|
||||
|
||||
|
@ -956,18 +956,31 @@ void MainWindow::on_MF_Sniff_loadButton_clicked() // use a tmp file to support c
|
||||
{
|
||||
QString title = "";
|
||||
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:");
|
||||
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;
|
||||
if(filename != "")
|
||||
{
|
||||
QString tmpFile = "tmp" + QString::number(QDateTime::currentDateTime().toTime_t()) + ".trc";
|
||||
if(QFile::copy(filename, clientWorkingDir->absolutePath() + "/" + tmpFile))
|
||||
QString tmpFile = "tmp" + QString::number(QDateTime::currentDateTimeUtc().toTime_t()) + defaultExtension;
|
||||
if(QFile::copy(filename, clientTracePath.absolutePath() + "/" + tmpFile))
|
||||
{
|
||||
mifare->loadSniff(tmpFile);
|
||||
util->delay(3000);
|
||||
QFile::remove(clientWorkingDir->absolutePath() + "/" + tmpFile);
|
||||
QFile::remove(clientTracePath.absolutePath() + "/" + tmpFile);
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -980,25 +993,41 @@ void MainWindow::on_MF_Sniff_saveButton_clicked()
|
||||
{
|
||||
QString title = "";
|
||||
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:");
|
||||
filename = QFileDialog::getSaveFileName(this, title, clientWorkingDir->absolutePath(), tr("Trace Files(*.trc)"));
|
||||
filename = QFileDialog::getSaveFileName(this, title, clientTracePath.absolutePath(), tr("Trace Files") + "(*" + defaultExtension + ")");
|
||||
qDebug() << 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);
|
||||
for(int i = 0; i < 100; i++)
|
||||
{
|
||||
util->delay(100);
|
||||
if(QFile::exists(clientWorkingDir->absolutePath() + "/" + tmpFile))
|
||||
if(QFile::exists(clientTracePath.absolutePath() + "/" + tmpFile))
|
||||
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);
|
||||
}
|
||||
QFile::remove(clientWorkingDir->absolutePath() + "/" + tmpFile);
|
||||
QFile::remove(clientTracePath.absolutePath() + "/" + tmpFile);
|
||||
}
|
||||
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user