*pList);
71 |
72 | protected:
73 | void dragEnterEvent(QDragEnterEvent *pEvent) override;
74 | void dragMoveEvent(QDragMoveEvent *pEvent) override;
75 | void dropEvent(QDropEvent *pEvent) override;
76 |
77 | private:
78 | Ui::GuiMainWindow *ui;
79 | XOptions g_xOptions;
80 | XShortcuts g_xShortcuts;
81 | FW_DEF::OPTIONS g_fwOptions;
82 | QList g_listDEX;
83 | QList g_listELF;
84 | // QList g_listAndroidXML;
85 | QList g_listActions;
86 | };
87 |
88 | #endif // GUIMAINWINDOW_H
89 |
--------------------------------------------------------------------------------
/gui_source/dialogabout.cpp:
--------------------------------------------------------------------------------
1 | /* Copyright (c) 2020-2023 hors
2 | *
3 | * Permission is hereby granted, free of charge, to any person obtaining a copy
4 | * of this software and associated documentation files (the "Software"), to deal
5 | * in the Software without restriction, including without limitation the rights
6 | * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7 | * copies of the Software, and to permit persons to whom the Software is
8 | * furnished to do so, subject to the following conditions:
9 | *
10 | * The above copyright notice and this permission notice shall be included in all
11 | * copies or substantial portions of the Software.
12 | *
13 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16 | * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17 | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18 | * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
19 | * SOFTWARE.
20 | */
21 | #include "dialogabout.h"
22 |
23 | #include "ui_dialogabout.h"
24 |
25 | DialogAbout::DialogAbout(QWidget *pParent) : QDialog(pParent), ui(new Ui::DialogAbout)
26 | {
27 | ui->setupUi(this);
28 |
29 | ui->labelVersion->setText(QString("%1").arg(XOptions::getTitle(X_APPLICATIONDISPLAYNAME, X_APPLICATIONVERSION)));
30 |
31 | ui->labelBugreports->setText(
32 | QString("%1: horsicq@gmail.com
")
34 | .arg(tr("Bugreports")));
35 | ui->labelWebsite->setText(
36 | QString("%1: http://ntinfo.biz
")
38 | .arg(tr("Website")));
39 | ui->labelDonate->setText(QString("%1(Paypal): ntinfo.re@gmail.com
")
41 | .arg(tr("Donate")));
42 | ui->labelSourceCode->setText(
43 | QString("%1: https://github.com/horsicq/XAPKDetector
")
45 | .arg(tr("Source code")));
46 | ui->labelThanks->setText(
47 | QString(""
48 | "%1:
"
49 | ""
50 | "Fernando Mercês, "
51 | "David Zimmer, "
52 | "misonothx, "
53 | "
"
54 | ""
55 | "FrenchYeti, "
56 | "fr0zenbag, "
57 | "Anderson Leite, "
58 | "
"
59 | ""
60 | "Filip Navara, "
61 | "Ali Hadi, "
62 | "Duncan Ogilvie, "
63 | "
"
64 | ""
65 | "Leandro Fróes"
66 | "
"
67 | "")
68 | .arg(tr("Thanks")));
69 | }
70 |
71 | DialogAbout::~DialogAbout()
72 | {
73 | delete ui;
74 | }
75 |
76 | void DialogAbout::on_pushButtonOK_clicked()
77 | {
78 | this->close();
79 | }
80 |
--------------------------------------------------------------------------------
/.gitmodules:
--------------------------------------------------------------------------------
1 | [submodule "Formats"]
2 | path = Formats
3 | url = https://github.com/horsicq/Formats.git
4 | [submodule "StaticScan"]
5 | path = StaticScan
6 | url = https://github.com/horsicq/StaticScan.git
7 | [submodule "SpecAbstract"]
8 | path = SpecAbstract
9 | url = https://github.com/horsicq/SpecAbstract.git
10 | [submodule "XArchive"]
11 | path = XArchive
12 | url = https://github.com/horsicq/XArchive.git
13 | [submodule "XDEX"]
14 | path = XDEX
15 | url = https://github.com/horsicq/XDEX.git
16 | [submodule "XOptions"]
17 | path = XOptions
18 | url = https://github.com/horsicq/XOptions.git
19 | [submodule "XStyles"]
20 | path = XStyles
21 | url = https://github.com/horsicq/XStyles.git
22 | [submodule "XTranslation"]
23 | path = XTranslation
24 | url = https://github.com/horsicq/XTranslation.git
25 | [submodule "XHashWidget"]
26 | path = XHashWidget
27 | url = https://github.com/horsicq/XHashWidget.git
28 | [submodule "XCapstone"]
29 | path = XCapstone
30 | url = https://github.com/horsicq/XCapstone.git
31 | [submodule "Controls"]
32 | path = Controls
33 | url = https://github.com/horsicq/Controls.git
34 | [submodule "FormatDialogs"]
35 | path = FormatDialogs
36 | url = https://github.com/horsicq/FormatDialogs.git
37 | [submodule "FormatWidgets"]
38 | path = FormatWidgets
39 | url = https://github.com/horsicq/FormatWidgets.git
40 | [submodule "XEntropyWidget"]
41 | path = XEntropyWidget
42 | url = https://github.com/horsicq/XEntropyWidget.git
43 | [submodule "XMemoryMapWidget"]
44 | path = XMemoryMapWidget
45 | url = https://github.com/horsicq/XMemoryMapWidget.git
46 | [submodule "XQwt"]
47 | path = XQwt
48 | url = https://github.com/horsicq/XQwt.git
49 | [submodule "nfd_widget"]
50 | path = nfd_widget
51 | url = https://github.com/horsicq/nfd_widget.git
52 | [submodule "archive_widget"]
53 | path = archive_widget
54 | url = https://github.com/horsicq/archive_widget.git
55 | [submodule "XHexView"]
56 | path = XHexView
57 | url = https://github.com/horsicq/XHexView.git
58 | [submodule "XDisasmView"]
59 | path = XDisasmView
60 | url = https://github.com/horsicq/XDisasmView.git
61 | [submodule "XShortcuts"]
62 | path = XShortcuts
63 | url = https://github.com/horsicq/XShortcuts.git
64 | [submodule "XHexEdit"]
65 | path = XHexEdit
66 | url = https://github.com/horsicq/XHexEdit.git
67 | [submodule "signatures"]
68 | path = signatures
69 | url = https://github.com/horsicq/signatures.git
70 | [submodule "XDemangle"]
71 | path = XDemangle
72 | url = https://github.com/horsicq/XDemangle.git
73 | [submodule "XDemangleWidget"]
74 | path = XDemangleWidget
75 | url = https://github.com/horsicq/XDemangleWidget.git
76 | [submodule "XLLVMDemangler"]
77 | path = XLLVMDemangler
78 | url = https://github.com/horsicq/XLLVMDemangler.git
79 | [submodule "build_tools"]
80 | path = build_tools
81 | url = https://github.com/horsicq/build_tools
82 | [submodule "XCppfilt"]
83 | path = XCppfilt
84 | url = https://github.com/horsicq/XCppfilt
85 | [submodule "XDynStructs"]
86 | path = XDynStructs
87 | url = https://github.com/horsicq/XDynStructs
88 | [submodule "XDynStructsEngine"]
89 | path = XDynStructsEngine
90 | url = https://github.com/horsicq/XDynStructsEngine
91 | [submodule "XDynStructsWidget"]
92 | path = XDynStructsWidget
93 | url = https://github.com/horsicq/XDynStructsWidget
94 | [submodule "XFileInfo"]
95 | path = XFileInfo
96 | url = https://github.com/horsicq/XFileInfo
97 | [submodule "XPDF"]
98 | path = XPDF
99 | url = https://github.com/horsicq/XPDF
100 | [submodule "XInfoDB"]
101 | path = XInfoDB
102 | url = https://github.com/horsicq/XInfoDB
103 | [submodule "XSymbolsWidget"]
104 | path = XSymbolsWidget
105 | url = https://github.com/horsicq/XSymbolsWidget
106 | [submodule "XOnlineTools"]
107 | path = XOnlineTools
108 | url = https://github.com/horsicq/XOnlineTools
109 | [submodule "XAboutWidget"]
110 | path = XAboutWidget
111 | url = https://github.com/horsicq/XAboutWidget
112 | [submodule "die_script"]
113 | path = die_script
114 | url = https://github.com/horsicq/die_script
115 | [submodule "hex_templates"]
116 | path = hex_templates
117 | url = https://github.com/horsicq/hex_templates
118 | [submodule "XExtractorWidget"]
119 | path = XExtractorWidget
120 | url = https://github.com/horsicq/XExtractorWidget
121 | [submodule "XExtractor"]
122 | path = XExtractor
123 | url = https://github.com/horsicq/XExtractor
124 | [submodule "XUpdate"]
125 | path = XUpdate
126 | url = https://github.com/horsicq/XUpdate
127 | [submodule "XGithub"]
128 | path = XGithub
129 | url = https://github.com/horsicq/XGithub
130 | [submodule "XVisualizationWidget"]
131 | path = XVisualizationWidget
132 | url = https://github.com/horsicq/XVisualizationWidget
133 | [submodule "XDecompiler"]
134 | path = XDecompiler
135 | url = https://github.com/horsicq/XDecompiler
136 | [submodule "XYara"]
137 | path = XYara
138 | url = https://github.com/horsicq/XYara
139 | [submodule "yara_widget"]
140 | path = yara_widget
141 | url = https://github.com/horsicq/yara_widget
142 | [submodule "die_widget"]
143 | path = die_widget
144 | url = https://github.com/horsicq/die_widget
145 | [submodule "Detect-It-Easy"]
146 | path = Detect-It-Easy
147 | url = https://github.com/horsicq/Detect-It-Easy
148 | [submodule "XDataConvertorWidget"]
149 | path = XDataConvertorWidget
150 | url = https://github.com/horsicq/XDataConvertorWidget
151 | [submodule "XScanEngine"]
152 | path = XScanEngine
153 | url = https://github.com/horsicq/XScanEngine
154 | [submodule "XDisasmCore"]
155 | path = XDisasmCore
156 | url = https://github.com/horsicq/XDisasmCore.git
157 | [submodule "XRegionsWidget"]
158 | path = XRegionsWidget
159 | url = https://github.com/horsicq/XRegionsWidget.git
160 | [submodule "XStaticUnpacker"]
161 | path = XStaticUnpacker
162 | url = https://github.com/horsicq/XStaticUnpacker
163 |
--------------------------------------------------------------------------------
/gui_source/dialogdirectoryscan.cpp:
--------------------------------------------------------------------------------
1 | // Copyright (c) 2018-2020 hors
2 | //
3 | // Permission is hereby granted, free of charge, to any person obtaining a copy
4 | // of this software and associated documentation files (the "Software"), to deal
5 | // in the Software without restriction, including without limitation the rights
6 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7 | // copies of the Software, and to permit persons to whom the Software is
8 | // furnished to do so, subject to the following conditions:
9 |
10 | // The above copyright notice and this permission notice shall be included in all
11 | // copies or substantial portions of the Software.
12 |
13 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
19 | // SOFTWARE.
20 | //
21 | #include "dialogdirectoryscan.h"
22 | #include "ui_dialogdirectoryscan.h"
23 |
24 | DialogDirectoryScan::DialogDirectoryScan(QWidget *parent, NFD::OPTIONS *pOptions,QString sDirName) :
25 | QDialog(parent),
26 | ui(new Ui::DialogDirectoryScan)
27 | {
28 | ui->setupUi(this);
29 |
30 | this->pOptions=pOptions;
31 |
32 | setWindowFlags(windowFlags()|Qt::WindowMinMaxButtonsHint);
33 |
34 | // Qt::WindowTitleHint
35 |
36 | connect(this,SIGNAL(resultSignal(QString)),this,SLOT(appendResult(QString)));
37 |
38 | ui->checkBoxScanSubdirectories->setChecked(true);
39 |
40 | if(pOptions->bSaveLastDirectory&&QDir().exists(pOptions->sLastDirectory))
41 | {
42 | ui->lineEditDirectoryName->setText(pOptions->sLastDirectory);
43 | }
44 |
45 | if(sDirName!="")
46 | {
47 | ui->lineEditDirectoryName->setText(sDirName);
48 | if(pOptions->bScanAfterOpen)
49 | {
50 | scanDirectory(sDirName);
51 | }
52 | }
53 | }
54 |
55 | DialogDirectoryScan::~DialogDirectoryScan()
56 | {
57 | delete ui;
58 | }
59 |
60 | void DialogDirectoryScan::on_pushButtonOpenDirectory_clicked()
61 | {
62 | QString sInitDirectory=ui->lineEditDirectoryName->text();
63 |
64 | QString sDirectoryName=QFileDialog::getExistingDirectory(this,tr("Open directory")+QString("..."),sInitDirectory,QFileDialog::ShowDirsOnly);
65 |
66 | if(!sDirectoryName.isEmpty())
67 | {
68 | ui->lineEditDirectoryName->setText(sDirectoryName);
69 | if(pOptions->bScanAfterOpen)
70 | {
71 | scanDirectory(sDirectoryName);
72 | }
73 | }
74 | }
75 |
76 | void DialogDirectoryScan::on_pushButtonScan_clicked()
77 | {
78 | QString sDirectoryName=ui->lineEditDirectoryName->text().trimmed();
79 |
80 | scanDirectory(sDirectoryName);
81 | }
82 |
83 | void DialogDirectoryScan::scanDirectory(QString sDirectoryName)
84 | {
85 | if(sDirectoryName!="")
86 | {
87 | ui->textBrowserResult->clear();
88 |
89 | SpecAbstract::SCAN_OPTIONS options={0};
90 | options.bRecursiveScan=ui->checkBoxRecursiveScan->isChecked();
91 | options.bDeepScan=ui->checkBoxDeepScan->isChecked();
92 | options.bHeuristicScan=ui->checkBoxHeuristicScan->isChecked();
93 | options.bSubdirectories=ui->checkBoxScanSubdirectories->isChecked();
94 | // TODO Filter
95 | // |flags|x all|
96 |
97 | DialogStaticScan ds(this);
98 | connect(&ds, SIGNAL(scanResult(SpecAbstract::SCAN_RESULT)),this,SLOT(scanResult(SpecAbstract::SCAN_RESULT)),Qt::DirectConnection);
99 | ds.setData(sDirectoryName,&options);
100 | ds.exec();
101 |
102 | if(pOptions->bSaveLastDirectory)
103 | {
104 | QDir dir(sDirectoryName);
105 | if(dir.exists())
106 | {
107 | pOptions->sLastDirectory=dir.absolutePath();
108 | }
109 | }
110 | }
111 | }
112 |
113 | void DialogDirectoryScan::scanResult(SpecAbstract::SCAN_RESULT scanResult)
114 | {
115 | QString sResult=QString("%1 %2 %3").arg(scanResult.sFileName).arg(scanResult.nScanTime).arg(tr("msec"));
116 | sResult+="\r\n";
117 | StaticScanItemModel model(&scanResult.listRecords);
118 | SpecAbstract::SCAN_OPTIONS scanOptions={};
119 | sResult+=model.toString(&scanOptions).toLatin1().data();
120 |
121 | emit resultSignal(sResult);
122 | }
123 |
124 | void DialogDirectoryScan::appendResult(QString sResult)
125 | {
126 | ui->textBrowserResult->append(sResult);
127 | }
128 |
129 | void DialogDirectoryScan::on_pushButtonOK_clicked()
130 | {
131 | this->close();
132 | }
133 |
134 | void DialogDirectoryScan::on_pushButtonClear_clicked()
135 | {
136 | ui->textBrowserResult->clear();
137 | }
138 |
139 | void DialogDirectoryScan::on_pushButtonSave_clicked()
140 | {
141 | QString sFilter;
142 | sFilter+=QString("%1 (*.txt)").arg(tr("Text documents"));
143 | QString sSaveFileName=pOptions->sLastDirectory+QDir::separator()+"result";
144 | QString sFileName=QFileDialog::getSaveFileName(this,tr("Save result"),sSaveFileName,sFilter);
145 |
146 | if(!sFileName.isEmpty())
147 | {
148 | QFile file;
149 | file.setFileName(sFileName);
150 |
151 | if(file.open(QIODevice::ReadWrite))
152 | {
153 | QString sText=ui->textBrowserResult->toPlainText();
154 | file.write(sText.toLatin1().data());
155 |
156 | file.close();
157 | }
158 | }
159 | }
160 |
--------------------------------------------------------------------------------
/gui_source/dialogdirectoryscan.ui:
--------------------------------------------------------------------------------
1 |
2 |
3 | DialogDirectoryScan
4 |
5 |
6 | Qt::ApplicationModal
7 |
8 |
9 |
10 | 0
11 | 0
12 | 725
13 | 478
14 |
15 |
16 |
17 | Directory scan
18 |
19 |
20 | true
21 |
22 |
23 | -
24 |
25 |
26 | Directory
27 |
28 |
29 | Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter
30 |
31 |
32 |
33 | 1
34 |
35 |
36 | 1
37 |
38 |
39 | 1
40 |
41 |
42 | 1
43 |
44 |
-
45 |
46 |
-
47 |
48 |
49 | -
50 |
51 |
-
52 |
53 |
54 | Subdirectories
55 |
56 |
57 | true
58 |
59 |
60 |
61 | -
62 |
63 |
64 | Recursive scan
65 |
66 |
67 | true
68 |
69 |
70 |
71 | -
72 |
73 |
74 | Deep scan
75 |
76 |
77 | true
78 |
79 |
80 |
81 | -
82 |
83 |
84 | Heuristic scan
85 |
86 |
87 | true
88 |
89 |
90 |
91 | -
92 |
93 |
94 | Qt::Horizontal
95 |
96 |
97 |
98 | 158
99 | 20
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 | -
109 |
110 |
-
111 |
112 |
113 |
114 | 75
115 | true
116 |
117 |
118 |
119 | ...
120 |
121 |
122 |
123 | -
124 |
125 |
126 |
127 | 75
128 | true
129 |
130 |
131 |
132 | Scan
133 |
134 |
135 |
136 |
137 |
138 |
139 |
140 |
141 | -
142 |
143 |
144 | false
145 |
146 |
147 | true
148 |
149 |
150 |
151 | -
152 |
153 |
-
154 |
155 |
156 | Clear
157 |
158 |
159 |
160 | -
161 |
162 |
163 | Save
164 |
165 |
166 |
167 | -
168 |
169 |
170 | Qt::Horizontal
171 |
172 |
173 |
174 | 40
175 | 20
176 |
177 |
178 |
179 |
180 | -
181 |
182 |
183 | OK
184 |
185 |
186 |
187 |
188 |
189 |
190 |
191 |
192 |
193 |
194 |
--------------------------------------------------------------------------------
/console_source/main_console.cpp:
--------------------------------------------------------------------------------
1 | /* Copyright (c) 2020-2024 hors
2 | *
3 | * Permission is hereby granted, free of charge, to any person obtaining a copy
4 | * of this software and associated documentation files (the "Software"), to deal
5 | * in the Software without restriction, including without limitation the rights
6 | * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7 | * copies of the Software, and to permit persons to whom the Software is
8 | * furnished to do so, subject to the following conditions:
9 | *
10 | * The above copyright notice and this permission notice shall be included in all
11 | * copies or substantial portions of the Software.
12 | *
13 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16 | * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17 | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18 | * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
19 | * SOFTWARE.
20 | */
21 | #include
22 | #include
23 | #include
24 |
25 | #include "../global.h"
26 | #include "scanitemmodel.h"
27 | #include "specabstract.h"
28 |
29 | void ScanFiles(QList *pListArgs, SpecAbstract::SCAN_OPTIONS *pScanOptions)
30 | {
31 | QList listFileNames;
32 |
33 | for (int i = 0; i < pListArgs->count(); i++) {
34 | QString sFileName = pListArgs->at(i);
35 |
36 | if (QFileInfo::exists(sFileName)) {
37 | XBinary::findFiles(sFileName, &listFileNames);
38 | } else {
39 | printf("Cannot find: %s\n", sFileName.toLatin1().data());
40 | }
41 | }
42 |
43 | bool bShowFileName = listFileNames.count() > 1;
44 |
45 | for (qint32 i = 0; i < listFileNames.count(); i++) {
46 | QString sFileName = listFileNames.at(i);
47 |
48 | if (bShowFileName) {
49 | printf("%s:\n", sFileName.toLatin1().data());
50 | }
51 |
52 | XScanEngine::SCAN_RESULT scanResult = SpecAbstract().scanFile(sFileName, pScanOptions);
53 |
54 | ScanItemModel model(pScanOptions, &(scanResult.listRecords), 1);
55 |
56 | XBinary::FORMATTYPE formatType = XBinary::FORMATTYPE_TEXT;
57 |
58 | if (pScanOptions->bResultAsCSV) formatType = XBinary::FORMATTYPE_CSV;
59 | else if (pScanOptions->bResultAsJSON) formatType = XBinary::FORMATTYPE_JSON;
60 | else if (pScanOptions->bResultAsTSV) formatType = XBinary::FORMATTYPE_TSV;
61 | else if (pScanOptions->bResultAsXML) formatType = XBinary::FORMATTYPE_XML;
62 |
63 | if (formatType != XBinary::FORMATTYPE_TEXT) {
64 | printf("%s\n", model.toString(formatType).toLatin1().data());
65 | } else {
66 | // Colored text
67 | model.coloredOutput();
68 | }
69 | }
70 | }
71 |
72 | int main(int argc, char *argv[])
73 | {
74 | QCoreApplication::setOrganizationName(X_ORGANIZATIONNAME);
75 | QCoreApplication::setOrganizationDomain(X_ORGANIZATIONDOMAIN);
76 | QCoreApplication::setApplicationName(X_APPLICATIONNAME);
77 | QCoreApplication::setApplicationVersion(X_APPLICATIONVERSION);
78 |
79 | QCoreApplication app(argc, argv);
80 |
81 | QCommandLineParser parser;
82 | QString sDescription;
83 | sDescription.append(QString("%1 v%2\n").arg(X_APPLICATIONDISPLAYNAME, X_APPLICATIONVERSION));
84 | sDescription.append(QString("%1\n").arg("Copyright(C) 2020-2024 hors Web: http://ntinfo.biz"));
85 | parser.setApplicationDescription(sDescription);
86 | parser.addHelpOption();
87 | parser.addVersionOption();
88 |
89 | parser.addPositionalArgument("target", "The file or directory to open.");
90 |
91 | QCommandLineOption clRecursiveScan(QStringList() << "r"
92 | << "recursivescan",
93 | "Recursive scan.");
94 | QCommandLineOption clDeepScan(QStringList() << "d"
95 | << "deepscan",
96 | "Deep scan.");
97 | QCommandLineOption clHeuristicScan(QStringList() << "e"
98 | << "heuristicscan",
99 | "Heuristic scan.");
100 | QCommandLineOption clAllTypesScan(QStringList() << "a"
101 | << "alltypes",
102 | "Scan all types.");
103 | QCommandLineOption clResultAsXml(QStringList() << "x"
104 | << "xml",
105 | "Result as XML.");
106 | QCommandLineOption clResultAsJson(QStringList() << "j"
107 | << "json",
108 | "Result as JSON.");
109 | QCommandLineOption clResultAsCSV(QStringList() << "c"
110 | << "csv",
111 | "Result as CSV.");
112 | QCommandLineOption clResultAsTSV(QStringList() << "t"
113 | << "tsv",
114 | "Result as TSV.");
115 |
116 | parser.addOption(clRecursiveScan);
117 | parser.addOption(clDeepScan);
118 | parser.addOption(clHeuristicScan);
119 | parser.addOption(clAllTypesScan);
120 | parser.addOption(clResultAsXml);
121 | parser.addOption(clResultAsJson);
122 | parser.addOption(clResultAsCSV);
123 | parser.addOption(clResultAsTSV);
124 |
125 | parser.process(app);
126 |
127 | QList listArgs = parser.positionalArguments();
128 |
129 | SpecAbstract::SCAN_OPTIONS scanOptions = {0};
130 |
131 | scanOptions.bIsRecursiveScan = parser.isSet(clRecursiveScan);
132 | scanOptions.bIsDeepScan = parser.isSet(clDeepScan);
133 | scanOptions.bIsHeuristicScan = parser.isSet(clHeuristicScan);
134 | scanOptions.bIsAllTypesScan = parser.isSet(clAllTypesScan);
135 | scanOptions.bResultAsXML = parser.isSet(clResultAsXml);
136 | scanOptions.bResultAsJSON = parser.isSet(clResultAsJson);
137 | scanOptions.bResultAsCSV = parser.isSet(clResultAsCSV);
138 | scanOptions.bResultAsTSV = parser.isSet(clResultAsTSV);
139 |
140 | if (listArgs.count()) {
141 | ScanFiles(&listArgs, &scanOptions);
142 | } else {
143 | parser.showHelp();
144 | Q_UNREACHABLE();
145 | }
146 |
147 | return 0;
148 | }
149 |
--------------------------------------------------------------------------------
/gui_source/dialogabout.ui:
--------------------------------------------------------------------------------
1 |
2 |
3 | DialogAbout
4 |
5 |
6 | Qt::ApplicationModal
7 |
8 |
9 |
10 | 0
11 | 0
12 | 772
13 | 504
14 |
15 |
16 |
17 |
18 | 0
19 | 0
20 |
21 |
22 |
23 | About
24 |
25 |
26 | true
27 |
28 |
29 | -
30 |
31 |
-
32 |
33 |
34 |
35 | 0
36 | 0
37 |
38 |
39 |
40 | QFrame::NoFrame
41 |
42 |
43 |
44 |
45 |
46 | :/images/main.png
47 |
48 |
49 | true
50 |
51 |
52 | Qt::AlignCenter
53 |
54 |
55 |
56 | -
57 |
58 |
-
59 |
60 |
61 | XAPKDetector
62 |
63 |
64 | Qt::AlignCenter
65 |
66 |
67 |
68 | -
69 |
70 |
71 | <html><head/><body><p><span style=" font-weight:700;">Copyright(C) 2019-2022 hors</span></p></body></html>
72 |
73 |
74 | Qt::AlignCenter
75 |
76 |
77 |
78 | -
79 |
80 |
81 | <html><head/><body><p><span style=" font-weight:600;">Bugreports</span>: <a href="mailto:horsicq@gmail.com"><span style=" text-decoration: underline; color:#ff0000;">horsicq@gmail.com</span></a></p></body></html>
82 |
83 |
84 | Qt::AlignCenter
85 |
86 |
87 | true
88 |
89 |
90 |
91 | -
92 |
93 |
94 | <html><head/><body><p><span style=" font-weight:600;">Website</span>: <a href="http://ntinfo.biz"><span style=" text-decoration: underline; color:#ff0000;">http://ntinfo.biz</span></a></p></body></html>
95 |
96 |
97 | Qt::AlignCenter
98 |
99 |
100 | true
101 |
102 |
103 |
104 | -
105 |
106 |
107 | <html><head/><body><p><span style=" font-weight:600;">Donate(Paypal): </span><a href="mailto:ntinfo.re@gmail.com"><span style=" text-decoration: underline; color:#ff0000;">ntinfo.re@gmail.com</span></a></p></body></html>
108 |
109 |
110 | Qt::AlignCenter
111 |
112 |
113 | true
114 |
115 |
116 |
117 | -
118 |
119 |
120 | <html><head/><body><p><span style=" font-weight:600;">Source code: </span><a href="https://github.com/horsicq/XAPKDetector"><span style=" text-decoration: underline; color:#ff0000;">https://github.com/horsicq/XAPKDetector</span></a></p></body></html>
121 |
122 |
123 | Qt::AlignCenter
124 |
125 |
126 | true
127 |
128 |
129 |
130 | -
131 |
132 |
133 | Thanks
134 |
135 |
136 | Qt::AutoText
137 |
138 |
139 | true
140 |
141 |
142 |
143 | -
144 |
145 |
146 | Qt::Vertical
147 |
148 |
149 |
150 | 20
151 | 40
152 |
153 |
154 |
155 |
156 |
157 |
158 |
159 |
160 | -
161 |
162 |
-
163 |
164 |
165 | Qt::Horizontal
166 |
167 |
168 |
169 | 40
170 | 20
171 |
172 |
173 |
174 |
175 | -
176 |
177 |
178 | OK
179 |
180 |
181 |
182 |
183 |
184 |
185 |
186 |
187 |
188 |
189 |
190 |
191 |
--------------------------------------------------------------------------------
/gui_source/guimainwindow.ui:
--------------------------------------------------------------------------------
1 |
2 |
3 | GuiMainWindow
4 |
5 |
6 |
7 | 0
8 | 0
9 | 688
10 | 484
11 |
12 |
13 |
14 | XAPKDetector
15 |
16 |
17 |
18 | -
19 |
20 |
21 | File
22 |
23 |
24 | Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter
25 |
26 |
27 |
28 | 0
29 |
30 |
31 | 0
32 |
33 |
34 | 0
35 |
36 |
37 | 0
38 |
39 |
-
40 |
41 |
-
42 |
43 |
44 | -
45 |
46 |
47 |
48 | true
49 |
50 |
51 |
52 | ...
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 | -
62 |
63 |
-
64 |
65 |
66 |
67 | false
68 |
69 |
70 |
71 | Scan
72 |
73 |
74 |
75 | -
76 |
77 |
78 | DEX
79 |
80 |
81 |
82 | -
83 |
84 |
85 | ELF
86 |
87 |
88 |
89 | -
90 |
91 |
92 | Qt::Horizontal
93 |
94 |
95 |
96 | 40
97 | 20
98 |
99 |
100 |
101 |
102 | -
103 |
104 |
105 | Strings
106 |
107 |
108 |
109 | -
110 |
111 |
112 | Hex
113 |
114 |
115 |
116 | -
117 |
118 |
119 | Entropy
120 |
121 |
122 |
123 | -
124 |
125 |
126 | Hash
127 |
128 |
129 |
130 |
131 |
132 | -
133 |
134 |
-
135 |
136 |
137 | MANIFEST.MF
138 |
139 |
140 |
141 | -
142 |
143 |
144 | AndroidManifest.xml
145 |
146 |
147 |
148 | -
149 |
150 |
151 | Qt::Horizontal
152 |
153 |
154 |
155 | 40
156 | 20
157 |
158 |
159 |
160 |
161 | -
162 |
163 |
164 | Signature
165 |
166 |
167 |
168 |
169 |
170 | -
171 |
172 |
173 |
174 | 0
175 | 0
176 |
177 |
178 |
179 |
180 | -
181 |
182 |
-
183 |
184 |
185 | Shortcuts
186 |
187 |
188 |
189 | -
190 |
191 |
192 | Options
193 |
194 |
195 |
196 | -
197 |
198 |
199 | Qt::Horizontal
200 |
201 |
202 |
203 | 40
204 | 20
205 |
206 |
207 |
208 |
209 | -
210 |
211 |
212 |
213 | 80
214 | 0
215 |
216 |
217 |
218 |
219 |
220 |
221 |
222 | -
223 |
224 |
225 | About
226 |
227 |
228 |
229 | -
230 |
231 |
232 | Exit
233 |
234 |
235 |
236 |
237 |
238 |
239 |
240 |
241 |
242 |
243 |
244 | Archive_widget
245 | QWidget
246 |
247 | 1
248 |
249 |
250 |
251 |
252 |
253 |
--------------------------------------------------------------------------------
/gui_source/guimainwindow.cpp:
--------------------------------------------------------------------------------
1 | /* Copyright (c) 2020-2023 hors
2 | *
3 | * Permission is hereby granted, free of charge, to any person obtaining a copy
4 | * of this software and associated documentation files (the "Software"), to deal
5 | * in the Software without restriction, including without limitation the rights
6 | * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7 | * copies of the Software, and to permit persons to whom the Software is
8 | * furnished to do so, subject to the following conditions:
9 | *
10 | * The above copyright notice and this permission notice shall be included in all
11 | * copies or substantial portions of the Software.
12 | *
13 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16 | * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17 | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18 | * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
19 | * SOFTWARE.
20 | */
21 | #include "guimainwindow.h"
22 |
23 | #include "ui_guimainwindow.h"
24 |
25 | GuiMainWindow::GuiMainWindow(QWidget *pParent) : QMainWindow(pParent), ui(new Ui::GuiMainWindow)
26 | {
27 | ui->setupUi(this);
28 |
29 | setWindowTitle(XOptions::getTitle(X_APPLICATIONDISPLAYNAME, X_APPLICATIONVERSION));
30 |
31 | setAcceptDrops(true);
32 |
33 | g_fwOptions = {};
34 |
35 | ui->pushButtonDEX->setEnabled(false);
36 | ui->pushButtonELF->setEnabled(false);
37 | ui->pushButtonManifestMF->setEnabled(false);
38 | ui->pushButtonAndroidManifest->setEnabled(false);
39 | ui->pushButtonSignature->setEnabled(false);
40 |
41 | g_xOptions.setName(X_OPTIONSFILE);
42 |
43 | g_xOptions.addID(XOptions::ID_VIEW_STYLE, "Fusion");
44 | g_xOptions.addID(XOptions::ID_VIEW_QSS, "");
45 | g_xOptions.addID(XOptions::ID_VIEW_LANG, "System");
46 | g_xOptions.addID(XOptions::ID_VIEW_STAYONTOP, false);
47 | g_xOptions.addID(XOptions::ID_FILE_SAVELASTDIRECTORY, true);
48 | g_xOptions.addID(XOptions::ID_FILE_SAVEBACKUP, true);
49 |
50 | #ifdef Q_OS_WIN
51 | g_xOptions.addID(XOptions::ID_FILE_CONTEXT, "*");
52 | #endif
53 |
54 | DIEOptionsWidget::setDefaultValues(&g_xOptions);
55 | SearchSignaturesOptionsWidget::setDefaultValues(&g_xOptions);
56 | XHexViewOptionsWidget::setDefaultValues(&g_xOptions);
57 | XDisasmViewOptionsWidget::setDefaultValues(&g_xOptions);
58 |
59 | g_xOptions.load();
60 |
61 | g_xShortcuts.setName(X_SHORTCUTSFILE);
62 |
63 | g_xShortcuts.addGroup(XShortcuts::GROUPID_STRINGS);
64 | g_xShortcuts.addGroup(XShortcuts::GROUPID_SIGNATURES);
65 | g_xShortcuts.addGroup(XShortcuts::GROUPID_HEX);
66 | g_xShortcuts.addGroup(XShortcuts::GROUPID_DISASM);
67 | g_xShortcuts.addGroup(XShortcuts::GROUPID_ARCHIVE);
68 |
69 | g_xShortcuts.load();
70 |
71 | ui->widgetArchive->setGlobal(&g_xShortcuts, &g_xOptions);
72 |
73 | adjustWindow();
74 |
75 | ui->widgetArchive->setGlobal(&g_xShortcuts, &g_xOptions);
76 |
77 | if (QCoreApplication::arguments().count() > 1) {
78 | handleFile(QCoreApplication::arguments().at(1));
79 | }
80 | }
81 |
82 | GuiMainWindow::~GuiMainWindow()
83 | {
84 | g_xOptions.save();
85 | g_xShortcuts.save();
86 |
87 | delete ui;
88 | }
89 |
90 | void GuiMainWindow::handleFile(QString sFileName)
91 | {
92 | QFileInfo fi(sFileName);
93 |
94 | if (fi.isFile()) {
95 | ui->lineEditFileName->setText(sFileName);
96 |
97 | ui->widgetArchive->setFileName(sFileName, XBinary::FT_UNKNOWN, g_fwOptions, QSet());
98 |
99 | g_listDEX = ui->widgetArchive->getRecordsByFileType(XBinary::FT_DEX);
100 | g_listELF = ui->widgetArchive->getRecordsByFileType(XBinary::FT_ELF);
101 | // g_listAndroidXML=ui->widgetArchive->getRecordsByFileType(XBinary::FT_ANDROIDXML);
102 |
103 | ui->pushButtonDEX->setEnabled(g_listDEX.count());
104 | ui->pushButtonELF->setEnabled(g_listELF.count());
105 | ui->pushButtonAndroidManifest->setEnabled(XArchives::isArchiveRecordPresent(sFileName, "AndroidManifest.xml"));
106 | ui->pushButtonManifestMF->setEnabled(XArchives::isArchiveRecordPresent(sFileName, "META-INF/MANIFEST.MF"));
107 | ui->pushButtonSignature->setEnabled(XFormats::isSigned(sFileName));
108 |
109 | if (g_xOptions.isScanAfterOpen()) {
110 | scanFile(sFileName);
111 | }
112 |
113 | g_xOptions.setLastDirectory(sFileName);
114 | }
115 | }
116 |
117 | void GuiMainWindow::on_pushButtonExit_clicked()
118 | {
119 | this->close();
120 | }
121 |
122 | void GuiMainWindow::on_pushButtonOpenFile_clicked()
123 | {
124 | QString sDirectory = g_xOptions.getLastDirectory();
125 |
126 | QString sFileName = QFileDialog::getOpenFileName(this, tr("Open file") + QString("..."), sDirectory, tr("All files") + QString(" (*)"));
127 |
128 | if (!sFileName.isEmpty()) {
129 | handleFile(sFileName);
130 | }
131 | }
132 |
133 | void GuiMainWindow::on_pushButtonScan_clicked()
134 | {
135 | QString sFileName = ui->lineEditFileName->text().trimmed();
136 |
137 | if (sFileName != "") {
138 | scanFile(sFileName);
139 | }
140 | }
141 |
142 | void GuiMainWindow::on_pushButtonAbout_clicked()
143 | {
144 | DialogAbout di(this);
145 |
146 | di.exec();
147 | }
148 |
149 | void GuiMainWindow::on_pushButtonShortcuts_clicked()
150 | {
151 | DialogShortcuts dialogShortcuts(this);
152 |
153 | dialogShortcuts.setData(&g_xShortcuts);
154 |
155 | dialogShortcuts.exec();
156 |
157 | adjustWindow();
158 | }
159 |
160 | void GuiMainWindow::dragEnterEvent(QDragEnterEvent *pEvent)
161 | {
162 | pEvent->acceptProposedAction();
163 | }
164 |
165 | void GuiMainWindow::dragMoveEvent(QDragMoveEvent *pEvent)
166 | {
167 | pEvent->acceptProposedAction();
168 | }
169 |
170 | void GuiMainWindow::dropEvent(QDropEvent *pEvent)
171 | {
172 | const QMimeData *pMimeData = pEvent->mimeData();
173 |
174 | if (pMimeData->hasUrls()) {
175 | QList urlList = pMimeData->urls();
176 |
177 | if (urlList.count()) {
178 | QString sFileName = urlList.at(0).toLocalFile();
179 |
180 | sFileName = XBinary::convertFileName(sFileName);
181 |
182 | handleFile(sFileName);
183 | }
184 | }
185 | }
186 |
187 | void GuiMainWindow::on_pushButtonOptions_clicked()
188 | {
189 | DialogOptions dialogOptions(this, &g_xOptions);
190 |
191 | dialogOptions.exec();
192 |
193 | adjustWindow();
194 | }
195 |
196 | void GuiMainWindow::adjustWindow()
197 | {
198 | // ui->widgetViewer->adjustView();
199 |
200 | g_xOptions.adjustStayOnTop(this);
201 | }
202 |
203 | void GuiMainWindow::on_pushButtonHex_clicked()
204 | {
205 | QString sFileName = ui->lineEditFileName->text().trimmed();
206 |
207 | if (sFileName != "") {
208 | QFile file;
209 | file.setFileName(sFileName);
210 |
211 | if (XBinary::tryToOpen(&file)) {
212 | XHexViewWidget::OPTIONS options = {};
213 |
214 | DialogHexView dialogHex(this);
215 | dialogHex.setData(&file, options);
216 | dialogHex.setGlobal(&g_xShortcuts, &g_xOptions);
217 |
218 | dialogHex.exec();
219 |
220 | file.close();
221 | }
222 | }
223 | }
224 |
225 | void GuiMainWindow::on_pushButtonStrings_clicked()
226 | {
227 | QString sFileName = ui->lineEditFileName->text().trimmed();
228 |
229 | if (sFileName != "") {
230 | QFile file;
231 | file.setFileName(sFileName);
232 |
233 | if (file.open(QIODevice::ReadOnly)) {
234 | SearchStringsWidget::OPTIONS options = {};
235 | options.bAnsi = true;
236 | options.bUnicode = true;
237 |
238 | DialogSearchStrings dialogSearchStrings(this);
239 | dialogSearchStrings.setData(&file, XBinary::FT_UNKNOWN, options, true);
240 | dialogSearchStrings.setGlobal(&g_xShortcuts, &g_xOptions);
241 |
242 | dialogSearchStrings.exec();
243 |
244 | file.close();
245 | }
246 | }
247 | }
248 |
249 | void GuiMainWindow::on_pushButtonHash_clicked()
250 | {
251 | QString sFileName = ui->lineEditFileName->text().trimmed();
252 |
253 | if (sFileName != "") {
254 | QFile file;
255 | file.setFileName(sFileName);
256 |
257 | if (file.open(QIODevice::ReadOnly)) {
258 | DialogHash dialogHash(this);
259 | dialogHash.setData(&file, XBinary::FT_UNKNOWN);
260 | dialogHash.setGlobal(&g_xShortcuts, &g_xOptions);
261 |
262 | dialogHash.exec();
263 |
264 | file.close();
265 | }
266 | }
267 | }
268 |
269 | void GuiMainWindow::on_pushButtonEntropy_clicked()
270 | {
271 | QString sFileName = ui->lineEditFileName->text().trimmed();
272 |
273 | if (sFileName != "") {
274 | QFile file;
275 | file.setFileName(sFileName);
276 |
277 | if (file.open(QIODevice::ReadOnly)) {
278 | DialogEntropy dialogEntropy(this);
279 | dialogEntropy.setData(&file);
280 | dialogEntropy.setGlobal(&g_xShortcuts, &g_xOptions);
281 |
282 | dialogEntropy.exec();
283 |
284 | file.close();
285 | }
286 | }
287 | }
288 |
289 | void GuiMainWindow::scanFile(QString sFileName)
290 | {
291 | QFile file;
292 | file.setFileName(sFileName);
293 |
294 | if (file.open(QIODevice::ReadOnly)) {
295 | DialogNFDScan dialogStaticScan(this);
296 | dialogStaticScan.setData(&file, true, XBinary::FT_UNKNOWN);
297 | // dialogStaticScan.setShortcuts(&g_xShortcuts);
298 |
299 | dialogStaticScan.exec();
300 |
301 | file.close();
302 | }
303 | }
304 |
305 | void GuiMainWindow::on_pushButtonSignature_clicked()
306 | {
307 | QString sFileName = ui->lineEditFileName->text().trimmed();
308 |
309 | if (sFileName != "") {
310 | XBinary::OFFSETSIZE os = XFormats::getSignOffsetSize(sFileName);
311 |
312 | if (os.nSize) {
313 | QFile file;
314 | file.setFileName(sFileName);
315 |
316 | if (XBinary::tryToOpen(&file)) {
317 | SubDevice sd(&file, os.nOffset, os.nSize);
318 |
319 | if (XBinary::tryToOpen(&sd)) {
320 | XHexViewWidget::OPTIONS options = {};
321 | options.sTitle = tr("Signature");
322 | options.nStartAddress = os.nOffset;
323 |
324 | DialogHexView dialogHex(this);
325 | dialogHex.setData(&sd, options);
326 | dialogHex.setGlobal(&g_xShortcuts, &g_xOptions);
327 |
328 | dialogHex.exec();
329 |
330 | sd.close();
331 | }
332 |
333 | file.close();
334 | }
335 | }
336 | }
337 | }
338 |
339 | void GuiMainWindow::on_pushButtonDEX_clicked()
340 | {
341 | _handleList(&g_listDEX);
342 | }
343 |
344 | void GuiMainWindow::on_pushButtonELF_clicked()
345 | {
346 | _handleList(&g_listELF);
347 | }
348 |
349 | void GuiMainWindow::on_pushButtonManifestMF_clicked()
350 | {
351 | openFile("META-INF/MANIFEST.MF", XBinary::FT_PLAINTEXT, true);
352 | }
353 |
354 | void GuiMainWindow::on_pushButtonAndroidManifest_clicked()
355 | {
356 | openFile("AndroidManifest.xml", XBinary::FT_ANDROIDXML, true);
357 | }
358 |
359 | void GuiMainWindow::openFile(QString sRecordName, XBinary::FT fileType, bool bIsVirtual)
360 | {
361 | QString sFileName;
362 |
363 | QTemporaryFile *pFileTemp = nullptr;
364 |
365 | if (bIsVirtual) {
366 | QString _sFileName = ui->lineEditFileName->text().trimmed();
367 |
368 | if (_sFileName != "") {
369 | pFileTemp = new QTemporaryFile;
370 |
371 | if (pFileTemp->open()) {
372 | QString sTempFileName = pFileTemp->fileName();
373 |
374 | if (XArchives::decompressToFile(_sFileName, sRecordName, sTempFileName)) {
375 | sFileName = sTempFileName;
376 | }
377 | }
378 | }
379 | } else {
380 | sFileName = sRecordName;
381 | }
382 |
383 | if (sFileName != "") {
384 | if (XBinary::checkFileType(XBinary::FT_DEX, fileType)) {
385 | QFile file;
386 | file.setFileName(sFileName);
387 |
388 | if (file.open(QIODevice::ReadOnly)) {
389 | g_fwOptions.nStartType = SDEX::TYPE_HEADER;
390 | g_fwOptions.sTitle = sRecordName;
391 |
392 | DialogDEX dialogDEX(this);
393 | dialogDEX.setGlobal(&g_xShortcuts, &g_xOptions);
394 | dialogDEX.setData(&file, g_fwOptions);
395 |
396 | dialogDEX.exec();
397 |
398 | file.close();
399 | }
400 | } else if (XBinary::checkFileType(XBinary::FT_ELF, fileType)) {
401 | QFile file;
402 | file.setFileName(sFileName);
403 |
404 | if (file.open(QIODevice::ReadOnly)) {
405 | g_fwOptions.nStartType = SELF::TYPE_Elf_Ehdr;
406 | g_fwOptions.sTitle = sRecordName;
407 |
408 | DialogELF dialogELF(this);
409 | dialogELF.setGlobal(&g_xShortcuts, &g_xOptions);
410 | dialogELF.setData(&file, g_fwOptions);
411 |
412 | dialogELF.exec();
413 |
414 | file.close();
415 | }
416 | } else if (XBinary::checkFileType(XBinary::FT_ANDROIDXML, fileType)) {
417 | QString sString = XAndroidBinary::getDecoded(sFileName);
418 |
419 | DialogTextInfo dialogTextInfo(this);
420 | dialogTextInfo.setTitle(sRecordName);
421 | dialogTextInfo.setWrap(false);
422 |
423 | dialogTextInfo.setText(sString);
424 |
425 | dialogTextInfo.exec();
426 | } else if (XBinary::checkFileType(XBinary::FT_PLAINTEXT, fileType)) {
427 | DialogTextInfo dialogTextInfo(this);
428 | dialogTextInfo.setTitle(sRecordName);
429 |
430 | dialogTextInfo.setFileName(sFileName);
431 |
432 | dialogTextInfo.exec();
433 | }
434 | }
435 |
436 | if (pFileTemp) {
437 | delete pFileTemp;
438 | }
439 | }
440 |
441 | void GuiMainWindow::openFile()
442 | {
443 | QAction *pAction = qobject_cast(sender());
444 |
445 | if (pAction) {
446 | XBinary::FT fileType = (XBinary::FT)(pAction->property("FT").toInt());
447 | QString sFileName = pAction->property("FileName").toString();
448 | bool bIsVirtual = pAction->property("IsVirtual").toBool();
449 |
450 | openFile(sFileName, fileType, bIsVirtual);
451 | }
452 | }
453 |
454 | void GuiMainWindow::_handleList(QList *pList)
455 | {
456 | qint32 nNumberOfRecords = pList->count();
457 |
458 | if (nNumberOfRecords == 1) {
459 | openFile(pList->at(0).sRecordName, pList->at(0).ft, pList->at(0).bIsVirtual);
460 | } else if (nNumberOfRecords > 1) {
461 | QMenu contextMenu(this);
462 |
463 | qint32 nNumberOfActions = g_listActions.count();
464 |
465 | for (qint32 i = 0; i < nNumberOfActions; i++) {
466 | delete g_listActions.at(i);
467 | }
468 |
469 | g_listActions.clear();
470 |
471 | for (qint32 i = 0; i < nNumberOfRecords; i++) {
472 | QAction *pAction = new QAction(pList->at(i).sRecordName, this);
473 | pAction->setProperty("FT", pList->at(i).ft);
474 | pAction->setProperty("FileName", pList->at(i).sRecordName);
475 | pAction->setProperty("IsVirtual", pList->at(i).bIsVirtual);
476 | connect(pAction, SIGNAL(triggered()), this, SLOT(openFile()));
477 |
478 | contextMenu.addAction(pAction);
479 |
480 | g_listActions.append(pAction);
481 | }
482 |
483 | contextMenu.exec(QCursor::pos());
484 | }
485 | }
486 |
--------------------------------------------------------------------------------
/gui_source/gui_source_tr.pro:
--------------------------------------------------------------------------------
1 | TRANSLATIONS = \
2 | translation/xapkd_ar.ts \
3 | translation/xapkd_de.ts \
4 | translation/xapkd_es.ts \
5 | translation/xapkd_fr.ts \
6 | translation/xapkd_he.ts \
7 | translation/xapkd_id.ts \
8 | translation/xapkd_it.ts \
9 | translation/xapkd_ja.ts \
10 | translation/xapkd_ko.ts \
11 | translation/xapkd_pl.ts \
12 | translation/xapkd_pt_BR.ts \
13 | translation/xapkd_pt_PT.ts \
14 | translation/xapkd_ru.ts \
15 | translation/xapkd_tr.ts\
16 | translation/xapkd_uk.ts\
17 | translation/xapkd_vi.ts \
18 | translation/xapkd_zh.ts \
19 | translation/xapkd_zh_TW.ts
20 |
21 | FORMS += \
22 | ../FormatDialogs/dialogdump.ui \
23 | ../FormatDialogs/dialogdumpprocess.ui \
24 | ../FormatDialogs/dialoggotoaddress.ui \
25 | ../FormatDialogs/dialoghexsignature.ui \
26 | ../FormatDialogs/dialogsearch.ui \
27 | ../FormatDialogs/dialogsearchprocess.ui \
28 | ../FormatDialogs/dialogtextinfo.ui \
29 | ../FormatWidgets/Binary/binarywidget.ui \
30 | ../FormatWidgets/Binary/dialogbinary.ui \
31 | ../FormatWidgets/DEX/dexsectionheaderwidget.ui \
32 | ../FormatWidgets/DEX/dexwidget.ui \
33 | ../FormatWidgets/DEX/dialogdex.ui \
34 | ../FormatWidgets/ELF/dialogelf.ui \
35 | ../FormatWidgets/ELF/elfsectionheaderwidget.ui \
36 | ../FormatWidgets/ELF/elfwidget.ui \
37 | ../FormatWidgets/LE/dialogle.ui \
38 | ../FormatWidgets/LE/lesectionheaderwidget.ui \
39 | ../FormatWidgets/LE/lewidget.ui \
40 | ../FormatWidgets/MACH/dialogmach.ui \
41 | ../FormatWidgets/MACH/machsectionheaderwidget.ui \
42 | ../FormatWidgets/MACH/machwidget.ui \
43 | ../FormatWidgets/MACHOFAT/machofatwidget.ui \
44 | ../FormatWidgets/MSDOS/dialogmsdos.ui \
45 | ../FormatWidgets/MSDOS/msdoswidget.ui \
46 | ../FormatWidgets/MultiSearch/dialogmultisearchprocess.ui \
47 | ../FormatWidgets/NE/dialogne.ui \
48 | ../FormatWidgets/NE/nesectionheaderwidget.ui \
49 | ../FormatWidgets/NE/newidget.ui \
50 | ../FormatWidgets/PDF/dialogpdf.ui \
51 | ../FormatWidgets/PDF/pdfwidget.ui \
52 | ../FormatWidgets/PE/dialogpe.ui \
53 | ../FormatWidgets/PE/pesectionheaderwidget.ui \
54 | ../FormatWidgets/PE/pewidget.ui \
55 | ../FormatWidgets/SearchSignatures/dialogsearchsignatures.ui \
56 | ../FormatWidgets/SearchSignatures/searchsignaturesoptionswidget.ui \
57 | ../FormatWidgets/SearchSignatures/searchsignatureswidget.ui \
58 | ../FormatWidgets/SearchStrings/dialogsearchstrings.ui \
59 | ../FormatWidgets/SearchStrings/searchstringswidget.ui \
60 | ../FormatWidgets/dialogmodelinfo.ui \
61 | ../FormatWidgets/dialogprocessdata.ui \
62 | ../FormatWidgets/dialogsectionheader.ui \
63 | ../FormatWidgets/formatswidget.ui \
64 | ../FormatWidgets/toolswidget.ui \
65 | ../QHexView/dialoghex.ui \
66 | ../QHexView/qhexviewwidget.ui \
67 | ../StaticScan/dialogstaticscan.ui \
68 | ../StaticScan/dialogstaticscandirectory.ui \
69 | ../StaticScan/dialogstaticscanprocess.ui \
70 | ../StaticScan/formresult.ui \
71 | ../StaticScan/formstaticscan.ui \
72 | ../StaticScan/heurwidget.ui \
73 | ../StaticScan/staticscanoptionswidget.ui \
74 | ../XDemangleWidget/dialogdemangle.ui \
75 | ../XDemangleWidget/xdemanglewidget.ui \
76 | ../XDisasm/dialogasmsignature.ui \
77 | ../XDisasm/dialogdisasm.ui \
78 | ../XDisasm/dialogdisasmlabels.ui \
79 | ../XDisasm/dialogdisasmprocess.ui \
80 | ../XDisasm/xdisasmwidget.ui \
81 | ../XDisasmView/dialogmultidisasm.ui \
82 | ../XDisasmView/dialogmultidisasmsignature.ui \
83 | ../XDisasmView/dialogxdisasmviewcolors.ui \
84 | ../XDisasmView/xdisasmviewoptionswidget.ui \
85 | ../XDisasmView/xmultidisasmwidget.ui \
86 | ../XDynStructsWidget/dialogxdynstructs.ui \
87 | ../XDynStructsWidget/xdynstructswidget.ui \
88 | ../XEntropyWidget/dialogentropy.ui \
89 | ../XEntropyWidget/dialogentropyprocess.ui \
90 | ../XEntropyWidget/xentropywidget.ui \
91 | ../XFileInfo/dialogxfileinfo.ui \
92 | ../XFileInfo/dialogxfileinfoprocess.ui \
93 | ../XFileInfo/xfileinfowidget.ui \
94 | ../XHashWidget/dialoghash.ui \
95 | ../XHashWidget/dialoghashprocess.ui \
96 | ../XHashWidget/xhashwidget.ui \
97 | ../XHexEdit/dialoghexedit.ui \
98 | ../XHexView/dialoghexview.ui \
99 | ../XHexView/xhexviewoptionswidget.ui \
100 | ../XHexView/xhexviewwidget.ui \
101 | ../XMemoryMapWidget/dialogmemorymap.ui \
102 | ../XMemoryMapWidget/xmemorymapwidget.ui \
103 | ../XOptions/xoptionswidget.ui \
104 | ../XShortcuts/dialogshortcuts.ui \
105 | ../archive_widget/archive_widget.ui \
106 | ../archive_widget/dialogarchive.ui \
107 | ../archive_widget/dialogcreateviewmodel.ui \
108 | ../archive_widget/dialogshowimage.ui \
109 | ../archive_widget/dialogshowtext.ui \
110 | ../archive_widget/dialogunpackfile.ui \
111 | dialogabout.ui \
112 | dialogdirectoryscan.ui \
113 | dialogoptions.ui \
114 | guimainwindow.ui \
115 | ../nfd_widget/nfd_widget.ui
116 |
117 | SOURCES += \
118 | ../CMakeFiles/3.16.3/CompilerIdCXX/CMakeCXXCompilerId.cpp \
119 | ../Controls/hexvalidator.cpp \
120 | ../Controls/subclassofqstyleditemdelegate.cpp \
121 | ../Controls/xabstracttableview.cpp \
122 | ../Controls/xcomboboxex.cpp \
123 | ../Controls/xdatetimeeditx.cpp \
124 | ../Controls/xdevicetableview.cpp \
125 | ../Controls/xhtml.cpp \
126 | ../Controls/xlineedithex.cpp \
127 | ../FormatDialogs/dialogdumpprocess.cpp \
128 | ../FormatDialogs/dialoggotoaddress.cpp \
129 | ../FormatDialogs/dialoghexsignature.cpp \
130 | ../FormatDialogs/dialogsearch.cpp \
131 | ../FormatDialogs/dialogsearchprocess.cpp \
132 | ../FormatDialogs/dialogtextinfo.cpp \
133 | ../FormatDialogs/dumpprocess.cpp \
134 | ../FormatDialogs/searchprocess.cpp \
135 | ../FormatWidgets/Binary/binary_defs.cpp \
136 | ../FormatWidgets/Binary/binarywidget.cpp \
137 | ../FormatWidgets/Binary/dialogbinary.cpp \
138 | ../FormatWidgets/DEX/dex_defs.cpp \
139 | ../FormatWidgets/DEX/dexprocessdata.cpp \
140 | ../FormatWidgets/DEX/dexsectionheaderwidget.cpp \
141 | ../FormatWidgets/DEX/dexwidget.cpp \
142 | ../FormatWidgets/DEX/dialogdex.cpp \
143 | ../FormatWidgets/ELF/dialogelf.cpp \
144 | ../FormatWidgets/ELF/elf_defs.cpp \
145 | ../FormatWidgets/ELF/elfprocessdata.cpp \
146 | ../FormatWidgets/ELF/elfsectionheaderwidget.cpp \
147 | ../FormatWidgets/ELF/elfwidget.cpp \
148 | ../FormatWidgets/LE/dialogle.cpp \
149 | ../FormatWidgets/LE/le_defs.cpp \
150 | ../FormatWidgets/LE/leprocessdata.cpp \
151 | ../FormatWidgets/LE/lesectionheaderwidget.cpp \
152 | ../FormatWidgets/LE/lewidget.cpp \
153 | ../FormatWidgets/MACH/dialogmach.cpp \
154 | ../FormatWidgets/MACH/mach_defs.cpp \
155 | ../FormatWidgets/MACH/machprocessdata.cpp \
156 | ../FormatWidgets/MACH/machsectionheaderwidget.cpp \
157 | ../FormatWidgets/MACH/machwidget.cpp \
158 | ../FormatWidgets/MACHOFAT/machofatwidget.cpp \
159 | ../FormatWidgets/MSDOS/dialogmsdos.cpp \
160 | ../FormatWidgets/MSDOS/msdos_defs.cpp \
161 | ../FormatWidgets/MSDOS/msdoswidget.cpp \
162 | ../FormatWidgets/MultiSearch/dialogmultisearchprocess.cpp \
163 | ../FormatWidgets/MultiSearch/multisearch.cpp \
164 | ../FormatWidgets/NE/dialogne.cpp \
165 | ../FormatWidgets/NE/ne_defs.cpp \
166 | ../FormatWidgets/NE/neprocessdata.cpp \
167 | ../FormatWidgets/NE/nesectionheaderwidget.cpp \
168 | ../FormatWidgets/NE/newidget.cpp \
169 | ../FormatWidgets/PDF/dialogpdf.cpp \
170 | ../FormatWidgets/PDF/pdf_defs.cpp \
171 | ../FormatWidgets/PDF/pdfwidget.cpp \
172 | ../FormatWidgets/PE/dialogpe.cpp \
173 | ../FormatWidgets/PE/pe_defs.cpp \
174 | ../FormatWidgets/PE/peprocessdata.cpp \
175 | ../FormatWidgets/PE/pesectionheaderwidget.cpp \
176 | ../FormatWidgets/PE/pewidget.cpp \
177 | ../FormatWidgets/SearchSignatures/dialogsearchsignatures.cpp \
178 | ../FormatWidgets/SearchSignatures/searchsignaturesoptionswidget.cpp \
179 | ../FormatWidgets/SearchSignatures/searchsignatureswidget.cpp \
180 | ../FormatWidgets/SearchStrings/dialogsearchstrings.cpp \
181 | ../FormatWidgets/SearchStrings/searchstringswidget.cpp \
182 | ../FormatWidgets/dialogmodelinfo.cpp \
183 | ../FormatWidgets/dialogprocessdata.cpp \
184 | ../FormatWidgets/dialogsectionheader.cpp \
185 | ../FormatWidgets/formatswidget.cpp \
186 | ../FormatWidgets/formatwidget.cpp \
187 | ../FormatWidgets/invwidget.cpp \
188 | ../FormatWidgets/processdata.cpp \
189 | ../FormatWidgets/toolswidget.cpp \
190 | ../Formats/scanitem.cpp \
191 | ../Formats/scanitemmodel.cpp \
192 | ../Formats/subdevice.cpp \
193 | ../Formats/xbinary.cpp \
194 | ../Formats/xcom.cpp \
195 | ../Formats/xelf.cpp \
196 | ../Formats/xformats.cpp \
197 | ../Formats/xle.cpp \
198 | ../Formats/xmach.cpp \
199 | ../Formats/xmsdos.cpp \
200 | ../Formats/xne.cpp \
201 | ../Formats/xpe.cpp \
202 | ../QHexView/dialoghex.cpp \
203 | ../QHexView/qhexview.cpp \
204 | ../QHexView/qhexviewwidget.cpp \
205 | ../SpecAbstract/signatures.cpp \
206 | ../SpecAbstract/specabstract.cpp \
207 | ../StaticScan/dialogstaticscan.cpp \
208 | ../StaticScan/dialogstaticscandirectory.cpp \
209 | ../StaticScan/dialogstaticscanprocess.cpp \
210 | ../StaticScan/formresult.cpp \
211 | ../StaticScan/formstaticscan.cpp \
212 | ../StaticScan/heurwidget.cpp \
213 | ../StaticScan/staticscan.cpp \
214 | ../StaticScan/staticscanitem.cpp \
215 | ../StaticScan/staticscanitemmodel.cpp \
216 | ../StaticScan/staticscanoptionswidget.cpp \
217 | ../XArchive/xarchive.cpp \
218 | ../XArchive/xarchives.cpp \
219 | ../XArchive/xcab.cpp \
220 | ../XArchive/xmachofat.cpp \
221 | ../XArchive/xrar.cpp \
222 | ../XArchive/xsevenzip.cpp \
223 | ../XArchive/xzip.cpp \
224 | ../XCapstone/xcapstone.cpp \
225 | ../XCppfilt/xcppfilt.cpp \
226 | ../XDEX/xandroidbinary.cpp \
227 | ../XDEX/xdex.cpp \
228 | ../XDemangle/xdemangle.cpp \
229 | ../XDemangleWidget/dialogdemangle.cpp \
230 | ../XDemangleWidget/xdemanglewidget.cpp \
231 | ../XDisasm/dialogasmsignature.cpp \
232 | ../XDisasm/dialogdisasm.cpp \
233 | ../XDisasm/dialogdisasmlabels.cpp \
234 | ../XDisasm/dialogdisasmprocess.cpp \
235 | ../XDisasm/xdisasm.cpp \
236 | ../XDisasm/xdisasmmodel.cpp \
237 | ../XDisasm/xdisasmwidget.cpp \
238 | ../XDisasmView/dialogmultidisasm.cpp \
239 | ../XDisasmView/dialogmultidisasmsignature.cpp \
240 | ../XDisasmView/dialogxdisasmviewcolors.cpp \
241 | ../XDisasmView/xdisasmview.cpp \
242 | ../XDisasmView/xdisasmviewoptionswidget.cpp \
243 | ../XDisasmView/xmultidisasmwidget.cpp \
244 | ../XDynStructsEngine/xdynstructsengine.cpp \
245 | ../XDynStructsWidget/dialogxdynstructs.cpp \
246 | ../XDynStructsWidget/xdynstructswidget.cpp \
247 | ../XEntropyWidget/dialogentropy.cpp \
248 | ../XEntropyWidget/dialogentropyprocess.cpp \
249 | ../XEntropyWidget/entropyprocess.cpp \
250 | ../XEntropyWidget/xentropywidget.cpp \
251 | ../XFileInfo/dialogxfileinfo.cpp \
252 | ../XFileInfo/dialogxfileinfoprocess.cpp \
253 | ../XFileInfo/xfileinfo.cpp \
254 | ../XFileInfo/xfileinfoitem.cpp \
255 | ../XFileInfo/xfileinfomodel.cpp \
256 | ../XFileInfo/xfileinfowidget.cpp \
257 | ../XHashWidget/dialoghash.cpp \
258 | ../XHashWidget/dialoghashprocess.cpp \
259 | ../XHashWidget/hashprocess.cpp \
260 | ../XHashWidget/xhashwidget.cpp \
261 | ../XHexEdit/dialoghexedit.cpp \
262 | ../XHexEdit/xhexedit.cpp \
263 | ../XHexView/dialoghexview.cpp \
264 | ../XHexView/xhexview.cpp \
265 | ../XHexView/xhexviewoptionswidget.cpp \
266 | ../XHexView/xhexviewwidget.cpp \
267 | ../XLLVMDemangler/3rdparty/llvm/Demangle/Demangle.cpp \
268 | ../XLLVMDemangler/3rdparty/llvm/Demangle/ItaniumDemangle.cpp \
269 | ../XLLVMDemangler/3rdparty/llvm/Demangle/MicrosoftDemangle.cpp \
270 | ../XLLVMDemangler/3rdparty/llvm/Demangle/MicrosoftDemangleNodes.cpp \
271 | ../XMemoryMapWidget/dialogmemorymap.cpp \
272 | ../XMemoryMapWidget/xmemorymapwidget.cpp \
273 | ../XOptions/xoptions.cpp \
274 | ../XOptions/xoptionswidget.cpp \
275 | ../XPDF/xpdf.cpp \
276 | ../XQwt/3rdparty/qwt/src/qwt.cpp \
277 | ../XQwt/3rdparty/qwt/src/qwt_abstract_legend.cpp \
278 | ../XQwt/3rdparty/qwt/src/qwt_abstract_scale.cpp \
279 | ../XQwt/3rdparty/qwt/src/qwt_abstract_scale_draw.cpp \
280 | ../XQwt/3rdparty/qwt/src/qwt_abstract_slider.cpp \
281 | ../XQwt/3rdparty/qwt/src/qwt_analog_clock.cpp \
282 | ../XQwt/3rdparty/qwt/src/qwt_arrow_button.cpp \
283 | ../XQwt/3rdparty/qwt/src/qwt_bezier.cpp \
284 | ../XQwt/3rdparty/qwt/src/qwt_clipper.cpp \
285 | ../XQwt/3rdparty/qwt/src/qwt_color_map.cpp \
286 | ../XQwt/3rdparty/qwt/src/qwt_column_symbol.cpp \
287 | ../XQwt/3rdparty/qwt/src/qwt_compass.cpp \
288 | ../XQwt/3rdparty/qwt/src/qwt_compass_rose.cpp \
289 | ../XQwt/3rdparty/qwt/src/qwt_counter.cpp \
290 | ../XQwt/3rdparty/qwt/src/qwt_curve_fitter.cpp \
291 | ../XQwt/3rdparty/qwt/src/qwt_date.cpp \
292 | ../XQwt/3rdparty/qwt/src/qwt_date_scale_draw.cpp \
293 | ../XQwt/3rdparty/qwt/src/qwt_date_scale_engine.cpp \
294 | ../XQwt/3rdparty/qwt/src/qwt_dial.cpp \
295 | ../XQwt/3rdparty/qwt/src/qwt_dial_needle.cpp \
296 | ../XQwt/3rdparty/qwt/src/qwt_dyngrid_layout.cpp \
297 | ../XQwt/3rdparty/qwt/src/qwt_event_pattern.cpp \
298 | ../XQwt/3rdparty/qwt/src/qwt_graphic.cpp \
299 | ../XQwt/3rdparty/qwt/src/qwt_interval.cpp \
300 | ../XQwt/3rdparty/qwt/src/qwt_interval_symbol.cpp \
301 | ../XQwt/3rdparty/qwt/src/qwt_knob.cpp \
302 | ../XQwt/3rdparty/qwt/src/qwt_legend.cpp \
303 | ../XQwt/3rdparty/qwt/src/qwt_legend_data.cpp \
304 | ../XQwt/3rdparty/qwt/src/qwt_legend_label.cpp \
305 | ../XQwt/3rdparty/qwt/src/qwt_magnifier.cpp \
306 | ../XQwt/3rdparty/qwt/src/qwt_math.cpp \
307 | ../XQwt/3rdparty/qwt/src/qwt_matrix_raster_data.cpp \
308 | ../XQwt/3rdparty/qwt/src/qwt_null_paintdevice.cpp \
309 | ../XQwt/3rdparty/qwt/src/qwt_painter.cpp \
310 | ../XQwt/3rdparty/qwt/src/qwt_painter_command.cpp \
311 | ../XQwt/3rdparty/qwt/src/qwt_panner.cpp \
312 | ../XQwt/3rdparty/qwt/src/qwt_picker.cpp \
313 | ../XQwt/3rdparty/qwt/src/qwt_picker_machine.cpp \
314 | ../XQwt/3rdparty/qwt/src/qwt_pixel_matrix.cpp \
315 | ../XQwt/3rdparty/qwt/src/qwt_plot.cpp \
316 | ../XQwt/3rdparty/qwt/src/qwt_plot_abstract_barchart.cpp \
317 | ../XQwt/3rdparty/qwt/src/qwt_plot_abstract_canvas.cpp \
318 | ../XQwt/3rdparty/qwt/src/qwt_plot_axis.cpp \
319 | ../XQwt/3rdparty/qwt/src/qwt_plot_barchart.cpp \
320 | ../XQwt/3rdparty/qwt/src/qwt_plot_canvas.cpp \
321 | ../XQwt/3rdparty/qwt/src/qwt_plot_curve.cpp \
322 | ../XQwt/3rdparty/qwt/src/qwt_plot_dict.cpp \
323 | ../XQwt/3rdparty/qwt/src/qwt_plot_directpainter.cpp \
324 | ../XQwt/3rdparty/qwt/src/qwt_plot_glcanvas.cpp \
325 | ../XQwt/3rdparty/qwt/src/qwt_plot_graphicitem.cpp \
326 | ../XQwt/3rdparty/qwt/src/qwt_plot_grid.cpp \
327 | ../XQwt/3rdparty/qwt/src/qwt_plot_histogram.cpp \
328 | ../XQwt/3rdparty/qwt/src/qwt_plot_intervalcurve.cpp \
329 | ../XQwt/3rdparty/qwt/src/qwt_plot_item.cpp \
330 | ../XQwt/3rdparty/qwt/src/qwt_plot_layout.cpp \
331 | ../XQwt/3rdparty/qwt/src/qwt_plot_legenditem.cpp \
332 | ../XQwt/3rdparty/qwt/src/qwt_plot_magnifier.cpp \
333 | ../XQwt/3rdparty/qwt/src/qwt_plot_marker.cpp \
334 | ../XQwt/3rdparty/qwt/src/qwt_plot_multi_barchart.cpp \
335 | ../XQwt/3rdparty/qwt/src/qwt_plot_opengl_canvas.cpp \
336 | ../XQwt/3rdparty/qwt/src/qwt_plot_panner.cpp \
337 | ../XQwt/3rdparty/qwt/src/qwt_plot_picker.cpp \
338 | ../XQwt/3rdparty/qwt/src/qwt_plot_rasteritem.cpp \
339 | ../XQwt/3rdparty/qwt/src/qwt_plot_renderer.cpp \
340 | ../XQwt/3rdparty/qwt/src/qwt_plot_rescaler.cpp \
341 | ../XQwt/3rdparty/qwt/src/qwt_plot_scaleitem.cpp \
342 | ../XQwt/3rdparty/qwt/src/qwt_plot_seriesitem.cpp \
343 | ../XQwt/3rdparty/qwt/src/qwt_plot_shapeitem.cpp \
344 | ../XQwt/3rdparty/qwt/src/qwt_plot_spectrocurve.cpp \
345 | ../XQwt/3rdparty/qwt/src/qwt_plot_spectrogram.cpp \
346 | ../XQwt/3rdparty/qwt/src/qwt_plot_svgitem.cpp \
347 | ../XQwt/3rdparty/qwt/src/qwt_plot_textlabel.cpp \
348 | ../XQwt/3rdparty/qwt/src/qwt_plot_tradingcurve.cpp \
349 | ../XQwt/3rdparty/qwt/src/qwt_plot_vectorfield.cpp \
350 | ../XQwt/3rdparty/qwt/src/qwt_plot_zoneitem.cpp \
351 | ../XQwt/3rdparty/qwt/src/qwt_plot_zoomer.cpp \
352 | ../XQwt/3rdparty/qwt/src/qwt_point_3d.cpp \
353 | ../XQwt/3rdparty/qwt/src/qwt_point_data.cpp \
354 | ../XQwt/3rdparty/qwt/src/qwt_point_mapper.cpp \
355 | ../XQwt/3rdparty/qwt/src/qwt_point_polar.cpp \
356 | ../XQwt/3rdparty/qwt/src/qwt_polar_canvas.cpp \
357 | ../XQwt/3rdparty/qwt/src/qwt_polar_curve.cpp \
358 | ../XQwt/3rdparty/qwt/src/qwt_polar_fitter.cpp \
359 | ../XQwt/3rdparty/qwt/src/qwt_polar_grid.cpp \
360 | ../XQwt/3rdparty/qwt/src/qwt_polar_item.cpp \
361 | ../XQwt/3rdparty/qwt/src/qwt_polar_itemdict.cpp \
362 | ../XQwt/3rdparty/qwt/src/qwt_polar_layout.cpp \
363 | ../XQwt/3rdparty/qwt/src/qwt_polar_magnifier.cpp \
364 | ../XQwt/3rdparty/qwt/src/qwt_polar_marker.cpp \
365 | ../XQwt/3rdparty/qwt/src/qwt_polar_panner.cpp \
366 | ../XQwt/3rdparty/qwt/src/qwt_polar_picker.cpp \
367 | ../XQwt/3rdparty/qwt/src/qwt_polar_plot.cpp \
368 | ../XQwt/3rdparty/qwt/src/qwt_polar_renderer.cpp \
369 | ../XQwt/3rdparty/qwt/src/qwt_polar_spectrogram.cpp \
370 | ../XQwt/3rdparty/qwt/src/qwt_raster_data.cpp \
371 | ../XQwt/3rdparty/qwt/src/qwt_round_scale_draw.cpp \
372 | ../XQwt/3rdparty/qwt/src/qwt_sampling_thread.cpp \
373 | ../XQwt/3rdparty/qwt/src/qwt_scale_div.cpp \
374 | ../XQwt/3rdparty/qwt/src/qwt_scale_draw.cpp \
375 | ../XQwt/3rdparty/qwt/src/qwt_scale_engine.cpp \
376 | ../XQwt/3rdparty/qwt/src/qwt_scale_map.cpp \
377 | ../XQwt/3rdparty/qwt/src/qwt_scale_widget.cpp \
378 | ../XQwt/3rdparty/qwt/src/qwt_series_data.cpp \
379 | ../XQwt/3rdparty/qwt/src/qwt_slider.cpp \
380 | ../XQwt/3rdparty/qwt/src/qwt_spline.cpp \
381 | ../XQwt/3rdparty/qwt/src/qwt_spline_basis.cpp \
382 | ../XQwt/3rdparty/qwt/src/qwt_spline_cubic.cpp \
383 | ../XQwt/3rdparty/qwt/src/qwt_spline_curve_fitter.cpp \
384 | ../XQwt/3rdparty/qwt/src/qwt_spline_local.cpp \
385 | ../XQwt/3rdparty/qwt/src/qwt_spline_parametrization.cpp \
386 | ../XQwt/3rdparty/qwt/src/qwt_spline_pleasing.cpp \
387 | ../XQwt/3rdparty/qwt/src/qwt_spline_polynomial.cpp \
388 | ../XQwt/3rdparty/qwt/src/qwt_symbol.cpp \
389 | ../XQwt/3rdparty/qwt/src/qwt_system_clock.cpp \
390 | ../XQwt/3rdparty/qwt/src/qwt_text.cpp \
391 | ../XQwt/3rdparty/qwt/src/qwt_text_engine.cpp \
392 | ../XQwt/3rdparty/qwt/src/qwt_text_label.cpp \
393 | ../XQwt/3rdparty/qwt/src/qwt_thermo.cpp \
394 | ../XQwt/3rdparty/qwt/src/qwt_transform.cpp \
395 | ../XQwt/3rdparty/qwt/src/qwt_vectorfield_symbol.cpp \
396 | ../XQwt/3rdparty/qwt/src/qwt_weeding_curve_fitter.cpp \
397 | ../XQwt/3rdparty/qwt/src/qwt_wheel.cpp \
398 | ../XQwt/3rdparty/qwt/src/qwt_widget_overlay.cpp \
399 | ../XShortcuts/dialogshortcuts.cpp \
400 | ../XShortcuts/xshortcuts.cpp \
401 | ../XShortcuts/xshortcutsdialog.cpp \
402 | ../XShortcuts/xshortcutstscrollarea.cpp \
403 | ../XShortcuts/xshortcutswidget.cpp \
404 | ../archive_widget/archive_widget.cpp \
405 | ../archive_widget/createviewmodelprocess.cpp \
406 | ../archive_widget/dialogarchive.cpp \
407 | ../archive_widget/dialogcreateviewmodel.cpp \
408 | ../archive_widget/dialogshowimage.cpp \
409 | ../archive_widget/dialogshowtext.cpp \
410 | ../archive_widget/dialogunpackfile.cpp \
411 | ../archive_widget/unpackfileprocess.cpp \
412 | ../console_source/main_console.cpp \
413 | dialogabout.cpp \
414 | dialogdirectoryscan.cpp \
415 | dialogoptions.cpp \
416 | guimainwindow.cpp \
417 | main_gui.cpp \
418 | ../nfd_widget/nfd_widget.cpp \
419 | ../winloader_source/winloader.cpp
420 |
421 |
--------------------------------------------------------------------------------