-
Notifications
You must be signed in to change notification settings - Fork 7
Expand file tree
/
Copy pathmain.cpp
More file actions
89 lines (68 loc) · 2.33 KB
/
main.cpp
File metadata and controls
89 lines (68 loc) · 2.33 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
#include <QCoreApplication>
#include <QDebug>
#include <QFile>
#include <QDir>
#include <iostream>
#include <string>
#define MTK_DA_MAGIC "MTK_DOWNLOAD_AGENT"
static quint32 get_l32(QByteArray input)
{
QVector<quint32> res = {};
for (uint i = 0; i < input.size()/sizeof(quint32); ++i)
res.push_back(*(quint32*)(input.data()+i*sizeof(quint32)));
return *res.data();
}
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
a.isSetuidAllowed();
qInfo("........ MTK Download Agent Parser .......");
qInfo(".....................................................");
if(argc < 2)
qInfo("Drag and drop the da file to the exe");
while (1) {
QByteArray path(0xff, Qt::Uninitialized);
std::cin.get((char*)path.data(), 0xff);
qInfo(".....................................................");
qInfo() << QString("Reading file %0").arg(path.data());
QFile file(QDir::toNativeSeparators(path));
if(!file.size())
{
qInfo().noquote() << QString("invalid file !(%0)").arg(qt_error_string());
path.clear();
return 0;
}
if (!file.open(QIODevice::ReadWrite | QIODevice::Text))
{
qInfo().noquote() << QString("file open fail!(%0)").arg(qt_error_string());
path.clear();
return 0;
}
QByteArray magic = file.read(0x12);
if(magic != MTK_DA_MAGIC)
{
qInfo().noquote() << QString("invalid MTK_DA file(hdr:%0)").arg((magic.data()));
path.clear();
return 0;
}
qInfo() << QString("Loading list supported chipset's by DA file");
if (!file.seek(0x68))
return 0;
quint16 count_da = get_l32(file.read(4));
for (quint16 i = 0; i <= count_da; i++)
{
if (!file.seek((0x6c + (0xdc * i))))
return 0;
QByteArray da_data = file.read(0xdc);
QByteArray da_info = da_data.mid(0x2, 0x2).data();
std::reverse(da_info.begin(), da_info.end());
QString chip_id = da_info.toHex().simplified().data();
if(!chip_id.size())
continue;
qInfo() << QString("MT%0").arg(chip_id);
}
path.clear();
std::cin.ignore();
}
return a.exec();
}