├── changelog.txt ├── README.md ├── release_version.txt ├── res ├── main.icns ├── main.ico ├── main.png ├── resource.rc ├── resource_icon.rc ├── Info.plist ├── Info.plist.in ├── license.txt ├── resource.rc.in ├── resource_icon.rc.in ├── readme.txt └── windows.manifest.xml ├── src ├── gui │ ├── images │ │ └── main.png │ ├── resources.qrc │ ├── dialogoptions.ui │ ├── dialogabout.h │ ├── dialogabout.ui │ ├── dialogoptions.h │ ├── dialogoptions.cpp │ ├── translation │ │ ├── xde_ar_AR.ts │ │ ├── xde_bn_BN.ts │ │ ├── xde_de_DE.ts │ │ ├── xde_es_ES.ts │ │ ├── xde_fa_FA.ts │ │ ├── xde_fr_FR.ts │ │ ├── xde_he_IL.ts │ │ ├── xde_id_ID.ts │ │ ├── xde_it_IT.ts │ │ ├── xde_ja_JP.ts │ │ ├── xde_ko_KR.ts │ │ ├── xde_pl_PL.ts │ │ ├── xde_pt_BR.ts │ │ ├── xde_pt_PT.ts │ │ ├── xde_ru_RU.ts │ │ ├── xde_sv_SE.ts │ │ ├── xde_tr_TR.ts │ │ ├── xde_uk_UA.ts │ │ ├── xde_vi_VN.ts │ │ ├── xde_zh_CN.ts │ │ └── xde_zh_TW.ts │ ├── guimainwindow.h │ ├── main_gui.cpp │ ├── dialogabout.cpp │ ├── guimainwindow.ui │ ├── CMakeLists.txt │ └── guimainwindow.cpp ├── global.h ├── CMakeLists.txt └── cli │ ├── CMakeLists.txt │ └── main_console.cpp ├── doc ├── RUN.md ├── BUILD.md └── THANKS.md ├── CMakeLists.txt └── LICENSE /changelog.txt: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | XDataExtractor 2 | -------------------------------------------------------------------------------- /release_version.txt: -------------------------------------------------------------------------------- 1 | 0.1.0 2 | -------------------------------------------------------------------------------- /res/main.icns: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/horsicq/XDataExtractor/master/res/main.icns -------------------------------------------------------------------------------- /res/main.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/horsicq/XDataExtractor/master/res/main.ico -------------------------------------------------------------------------------- /res/main.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/horsicq/XDataExtractor/master/res/main.png -------------------------------------------------------------------------------- /src/gui/images/main.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/horsicq/XDataExtractor/master/src/gui/images/main.png -------------------------------------------------------------------------------- /src/gui/resources.qrc: -------------------------------------------------------------------------------- 1 | 2 | 3 | images/main.png 4 | 5 | 6 | -------------------------------------------------------------------------------- /doc/RUN.md: -------------------------------------------------------------------------------- 1 | There are two versions of program. 2 | 3 | * **XDataExtractor** GUI version 4 | * **xdec** console version 5 | 6 | How to run portable version on Linux 7 | ======= 8 | 9 | - download an appImage file (https://github.com/horsicq/XDataExtractor/releases/download/0.09/NauzFileDetector-0.09-x86_64.AppImage) 10 | - make the file executable (chmod +x XDataExtractor-0.09-x86_64.AppImage) 11 | - run it (./XDataExtractor-0.09-x86_64.AppImage) 12 | -------------------------------------------------------------------------------- /CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.16) 2 | 3 | # Export compile commands for IDE integration (VS Code, clangd, etc.) 4 | set(CMAKE_EXPORT_COMPILE_COMMANDS ON) 5 | 6 | # Read project version from release_version.txt and make it available to subprojects 7 | file(STRINGS "${CMAKE_CURRENT_LIST_DIR}/release_version.txt" X_PROJECT_VERSION) 8 | if(NOT X_PROJECT_VERSION) 9 | set(X_PROJECT_VERSION "0.0.0") 10 | endif() 11 | set(X_PROJECT_VERSION "${X_PROJECT_VERSION}" CACHE STRING "Project version" FORCE) 12 | 13 | project(XDE VERSION ${X_PROJECT_VERSION} LANGUAGES CXX) 14 | 15 | add_subdirectory(src) 16 | 17 | -------------------------------------------------------------------------------- /res/resource.rc: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | CREATEPROCESS_MANIFEST_RESOURCE_ID RT_MANIFEST "windows.manifest.xml" 4 | VS_VERSION_INFO VERSIONINFO 5 | FILEVERSION 0,1,0,0 6 | PRODUCTVERSION 0,1,0,0 7 | FILEFLAGSMASK 0x3fL 8 | #ifdef _DEBUG 9 | FILEFLAGS VS_FF_DEBUG 10 | #else 11 | FILEFLAGS 0x0L 12 | #endif 13 | FILEOS VOS__WINDOWS32 14 | FILETYPE VFT_DLL 15 | FILESUBTYPE 0x0L 16 | BEGIN 17 | BLOCK "StringFileInfo" 18 | BEGIN 19 | BLOCK "040904b0" 20 | BEGIN 21 | VALUE "CompanyName", "ntinfo\0" 22 | VALUE "FileDescription", "XDataExtractor is an embedded data extractor for various file formats.\0" 23 | VALUE "FileVersion", "0.1.0.0\0" 24 | VALUE "LegalCopyright", "horsicq@gmail.com\0" 25 | VALUE "OriginalFilename", "xde.exe\0" 26 | VALUE "ProductName", "XDataExtractor\0" 27 | VALUE "ProductVersion", "0.1.0.0\0" 28 | END 29 | END 30 | BLOCK "VarFileInfo" 31 | BEGIN 32 | VALUE "Translation", 0x0409, 1200 33 | END 34 | END 35 | /* End of Version info */ 36 | 37 | -------------------------------------------------------------------------------- /res/resource_icon.rc: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | IDI_ICON1 ICON DISCARDABLE "main.ico" 4 | 5 | CREATEPROCESS_MANIFEST_RESOURCE_ID RT_MANIFEST "windows.manifest.xml" 6 | VS_VERSION_INFO VERSIONINFO 7 | FILEVERSION 0,1,0,0 8 | PRODUCTVERSION 0,1,0,0 9 | FILEFLAGSMASK 0x3fL 10 | #ifdef _DEBUG 11 | FILEFLAGS VS_FF_DEBUG 12 | #else 13 | FILEFLAGS 0x0L 14 | #endif 15 | FILEOS VOS__WINDOWS32 16 | FILETYPE VFT_DLL 17 | FILESUBTYPE 0x0L 18 | BEGIN 19 | BLOCK "StringFileInfo" 20 | BEGIN 21 | BLOCK "040904b0" 22 | BEGIN 23 | VALUE "CompanyName", "ntinfo\0" 24 | VALUE "FileDescription", "XDataExtractor is an embedded data extractor for various file formats.\0" 25 | VALUE "FileVersion", "0.1.0.0\0" 26 | VALUE "LegalCopyright", "horsicq@gmail.com\0" 27 | VALUE "OriginalFilename", "xde.exe\0" 28 | VALUE "ProductName", "XDataExtractor\0" 29 | VALUE "ProductVersion", "0.1.0.0\0" 30 | END 31 | END 32 | BLOCK "VarFileInfo" 33 | BEGIN 34 | VALUE "Translation", 0x0409, 1200 35 | END 36 | END 37 | /* End of Version info */ 38 | 39 | -------------------------------------------------------------------------------- /res/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | English 7 | CFBundleExecutable 8 | NauzFileDetector 9 | CFBundleGetInfoString 10 | 11 | CFBundleIconFile 12 | 13 | CFBundleIdentifier 14 | com.example.xxx 15 | CFBundleInfoDictionaryVersion 16 | 6.0 17 | CFBundleLongVersionString 18 | 0.1.0 19 | CFBundleName 20 | 21 | CFBundlePackageType 22 | APPL 23 | CFBundleShortVersionString 24 | 0.1 25 | CFBundleSignature 26 | ???? 27 | CFBundleVersion 28 | 0.1.0 29 | CSResourcesFileMapped 30 | 31 | NSHumanReadableCopyright 32 | 33 | 34 | 35 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2025 hors 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /res/Info.plist.in: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | English 7 | CFBundleExecutable 8 | @X_PROJECTNAME@ 9 | CFBundleIconFile 10 | main.icns 11 | CFBundleIdentifier 12 | @MACOSX_BUNDLE_GUI_IDENTIFIER@ 13 | CFBundleInfoDictionaryVersion 14 | 6.0 15 | CFBundleLongVersionString 16 | @X_PROJECT_VERSION@ 17 | CFBundlePackageType 18 | APPL 19 | CFBundleShortVersionString 20 | @PROJECT_VERSION_MAJOR@.@PROJECT_VERSION_MINOR@. 21 | CFBundleSignature 22 | ???? 23 | CFBundleVersion 24 | @PROJECT_VERSION_MAJOR@.@PROJECT_VERSION_MINOR@.@PROJECT_VERSION_PATCH@ 25 | CSResourcesFileMapped 26 | 27 | NSHumanReadableCopyright 28 | @X_COMPANYNAME@ 29 | 30 | 31 | -------------------------------------------------------------------------------- /res/license.txt: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2025 hors 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /res/resource.rc.in: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | CREATEPROCESS_MANIFEST_RESOURCE_ID RT_MANIFEST "windows.manifest.xml" 4 | VS_VERSION_INFO VERSIONINFO 5 | FILEVERSION @PROJECT_VERSION_MAJOR@,@PROJECT_VERSION_MINOR@,@PROJECT_VERSION_PATCH@,0 6 | PRODUCTVERSION @PROJECT_VERSION_MAJOR@,@PROJECT_VERSION_MINOR@,@PROJECT_VERSION_PATCH@,0 7 | FILEFLAGSMASK 0x3fL 8 | #ifdef _DEBUG 9 | FILEFLAGS VS_FF_DEBUG 10 | #else 11 | FILEFLAGS 0x0L 12 | #endif 13 | FILEOS VOS__WINDOWS32 14 | FILETYPE VFT_DLL 15 | FILESUBTYPE 0x0L 16 | BEGIN 17 | BLOCK "StringFileInfo" 18 | BEGIN 19 | BLOCK "040904b0" 20 | BEGIN 21 | VALUE "CompanyName", "@X_COMPANYNAME@\0" 22 | VALUE "FileDescription", "@X_DESCRIPTION@\0" 23 | VALUE "FileVersion", "@PROJECT_VERSION_MAJOR@.@PROJECT_VERSION_MINOR@.@PROJECT_VERSION_PATCH@.0\0" 24 | VALUE "LegalCopyright", "@X_MAINTAINER@\0" 25 | VALUE "OriginalFilename", "@X_ORIGINAL_FILENAME@.exe\0" 26 | VALUE "ProductName", "@X_PROJECTNAME@\0" 27 | VALUE "ProductVersion", "@PROJECT_VERSION_MAJOR@.@PROJECT_VERSION_MINOR@.@PROJECT_VERSION_PATCH@.0\0" 28 | END 29 | END 30 | BLOCK "VarFileInfo" 31 | BEGIN 32 | VALUE "Translation", 0x0409, 1200 33 | END 34 | END 35 | /* End of Version info */ 36 | 37 | -------------------------------------------------------------------------------- /res/resource_icon.rc.in: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | IDI_ICON1 ICON DISCARDABLE "main.ico" 4 | 5 | CREATEPROCESS_MANIFEST_RESOURCE_ID RT_MANIFEST "windows.manifest.xml" 6 | VS_VERSION_INFO VERSIONINFO 7 | FILEVERSION @PROJECT_VERSION_MAJOR@,@PROJECT_VERSION_MINOR@,@PROJECT_VERSION_PATCH@,0 8 | PRODUCTVERSION @PROJECT_VERSION_MAJOR@,@PROJECT_VERSION_MINOR@,@PROJECT_VERSION_PATCH@,0 9 | FILEFLAGSMASK 0x3fL 10 | #ifdef _DEBUG 11 | FILEFLAGS VS_FF_DEBUG 12 | #else 13 | FILEFLAGS 0x0L 14 | #endif 15 | FILEOS VOS__WINDOWS32 16 | FILETYPE VFT_DLL 17 | FILESUBTYPE 0x0L 18 | BEGIN 19 | BLOCK "StringFileInfo" 20 | BEGIN 21 | BLOCK "040904b0" 22 | BEGIN 23 | VALUE "CompanyName", "@X_COMPANYNAME@\0" 24 | VALUE "FileDescription", "@X_DESCRIPTION@\0" 25 | VALUE "FileVersion", "@PROJECT_VERSION_MAJOR@.@PROJECT_VERSION_MINOR@.@PROJECT_VERSION_PATCH@.0\0" 26 | VALUE "LegalCopyright", "@X_MAINTAINER@\0" 27 | VALUE "OriginalFilename", "@X_ORIGINAL_FILENAME@.exe\0" 28 | VALUE "ProductName", "@X_PROJECTNAME@\0" 29 | VALUE "ProductVersion", "@PROJECT_VERSION_MAJOR@.@PROJECT_VERSION_MINOR@.@PROJECT_VERSION_PATCH@.0\0" 30 | END 31 | END 32 | BLOCK "VarFileInfo" 33 | BEGIN 34 | VALUE "Translation", 0x0409, 1200 35 | END 36 | END 37 | /* End of Version info */ 38 | 39 | -------------------------------------------------------------------------------- /src/gui/dialogoptions.ui: -------------------------------------------------------------------------------- 1 | 2 | 3 | DialogOptions 4 | 5 | 6 | Qt::ApplicationModal 7 | 8 | 9 | 10 | 0 11 | 0 12 | 404 13 | 343 14 | 15 | 16 | 17 | Options 18 | 19 | 20 | true 21 | 22 | 23 | 24 | 25 | 26 | 27 | 0 28 | 0 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | XOptionsWidget 38 | QWidget 39 |
xoptionswidget.h
40 | 1 41 |
42 |
43 | 44 | 45 |
46 | -------------------------------------------------------------------------------- /src/global.h: -------------------------------------------------------------------------------- 1 | /* Copyright (c) 2025 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 | #ifndef _GLOBAL_H 22 | #define _GLOBAL_H 23 | 24 | #include 25 | 26 | #define X_APPLICATIONDISPLAYNAME "XDataExtractor" 27 | #define X_APPLICATIONNAME "XDataExtractor" 28 | #define X_APPLICATIONVERSION "0.1.0" 29 | #define X_ORGANIZATIONNAME "NTInfo" 30 | #define X_ORGANIZATIONDOMAIN "ntinfo.biz" 31 | #define X_OPTIONSFILE "XDataExtractor.ini" 32 | #define X_SHORTCUTSFILE "shortcuts.ini" 33 | 34 | #endif // _GLOBAL_H 35 | -------------------------------------------------------------------------------- /res/readme.txt: -------------------------------------------------------------------------------- 1 | [![Donate](https://img.shields.io/badge/Donate-PayPal-green.svg)](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=NF3FBD3KHMXDN) 2 | [![GitHub tag (latest SemVer)](https://img.shields.io/github/tag/horsicq/Nauz-File-Detector.svg)](https://github.com/horsicq/Nauz-File-Detector/releases) 3 | [![GitHub All Releases](https://img.shields.io/github/downloads/horsicq/Nauz-File-Detector/total.svg)](https://github.com/horsicq/Nauz-File-Detector/releases) 4 | 5 | * [Beta Release](https://github.com/horsicq/Nauz-File-Detector/releases/tag/Beta) 6 | 7 | ![alt text](https://github.com/horsicq/Nauz-File-Detector/blob/master/doc/mascots/mascot.png "Mascot") 8 | 9 | **Nauz File Detector** is a portable linker/compiler/packer identifier utility. 10 | 11 | The program works on macOS, Linux and Windows. 12 | 13 | ![alt text](https://github.com/horsicq/Nauz-File-Detector/blob/master/doc/1.png "1") 14 | ![alt text](https://github.com/horsicq/Nauz-File-Detector/blob/master/doc/2.png "2") 15 | 16 | * Download: https://github.com/horsicq/Nauz-File-Detector/releases 17 | * How to run: https://github.com/horsicq/Nauz-File-Detector/blob/master/doc/RUN.md 18 | * How to build: https://github.com/horsicq/Nauz-File-Detector/blob/master/doc/BUILD.md 19 | * Changelog: https://github.com/horsicq/Nauz-File-Detector/blob/master/changelog.txt 20 | 21 | You can help with translation: https://github.com/horsicq/XTranslation 22 | 23 | ![alt text](https://github.com/horsicq/Nauz-File-Detector/blob/master/doc/mascots/nfd.png "Mascot") 24 | 25 | ## Special Thanks 26 | 27 | - [PELock Software Protection & Reverse Engineering](https://www.pelock.com) 28 | -------------------------------------------------------------------------------- /src/gui/dialogabout.h: -------------------------------------------------------------------------------- 1 | /* Copyright (c) 2025 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 | #ifndef DIALOGABOUT_H 22 | #define DIALOGABOUT_H 23 | 24 | #include 25 | #include 26 | 27 | #include "../global.h" 28 | #include "xoptions.h" 29 | 30 | namespace Ui { 31 | class DialogAbout; 32 | } 33 | 34 | class DialogAbout : public QDialog { 35 | Q_OBJECT 36 | 37 | public: 38 | explicit DialogAbout(QWidget *pParent = nullptr); 39 | ~DialogAbout(); 40 | 41 | private slots: 42 | void on_pushButtonOK_clicked(); 43 | 44 | private: 45 | Ui::DialogAbout *ui; 46 | }; 47 | 48 | #endif // DIALOGABOUT_H 49 | -------------------------------------------------------------------------------- /res/windows.manifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | true 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | -------------------------------------------------------------------------------- /src/gui/dialogabout.ui: -------------------------------------------------------------------------------- 1 | 2 | 3 | DialogAbout 4 | 5 | 6 | Qt::ApplicationModal 7 | 8 | 9 | 10 | 0 11 | 0 12 | 513 13 | 398 14 | 15 | 16 | 17 | About 18 | 19 | 20 | true 21 | 22 | 23 | 24 | 25 | 26 | 27 | 0 28 | 0 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | Qt::Horizontal 39 | 40 | 41 | 42 | 40 43 | 20 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | OK 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | XAboutWidget 62 | QWidget 63 |
xaboutwidget.h
64 | 1 65 |
66 |
67 | 68 | 69 |
70 | -------------------------------------------------------------------------------- /src/gui/dialogoptions.h: -------------------------------------------------------------------------------- 1 | /* Copyright (c) 2025 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 | #ifndef DIALOGOPTIONS_H 22 | #define DIALOGOPTIONS_H 23 | 24 | #include 25 | #include 26 | #include 27 | #include 28 | 29 | #include "../global.h" 30 | // #include "dieoptionswidget.h" 31 | #include "xoptions.h" 32 | #include "xshortcutsdialog.h" 33 | 34 | namespace Ui { 35 | class DialogOptions; 36 | } 37 | 38 | class DialogOptions : public XShortcutsDialog { 39 | Q_OBJECT 40 | 41 | public: 42 | explicit DialogOptions(QWidget *pParent, XOptions *pOptions, XOptions::GROUPID groupId); 43 | ~DialogOptions(); 44 | 45 | virtual void adjustView(); 46 | 47 | protected: 48 | virtual void registerShortcuts(bool bState); 49 | 50 | private: 51 | Ui::DialogOptions *ui; 52 | // NFDOptionsWidget *g_pNFDOptionsWidget; 53 | XOptions *g_pOptions; 54 | }; 55 | 56 | #endif // DIALOGOPTIONS_H 57 | -------------------------------------------------------------------------------- /src/gui/dialogoptions.cpp: -------------------------------------------------------------------------------- 1 | /* Copyright (c) 2025 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 "dialogoptions.h" 22 | 23 | #include "ui_dialogoptions.h" 24 | 25 | DialogOptions::DialogOptions(QWidget *pParent, XOptions *pOptions, XOptions::GROUPID groupId) : XShortcutsDialog(pParent), ui(new Ui::DialogOptions) 26 | { 27 | ui->setupUi(this); 28 | 29 | // g_pNFDOptionsWidget = new NFDOptionsWidget(this); 30 | 31 | this->g_pOptions = pOptions; 32 | 33 | ui->widgetOptions->setOptions(pOptions, X_APPLICATIONDISPLAYNAME); 34 | 35 | // ui->widgetOptions->addPage(g_pNFDOptionsWidget, tr("Scan")); 36 | // g_pNFDOptionsWidget->setOptions(pOptions); 37 | // g_pNFDOptionsWidget->setGlobal(getShortcuts(), getGlobalOptions()); 38 | 39 | ui->widgetOptions->setCurrentPage(groupId); 40 | } 41 | 42 | DialogOptions::~DialogOptions() 43 | { 44 | delete ui; 45 | } 46 | 47 | void DialogOptions::adjustView() 48 | { 49 | } 50 | 51 | void DialogOptions::registerShortcuts(bool bState) 52 | { 53 | Q_UNUSED(bState) 54 | } 55 | -------------------------------------------------------------------------------- /src/gui/translation/xde_ar_AR.ts: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | DialogAbout 6 | 7 | About 8 | 9 | 10 | 11 | OK 12 | 13 | 14 | 15 | Bugreports 16 | 17 | 18 | 19 | Website 20 | 21 | 22 | 23 | Donate 24 | 25 | 26 | 27 | Source code 28 | 29 | 30 | 31 | 32 | DialogOptions 33 | 34 | Options 35 | 36 | 37 | 38 | 39 | GuiMainWindow 40 | 41 | File 42 | 43 | 44 | 45 | Options 46 | 47 | 48 | 49 | About 50 | 51 | 52 | 53 | Exit 54 | 55 | 56 | 57 | Error 58 | 59 | 60 | 61 | Cannot open file 62 | 63 | 64 | 65 | Open file 66 | 67 | 68 | 69 | All files 70 | 71 | 72 | 73 | 74 | -------------------------------------------------------------------------------- /src/gui/translation/xde_bn_BN.ts: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | DialogAbout 6 | 7 | About 8 | 9 | 10 | 11 | OK 12 | 13 | 14 | 15 | Bugreports 16 | 17 | 18 | 19 | Website 20 | 21 | 22 | 23 | Donate 24 | 25 | 26 | 27 | Source code 28 | 29 | 30 | 31 | 32 | DialogOptions 33 | 34 | Options 35 | 36 | 37 | 38 | 39 | GuiMainWindow 40 | 41 | File 42 | 43 | 44 | 45 | Options 46 | 47 | 48 | 49 | About 50 | 51 | 52 | 53 | Exit 54 | 55 | 56 | 57 | Error 58 | 59 | 60 | 61 | Cannot open file 62 | 63 | 64 | 65 | Open file 66 | 67 | 68 | 69 | All files 70 | 71 | 72 | 73 | 74 | -------------------------------------------------------------------------------- /src/gui/translation/xde_de_DE.ts: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | DialogAbout 6 | 7 | About 8 | 9 | 10 | 11 | OK 12 | 13 | 14 | 15 | Bugreports 16 | 17 | 18 | 19 | Website 20 | 21 | 22 | 23 | Donate 24 | 25 | 26 | 27 | Source code 28 | 29 | 30 | 31 | 32 | DialogOptions 33 | 34 | Options 35 | 36 | 37 | 38 | 39 | GuiMainWindow 40 | 41 | File 42 | 43 | 44 | 45 | Options 46 | 47 | 48 | 49 | About 50 | 51 | 52 | 53 | Exit 54 | 55 | 56 | 57 | Error 58 | 59 | 60 | 61 | Cannot open file 62 | 63 | 64 | 65 | Open file 66 | 67 | 68 | 69 | All files 70 | 71 | 72 | 73 | 74 | -------------------------------------------------------------------------------- /src/gui/translation/xde_es_ES.ts: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | DialogAbout 6 | 7 | About 8 | 9 | 10 | 11 | OK 12 | 13 | 14 | 15 | Bugreports 16 | 17 | 18 | 19 | Website 20 | 21 | 22 | 23 | Donate 24 | 25 | 26 | 27 | Source code 28 | 29 | 30 | 31 | 32 | DialogOptions 33 | 34 | Options 35 | 36 | 37 | 38 | 39 | GuiMainWindow 40 | 41 | File 42 | 43 | 44 | 45 | Options 46 | 47 | 48 | 49 | About 50 | 51 | 52 | 53 | Exit 54 | 55 | 56 | 57 | Error 58 | 59 | 60 | 61 | Cannot open file 62 | 63 | 64 | 65 | Open file 66 | 67 | 68 | 69 | All files 70 | 71 | 72 | 73 | 74 | -------------------------------------------------------------------------------- /src/gui/translation/xde_fa_FA.ts: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | DialogAbout 6 | 7 | About 8 | 9 | 10 | 11 | OK 12 | 13 | 14 | 15 | Bugreports 16 | 17 | 18 | 19 | Website 20 | 21 | 22 | 23 | Donate 24 | 25 | 26 | 27 | Source code 28 | 29 | 30 | 31 | 32 | DialogOptions 33 | 34 | Options 35 | 36 | 37 | 38 | 39 | GuiMainWindow 40 | 41 | File 42 | 43 | 44 | 45 | Options 46 | 47 | 48 | 49 | About 50 | 51 | 52 | 53 | Exit 54 | 55 | 56 | 57 | Error 58 | 59 | 60 | 61 | Cannot open file 62 | 63 | 64 | 65 | Open file 66 | 67 | 68 | 69 | All files 70 | 71 | 72 | 73 | 74 | -------------------------------------------------------------------------------- /src/gui/translation/xde_fr_FR.ts: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | DialogAbout 6 | 7 | About 8 | 9 | 10 | 11 | OK 12 | 13 | 14 | 15 | Bugreports 16 | 17 | 18 | 19 | Website 20 | 21 | 22 | 23 | Donate 24 | 25 | 26 | 27 | Source code 28 | 29 | 30 | 31 | 32 | DialogOptions 33 | 34 | Options 35 | 36 | 37 | 38 | 39 | GuiMainWindow 40 | 41 | File 42 | 43 | 44 | 45 | Options 46 | 47 | 48 | 49 | About 50 | 51 | 52 | 53 | Exit 54 | 55 | 56 | 57 | Error 58 | 59 | 60 | 61 | Cannot open file 62 | 63 | 64 | 65 | Open file 66 | 67 | 68 | 69 | All files 70 | 71 | 72 | 73 | 74 | -------------------------------------------------------------------------------- /src/gui/translation/xde_he_IL.ts: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | DialogAbout 6 | 7 | About 8 | 9 | 10 | 11 | OK 12 | 13 | 14 | 15 | Bugreports 16 | 17 | 18 | 19 | Website 20 | 21 | 22 | 23 | Donate 24 | 25 | 26 | 27 | Source code 28 | 29 | 30 | 31 | 32 | DialogOptions 33 | 34 | Options 35 | 36 | 37 | 38 | 39 | GuiMainWindow 40 | 41 | File 42 | 43 | 44 | 45 | Options 46 | 47 | 48 | 49 | About 50 | 51 | 52 | 53 | Exit 54 | 55 | 56 | 57 | Error 58 | 59 | 60 | 61 | Cannot open file 62 | 63 | 64 | 65 | Open file 66 | 67 | 68 | 69 | All files 70 | 71 | 72 | 73 | 74 | -------------------------------------------------------------------------------- /src/gui/translation/xde_id_ID.ts: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | DialogAbout 6 | 7 | About 8 | 9 | 10 | 11 | OK 12 | 13 | 14 | 15 | Bugreports 16 | 17 | 18 | 19 | Website 20 | 21 | 22 | 23 | Donate 24 | 25 | 26 | 27 | Source code 28 | 29 | 30 | 31 | 32 | DialogOptions 33 | 34 | Options 35 | 36 | 37 | 38 | 39 | GuiMainWindow 40 | 41 | File 42 | 43 | 44 | 45 | Options 46 | 47 | 48 | 49 | About 50 | 51 | 52 | 53 | Exit 54 | 55 | 56 | 57 | Error 58 | 59 | 60 | 61 | Cannot open file 62 | 63 | 64 | 65 | Open file 66 | 67 | 68 | 69 | All files 70 | 71 | 72 | 73 | 74 | -------------------------------------------------------------------------------- /src/gui/translation/xde_it_IT.ts: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | DialogAbout 6 | 7 | About 8 | 9 | 10 | 11 | OK 12 | 13 | 14 | 15 | Bugreports 16 | 17 | 18 | 19 | Website 20 | 21 | 22 | 23 | Donate 24 | 25 | 26 | 27 | Source code 28 | 29 | 30 | 31 | 32 | DialogOptions 33 | 34 | Options 35 | 36 | 37 | 38 | 39 | GuiMainWindow 40 | 41 | File 42 | 43 | 44 | 45 | Options 46 | 47 | 48 | 49 | About 50 | 51 | 52 | 53 | Exit 54 | 55 | 56 | 57 | Error 58 | 59 | 60 | 61 | Cannot open file 62 | 63 | 64 | 65 | Open file 66 | 67 | 68 | 69 | All files 70 | 71 | 72 | 73 | 74 | -------------------------------------------------------------------------------- /src/gui/translation/xde_ja_JP.ts: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | DialogAbout 6 | 7 | About 8 | 9 | 10 | 11 | OK 12 | 13 | 14 | 15 | Bugreports 16 | 17 | 18 | 19 | Website 20 | 21 | 22 | 23 | Donate 24 | 25 | 26 | 27 | Source code 28 | 29 | 30 | 31 | 32 | DialogOptions 33 | 34 | Options 35 | 36 | 37 | 38 | 39 | GuiMainWindow 40 | 41 | File 42 | 43 | 44 | 45 | Options 46 | 47 | 48 | 49 | About 50 | 51 | 52 | 53 | Exit 54 | 55 | 56 | 57 | Error 58 | 59 | 60 | 61 | Cannot open file 62 | 63 | 64 | 65 | Open file 66 | 67 | 68 | 69 | All files 70 | 71 | 72 | 73 | 74 | -------------------------------------------------------------------------------- /src/gui/translation/xde_ko_KR.ts: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | DialogAbout 6 | 7 | About 8 | 9 | 10 | 11 | OK 12 | 13 | 14 | 15 | Bugreports 16 | 17 | 18 | 19 | Website 20 | 21 | 22 | 23 | Donate 24 | 25 | 26 | 27 | Source code 28 | 29 | 30 | 31 | 32 | DialogOptions 33 | 34 | Options 35 | 36 | 37 | 38 | 39 | GuiMainWindow 40 | 41 | File 42 | 43 | 44 | 45 | Options 46 | 47 | 48 | 49 | About 50 | 51 | 52 | 53 | Exit 54 | 55 | 56 | 57 | Error 58 | 59 | 60 | 61 | Cannot open file 62 | 63 | 64 | 65 | Open file 66 | 67 | 68 | 69 | All files 70 | 71 | 72 | 73 | 74 | -------------------------------------------------------------------------------- /src/gui/translation/xde_pl_PL.ts: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | DialogAbout 6 | 7 | About 8 | 9 | 10 | 11 | OK 12 | 13 | 14 | 15 | Bugreports 16 | 17 | 18 | 19 | Website 20 | 21 | 22 | 23 | Donate 24 | 25 | 26 | 27 | Source code 28 | 29 | 30 | 31 | 32 | DialogOptions 33 | 34 | Options 35 | 36 | 37 | 38 | 39 | GuiMainWindow 40 | 41 | File 42 | 43 | 44 | 45 | Options 46 | 47 | 48 | 49 | About 50 | 51 | 52 | 53 | Exit 54 | 55 | 56 | 57 | Error 58 | 59 | 60 | 61 | Cannot open file 62 | 63 | 64 | 65 | Open file 66 | 67 | 68 | 69 | All files 70 | 71 | 72 | 73 | 74 | -------------------------------------------------------------------------------- /src/gui/translation/xde_pt_BR.ts: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | DialogAbout 6 | 7 | About 8 | 9 | 10 | 11 | OK 12 | 13 | 14 | 15 | Bugreports 16 | 17 | 18 | 19 | Website 20 | 21 | 22 | 23 | Donate 24 | 25 | 26 | 27 | Source code 28 | 29 | 30 | 31 | 32 | DialogOptions 33 | 34 | Options 35 | 36 | 37 | 38 | 39 | GuiMainWindow 40 | 41 | File 42 | 43 | 44 | 45 | Options 46 | 47 | 48 | 49 | About 50 | 51 | 52 | 53 | Exit 54 | 55 | 56 | 57 | Error 58 | 59 | 60 | 61 | Cannot open file 62 | 63 | 64 | 65 | Open file 66 | 67 | 68 | 69 | All files 70 | 71 | 72 | 73 | 74 | -------------------------------------------------------------------------------- /src/gui/translation/xde_pt_PT.ts: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | DialogAbout 6 | 7 | About 8 | 9 | 10 | 11 | OK 12 | 13 | 14 | 15 | Bugreports 16 | 17 | 18 | 19 | Website 20 | 21 | 22 | 23 | Donate 24 | 25 | 26 | 27 | Source code 28 | 29 | 30 | 31 | 32 | DialogOptions 33 | 34 | Options 35 | 36 | 37 | 38 | 39 | GuiMainWindow 40 | 41 | File 42 | 43 | 44 | 45 | Options 46 | 47 | 48 | 49 | About 50 | 51 | 52 | 53 | Exit 54 | 55 | 56 | 57 | Error 58 | 59 | 60 | 61 | Cannot open file 62 | 63 | 64 | 65 | Open file 66 | 67 | 68 | 69 | All files 70 | 71 | 72 | 73 | 74 | -------------------------------------------------------------------------------- /src/gui/translation/xde_ru_RU.ts: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | DialogAbout 6 | 7 | About 8 | 9 | 10 | 11 | OK 12 | 13 | 14 | 15 | Bugreports 16 | 17 | 18 | 19 | Website 20 | 21 | 22 | 23 | Donate 24 | 25 | 26 | 27 | Source code 28 | 29 | 30 | 31 | 32 | DialogOptions 33 | 34 | Options 35 | 36 | 37 | 38 | 39 | GuiMainWindow 40 | 41 | File 42 | 43 | 44 | 45 | Options 46 | 47 | 48 | 49 | About 50 | 51 | 52 | 53 | Exit 54 | 55 | 56 | 57 | Error 58 | 59 | 60 | 61 | Cannot open file 62 | 63 | 64 | 65 | Open file 66 | 67 | 68 | 69 | All files 70 | 71 | 72 | 73 | 74 | -------------------------------------------------------------------------------- /src/gui/translation/xde_sv_SE.ts: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | DialogAbout 6 | 7 | About 8 | 9 | 10 | 11 | OK 12 | 13 | 14 | 15 | Bugreports 16 | 17 | 18 | 19 | Website 20 | 21 | 22 | 23 | Donate 24 | 25 | 26 | 27 | Source code 28 | 29 | 30 | 31 | 32 | DialogOptions 33 | 34 | Options 35 | 36 | 37 | 38 | 39 | GuiMainWindow 40 | 41 | File 42 | 43 | 44 | 45 | Options 46 | 47 | 48 | 49 | About 50 | 51 | 52 | 53 | Exit 54 | 55 | 56 | 57 | Error 58 | 59 | 60 | 61 | Cannot open file 62 | 63 | 64 | 65 | Open file 66 | 67 | 68 | 69 | All files 70 | 71 | 72 | 73 | 74 | -------------------------------------------------------------------------------- /src/gui/translation/xde_tr_TR.ts: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | DialogAbout 6 | 7 | About 8 | 9 | 10 | 11 | OK 12 | 13 | 14 | 15 | Bugreports 16 | 17 | 18 | 19 | Website 20 | 21 | 22 | 23 | Donate 24 | 25 | 26 | 27 | Source code 28 | 29 | 30 | 31 | 32 | DialogOptions 33 | 34 | Options 35 | 36 | 37 | 38 | 39 | GuiMainWindow 40 | 41 | File 42 | 43 | 44 | 45 | Options 46 | 47 | 48 | 49 | About 50 | 51 | 52 | 53 | Exit 54 | 55 | 56 | 57 | Error 58 | 59 | 60 | 61 | Cannot open file 62 | 63 | 64 | 65 | Open file 66 | 67 | 68 | 69 | All files 70 | 71 | 72 | 73 | 74 | -------------------------------------------------------------------------------- /src/gui/translation/xde_uk_UA.ts: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | DialogAbout 6 | 7 | About 8 | 9 | 10 | 11 | OK 12 | 13 | 14 | 15 | Bugreports 16 | 17 | 18 | 19 | Website 20 | 21 | 22 | 23 | Donate 24 | 25 | 26 | 27 | Source code 28 | 29 | 30 | 31 | 32 | DialogOptions 33 | 34 | Options 35 | 36 | 37 | 38 | 39 | GuiMainWindow 40 | 41 | File 42 | 43 | 44 | 45 | Options 46 | 47 | 48 | 49 | About 50 | 51 | 52 | 53 | Exit 54 | 55 | 56 | 57 | Error 58 | 59 | 60 | 61 | Cannot open file 62 | 63 | 64 | 65 | Open file 66 | 67 | 68 | 69 | All files 70 | 71 | 72 | 73 | 74 | -------------------------------------------------------------------------------- /src/gui/translation/xde_vi_VN.ts: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | DialogAbout 6 | 7 | About 8 | 9 | 10 | 11 | OK 12 | 13 | 14 | 15 | Bugreports 16 | 17 | 18 | 19 | Website 20 | 21 | 22 | 23 | Donate 24 | 25 | 26 | 27 | Source code 28 | 29 | 30 | 31 | 32 | DialogOptions 33 | 34 | Options 35 | 36 | 37 | 38 | 39 | GuiMainWindow 40 | 41 | File 42 | 43 | 44 | 45 | Options 46 | 47 | 48 | 49 | About 50 | 51 | 52 | 53 | Exit 54 | 55 | 56 | 57 | Error 58 | 59 | 60 | 61 | Cannot open file 62 | 63 | 64 | 65 | Open file 66 | 67 | 68 | 69 | All files 70 | 71 | 72 | 73 | 74 | -------------------------------------------------------------------------------- /src/gui/translation/xde_zh_CN.ts: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | DialogAbout 6 | 7 | About 8 | 9 | 10 | 11 | OK 12 | 13 | 14 | 15 | Bugreports 16 | 17 | 18 | 19 | Website 20 | 21 | 22 | 23 | Donate 24 | 25 | 26 | 27 | Source code 28 | 29 | 30 | 31 | 32 | DialogOptions 33 | 34 | Options 35 | 36 | 37 | 38 | 39 | GuiMainWindow 40 | 41 | File 42 | 43 | 44 | 45 | Options 46 | 47 | 48 | 49 | About 50 | 51 | 52 | 53 | Exit 54 | 55 | 56 | 57 | Error 58 | 59 | 60 | 61 | Cannot open file 62 | 63 | 64 | 65 | Open file 66 | 67 | 68 | 69 | All files 70 | 71 | 72 | 73 | 74 | -------------------------------------------------------------------------------- /src/gui/translation/xde_zh_TW.ts: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | DialogAbout 6 | 7 | About 8 | 9 | 10 | 11 | OK 12 | 13 | 14 | 15 | Bugreports 16 | 17 | 18 | 19 | Website 20 | 21 | 22 | 23 | Donate 24 | 25 | 26 | 27 | Source code 28 | 29 | 30 | 31 | 32 | DialogOptions 33 | 34 | Options 35 | 36 | 37 | 38 | 39 | GuiMainWindow 40 | 41 | File 42 | 43 | 44 | 45 | Options 46 | 47 | 48 | 49 | About 50 | 51 | 52 | 53 | Exit 54 | 55 | 56 | 57 | Error 58 | 59 | 60 | 61 | Cannot open file 62 | 63 | 64 | 65 | Open file 66 | 67 | 68 | 69 | All files 70 | 71 | 72 | 73 | 74 | -------------------------------------------------------------------------------- /doc/BUILD.md: -------------------------------------------------------------------------------- 1 | How to build on Docker 2 | ======= 3 | git clone --recursive https://github.com/horsicq/XDataExtractor.git 4 | 5 | cd XDataExtractor 6 | 7 | docker build . 8 | 9 | How to build on Linux based on Debian 10 | ======= 11 | 12 | Install packages: 13 | 14 | - sudo apt-get install --quiet --assume-yes git 15 | - sudo apt-get install --quiet --assume-yes build-essential 16 | - sudo apt-get install --quiet --assume-yes qtbase5-dev 17 | - sudo apt-get install --quiet --assume-yes qttools5-dev-tools 18 | - sudo apt-get install --quiet --assume-yes qt5-default (Ubuntu 14.04-20.04) 19 | - sudo apt-get install --quiet --assume-yes qt5-qmake (Ubuntu 21.04-22.04) 20 | 21 | git clone --recursive https://github.com/horsicq/XDataExtractor.git 22 | 23 | cd XDataExtractor 24 | 25 | Run build script: bash -x build_dpkg.sh 26 | 27 | Install deb package: sudo dpkg -i release/XDataExtractor_[Version].deb 28 | 29 | Run: *XDataExtractor [FileName]* or *xdec [FileName]* 30 | 31 | How to build on macOS 32 | ======= 33 | 34 | Install Qt 5.15.2: https://github.com/horsicq/build_tools 35 | 36 | Clone project: git clone --recursive https://github.com/horsicq/XDataExtractor.git 37 | 38 | cd Nauz-File-Detector 39 | 40 | Edit build_mac.sh ( check QT_PATH variable) 41 | 42 | Run build_mac.sh 43 | 44 | How to build on Windows(XP) 45 | ======= 46 | 47 | Install Visual Studio 2013: https://github.com/horsicq/build_tools 48 | 49 | Install Qt 5.6.3 for VS2013: https://github.com/horsicq/build_tools 50 | 51 | Install 7-Zip: https://www.7-zip.org/ 52 | 53 | Clone project: git clone --recursive https://github.com/horsicq/XDataExtractor.git 54 | 55 | cd XDataExtractor 56 | 57 | Edit build_winxp.bat ( check VS_PATH, SEVENZIP_PATH, QT_PATH variables) 58 | 59 | Run build_winxp.bat 60 | 61 | How to build on Windows(7-11) 62 | ======= 63 | 64 | Install Visual Studio 2019: https://github.com/horsicq/build_tools 65 | 66 | Install Qt 5.15.2 for VS2019: https://github.com/horsicq/build_tools 67 | 68 | Install 7-Zip: https://www.7-zip.org/ 69 | 70 | Clone project: git clone --recursive https://github.com/horsicq/XDataExtractor.git 71 | 72 | cd XDataExtractor 73 | 74 | Edit build_msvc_win32.bat ( check VSVARS_PATH, SEVENZIP_PATH, QMAKE_PATH variables) 75 | 76 | Edit build_msvc_win64.bat ( check VSVARS_PATH, SEVENZIP_PATH, QMAKE_PATH variables) 77 | 78 | Run build_win32.bat 79 | 80 | Run build_win64.bat 81 | -------------------------------------------------------------------------------- /src/gui/guimainwindow.h: -------------------------------------------------------------------------------- 1 | /* Copyright (c) 2025 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 | #ifndef GUIMAINWINDOW_H 22 | #define GUIMAINWINDOW_H 23 | 24 | #include 25 | #include 26 | #include 27 | #include 28 | 29 | #include "../global.h" 30 | #include "dialogabout.h" 31 | #include "dialogoptions.h" 32 | #include "xoptions.h" 33 | #include "xextractor.h" 34 | #include "xextractorwidget.h" 35 | 36 | namespace Ui { 37 | class GuiMainWindow; 38 | } 39 | 40 | class GuiMainWindow : public QMainWindow { 41 | Q_OBJECT 42 | 43 | public: 44 | explicit GuiMainWindow(QWidget *pParent = nullptr); 45 | ~GuiMainWindow() override; 46 | 47 | private slots: 48 | void setFileName(const QString &sName, bool bOpen = true); 49 | void on_pushButtonExit_clicked(); 50 | void on_pushButtonOpenFile_clicked(); 51 | void on_pushButtonAbout_clicked(); 52 | void on_pushButtonOptions_clicked(); 53 | void adjustView(); 54 | void on_toolButtonRecentFiles_clicked(); 55 | void on_lineEditFileName_textChanged(const QString &sString); 56 | 57 | protected: 58 | void dragEnterEvent(QDragEnterEvent *pEvent) override; 59 | void dragMoveEvent(QDragMoveEvent *pEvent) override; 60 | void dropEvent(QDropEvent *pEvent) override; 61 | 62 | private: 63 | Ui::GuiMainWindow *ui; 64 | XOptions g_xOptions; 65 | XShortcuts g_xShortcuts; 66 | QMenu *g_pRecentFilesMenu; 67 | QFile *g_pFile; 68 | XInfoDB *g_pXInfo; 69 | }; 70 | 71 | #endif // GUIMAINWINDOW_H 72 | -------------------------------------------------------------------------------- /src/gui/main_gui.cpp: -------------------------------------------------------------------------------- 1 | /* Copyright (c) 2025 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 | 24 | #include "guimainwindow.h" 25 | 26 | int main(int argc, char *argv[]) 27 | { 28 | #if QT_VERSION >= QT_VERSION_CHECK(5, 6, 0) 29 | QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling); 30 | #endif 31 | #ifdef Q_OS_MAC 32 | #ifndef QT_DEBUG 33 | QString sLibraryPath = QString(argv[0]); 34 | sLibraryPath = sLibraryPath.remove("MacOS/NauzFileDetector") + "PlugIns"; 35 | QCoreApplication::setLibraryPaths(QStringList(sLibraryPath)); 36 | #endif 37 | #endif 38 | 39 | QCoreApplication::setOrganizationName(X_ORGANIZATIONNAME); 40 | QCoreApplication::setOrganizationDomain(X_ORGANIZATIONDOMAIN); 41 | QCoreApplication::setApplicationName(X_APPLICATIONNAME); 42 | QCoreApplication::setApplicationVersion(X_APPLICATIONVERSION); 43 | 44 | if ((argc == 2) && ((QString(argv[1]) == "--version") || (QString(argv[1]) == "-v"))) { 45 | QString sInfo = QString("%1 v%2").arg(X_APPLICATIONDISPLAYNAME, X_APPLICATIONVERSION); 46 | printf("%s\n", sInfo.toUtf8().data()); 47 | 48 | return 0; 49 | } 50 | 51 | QApplication a(argc, argv); 52 | 53 | XOptions xOptions; 54 | 55 | xOptions.setName(X_OPTIONSFILE); 56 | 57 | xOptions.addID(XOptions::ID_VIEW_STYLE, "fusion"); 58 | xOptions.addID(XOptions::ID_VIEW_LANG, "System"); 59 | xOptions.addID(XOptions::ID_VIEW_QSS, ""); 60 | xOptions.load(); 61 | 62 | XOptions::adjustApplicationView(X_APPLICATIONNAME, &xOptions); 63 | 64 | GuiMainWindow w; 65 | w.show(); 66 | 67 | return a.exec(); 68 | } 69 | -------------------------------------------------------------------------------- /src/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.16) 2 | 3 | # Detect Qt major version early; we only need Core to query QT_VERSION_MAJOR 4 | find_package(QT NAMES Qt5 Qt6 REQUIRED COMPONENTS Core) 5 | 6 | # Guard QT_VERSION_MAJOR being undefined to avoid tokenization errors when 7 | # find_package didn't set it. Use DEFINED check before comparing numeric value. 8 | if(DEFINED QT_VERSION_MAJOR AND QT_VERSION_MAJOR EQUAL 5) 9 | if(${QT_VERSION} VERSION_GREATER_EQUAL 5.6.0) 10 | find_package(Qt5 REQUIRED COMPONENTS Widgets Concurrent Network Script ScriptTools PrintSupport OpenGL Svg Sql LinguistTools) 11 | else() 12 | find_package(Qt5 REQUIRED COMPONENTS Widgets Concurrent Network Script ScriptTools PrintSupport OpenGL Svg Sql) 13 | endif() 14 | endif() 15 | 16 | if(DEFINED QT_VERSION_MAJOR AND QT_VERSION_MAJOR GREATER_EQUAL 6) 17 | find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Widgets Concurrent Network PrintSupport OpenGL Svg Qml LinguistTools) 18 | endif() 19 | 20 | # Ensure imported Qt targets exist for AUTOMOC/AUTOUIC. In some CMake 21 | # environments the generic find_package(QT ...) may not populate the 22 | # Qt5::/Qt6:: targets for this directory, so explicitly find the 23 | # concrete Qt package if needed. 24 | if(DEFINED QT_VERSION_MAJOR AND QT_VERSION_MAJOR EQUAL 5) 25 | if(NOT TARGET Qt5::Widgets) 26 | find_package(Qt5 REQUIRED COMPONENTS Widgets Concurrent Network Script ScriptTools PrintSupport OpenGL Svg Sql LinguistTools) 27 | endif() 28 | elseif(DEFINED QT_VERSION_MAJOR AND QT_VERSION_MAJOR GREATER_EQUAL 6) 29 | if(NOT TARGET Qt${QT_VERSION_MAJOR}::Widgets) 30 | find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Widgets Concurrent Network PrintSupport OpenGL Svg Qml LinguistTools) 31 | endif() 32 | endif() 33 | 34 | # Read version if not provided by the root CMakeLists 35 | if(NOT DEFINED X_PROJECT_VERSION) 36 | file(STRINGS ${CMAKE_CURRENT_LIST_DIR}/../release_version.txt X_PROJECT_VERSION) 37 | endif() 38 | 39 | # Main project for the source subtree 40 | project(XDataExtractor VERSION ${X_PROJECT_VERSION} LANGUAGES CXX) 41 | 42 | # Enable Qt automoc/uic/rcc globally for subdirectories 43 | set(CMAKE_AUTOMOC ON) 44 | set(CMAKE_AUTOUIC ON) 45 | set(CMAKE_AUTORCC ON) 46 | set(CMAKE_INCLUDE_CURRENT_DIR ON) 47 | 48 | set(X_COMPANYNAME "ntinfo") 49 | set(X_PROJECTNAME "XDataExtractor") 50 | set(X_MAINTAINER "horsicq@gmail.com") 51 | set(X_DESCRIPTION "XDataExtractor is an embedded data extractor for various file formats.") 52 | set(X_HOMEPAGE "https://horsicq.github.io") 53 | set(X_ORIGINAL_FILENAME "xde") 54 | 55 | if(${QT_VERSION} VERSION_LESS 6.1.0) 56 | set(BUNDLE_ID_OPTION MACOSX_BUNDLE_GUI_IDENTIFIER com.example.xde) 57 | endif() 58 | 59 | include(../dep/build_tools/cmake/deploy_init.cmake) 60 | 61 | message(STATUS X_PROJECT_ARCH: ${X_PROJECT_ARCH}) 62 | 63 | add_subdirectory(../dep/XCppfilt XCppfilt) 64 | add_subdirectory(../dep/XCapstone XCapstone) 65 | add_subdirectory(../dep/XArchive XArchive) 66 | add_subdirectory(../dep/XYara XYara) 67 | add_subdirectory(gui xde) 68 | add_subdirectory(cli xdec) 69 | -------------------------------------------------------------------------------- /src/cli/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.16) 2 | 3 | project(xdec VERSION ${X_PROJECT_VERSION} LANGUAGES CXX) 4 | 5 | include(${CMAKE_CURRENT_LIST_DIR}/../../dep/build_tools/cmake/cpp_standart_setup.cmake) 6 | include(${CMAKE_CURRENT_LIST_DIR}/../../dep/XExtractor/xextractor.cmake) 7 | 8 | set(PROJECT_SOURCES 9 | ${XEXTRACTOR_SOURCES} 10 | main_console.cpp 11 | ) 12 | 13 | if(WIN32) 14 | add_executable(${PROJECT_NAME} 15 | ${PROJECT_SOURCES} 16 | ${QM_FILES} 17 | ../../res/resource.rc 18 | ) 19 | else() 20 | add_executable(${PROJECT_NAME} 21 | ${PROJECT_SOURCES} 22 | ${QM_FILES} 23 | ) 24 | endif() 25 | 26 | # Apply compile definitions per-target instead of globally 27 | set(XDEC_DEFINES USE_DEX USE_PDF USE_ARCHIVE) 28 | if(WIN32) 29 | list(APPEND XDEC_DEFINES NOMINMAX) 30 | endif() 31 | target_compile_definitions(${PROJECT_NAME} PRIVATE ${XDEC_DEFINES}) 32 | 33 | target_link_libraries(${PROJECT_NAME} PRIVATE bzip2) 34 | target_link_libraries(${PROJECT_NAME} PRIVATE lzma) 35 | target_link_libraries(${PROJECT_NAME} PRIVATE zlib) 36 | target_link_libraries(${PROJECT_NAME} PRIVATE ppmd) 37 | target_link_libraries(${PROJECT_NAME} PRIVATE capstone) 38 | 39 | if(DEFINED QT_VERSION_MAJOR) 40 | ## Ensure Qt imported targets are available in this directory so AUTOMOC/AUTOUIC work 41 | if(DEFINED QT_VERSION_MAJOR AND QT_VERSION_MAJOR EQUAL 5) 42 | if(NOT TARGET Qt5::Widgets) 43 | find_package(Qt5 REQUIRED COMPONENTS Widgets Concurrent Network Script ScriptTools PrintSupport OpenGL Svg Sql LinguistTools) 44 | endif() 45 | target_link_libraries(${PROJECT_NAME} PRIVATE Qt5::Core) 46 | target_link_libraries(${PROJECT_NAME} PRIVATE Qt5::Concurrent) 47 | elseif(DEFINED QT_VERSION_MAJOR AND QT_VERSION_MAJOR GREATER_EQUAL 6) 48 | if(NOT TARGET Qt${QT_VERSION_MAJOR}::Widgets) 49 | find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Widgets Concurrent Network PrintSupport OpenGL Svg Qml LinguistTools) 50 | endif() 51 | target_link_libraries(${PROJECT_NAME} PRIVATE Qt${QT_VERSION_MAJOR}::Core) 52 | target_link_libraries(${PROJECT_NAME} PRIVATE Qt${QT_VERSION_MAJOR}::Concurrent) 53 | else() 54 | # Fallback: try Qt5 if nothing defined 55 | if(NOT TARGET Qt5::Widgets) 56 | find_package(Qt5 COMPONENTS Widgets Concurrent Network Script ScriptTools PrintSupport OpenGL Svg Sql QUIET) 57 | endif() 58 | if(TARGET Qt5::Widgets) 59 | target_link_libraries(${PROJECT_NAME} PRIVATE Qt5::Core Qt5::Concurrent) 60 | endif() 61 | endif() 62 | endif() 63 | 64 | if(DEFINED QT_VERSION_MAJOR AND QT_VERSION_MAJOR EQUAL 5) 65 | target_link_libraries(${PROJECT_NAME} PRIVATE Qt${QT_VERSION_MAJOR}::Script) 66 | endif() 67 | 68 | if(DEFINED QT_VERSION_MAJOR AND QT_VERSION_MAJOR GREATER_EQUAL 6) 69 | target_link_libraries(${PROJECT_NAME} PRIVATE Qt${QT_VERSION_MAJOR}::Qml) 70 | endif() 71 | 72 | if(WIN32) 73 | target_link_libraries(${PROJECT_NAME} PRIVATE Wintrust) 74 | target_link_libraries(${PROJECT_NAME} PRIVATE Crypt32) 75 | endif() 76 | 77 | find_package(Threads REQUIRED) 78 | target_link_libraries(${PROJECT_NAME} PRIVATE Threads::Threads) 79 | 80 | # On Windows create a console subsystem explicitly for clarity 81 | if(WIN32) 82 | target_link_options(${PROJECT_NAME} PRIVATE /SUBSYSTEM:CONSOLE) 83 | if(MSVC) 84 | # Avoid duplicate manifest: our resource.rc already includes windows.manifest.xml 85 | target_link_options(${PROJECT_NAME} PRIVATE /MANIFEST:NO) 86 | endif() 87 | endif() 88 | 89 | if(WIN32) 90 | install (TARGETS ${PROJECT_NAME} DESTINATION "./") 91 | include(../../dep/build_tools/cmake/deploy_qt_windows.cmake) 92 | include(../../dep/build_tools/cmake/deploy_msvc.cmake) 93 | elseif(APPLE) 94 | # no console version for macOS app bundle 95 | else() 96 | install (TARGETS ${PROJECT_NAME} DESTINATION ${CMAKE_INSTALL_BINDIR}) 97 | endif() 98 | -------------------------------------------------------------------------------- /src/gui/dialogabout.cpp: -------------------------------------------------------------------------------- 1 | /* Copyright (c) 2025 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 | XAboutWidget::DATA _data = {}; 30 | 31 | _data.sInfo += QString("

%1

").arg(XOptions::getTitle(X_APPLICATIONDISPLAYNAME, X_APPLICATIONVERSION)); 32 | _data.sInfo += QString("

Copyright (C) 2025 Hors

"); 33 | _data.sInfo += QString( 34 | "

%1: horsicq@gmail.com

") 36 | .arg(tr("Bugreports")); 37 | _data.sInfo += QString( 38 | "

%1: http://ntinfo.biz

") 40 | .arg(tr("Website")); 41 | _data.sInfo += 42 | QString( 43 | "

%1(Paypal): ntinfo.re@gmail.com

") 45 | .arg(tr("Donate")); 46 | _data.sInfo += 47 | QString( 48 | "

%1(BTC): 3DqddVBX9PKqMvNPXZ3gPHBNNRtD9CnmJo

") 50 | .arg(tr("Donate")); 51 | _data.sInfo += 52 | QString( 53 | "

%1: https://github.com/horsicq/XDataExtractor

") 55 | .arg(tr("Source code")); 56 | 57 | _data.sLibraries += 58 | QString( 59 | "

QT Library %1 http://qt-project.org

") 61 | .arg(QT_VERSION_STR); 62 | 63 | _data.sLogoPath = ":/images/main.png"; 64 | _data.sUpdatesLink = "https://github.com/horsicq/XDataExtractor/releases"; 65 | _data.sThanksLink = "https://github.com/horsicq/XDataExtractor/blob/master/doc/THANKS.md"; 66 | 67 | ui->widgetAbout->setData(_data); 68 | } 69 | 70 | DialogAbout::~DialogAbout() 71 | { 72 | delete ui; 73 | } 74 | 75 | void DialogAbout::on_pushButtonOK_clicked() 76 | { 77 | this->close(); 78 | } 79 | -------------------------------------------------------------------------------- /src/gui/guimainwindow.ui: -------------------------------------------------------------------------------- 1 | 2 | 3 | GuiMainWindow 4 | 5 | 6 | 7 | 0 8 | 0 9 | 898 10 | 456 11 | 12 | 13 | 14 | XDataExtractor 15 | 16 | 17 | 18 | 19 | 20 | 21 | File 22 | 23 | 24 | Qt::AlignmentFlag::AlignLeading|Qt::AlignmentFlag::AlignLeft|Qt::AlignmentFlag::AlignVCenter 25 | 26 | 27 | 28 | 2 29 | 30 | 31 | 2 32 | 33 | 34 | 2 35 | 36 | 37 | 2 38 | 39 | 40 | 41 | 42 | 43 | 44 | > 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | true 56 | 57 | 58 | 59 | ... 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 0 73 | 0 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | Qt::Orientation::Horizontal 84 | 85 | 86 | 87 | 40 88 | 20 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | Options 97 | 98 | 99 | 100 | 101 | 102 | 103 | About 104 | 105 | 106 | 107 | 108 | 109 | 110 | Exit 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | XExtractorWidget 123 | QWidget 124 |
xextractorwidget.h
125 | 1 126 |
127 |
128 | 129 | 130 |
131 | -------------------------------------------------------------------------------- /src/gui/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.16) 2 | 3 | project(XDataExtractor VERSION ${X_PROJECT_VERSION} LANGUAGES CXX) 4 | 5 | include(${CMAKE_CURRENT_LIST_DIR}/../../dep/build_tools/cmake/cpp_standart_setup.cmake) 6 | 7 | message(STATUS "PROJECT_NAME: ${PROJECT_NAME}") 8 | 9 | if(CMAKE_BUILD_TYPE STREQUAL "Release" OR CMAKE_BUILD_TYPE STREQUAL "MinSizeRel") 10 | include(${CMAKE_CURRENT_LIST_DIR}/../../dep/build_tools/cmake/init_translation.cmake) 11 | endif() 12 | 13 | include(${CMAKE_CURRENT_SOURCE_DIR}/../../dep/XExtractorWidget/xextractorwidget.cmake) 14 | include(${CMAKE_CURRENT_SOURCE_DIR}/../../dep/XAboutWidget/xaboutwidget.cmake) 15 | include(${CMAKE_CURRENT_SOURCE_DIR}/../../dep/XStyles/xstyles.cmake) 16 | 17 | set(PROJECT_SOURCES 18 | ${XEXTRACTORWIDGET_SOURCES} 19 | ${XABOUTWIDGET_SOURCES} 20 | dialogabout.cpp 21 | dialogabout.h 22 | dialogabout.ui 23 | dialogoptions.cpp 24 | dialogoptions.h 25 | dialogoptions.ui 26 | guimainwindow.cpp 27 | guimainwindow.h 28 | guimainwindow.ui 29 | main_gui.cpp 30 | resources.qrc 31 | ) 32 | 33 | if(CMAKE_BUILD_TYPE STREQUAL "Release" OR CMAKE_BUILD_TYPE STREQUAL "MinSizeRel") 34 | include(${CMAKE_CURRENT_LIST_DIR}/../../dep/build_tools/cmake/create_translation.cmake) 35 | endif() 36 | 37 | if(WIN32) 38 | add_executable(${PROJECT_NAME} WIN32 39 | ${PROJECT_SOURCES} 40 | ${QM_FILES} 41 | ../../res/resource_icon.rc 42 | ) 43 | elseif(APPLE) 44 | add_executable(${PROJECT_NAME} 45 | MACOSX_BUNDLE 46 | ${PROJECT_SOURCES} 47 | ${QM_FILES} 48 | ) 49 | 50 | set_source_files_properties(${CMAKE_CURRENT_SOURCE_DIR}/../../res/main.icns PROPERTIES 51 | MACOSX_PACKAGE_LOCATION "Resources") 52 | target_sources(${PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/../../res/main.icns) 53 | 54 | else() 55 | add_executable(${PROJECT_NAME} 56 | ${PROJECT_SOURCES} 57 | ${QM_FILES} 58 | ) 59 | endif() 60 | 61 | set(XDE_DEFINES USE_DEX USE_PDF USE_ARCHIVE) 62 | if(WIN32) 63 | list(APPEND XDE_DEFINES NOMINMAX) 64 | endif() 65 | target_compile_definitions(${PROJECT_NAME} PRIVATE ${XDE_DEFINES}) 66 | 67 | if(CMAKE_BUILD_TYPE STREQUAL "Release" OR CMAKE_BUILD_TYPE STREQUAL "MinSizeRel") 68 | if(APPLE) 69 | include(${CMAKE_CURRENT_LIST_DIR}/../../dep/build_tools/cmake/macdeployqt.cmake) 70 | endif() 71 | endif() 72 | 73 | target_link_libraries(${PROJECT_NAME} PRIVATE bzip2) 74 | target_link_libraries(${PROJECT_NAME} PRIVATE lzma) 75 | target_link_libraries(${PROJECT_NAME} PRIVATE zlib) 76 | target_link_libraries(${PROJECT_NAME} PRIVATE ppmd) 77 | target_link_libraries(${PROJECT_NAME} PRIVATE capstone) 78 | target_link_libraries(${PROJECT_NAME} PRIVATE cppfilt) 79 | target_link_libraries(${PROJECT_NAME} PRIVATE yara) 80 | 81 | target_link_libraries(${PROJECT_NAME} PRIVATE Qt${QT_VERSION_MAJOR}::Widgets) 82 | target_link_libraries(${PROJECT_NAME} PRIVATE Qt${QT_VERSION_MAJOR}::Concurrent) 83 | target_link_libraries(${PROJECT_NAME} PRIVATE Qt${QT_VERSION_MAJOR}::PrintSupport) 84 | target_link_libraries(${PROJECT_NAME} PRIVATE Qt${QT_VERSION_MAJOR}::OpenGL) 85 | target_link_libraries(${PROJECT_NAME} PRIVATE Qt${QT_VERSION_MAJOR}::Svg) 86 | target_link_libraries(${PROJECT_NAME} PRIVATE Qt${QT_VERSION_MAJOR}::Sql) 87 | 88 | if(${QT_VERSION_MAJOR} EQUAL 5) 89 | target_link_libraries(${PROJECT_NAME} PRIVATE Qt${QT_VERSION_MAJOR}::Script) 90 | target_link_libraries(${PROJECT_NAME} PRIVATE Qt${QT_VERSION_MAJOR}::ScriptTools) 91 | endif() 92 | 93 | if(${QT_VERSION_MAJOR} GREATER_EQUAL 6) 94 | target_link_libraries(${PROJECT_NAME} PRIVATE Qt${QT_VERSION_MAJOR}::Qml) 95 | endif() 96 | 97 | if(WIN32) 98 | target_link_libraries(${PROJECT_NAME} PRIVATE Wintrust) 99 | target_link_libraries(${PROJECT_NAME} PRIVATE Crypt32) 100 | endif() 101 | 102 | find_package(Threads REQUIRED) 103 | target_link_libraries(${PROJECT_NAME} PRIVATE Threads::Threads) 104 | 105 | message(STATUS "CMAKE_PREFIX_PATH: ${CMAKE_PREFIX_PATH}") 106 | message(STATUS "CMAKE_INSTALL_PREFIX: ${CMAKE_INSTALL_PREFIX}") 107 | message(STATUS "CMAKE_INSTALL_BINDIR: ${CMAKE_INSTALL_BINDIR}") 108 | message(STATUS "CMAKE_INSTALL_LIBDIR: ${CMAKE_INSTALL_LIBDIR}") 109 | 110 | if(WIN32 AND MSVC) 111 | # Avoid duplicate manifest: our resource file already embeds windows.manifest.xml 112 | target_link_options(${PROJECT_NAME} PRIVATE /MANIFEST:NO) 113 | endif() 114 | 115 | if(WIN32) 116 | install (TARGETS ${PROJECT_NAME} DESTINATION "./") 117 | include(${CMAKE_CURRENT_LIST_DIR}/../../dep/build_tools/cmake/deploy_qt_windows.cmake) 118 | include(${CMAKE_CURRENT_LIST_DIR}/../../dep/build_tools/cmake/deploy_msvc.cmake) 119 | include(${CMAKE_CURRENT_LIST_DIR}/../../dep/build_tools/cmake/deploy_openssl.cmake) 120 | elseif(APPLE) 121 | install(TARGETS ${PROJECT_NAME} 122 | BUNDLE DESTINATION . 123 | LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} 124 | RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} 125 | ) 126 | else() 127 | install (TARGETS ${PROJECT_NAME} DESTINATION ${CMAKE_INSTALL_BINDIR}) 128 | endif() 129 | -------------------------------------------------------------------------------- /src/gui/guimainwindow.cpp: -------------------------------------------------------------------------------- 1 | /* Copyright (c) 2025 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 | g_pFile = nullptr; 30 | g_pXInfo = nullptr; 31 | 32 | setWindowTitle(XOptions::getTitle(X_APPLICATIONDISPLAYNAME, X_APPLICATIONVERSION)); 33 | 34 | setAcceptDrops(true); 35 | 36 | g_xOptions.setName(X_OPTIONSFILE); 37 | 38 | g_xOptions.addID(XOptions::ID_VIEW_STAYONTOP, false); 39 | g_xOptions.addID(XOptions::ID_VIEW_STYLE, "Fusion"); 40 | g_xOptions.addID(XOptions::ID_VIEW_LANG, "System"); 41 | g_xOptions.addID(XOptions::ID_VIEW_QSS, ""); 42 | g_xOptions.addID(XOptions::ID_VIEW_FONT_CONTROLS, XOptions::getDefaultFont().toString()); 43 | g_xOptions.addID(XOptions::ID_VIEW_FONT_TABLEVIEWS, XOptions::getMonoFont().toString()); 44 | g_xOptions.addID(XOptions::ID_VIEW_FONT_TREEVIEWS, XOptions::getDefaultFont().toString()); 45 | g_xOptions.addID(XOptions::ID_VIEW_FONT_TEXTEDITS, XOptions::getMonoFont().toString()); 46 | g_xOptions.addID(XOptions::ID_FILE_SAVELASTDIRECTORY, true); 47 | g_xOptions.addID(XOptions::ID_FILE_SAVERECENTFILES, true); 48 | 49 | #ifdef Q_OS_WIN 50 | g_xOptions.addID(XOptions::ID_FILE_CONTEXT, "*"); 51 | #endif 52 | 53 | // NFDOptionsWidget::setDefaultValues(&g_xOptions); 54 | 55 | g_xOptions.load(); 56 | 57 | g_xShortcuts.setName(X_SHORTCUTSFILE); 58 | g_xShortcuts.setNative(g_xOptions.isNative()); 59 | 60 | g_xShortcuts.addGroup(XShortcuts::GROUPID_HEX); 61 | g_xShortcuts.addGroup(XShortcuts::GROUPID_DISASM); 62 | g_xShortcuts.addGroup(XShortcuts::GROUPID_TABLE); 63 | 64 | g_xShortcuts.load(); 65 | 66 | connect(&g_xOptions, SIGNAL(openFile(QString)), this, SLOT(setFileName(QString))); 67 | 68 | g_pRecentFilesMenu = g_xOptions.createRecentFilesMenu(this); 69 | 70 | ui->toolButtonRecentFiles->setEnabled(g_xOptions.getRecentFiles().count()); 71 | 72 | ui->widgetMain->setGlobal(&g_xShortcuts, &g_xOptions); 73 | 74 | adjustView(); 75 | 76 | if (QCoreApplication::arguments().count() > 1) { 77 | setFileName(QCoreApplication::arguments().at(1), true); 78 | } 79 | } 80 | 81 | GuiMainWindow::~GuiMainWindow() 82 | { 83 | if (g_pXInfo) { 84 | delete g_pXInfo; 85 | g_pXInfo = nullptr; 86 | } 87 | 88 | if (g_pFile) { 89 | if (g_pFile->isOpen()) { 90 | g_pFile->close(); 91 | } 92 | 93 | delete g_pFile; 94 | g_pFile = nullptr; 95 | } 96 | 97 | g_xOptions.save(); 98 | g_xShortcuts.save(); 99 | 100 | delete ui; 101 | } 102 | 103 | void GuiMainWindow::setFileName(const QString &sName, bool bOpen) 104 | { 105 | QFileInfo fi(sName); 106 | 107 | if (fi.isFile()) { 108 | ui->lineEditFileName->setText(sName); 109 | 110 | if (g_pXInfo) { 111 | delete g_pXInfo; 112 | g_pXInfo = nullptr; 113 | } 114 | 115 | if (g_pFile) { 116 | if (g_pFile->isOpen()) { 117 | g_pFile->close(); 118 | } 119 | 120 | delete g_pFile; 121 | g_pFile = nullptr; 122 | } 123 | 124 | g_pFile = new QFile; 125 | g_pXInfo = new XInfoDB; 126 | 127 | g_pFile->setFileName(sName); 128 | 129 | if (g_pFile->open(QIODevice::ReadOnly)) { 130 | XExtractor::OPTIONS extractorOptions = XExtractor::getDefaultOptions(); 131 | extractorOptions.bMenu_Hex = true; 132 | 133 | ui->widgetMain->setData(g_pFile, g_pXInfo, extractorOptions, bOpen); 134 | g_xOptions.setLastFileName(sName); 135 | 136 | adjustView(); 137 | } else { 138 | QMessageBox::critical(this, tr("Error"), tr("Cannot open file")); 139 | } 140 | } 141 | } 142 | 143 | void GuiMainWindow::on_pushButtonExit_clicked() 144 | { 145 | this->close(); 146 | } 147 | 148 | void GuiMainWindow::on_pushButtonOpenFile_clicked() 149 | { 150 | QString sDirectory = g_xOptions.getLastDirectory(); 151 | 152 | QString sFileName = QFileDialog::getOpenFileName(this, tr("Open file") + QString("..."), sDirectory, tr("All files") + QString(" (*)")); 153 | 154 | if (!sFileName.isEmpty()) { 155 | setFileName(sFileName, g_xOptions.isScanAfterOpen()); 156 | } 157 | } 158 | 159 | void GuiMainWindow::on_pushButtonAbout_clicked() 160 | { 161 | DialogAbout di(this); 162 | 163 | di.exec(); 164 | } 165 | 166 | void GuiMainWindow::dragEnterEvent(QDragEnterEvent *pEvent) 167 | { 168 | pEvent->acceptProposedAction(); 169 | } 170 | 171 | void GuiMainWindow::dragMoveEvent(QDragMoveEvent *pEvent) 172 | { 173 | pEvent->acceptProposedAction(); 174 | } 175 | 176 | void GuiMainWindow::dropEvent(QDropEvent *pEvent) 177 | { 178 | const QMimeData *mimeData = pEvent->mimeData(); 179 | 180 | if (mimeData->hasUrls()) { 181 | QList urlList = mimeData->urls(); 182 | 183 | if (urlList.count()) { 184 | QString sFileName = urlList.at(0).toLocalFile(); 185 | 186 | sFileName = XBinary::convertFileName(sFileName); 187 | 188 | setFileName(sFileName, true); 189 | } 190 | } 191 | } 192 | 193 | void GuiMainWindow::on_pushButtonOptions_clicked() 194 | { 195 | DialogOptions dialogOptions(this, &g_xOptions, XOptions::GROUPID_FILE); 196 | dialogOptions.setGlobal(&g_xShortcuts, &g_xOptions); 197 | 198 | dialogOptions.exec(); 199 | 200 | adjustView(); 201 | } 202 | 203 | void GuiMainWindow::adjustView() 204 | { 205 | if (g_xOptions.isIDPresent(XOptions::ID_VIEW_STAYONTOP)) { 206 | g_xOptions.adjustStayOnTop(this); 207 | } 208 | 209 | g_xOptions.adjustWidget(this, XOptions::ID_VIEW_FONT_CONTROLS); 210 | } 211 | 212 | void GuiMainWindow::on_toolButtonRecentFiles_clicked() 213 | { 214 | g_pRecentFilesMenu->exec(QCursor::pos()); 215 | 216 | ui->toolButtonRecentFiles->setEnabled(g_xOptions.getRecentFiles().count()); 217 | } 218 | 219 | void GuiMainWindow::on_lineEditFileName_textChanged(const QString &sString) 220 | { 221 | // XFormats::setFileTypeComboBox(XBinary::FT_UNKNOWN, sString, ui->comboBoxType); 222 | } 223 | -------------------------------------------------------------------------------- /src/cli/main_console.cpp: -------------------------------------------------------------------------------- 1 | /* Copyright (c) 2025 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 | #include 25 | #include 26 | #include 27 | 28 | #include "../global.h" 29 | #include "xextractor.h" 30 | #include "xmodel_extractor.h" 31 | #include "xoptions.h" 32 | 33 | qint32 handleFile(const QString &sFileName, XExtractor::OPTIONS *pExtractorOptions, qint32 nTotal) 34 | { 35 | qint32 nResult = 0; 36 | 37 | Q_UNUSED(nTotal) 38 | 39 | QFileInfo fi(sFileName); 40 | 41 | if (fi.isFile()) { 42 | QFile file; 43 | file.setFileName(sFileName); 44 | 45 | if (file.open(QIODevice::ReadOnly)) { 46 | XExtractor::DATA extractorData = {}; 47 | extractorData.options = *pExtractorOptions; 48 | XBinary::FT fileType = extractorData.options.fileType; 49 | 50 | if (fileType == XBinary::FT_UNKNOWN) { 51 | QSet stFileTypes = XFormats::getFileTypes(&file, true); 52 | fileType = XBinary::_getPrefFileType(&stFileTypes); 53 | } 54 | 55 | extractorData.memoryMap = XFormats::getMemoryMap(fileType, XBinary::MAPMODE_UNKNOWN, &file); 56 | XExtractor extractor; 57 | extractor.setData(&file, &extractorData, nullptr); 58 | extractor.process(); 59 | 60 | if (extractorData.options.bShowList) { 61 | XModel_Extractor model(&extractorData); 62 | model.adjustColumnsToContent(true); 63 | XOptions::printModel(&model); 64 | } 65 | 66 | file.close(); 67 | } 68 | 69 | nResult++; 70 | } else if (fi.isDir()) { 71 | QDir dir(sFileName); 72 | 73 | QFileInfoList eil = dir.entryInfoList(QDir::Files | QDir::Dirs | QDir::NoDotAndDotDot, QDir::Name); 74 | 75 | const qint32 nNumberOfFiles = eil.count(); 76 | 77 | for (qint32 i = 0; i < nNumberOfFiles; i++) { 78 | nResult += handleFile(eil.at(i).absoluteFilePath(), pExtractorOptions, nTotal); 79 | } 80 | } 81 | 82 | return nResult; 83 | } 84 | 85 | XOptions::CR ScanFiles(QList *pListArgs, XExtractor::OPTIONS *pExtractorOptions) 86 | { 87 | XOptions::CR result = XOptions::CR_SUCCESS; 88 | 89 | // TODO check all parameters 90 | 91 | qint32 nNumberOfFiles = 0; 92 | 93 | qint32 nCount = pListArgs->count(); 94 | 95 | for (qint32 i = 0; i < nCount; i++) { 96 | QString sFileName = pListArgs->at(i); 97 | 98 | if (QFileInfo::exists(sFileName)) { 99 | nNumberOfFiles += XBinary::getNumberOfFiles(sFileName, true, 0); 100 | } else { 101 | printf("Cannot find: %s\n", sFileName.toUtf8().data()); 102 | 103 | result = XOptions::CR_CANNOTFINDFILE; 104 | break; 105 | } 106 | } 107 | 108 | if (result != XOptions::CR_SUCCESS) { 109 | return result; 110 | } 111 | 112 | for (qint32 i = 0; i < nCount; i++) { 113 | QString sFileName = pListArgs->at(i); 114 | 115 | if (QFileInfo::exists(sFileName)) { 116 | handleFile(sFileName, pExtractorOptions, nNumberOfFiles); 117 | } 118 | } 119 | 120 | // for (qint32 i = 0; i < nNumberOfFiles; i++) { 121 | // QString sFileName = listFileNames.at(i); 122 | 123 | // if (bShowFileName) { 124 | // printf("%s:\n", sFileName.toUtf8().data()); 125 | // } 126 | 127 | // XScanEngine::SCAN_RESULT scanResult = SpecAbstract().scanFile(sFileName, pScanOptions); 128 | 129 | // ScanItemModel model(pScanOptions, &(scanResult.listRecords), 1); 130 | 131 | // XBinary::FORMATTYPE formatType = XBinary::FORMATTYPE_TEXT; 132 | 133 | // if (pScanOptions->bResultAsCSV) formatType = XBinary::FORMATTYPE_CSV; 134 | // else if (pScanOptions->bResultAsJSON) formatType = XBinary::FORMATTYPE_JSON; 135 | // else if (pScanOptions->bResultAsTSV) formatType = XBinary::FORMATTYPE_TSV; 136 | // else if (pScanOptions->bResultAsXML) formatType = XBinary::FORMATTYPE_XML; 137 | // else if (pScanOptions->bResultAsPlainText) formatType = XBinary::FORMATTYPE_PLAINTEXT; 138 | 139 | // if (formatType != XBinary::FORMATTYPE_TEXT) { 140 | // printf("%s\n", model.toString(formatType).toUtf8().data()); 141 | // } else { 142 | // // Colored text 143 | // model.coloredOutput(); 144 | // } 145 | // } 146 | 147 | return result; 148 | } 149 | 150 | int main(int argc, char *argv[]) 151 | { 152 | qint32 nResult = XOptions::CR_SUCCESS; 153 | 154 | QCoreApplication::setOrganizationName(X_ORGANIZATIONNAME); 155 | QCoreApplication::setOrganizationDomain(X_ORGANIZATIONDOMAIN); 156 | QCoreApplication::setApplicationName(X_APPLICATIONNAME); 157 | QCoreApplication::setApplicationVersion(X_APPLICATIONVERSION); 158 | 159 | QCoreApplication app(argc, argv); 160 | 161 | QCommandLineParser parser; 162 | QString sDescription; 163 | sDescription.append(QString("%1 v%2\n").arg(X_APPLICATIONDISPLAYNAME, X_APPLICATIONVERSION)); 164 | sDescription.append(QString("%1\n").arg("Copyright(C) 2025 hors Web: http://ntinfo.biz")); 165 | parser.setApplicationDescription(sDescription); 166 | parser.addHelpOption(); 167 | parser.addVersionOption(); 168 | 169 | QCommandLineOption clList(QStringList() << "l" 170 | << "list"); 171 | clList.setDescription("Show result as list."); 172 | 173 | QCommandLineOption clExtract(QStringList() << "x" 174 | << "extract"); 175 | clExtract.setDescription("Extract data."); 176 | 177 | // QCommandLineOption clAll(QStringList() << "A" 178 | // << "all"); 179 | // clAll.setDescription("Extract all types"); 180 | 181 | QCommandLineOption clExtractorMode(QStringList() << "m" 182 | << "mode"); 183 | clExtractorMode.setDefaultValue("HEURISTIC"); 184 | clExtractorMode.setValueName("RAW, FORMAT, HEURISTIC, UNPACK"); 185 | clExtractorMode.setDescription("Set extractor mode. Default is HEURISTIC."); 186 | 187 | QCommandLineOption clOutputDirectory(QStringList() << "o" 188 | << "output"); 189 | clOutputDirectory.setDefaultValue("."); 190 | clOutputDirectory.setValueName("directory"); 191 | clOutputDirectory.setDescription("Set output directory. Default is current directory."); 192 | 193 | parser.addPositionalArgument("file", "The file to extract from."); 194 | parser.addPositionalArgument("directory", "The directory to extract from."); 195 | 196 | parser.addOption(clList); 197 | parser.addOption(clExtract); 198 | // parser.addOption(clAll); 199 | parser.addOption(clExtractorMode); 200 | parser.addOption(clOutputDirectory); 201 | 202 | parser.process(app); 203 | 204 | QList listArgs = parser.positionalArguments(); 205 | 206 | XExtractor::OPTIONS extractorOptions = XExtractor::getDefaultOptions(); 207 | 208 | if (parser.isSet(clList)) { 209 | extractorOptions.bShowList = true; 210 | } 211 | 212 | if (parser.isSet(clExtract)) { 213 | extractorOptions.bExtract = true; 214 | } 215 | 216 | extractorOptions.bAllTypes = true; 217 | extractorOptions.bAnalyze = true; 218 | 219 | { 220 | QString sExtractorMode = parser.value(clExtractorMode); 221 | extractorOptions.emode = XExtractor::ftStringToExtractorMode(sExtractorMode); 222 | } 223 | 224 | // Update available file types to match selected mode 225 | extractorOptions.listFileTypes = XExtractor::getAvailableFileTypes(extractorOptions.emode); 226 | 227 | if (parser.isSet(clOutputDirectory)) { 228 | QString sOutputDirectory = parser.value(clOutputDirectory); 229 | extractorOptions.sOutputDirectory = sOutputDirectory; 230 | } 231 | 232 | // Ensure output directory exists when extracting 233 | if (extractorOptions.bExtract) { 234 | if (!extractorOptions.sOutputDirectory.isEmpty()) { 235 | QDir().mkpath(extractorOptions.sOutputDirectory); 236 | } 237 | } 238 | 239 | if (listArgs.count()) { 240 | nResult = ScanFiles(&listArgs, &extractorOptions); 241 | } else { 242 | parser.showHelp(); 243 | Q_UNREACHABLE(); 244 | } 245 | 246 | return nResult; 247 | } 248 | -------------------------------------------------------------------------------- /doc/THANKS.md: -------------------------------------------------------------------------------- 1 |

2 | 3 | 4 | 15 | 16 | 17 | 18 | 32 | 33 | 34 | 35 | 49 | 50 | 51 | 52 | 66 | 67 | 68 | 69 | 83 | 84 | 85 | 86 | 94 | 95 | 96 | 97 | 111 | 112 | 113 | 114 | 128 | 129 | 130 | 131 | 142 | 143 | 144 | 145 | 159 | 160 | 161 | 162 | 176 | 177 | 178 | 179 | 193 | 194 | 195 | 196 | 207 | 208 | 209 | 210 | 218 | 219 | 220 | 221 | 232 | 233 | 234 | 235 | 246 | 247 | 248 | 249 | 260 | 261 | 262 | 263 | 274 | 275 | 276 | 277 | 285 | 286 | 287 | 288 | 299 | 300 | 301 | 302 | 313 | 314 | 315 | 316 | 324 | 325 | 326 | 327 | 335 | 336 | 337 | 338 | 349 | 350 | 351 | 352 | 366 | 367 | 368 | 369 | 377 | 378 | 379 | 380 | 388 | 389 |

5 |

6 | Adam Henault 7 |

8 |

9 | Website: http://adamhlt.com/ 10 |

11 |

12 | GitHub: adamhlt 13 |

14 |
19 |

20 | Adric Net 21 |

22 |

23 | Website: http://dfirnotes.net 24 |

25 |

26 | GitHub: adricnet 27 |

28 |

29 | Twitter: dfirnotes 30 |

31 |
36 |

37 | Ali Hadi 38 |

39 |

40 | Website: https://www.ashemery.com 41 |

42 |

43 | GitHub: ashemery 44 |

45 |

46 | Twitter: binaryz0ne 47 |

48 |
53 |

54 | Anderson Leite 55 |

56 |

57 | Website: https://reversing.codes 58 |

59 |

60 | GitHub: buzzer-re 61 |

62 |

63 | Twitter: buzz3r_ 64 |

65 |
70 |

71 | Bartosz Wójcik 72 |

73 |

74 | Website: https://www.pelock.com 75 |

76 |

77 | GitHub: PELock 78 |

79 |

80 | Twitter: PELock 81 |

82 |
87 |

88 | Christopher Layne 89 |

90 |

91 | GitHub: clayne 92 |

93 |
98 |

99 | Dan0xE 100 |

101 |

102 | Website: https://dev.to/ubervisor 103 |

104 |

105 | GitHub: Dan0xE 106 |

107 |

108 | Twitter: dan0xe 109 |

110 |
115 |

116 | Dav Clark 117 |

118 |

119 | Website: https://www.linkedin.com/in/davclark 120 |

121 |

122 | GitHub: davclark 123 |

124 |

125 | Twitter: davclark 126 |

127 |
132 |

133 | David Zimmer 134 |

135 |

136 | Website: http://sandsprite.com 137 |

138 |

139 | GitHub: dzzie 140 |

141 |
146 |

147 | Duncan Ogilvie 148 |

149 |

150 | Website: http://mrexodia.re 151 |

152 |

153 | GitHub: mrexodia 154 |

155 |

156 | Twitter: mrexodia 157 |

158 |
163 |

164 | elastic 165 |

166 |

167 | Website: https://www.elastic.co 168 |

169 |

170 | GitHub: elastic 171 |

172 |

173 | Twitter: elastic 174 |

175 |
180 |

181 | Fernando Mercês 182 |

183 |

184 | Website: https://www.mentebinaria.com.br 185 |

186 |

187 | GitHub: merces 188 |

189 |

190 | Twitter: mer0x36 191 |

192 |
197 |

198 | Filip Navara 199 |

200 |

201 | GitHub: filipnavara 202 |

203 |

204 | Twitter: filipnavara 205 |

206 |
211 |

212 | fr0zenbag 213 |

214 |

215 | GitHub: fr0zenbag 216 |

217 |
222 |

223 | FrenchYeti 224 |

225 |

226 | GitHub: FrenchYeti 227 |

228 |

229 | Twitter: frenchyeti 230 |

231 |
236 |

237 | Gilad Reich 238 |

239 |

240 | Website: https://greich.com 241 |

242 |

243 | GitHub: giladreich 244 |

245 |
250 |

251 | Derick Estrada 252 |

253 |

254 | Website: hamsteri.co 255 |

256 |

257 | GitHub: hmstk 258 |

259 |
264 |

265 | Integral-Tech 266 |

267 |

268 | Website: https://integral.org.cn/ 269 |

270 |

271 | GitHub: Integral-Tech 272 |

273 |
278 |

279 | Jason Jack Tan 280 |

281 |

282 | GitHub: Perthys 283 |

284 |
289 |

290 | João Vitor 291 |

292 |

293 | Website: http://joaovitor.gq 294 |

295 |

296 | GitHub: keowu 297 |

298 |
303 |

304 | Leandro Fróes 305 |

306 |

307 | GitHub: leandrofroes 308 |

309 |

310 | Twitter: leandrofr0es 311 |

312 |
317 |

318 | misonothx 319 |

320 |

321 | GitHub: miso-xyz 322 |

323 |
328 |

329 | miT231-spec 330 |

331 |

332 | GitHub: miT231-spec 333 |

334 |
339 |

340 | phithon 341 |

342 |

343 | Website: https://www.leavesongs.com 344 |

345 |

346 | GitHub: phith0n 347 |

348 |
353 |

354 | Robert Musser 355 |

356 |

357 | Website: https://rmusser.net/ 358 |

359 |

360 | GitHub: rmusser01 361 |

362 |

363 | Twitter: r_o_b_e_r_t_1 364 |

365 |
370 |

371 | sapdragon 372 |

373 |

374 | GitHub: sapdragon 375 |

376 |
381 |

382 | SpriteOvO 383 |

384 |

385 | GitHub: SpriteOvO 386 |

387 |
390 | --------------------------------------------------------------------------------