├── .github └── FUNDING.yml ├── .gitmodules ├── CMakeLists.txt ├── DEBIAN ├── control ├── hicolor │ ├── 16x16 │ │ └── apps │ │ │ └── xapkd.png │ ├── 20x20 │ │ └── apps │ │ │ └── xapkd.png │ ├── 24x24 │ │ └── apps │ │ │ └── xapkd.png │ ├── 256x256 │ │ └── apps │ │ │ └── xapkd.png │ ├── 32x32 │ │ └── apps │ │ │ └── xapkd.png │ └── 48x48 │ │ └── apps │ │ └── xapkd.png └── xapkd.desktop ├── Dockerfile ├── LICENSE ├── LINUX ├── control ├── hicolor │ ├── 16x16 │ │ └── apps │ │ │ └── xapkd.png │ ├── 20x20 │ │ └── apps │ │ │ └── xapkd.png │ ├── 24x24 │ │ └── apps │ │ │ └── xapkd.png │ ├── 256x256 │ │ └── apps │ │ │ └── xapkd.png │ ├── 32x32 │ │ └── apps │ │ │ └── xapkd.png │ └── 48x48 │ │ └── apps │ │ └── xapkd.png └── xapkd.desktop ├── README.md ├── build.pri ├── build_dpkg.sh ├── build_libs └── build_libs.pro ├── build_lin64.sh ├── build_mac.sh ├── build_mingw_win32.bat ├── build_mingw_win64.bat ├── build_msvc_win32.bat ├── build_msvc_win64.bat ├── build_msvc_winxp.bat ├── build_win32.bat ├── build_win64.bat ├── build_win_generic.cmd ├── build_winxp.bat ├── changelog.txt ├── configure ├── configure.ac ├── console_source ├── CMakeLists.txt ├── console_source.pro ├── main_console.cpp └── windows.manifest.xml ├── create_appimage.sh ├── docs ├── 1.png ├── 2.png ├── 3.png ├── 4.png ├── 5.png ├── 6.png ├── 7.png ├── BUILD.md └── RUN.md ├── global.h ├── gui_source ├── CMakeLists.txt ├── dialogabout.cpp ├── dialogabout.h ├── dialogabout.ui ├── dialogdirectoryscan.cpp ├── dialogdirectoryscan.h ├── dialogdirectoryscan.ui ├── dialogoptions.cpp ├── dialogoptions.h ├── dialogoptions.ui ├── gui_source.pro ├── gui_source_tr.pro ├── guimainwindow.cpp ├── guimainwindow.h ├── guimainwindow.ui ├── images │ ├── icon.png │ └── main.png ├── main_gui.cpp ├── resources.qrc ├── translation │ ├── xapkd_ar.ts │ ├── xapkd_de.ts │ ├── xapkd_es.ts │ ├── xapkd_fr.ts │ ├── xapkd_he.ts │ ├── xapkd_id.ts │ ├── xapkd_it.ts │ ├── xapkd_ja.ts │ ├── xapkd_ko.ts │ ├── xapkd_pl.ts │ ├── xapkd_pt_BR.ts │ ├── xapkd_pt_PT.ts │ ├── xapkd_ru.ts │ ├── xapkd_tr.ts │ ├── xapkd_uk.ts │ ├── xapkd_vi.ts │ ├── xapkd_zh.ts │ └── xapkd_zh_TW.ts └── windows.manifest.xml ├── icons ├── main.icns └── main.ico ├── install.iss ├── install.sh ├── mascots ├── 1.png ├── 2.png ├── 3.png ├── version.jpg ├── version.png ├── xad.jpg ├── xad.png └── xapkd.png ├── release_version.txt ├── winloader_source ├── rsrc.rc └── winloader.cpp └── xapkdetector_source.pro /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | # These are supported funding model platforms 2 | 3 | github: horsicq 4 | -------------------------------------------------------------------------------- /.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 | -------------------------------------------------------------------------------- /CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.10) 2 | 3 | project(XAPKDetector) 4 | 5 | if(WIN32) 6 | set (CMAKE_PREFIX_PATH "C:/Qt/5.15.2/msvc2019/") 7 | endif() 8 | 9 | if(APPLE) 10 | set (CMAKE_PREFIX_PATH $ENV{HOME}/Qt/5.15.2/clang_64/) 11 | set (CMAKE_OSX_ARCHITECTURES x86_64) 12 | add_compile_options(-Wno-deprecated-declarations) 13 | add_compile_options(-Wno-switch) 14 | endif() 15 | 16 | add_subdirectory(XCppfilt) 17 | add_subdirectory(XCapstone) 18 | add_subdirectory(XCapstone/x86) 19 | add_subdirectory(XArchive) 20 | add_subdirectory(XYara) 21 | add_subdirectory(gui_source) 22 | add_subdirectory(console_source) 23 | 24 | include(GNUInstallDirs) 25 | 26 | install (TARGETS xapkd) 27 | install (TARGETS xapkdc) 28 | install (FILES LINUX/xapkd.desktop DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/applications/) 29 | install (DIRECTORY LINUX/hicolor DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/icons) 30 | install (DIRECTORY XStyles/qss DESTINATION ${CMAKE_INSTALL_LIBDIR}/xapkd) 31 | install (FILES signatures/crypto.db DESTINATION ${CMAKE_INSTALL_LIBDIR}/xapkd/signatures) -------------------------------------------------------------------------------- /DEBIAN/control: -------------------------------------------------------------------------------- 1 | Package: xapkdetector 2 | Version: #VERSION# 3 | Architecture: #ARCH# 4 | Maintainer: hors 5 | Depends: qt5-default, libqt5core5a, libqt5svg5, libqt5gui5, libqt5widgets5, libqt5opengl5, libqt5dbus5 6 | Homepage: http://ntinfo.biz 7 | Description: XAPKDetector shows an information about build tools, libraries and protection of APK/DEX files 8 | -------------------------------------------------------------------------------- /DEBIAN/hicolor/16x16/apps/xapkd.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/horsicq/XAPKDetector/b59b127eed35adfd07ec6e41841dfeb2cb734093/DEBIAN/hicolor/16x16/apps/xapkd.png -------------------------------------------------------------------------------- /DEBIAN/hicolor/20x20/apps/xapkd.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/horsicq/XAPKDetector/b59b127eed35adfd07ec6e41841dfeb2cb734093/DEBIAN/hicolor/20x20/apps/xapkd.png -------------------------------------------------------------------------------- /DEBIAN/hicolor/24x24/apps/xapkd.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/horsicq/XAPKDetector/b59b127eed35adfd07ec6e41841dfeb2cb734093/DEBIAN/hicolor/24x24/apps/xapkd.png -------------------------------------------------------------------------------- /DEBIAN/hicolor/256x256/apps/xapkd.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/horsicq/XAPKDetector/b59b127eed35adfd07ec6e41841dfeb2cb734093/DEBIAN/hicolor/256x256/apps/xapkd.png -------------------------------------------------------------------------------- /DEBIAN/hicolor/32x32/apps/xapkd.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/horsicq/XAPKDetector/b59b127eed35adfd07ec6e41841dfeb2cb734093/DEBIAN/hicolor/32x32/apps/xapkd.png -------------------------------------------------------------------------------- /DEBIAN/hicolor/48x48/apps/xapkd.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/horsicq/XAPKDetector/b59b127eed35adfd07ec6e41841dfeb2cb734093/DEBIAN/hicolor/48x48/apps/xapkd.png -------------------------------------------------------------------------------- /DEBIAN/xapkd.desktop: -------------------------------------------------------------------------------- 1 | [Desktop Entry] 2 | Version=#VERSION# 3 | Type=Application 4 | Name=XAPKDetector 5 | Comment=XAPKDetector shows an information about build tools, libraries and protection of APK/DEX files 6 | TryExec=xapkd 7 | Exec=xapkd %F 8 | Icon=xapkd 9 | Terminal=false 10 | Categories=Development; 11 | MimeType=application/octet-stream; 12 | -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | ARG image=ubuntu:bionic 2 | 3 | FROM ${image} as source-internet 4 | 5 | FROM source-internet as builder 6 | 7 | RUN apt-get update --quiet 8 | RUN apt-get install --quiet --assume-yes \ 9 | git \ 10 | build-essential \ 11 | qt5-default \ 12 | qtbase5-dev \ 13 | qtscript5-dev \ 14 | qttools5-dev-tools 15 | 16 | RUN git clone --recursive https://github.com/horsicq/XAPKDetector.git 17 | 18 | RUN cd XAPKDetector && bash -x build_dpkg.sh && bash -x install.sh -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2020-2024 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 | -------------------------------------------------------------------------------- /LINUX/control: -------------------------------------------------------------------------------- 1 | Package: xapkdetector 2 | Version: #VERSION# 3 | Architecture: #ARCH# 4 | Maintainer: hors 5 | Depends: qt5-default, libqt5core5a, libqt5svg5, libqt5gui5, libqt5widgets5, libqt5opengl5, libqt5dbus5 6 | Homepage: http://ntinfo.biz 7 | Description: XAPKDetector shows an information about build tools, libraries and protection of APK/DEX files 8 | -------------------------------------------------------------------------------- /LINUX/hicolor/16x16/apps/xapkd.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/horsicq/XAPKDetector/b59b127eed35adfd07ec6e41841dfeb2cb734093/LINUX/hicolor/16x16/apps/xapkd.png -------------------------------------------------------------------------------- /LINUX/hicolor/20x20/apps/xapkd.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/horsicq/XAPKDetector/b59b127eed35adfd07ec6e41841dfeb2cb734093/LINUX/hicolor/20x20/apps/xapkd.png -------------------------------------------------------------------------------- /LINUX/hicolor/24x24/apps/xapkd.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/horsicq/XAPKDetector/b59b127eed35adfd07ec6e41841dfeb2cb734093/LINUX/hicolor/24x24/apps/xapkd.png -------------------------------------------------------------------------------- /LINUX/hicolor/256x256/apps/xapkd.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/horsicq/XAPKDetector/b59b127eed35adfd07ec6e41841dfeb2cb734093/LINUX/hicolor/256x256/apps/xapkd.png -------------------------------------------------------------------------------- /LINUX/hicolor/32x32/apps/xapkd.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/horsicq/XAPKDetector/b59b127eed35adfd07ec6e41841dfeb2cb734093/LINUX/hicolor/32x32/apps/xapkd.png -------------------------------------------------------------------------------- /LINUX/hicolor/48x48/apps/xapkd.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/horsicq/XAPKDetector/b59b127eed35adfd07ec6e41841dfeb2cb734093/LINUX/hicolor/48x48/apps/xapkd.png -------------------------------------------------------------------------------- /LINUX/xapkd.desktop: -------------------------------------------------------------------------------- 1 | [Desktop Entry] 2 | Version=#VERSION# 3 | Type=Application 4 | Name=XAPKDetector 5 | Comment=XAPKDetector shows an information about build tools, libraries and protection of APK/DEX files 6 | TryExec=xapkd 7 | Exec=xapkd %F 8 | Icon=xapkd 9 | Terminal=false 10 | Categories=Development; 11 | MimeType=application/octet-stream; 12 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 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/XAPKDetector.svg)](https://github.com/horsicq/XAPKDetector/releases) 3 | [![GitHub All Releases](https://img.shields.io/github/downloads/horsicq/XAPKDetector/total.svg)](https://github.com/horsicq/XAPKDetector/releases) 4 | [![gitlocalized ](https://gitlocalize.com/repo/4736/whole_project/badge.svg)](https://github.com/horsicq/XTranslation) 5 | 6 | **XAPKDetector** is Android/APK/DEX detector for Windows, Linux and MacOS. 7 | 8 | **XAPKDetector** shows an information about build tools, libraries and protection of APK/DEX files 9 | 10 | * Download: https://github.com/horsicq/XAPKDetector/releases 11 | * How to run: https://github.com/horsicq/XAPKDetector/blob/master/docs/RUN.md 12 | * How to build: https://github.com/horsicq/XAPKDetector/blob/master/docs/BUILD.md 13 | * Changelog: https://github.com/horsicq/XAPKDetector/blob/master/changelog.txt 14 | 15 | You can help with translation: https://github.com/horsicq/XTranslation 16 | 17 | ![alt text](https://github.com/horsicq/XAPKDetector/blob/master/mascots/version.png "Mascot") 18 | 19 | ![alt text](https://github.com/horsicq/XAPKDetector/blob/master/docs/1.png "1") 20 | ![alt text](https://github.com/horsicq/XAPKDetector/blob/master/docs/2.png "2") 21 | ![alt text](https://github.com/horsicq/XAPKDetector/blob/master/docs/3.png "3") 22 | ![alt text](https://github.com/horsicq/XAPKDetector/blob/master/docs/4.png "4") 23 | ![alt text](https://github.com/horsicq/XAPKDetector/blob/master/docs/5.png "5") 24 | ![alt text](https://github.com/horsicq/XAPKDetector/blob/master/docs/6.png "6") 25 | ![alt text](https://github.com/horsicq/XAPKDetector/blob/master/docs/7.png "7") 26 | 27 | ## Special Thanks 28 | 29 | - [PELock Software Protection & Reverse Engineering](https://www.pelock.com) 30 | 31 | ![alt text](https://github.com/horsicq/XAPKDetector/blob/master/mascots/xapkd.png "Mascot") 32 | 33 | ## Special Thanks 34 | 35 | - [PELock Software Protection & Reverse Engineering](https://www.pelock.com) 36 | -------------------------------------------------------------------------------- /build.pri: -------------------------------------------------------------------------------- 1 | # For additional build parameters 2 | 3 | CONFIG(debug, debug|release) { 4 | DESTDIR = $$PWD/build/debug 5 | } else { 6 | DESTDIR = $$PWD/build/release 7 | } 8 | 9 | #win32-g++ { 10 | # QMAKE_CXXFLAGS += -Werror 11 | #} 12 | #win32-msvc*{ 13 | # QMAKE_CXXFLAGS += /WX 14 | #} 15 | 16 | # Windows minGW 17 | win32-g++* { 18 | QMAKE_CFLAGS += -Wno-missing-field-initializers 19 | QMAKE_CFLAGS += -Werror=format-security 20 | QMAKE_CFLAGS += -Wno-unused-parameter 21 | QMAKE_CXXFLAGS += -Wno-missing-field-initializers 22 | QMAKE_CXXFLAGS += -Werror=format-security 23 | QMAKE_CXXFLAGS += -Wno-unused-parameter 24 | } 25 | # Linux gcc 26 | unix:!macx { 27 | QMAKE_CFLAGS += -Wno-missing-field-initializers 28 | QMAKE_CFLAGS += -Werror=format-security 29 | QMAKE_CFLAGS += -Wno-unused-parameter 30 | QMAKE_CXXFLAGS += -Wno-missing-field-initializers 31 | QMAKE_CXXFLAGS += -Werror=format-security 32 | QMAKE_CXXFLAGS += -Wno-unused-parameter 33 | } 34 | # macOS clang 35 | unix:macx { 36 | QMAKE_CFLAGS += -Wno-missing-field-initializers 37 | QMAKE_CFLAGS += -Werror=format-security 38 | QMAKE_CFLAGS += -Wno-unused-parameter 39 | QMAKE_CXXFLAGS += -Wno-missing-field-initializers 40 | QMAKE_CXXFLAGS += -Werror=format-security 41 | QMAKE_CXXFLAGS += -Wno-unused-parameter 42 | } 43 | # Windows MSVC TODO check ARM/ARM64 !!! 44 | !contains(QMAKE_TARGET.arch, x86_64) { 45 | win32-msvc2013{ 46 | # VS2013 47 | # Windows XP support 48 | QMAKE_CXXFLAGS += /D_USING_V110_SDK71_ 49 | QMAKE_LFLAGS += /SUBSYSTEM:WINDOWS,5.01 50 | } 51 | win32-msvc{ 52 | # VS2017 53 | # Windows XP support 54 | QMAKE_CXXFLAGS += /D_USING_V110_SDK71_ 55 | QMAKE_LFLAGS += /SUBSYSTEM:WINDOWS,5.01 56 | } 57 | # TODO more MSVC versions 2019 58 | } 59 | 60 | contains(DEFINES, CREATE_PDB) { 61 | QMAKE_CXXFLAGS += /Zi 62 | QMAKE_LFLAGS += /DEBUG 63 | } 64 | 65 | 66 | -------------------------------------------------------------------------------- /build_dpkg.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash -x 2 | export QMAKE_PATH=/usr/bin/qmake 3 | 4 | export X_SOURCE_PATH=$PWD 5 | export X_BUILD_NAME=xapkdetector_linux_portable 6 | export X_RELEASE_VERSION=$(cat "release_version.txt") 7 | 8 | source build_tools/linux.sh 9 | 10 | check_file $QMAKE_PATH 11 | 12 | if [ -z "$X_ERROR" ]; then 13 | make_init 14 | make_build "$X_SOURCE_PATH/xapkdetector_source.pro" 15 | cd "$X_SOURCE_PATH/gui_source" 16 | make_translate "gui_source_tr.pro" 17 | cd "$X_SOURCE_PATH" 18 | 19 | check_file "$X_SOURCE_PATH/build/release/xapkd" 20 | check_file "$X_SOURCE_PATH/build/release/xapkdc" 21 | if [ -z "$X_ERROR" ]; then 22 | create_deb_app_dir xapkd 23 | 24 | export X_PACKAGENAME='xapkdetector' 25 | export X_MAINTAINER='hors ' 26 | 27 | export X_HOMEPAGE='http://ntinfo.biz' 28 | export X_DESCRIPTION='XAPKDetector shows an information about build tools, libraries and protection of Android/APK/DEX files' 29 | 30 | if [ "$X_DEBIAN_VERSION" -ge "11" ]; then 31 | export X_DEPENDS='libqt5core5a, libqt5svg5, libqt5gui5, libqt5widgets5, libqt5opengl5, libqt5dbus5, libqt5network5' 32 | else 33 | export X_DEPENDS='qt5-default, libqt5core5a, libqt5svg5, libqt5gui5, libqt5widgets5, libqt5opengl5, libqt5dbus5, libqt5network5' 34 | fi 35 | 36 | create_deb_control $X_SOURCE_PATH/release/$X_BUILD_NAME/DEBIAN/control 37 | 38 | cp -f $X_SOURCE_PATH/build/release/xapkd $X_SOURCE_PATH/release/$X_BUILD_NAME/usr/bin/ 39 | cp -f $X_SOURCE_PATH/build/release/xapkdc $X_SOURCE_PATH/release/$X_BUILD_NAME/usr/bin/ 40 | cp -f $X_SOURCE_PATH/LINUX/xapkd.desktop $X_SOURCE_PATH/release/$X_BUILD_NAME/usr/share/applications/ 41 | sed -i "s/#VERSION#/$X_RELEASE_VERSION/" $X_SOURCE_PATH/release/$X_BUILD_NAME/usr/share/applications/xapkd.desktop 42 | cp -Rf $X_SOURCE_PATH/LINUX/hicolor/ $X_SOURCE_PATH/release/$X_BUILD_NAME/usr/share/icons/ 43 | cp -Rf $X_SOURCE_PATH/XStyles/qss/ $X_SOURCE_PATH/release/$X_BUILD_NAME/usr/lib/xapkd/ 44 | mkdir -p $X_SOURCE_PATH/release/$X_BUILD_NAME/usr/lib/xapkd/lang/ 45 | cp -f $X_SOURCE_PATH/gui_source/translation/*.qm $X_SOURCE_PATH/release/$X_BUILD_NAME/usr/lib/xapkd/lang/ 46 | mkdir -p $X_SOURCE_PATH/release/$X_BUILD_NAME/usr/lib/xapkd/signatures 47 | cp -f $X_SOURCE_PATH/signatures/crypto.db $X_SOURCE_PATH/release/$X_BUILD_NAME/usr/lib/xapkd/signatures/ 48 | 49 | make_deb 50 | mv $X_SOURCE_PATH/release/$X_BUILD_NAME.deb $X_SOURCE_PATH/release/xapkdetector_${X_RELEASE_VERSION}_${X_OS_VERSION}_${X_ARCHITECTURE}.deb 51 | make_clear 52 | fi 53 | fi 54 | -------------------------------------------------------------------------------- /build_libs/build_libs.pro: -------------------------------------------------------------------------------- 1 | TEMPLATE = subdirs 2 | SUBDIRS += ../XArchive 3 | SUBDIRS += ../XCapstone 4 | SUBDIRS += ../XCppfilt 5 | SUBDIRS += ../XYara -------------------------------------------------------------------------------- /build_lin64.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash -x 2 | QT_PATH=$HOME/Qt/5.15.1/gcc_64 3 | RELEASE_VERSION=$(cat "release_version.txt") 4 | echo $RELEASE_VERSION 5 | SOURCE_PATH=$PWD 6 | 7 | BUILD_NAME=xapkdetector_lin64_portable 8 | GUIEXE=xad 9 | CONEXE=xadc 10 | 11 | cd $SOURCE_PATH 12 | 13 | function makeproject 14 | { 15 | cd $SOURCE_PATH/$1 16 | 17 | $QT_PATH/bin/qmake $1.pro -spec linux-g++ 18 | make -f Makefile clean 19 | make -f Makefile 20 | 21 | rm -rf Makefile 22 | rm -rf Makefile.Release 23 | rm -rf Makefile.Debug 24 | rm -rf object_script.* 25 | 26 | cd $SOURCE_PATH 27 | } 28 | 29 | rm -rf $SOURCE_PATH/build 30 | 31 | makeproject build_libs 32 | makeproject gui_source 33 | makeproject console_source 34 | 35 | mkdir -p release 36 | rm -rf release/$BUILD_NAME 37 | mkdir -p release/$BUILD_NAME 38 | mkdir -p release/$BUILD_NAME/base 39 | mkdir -p release/$BUILD_NAME/base/platforms 40 | mkdir -p release/$BUILD_NAME/base/imageformats 41 | 42 | cp -R $QT_PATH/plugins/platforms/libqxcb.so $SOURCE_PATH/release/$BUILD_NAME/base/platforms/ 43 | cp -R $QT_PATH/plugins/imageformats/libqjpeg.so $SOURCE_PATH/release/$BUILD_NAME/base/imageformats/ 44 | cp -R $QT_PATH/plugins/imageformats/libqtiff.so $SOURCE_PATH/release/$BUILD_NAME/base/imageformats/ 45 | cp -R $QT_PATH/plugins/imageformats/libqico.so $SOURCE_PATH/release/$BUILD_NAME/base/imageformats/ 46 | cp -R $QT_PATH/plugins/imageformats/libqgif.so $SOURCE_PATH/release/$BUILD_NAME/base/imageformats/ 47 | 48 | cp -R $SOURCE_PATH/build/release/xad $SOURCE_PATH/release/$BUILD_NAME/base/ 49 | cp -R $SOURCE_PATH/build/release/xadc $SOURCE_PATH/release/$BUILD_NAME/base/ 50 | 51 | cp -R $QT_PATH/lib/libQt5Core.so.5.15.1 $SOURCE_PATH/release/$BUILD_NAME/base/ 52 | cp -R $QT_PATH/lib/libQt5Gui.so.5.15.1 $SOURCE_PATH/release/$BUILD_NAME/base/ 53 | cp -R $QT_PATH/lib/libQt5Widgets.so.5.15.1 $SOURCE_PATH/release/$BUILD_NAME/base/ 54 | cp -R $QT_PATH/lib/libQt5OpenGL.so.5.15.1 $SOURCE_PATH/release/$BUILD_NAME/base/ 55 | cp -R $QT_PATH/lib/libQt5DBus.so.5.15.1 $SOURCE_PATH/release/$BUILD_NAME/base/ 56 | cp -R $QT_PATH/lib/libQt5XcbQpa.so.5.15.1 $SOURCE_PATH/release/$BUILD_NAME/base/ 57 | cp -R $QT_PATH/lib/libicui18n.so.56.1 $SOURCE_PATH/release/$BUILD_NAME/base/ 58 | cp -R $QT_PATH/lib/libicuuc.so.56.1 $SOURCE_PATH/release/$BUILD_NAME/base/ 59 | cp -R $QT_PATH/lib/libicudata.so.56.1 $SOURCE_PATH/release/$BUILD_NAME/base/ 60 | 61 | mv $SOURCE_PATH/release/$BUILD_NAME/base/libQt5Core.so.5.15.1 $SOURCE_PATH/release/$BUILD_NAME/base/libQt5Core.so.5 62 | mv $SOURCE_PATH/release/$BUILD_NAME/base/libQt5Gui.so.5.15.1 $SOURCE_PATH/release/$BUILD_NAME/base/libQt5Gui.so.5 63 | mv $SOURCE_PATH/release/$BUILD_NAME/base/libQt5Widgets.so.5.15.1 $SOURCE_PATH/release/$BUILD_NAME/base/libQt5Widgets.so.5 64 | mv $SOURCE_PATH/release/$BUILD_NAME/base/libQt5OpenGL.so.5.15.1 $SOURCE_PATH/release/$BUILD_NAME/base/libQt5OpenGL.so.5 65 | mv $SOURCE_PATH/release/$BUILD_NAME/base/libQt5DBus.so.5.15.1 $SOURCE_PATH/release/$BUILD_NAME/base/libQt5DBus.so.5 66 | mv $SOURCE_PATH/release/$BUILD_NAME/base/libQt5XcbQpa.so.5.15.1 $SOURCE_PATH/release/$BUILD_NAME/base/libQt5XcbQpa.so.5 67 | mv $SOURCE_PATH/release/$BUILD_NAME/base/libicui18n.so.56.1 $SOURCE_PATH/release/$BUILD_NAME/base/libicui18n.so.56 68 | mv $SOURCE_PATH/release/$BUILD_NAME/base/libicuuc.so.56.1 $SOURCE_PATH/release/$BUILD_NAME/base/libicuuc.so.56 69 | mv $SOURCE_PATH/release/$BUILD_NAME/base/libicudata.so.56.1 $SOURCE_PATH/release/$BUILD_NAME/base/libicudata.so.56 70 | 71 | mkdir -p $SOURCE_PATH/release/$BUILD_NAME/base/lang 72 | cp -Rf $SOURCE_PATH/XStyles/qss/ $SOURCE_PATH/release/$BUILD_NAME/base/qss/ 73 | 74 | $QT_PATH/bin/lrelease $SOURCE_PATH/gui_source/translation/xad_de.ts -qm $SOURCE_PATH/release/$BUILD_NAME/base/lang/xad_de.qm 75 | $QT_PATH/bin/lrelease $SOURCE_PATH/gui_source/translation/xad_ja.ts -qm $SOURCE_PATH/release/$BUILD_NAME/base/lang/xad_ja.qm 76 | $QT_PATH/bin/lrelease $SOURCE_PATH/gui_source/translation/xad_pl.ts -qm $SOURCE_PATH/release/$BUILD_NAME/base/lang/xad_pl.qm 77 | $QT_PATH/bin/lrelease $SOURCE_PATH/gui_source/translation/xad_pt_BR.ts -qm $SOURCE_PATH/release/$BUILD_NAME/base/lang/xad_pt_BR.qm 78 | $QT_PATH/bin/lrelease $SOURCE_PATH/gui_source/translation/xad_fr.ts -qm $SOURCE_PATH/release/$BUILD_NAME/base/lang/xad_fr.qm 79 | $QT_PATH/bin/lrelease $SOURCE_PATH/gui_source/translation/xad_ru.ts -qm $SOURCE_PATH/release/$BUILD_NAME/base/lang/xad_ru.qm 80 | $QT_PATH/bin/lrelease $SOURCE_PATH/gui_source/translation/xad_vi.ts -qm $SOURCE_PATH/release/$BUILD_NAME/base/lang/xad_vi.qm 81 | $QT_PATH/bin/lrelease $SOURCE_PATH/gui_source/translation/xad_zh.ts -qm $SOURCE_PATH/release/$BUILD_NAME/base/lang/xad_zh.qm 82 | $QT_PATH/bin/lrelease $SOURCE_PATH/gui_source/translation/xad_zh_TW.ts -qm $SOURCE_PATH/release/$BUILD_NAME/base/lang/xad_zh_TW.qm 83 | $QT_PATH/bin/lrelease $SOURCE_PATH/gui_source/translation/xad_ko.ts -qm $SOURCE_PATH/release/$BUILD_NAME/base/lang/xad_ko.qm 84 | $QT_PATH/bin/lrelease $SOURCE_PATH/gui_source/translation/xad_tr.ts -qm $SOURCE_PATH/release/$BUILD_NAME/base/lang/xad_tr.qm 85 | 86 | echo "#!/bin/sh" >> release/$BUILD_NAME/xad.sh 87 | echo "CWD=\$(dirname \$0)" >> release/$BUILD_NAME/xad.sh 88 | echo "export LD_LIBRARY_PATH=\"\$CWD/base:\$LD_LIBRARY_PATH\"" >> release/$BUILD_NAME/xad.sh 89 | echo "\$CWD/base/xad \$*" >> release/$BUILD_NAME/xad.sh 90 | 91 | echo "#!/bin/sh" >> release/$BUILD_NAME/xadc.sh 92 | echo "CWD=\$(dirname \$0)" >> release/$BUILD_NAME/xadc.sh 93 | echo "export LD_LIBRARY_PATH=\"\$CWD/base:\$LD_LIBRARY_PATH\"" >> release/$BUILD_NAME/xadc.sh 94 | echo "\$CWD/base/xadc \$*" >> release/$BUILD_NAME/xadc.sh 95 | 96 | chmod +x release/$BUILD_NAME/xad.sh 97 | chmod +x release/$BUILD_NAME/xadc.sh 98 | 99 | rm -rf $SOURCE_PATH/release/${BUILD_NAME}_${RELEASE_VERSION}.tar.gz 100 | rm -rf $SOURCE_PATH/release/${BUILD_NAME}_${RELEASE_VERSION}.tar 101 | 102 | cd release 103 | 104 | tar -cvf ${BUILD_NAME}_${RELEASE_VERSION}.tar $BUILD_NAME 105 | gzip --best ${BUILD_NAME}_${RELEASE_VERSION}.tar 106 | 107 | cd .. 108 | 109 | rm -rf release/$BUILD_NAME 110 | -------------------------------------------------------------------------------- /build_mac.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh -x 2 | export QMAKE_PATH=$HOME/Qt/5.15.2/clang_64/bin/qmake 3 | 4 | export X_SOURCE_PATH=$PWD 5 | export X_BUILD_NAME=xapkdetector_mac_portable 6 | export X_RELEASE_VERSION=$(cat "release_version.txt") 7 | 8 | source build_tools/mac.sh 9 | 10 | check_file $QMAKE_PATH 11 | 12 | if [ -z "$X_ERROR" ]; then 13 | make_init 14 | make_build "$X_SOURCE_PATH/xapkdetector_source.pro" 15 | cd "$X_SOURCE_PATH/gui_source" 16 | make_translate "gui_source_tr.pro" xapkd 17 | cd "$X_SOURCE_PATH" 18 | 19 | check_file "$X_SOURCE_PATH/build/release/XAPKD.app/Contents/MacOS/XAPKD" 20 | if [ -z "$X_ERROR" ]; then 21 | cp -R "$X_SOURCE_PATH/build/release/XAPKD.app" "$X_SOURCE_PATH/release/$X_BUILD_NAME" 22 | 23 | mkdir -p $X_SOURCE_PATH/release/$X_BUILD_NAME/xapkd.app/Contents/Resources/signatures 24 | cp -R $X_SOURCE_PATH/signatures/crypto.db $X_SOURCE_PATH/release/$X_BUILD_NAME/XAPKD.app/Contents/Resources/signatures 25 | cp -Rf $X_SOURCE_PATH/XStyles/qss $X_SOURCE_PATH/release/$X_BUILD_NAME/XAPKD.app/Contents/Resources/ 26 | 27 | deploy_qt XAPKD 28 | 29 | make_release XAPKD 30 | make_clear 31 | fi 32 | fi -------------------------------------------------------------------------------- /build_mingw_win32.bat: -------------------------------------------------------------------------------- 1 | set MINGWVARS_PATH="C:\Qt\5.15.2\mingw81_32\bin\qtenv2.bat" 2 | set QMAKE_PATH="qmake.exe" 3 | set SEVENZIP_PATH="C:\Program Files\7-Zip\7z.exe" 4 | 5 | set X_SOURCE_PATH=%~dp0 6 | set X_BUILD_NAME=xapkdetector_mingw_win32_portable 7 | set /p X_RELEASE_VERSION=<%X_SOURCE_PATH%\release_version.txt 8 | 9 | call %X_SOURCE_PATH%\build_win_generic.cmd -------------------------------------------------------------------------------- /build_mingw_win64.bat: -------------------------------------------------------------------------------- 1 | set MINGWVARS_PATH="C:\Qt\5.15.2\mingw81_64\bin\qtenv2.bat" 2 | set QMAKE_PATH="qmake.exe" 3 | set SEVENZIP_PATH="C:\Program Files\7-Zip\7z.exe" 4 | 5 | set X_SOURCE_PATH=%~dp0 6 | set X_BUILD_NAME=xapkdetector_mingw_win64_portable 7 | set /p X_RELEASE_VERSION=<%X_SOURCE_PATH%\release_version.txt 8 | 9 | call %X_SOURCE_PATH%\build_win_generic.cmd -------------------------------------------------------------------------------- /build_msvc_win32.bat: -------------------------------------------------------------------------------- 1 | set VSVARS_PATH="C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvars32.bat" 2 | set QMAKE_PATH="C:\Qt\5.15.2\msvc2019\bin\qmake.exe" 3 | set SEVENZIP_PATH="C:\Program Files\7-Zip\7z.exe" 4 | set INNOSETUP_PATH="C:\Program Files (x86)\Inno Setup 6\ISCC.exe" 5 | 6 | set X_SOURCE_PATH=%~dp0 7 | set X_BUILD_NAME=xapkdetector 8 | set X_BUILD_PREFIX=win32 9 | set /p X_RELEASE_VERSION=<%X_SOURCE_PATH%\release_version.txt 10 | 11 | call %X_SOURCE_PATH%\build_win_generic.cmd -------------------------------------------------------------------------------- /build_msvc_win64.bat: -------------------------------------------------------------------------------- 1 | set VSVARS_PATH="C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvars64.bat" 2 | set QMAKE_PATH="C:\Qt\5.15.2\msvc2019_64\bin\qmake.exe" 3 | set SEVENZIP_PATH="C:\Program Files\7-Zip\7z.exe" 4 | set INNOSETUP_PATH="C:\Program Files (x86)\Inno Setup 6\ISCC.exe" 5 | 6 | set X_SOURCE_PATH=%~dp0 7 | set X_BUILD_NAME=xapkdetector 8 | set X_BUILD_PREFIX=win64 9 | set /p X_RELEASE_VERSION=<%X_SOURCE_PATH%\release_version.txt 10 | 11 | call %X_SOURCE_PATH%\build_win_generic.cmd -------------------------------------------------------------------------------- /build_msvc_winxp.bat: -------------------------------------------------------------------------------- 1 | set VSVARS_PATH="C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin\vcvars32.bat" 2 | set QMAKE_PATH="C:\Qt5.6.3\5.6.3\msvc2013\bin\qmake.exe" 3 | set SEVENZIP_PATH="C:\Program Files\7-Zip\7z.exe" 4 | 5 | set X_SOURCE_PATH=%~dp0 6 | set X_BUILD_NAME=xapkdetector 7 | set X_BUILD_PREFIX=winxp 8 | set /p X_RELEASE_VERSION=<%X_SOURCE_PATH%\release_version.txt 9 | 10 | call %X_SOURCE_PATH%\build_win_generic.cmd -------------------------------------------------------------------------------- /build_win32.bat: -------------------------------------------------------------------------------- 1 | set VSVARS_PATH="C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvars32.bat" 2 | set QMAKE_PATH="C:\Qt\5.15.2\msvc2019\bin\qmake.exe" 3 | set SEVENZIP_PATH="C:\Program Files\7-Zip\7z.exe" 4 | 5 | set X_SOURCE_PATH=%~dp0 6 | set X_BUILD_NAME=xapkdetector_win32_portable 7 | set /p X_RELEASE_VERSION=<%X_SOURCE_PATH%\release_version.txt 8 | 9 | call %X_SOURCE_PATH%\build_tools\windows.cmd check_file %VSVARS_PATH% 10 | call %X_SOURCE_PATH%\build_tools\windows.cmd check_file %QMAKE_PATH% 11 | call %X_SOURCE_PATH%\build_tools\windows.cmd check_file %SEVENZIP_PATH% 12 | 13 | IF NOT [%X_ERROR%] == [] goto exit 14 | 15 | call %X_SOURCE_PATH%\build_tools\windows.cmd make_init 16 | call %X_SOURCE_PATH%\build_tools\windows.cmd make_build %X_SOURCE_PATH%\xapkdetector_source.pro 17 | 18 | cd %X_SOURCE_PATH%\gui_source 19 | call %X_SOURCE_PATH%\build_tools\windows.cmd make_translate gui_source_tr.pro 20 | cd %X_SOURCE_PATH% 21 | 22 | call %X_SOURCE_PATH%\build_tools\windows.cmd check_file %X_SOURCE_PATH%\build\release\xapkd.exe 23 | 24 | IF NOT [%X_ERROR%] == [] goto exit 25 | 26 | call %X_SOURCE_PATH%\build_tools\windows.cmd check_file %X_SOURCE_PATH%\build\release\xapkdc.exe 27 | 28 | IF NOT [%X_ERROR%] == [] goto exit 29 | 30 | mkdir %X_SOURCE_PATH%\release\%X_BUILD_NAME%\signatures 31 | 32 | copy %X_SOURCE_PATH%\build\release\xapkd.exe %X_SOURCE_PATH%\release\%X_BUILD_NAME%\ 33 | copy %X_SOURCE_PATH%\build\release\xapkdc.exe %X_SOURCE_PATH%\release\%X_BUILD_NAME%\ 34 | xcopy %X_SOURCE_PATH%\XStyles\qss %X_SOURCE_PATH%\release\%X_BUILD_NAME%\qss /E /I 35 | xcopy %X_SOURCE_PATH%\signatures\crypto.db %X_SOURCE_PATH%\release\%X_BUILD_NAME%\signatures\ 36 | 37 | call %X_SOURCE_PATH%\build_tools\windows.cmd deploy_qt_library Qt5Widgets 38 | call %X_SOURCE_PATH%\build_tools\windows.cmd deploy_qt_library Qt5Gui 39 | call %X_SOURCE_PATH%\build_tools\windows.cmd deploy_qt_library Qt5Core 40 | call %X_SOURCE_PATH%\build_tools\windows.cmd deploy_qt_library Qt5OpenGL 41 | call %X_SOURCE_PATH%\build_tools\windows.cmd deploy_qt_library Qt5Svg 42 | call %X_SOURCE_PATH%\build_tools\windows.cmd deploy_qt_library Qt5Widgets 43 | call %X_SOURCE_PATH%\build_tools\windows.cmd deploy_qt_plugin platforms qwindows 44 | call %X_SOURCE_PATH%\build_tools\windows.cmd deploy_qt_plugin imageformats qjpeg 45 | call %X_SOURCE_PATH%\build_tools\windows.cmd deploy_qt_plugin imageformats qtiff 46 | call %X_SOURCE_PATH%\build_tools\windows.cmd deploy_qt_plugin imageformats qico 47 | call %X_SOURCE_PATH%\build_tools\windows.cmd deploy_qt_plugin imageformats qgif 48 | call %X_SOURCE_PATH%\build_tools\windows.cmd deploy_vc_redist 49 | 50 | call %X_SOURCE_PATH%\build_tools\windows.cmd make_release 51 | 52 | :exit 53 | call %X_SOURCE_PATH%\build_tools\windows.cmd make_clear -------------------------------------------------------------------------------- /build_win64.bat: -------------------------------------------------------------------------------- 1 | set VSVARS_PATH="C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvars64.bat" 2 | set QMAKE_PATH="C:\Qt\5.15.2\msvc2019_64\bin\qmake.exe" 3 | set SEVENZIP_PATH="C:\Program Files\7-Zip\7z.exe" 4 | 5 | set X_SOURCE_PATH=%~dp0 6 | set X_BUILD_NAME=xapkdetector_win64_portable 7 | set /p X_RELEASE_VERSION=<%X_SOURCE_PATH%\release_version.txt 8 | 9 | call %X_SOURCE_PATH%\build_tools\windows.cmd check_file %VSVARS_PATH% 10 | call %X_SOURCE_PATH%\build_tools\windows.cmd check_file %QMAKE_PATH% 11 | call %X_SOURCE_PATH%\build_tools\windows.cmd check_file %SEVENZIP_PATH% 12 | 13 | IF NOT [%X_ERROR%] == [] goto exit 14 | 15 | call %X_SOURCE_PATH%\build_tools\windows.cmd make_init 16 | call %X_SOURCE_PATH%\build_tools\windows.cmd make_build %X_SOURCE_PATH%\xapkdetector_source.pro 17 | 18 | cd %X_SOURCE_PATH%\gui_source 19 | call %X_SOURCE_PATH%\build_tools\windows.cmd make_translate gui_source_tr.pro 20 | cd %X_SOURCE_PATH% 21 | 22 | call %X_SOURCE_PATH%\build_tools\windows.cmd check_file %X_SOURCE_PATH%\build\release\xapkd.exe 23 | 24 | IF NOT [%X_ERROR%] == [] goto exit 25 | 26 | call %X_SOURCE_PATH%\build_tools\windows.cmd check_file %X_SOURCE_PATH%\build\release\xapkdc.exe 27 | 28 | IF NOT [%X_ERROR%] == [] goto exit 29 | 30 | mkdir %X_SOURCE_PATH%\release\%X_BUILD_NAME%\signatures 31 | 32 | copy %X_SOURCE_PATH%\build\release\xapkd.exe %X_SOURCE_PATH%\release\%X_BUILD_NAME%\ 33 | copy %X_SOURCE_PATH%\build\release\xapkdc.exe %X_SOURCE_PATH%\release\%X_BUILD_NAME%\ 34 | xcopy %X_SOURCE_PATH%\XStyles\qss %X_SOURCE_PATH%\release\%X_BUILD_NAME%\qss /E /I 35 | xcopy %X_SOURCE_PATH%\signatures\crypto.db %X_SOURCE_PATH%\release\%X_BUILD_NAME%\signatures\ 36 | 37 | call %X_SOURCE_PATH%\build_tools\windows.cmd deploy_qt_library Qt5Widgets 38 | call %X_SOURCE_PATH%\build_tools\windows.cmd deploy_qt_library Qt5Gui 39 | call %X_SOURCE_PATH%\build_tools\windows.cmd deploy_qt_library Qt5Core 40 | call %X_SOURCE_PATH%\build_tools\windows.cmd deploy_qt_library Qt5OpenGL 41 | call %X_SOURCE_PATH%\build_tools\windows.cmd deploy_qt_library Qt5Svg 42 | call %X_SOURCE_PATH%\build_tools\windows.cmd deploy_qt_library Qt5Widgets 43 | call %X_SOURCE_PATH%\build_tools\windows.cmd deploy_qt_plugin platforms qwindows 44 | call %X_SOURCE_PATH%\build_tools\windows.cmd deploy_qt_plugin imageformats qjpeg 45 | call %X_SOURCE_PATH%\build_tools\windows.cmd deploy_qt_plugin imageformats qtiff 46 | call %X_SOURCE_PATH%\build_tools\windows.cmd deploy_qt_plugin imageformats qico 47 | call %X_SOURCE_PATH%\build_tools\windows.cmd deploy_qt_plugin imageformats qgif 48 | call %X_SOURCE_PATH%\build_tools\windows.cmd deploy_vc_redist 49 | 50 | call %X_SOURCE_PATH%\build_tools\windows.cmd make_release 51 | 52 | :exit 53 | call %X_SOURCE_PATH%\build_tools\windows.cmd make_clear -------------------------------------------------------------------------------- /build_win_generic.cmd: -------------------------------------------------------------------------------- 1 | call %X_SOURCE_PATH%\build_tools\windows.cmd make_init 2 | 3 | IF NOT [%X_ERROR%] == [] goto exit 4 | 5 | call %X_SOURCE_PATH%\build_tools\windows.cmd make_build %X_SOURCE_PATH%\xapkdetector_source.pro 6 | 7 | cd %X_SOURCE_PATH%\gui_source 8 | call %X_SOURCE_PATH%\build_tools\windows.cmd make_translate gui_source_tr.pro 9 | cd %X_SOURCE_PATH% 10 | 11 | call %X_SOURCE_PATH%\build_tools\windows.cmd check_file %X_SOURCE_PATH%\build\release\xapkd.exe 12 | 13 | IF NOT [%X_ERROR%] == [] goto exit 14 | 15 | call %X_SOURCE_PATH%\build_tools\windows.cmd check_file %X_SOURCE_PATH%\build\release\xapkdc.exe 16 | 17 | IF NOT [%X_ERROR%] == [] goto exit 18 | 19 | mkdir %X_SOURCE_PATH%\release\%X_BUILD_NAME%\signatures 20 | 21 | copy %X_SOURCE_PATH%\build\release\xapkd.exe %X_SOURCE_PATH%\release\%X_BUILD_NAME%\ 22 | copy %X_SOURCE_PATH%\build\release\xapkdc.exe %X_SOURCE_PATH%\release\%X_BUILD_NAME%\ 23 | xcopy %X_SOURCE_PATH%\XStyles\qss %X_SOURCE_PATH%\release\%X_BUILD_NAME%\qss /E /I 24 | xcopy %X_SOURCE_PATH%\signatures\crypto.db %X_SOURCE_PATH%\release\%X_BUILD_NAME%\signatures\ 25 | 26 | call %X_SOURCE_PATH%\build_tools\windows.cmd deploy_qt_library Qt5Widgets 27 | call %X_SOURCE_PATH%\build_tools\windows.cmd deploy_qt_library Qt5Gui 28 | call %X_SOURCE_PATH%\build_tools\windows.cmd deploy_qt_library Qt5Core 29 | call %X_SOURCE_PATH%\build_tools\windows.cmd deploy_qt_library Qt5OpenGL 30 | call %X_SOURCE_PATH%\build_tools\windows.cmd deploy_qt_library Qt5Svg 31 | call %X_SOURCE_PATH%\build_tools\windows.cmd deploy_qt_library Qt5Sql 32 | call %X_SOURCE_PATH%\build_tools\windows.cmd deploy_qt_library Qt5PrintSupport 33 | call %X_SOURCE_PATH%\build_tools\windows.cmd deploy_qt_library Qt5Script 34 | call %X_SOURCE_PATH%\build_tools\windows.cmd deploy_qt_library Qt5ScriptTools 35 | call %X_SOURCE_PATH%\build_tools\windows.cmd deploy_qt_library Qt5Network 36 | call %X_SOURCE_PATH%\build_tools\windows.cmd deploy_qt_plugin platforms qwindows 37 | call %X_SOURCE_PATH%\build_tools\windows.cmd deploy_qt_plugin imageformats qjpeg 38 | call %X_SOURCE_PATH%\build_tools\windows.cmd deploy_qt_plugin imageformats qtiff 39 | call %X_SOURCE_PATH%\build_tools\windows.cmd deploy_qt_plugin imageformats qico 40 | call %X_SOURCE_PATH%\build_tools\windows.cmd deploy_qt_plugin imageformats qgif 41 | call %X_SOURCE_PATH%\build_tools\windows.cmd deploy_qt_plugin sqldrivers qsqlite 42 | call %X_SOURCE_PATH%\build_tools\windows.cmd deploy_redist 43 | call %X_SOURCE_PATH%\build_tools\windows.cmd deploy_openssl 44 | 45 | call %X_SOURCE_PATH%\build_tools\windows.cmd make_release 46 | :exit 47 | call %X_SOURCE_PATH%\build_tools\windows.cmd make_clear -------------------------------------------------------------------------------- /build_winxp.bat: -------------------------------------------------------------------------------- 1 | set VSVARS_PATH="C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin\vcvars32.bat" 2 | set QMAKE_PATH="C:\Qt5.6.3\5.6.3\msvc2013\bin\qmake.exe" 3 | set SEVENZIP_PATH="C:\Program Files\7-Zip\7z.exe" 4 | 5 | set X_SOURCE_PATH=%~dp0 6 | set X_BUILD_NAME=xapkdetector_winxp_portable 7 | set /p X_RELEASE_VERSION=<%X_SOURCE_PATH%\release_version.txt 8 | 9 | call %X_SOURCE_PATH%\build_tools\windows.cmd check_file %VSVARS_PATH% 10 | call %X_SOURCE_PATH%\build_tools\windows.cmd check_file %QMAKE_PATH% 11 | call %X_SOURCE_PATH%\build_tools\windows.cmd check_file %SEVENZIP_PATH% 12 | 13 | IF NOT [%X_ERROR%] == [] goto exit 14 | 15 | call %X_SOURCE_PATH%\build_tools\windows.cmd make_init 16 | call %X_SOURCE_PATH%\build_tools\windows.cmd make_build %X_SOURCE_PATH%\xapkdetector_source.pro 17 | 18 | cd %X_SOURCE_PATH%\gui_source 19 | call %X_SOURCE_PATH%\build_tools\windows.cmd make_translate gui_source_tr.pro 20 | cd %X_SOURCE_PATH% 21 | 22 | call %X_SOURCE_PATH%\build_tools\windows.cmd check_file %X_SOURCE_PATH%\build\release\xapkd.exe 23 | 24 | IF NOT [%X_ERROR%] == [] goto exit 25 | 26 | call %X_SOURCE_PATH%\build_tools\windows.cmd check_file %X_SOURCE_PATH%\build\release\xapkdc.exe 27 | 28 | IF NOT [%X_ERROR%] == [] goto exit 29 | 30 | mkdir %X_SOURCE_PATH%\release\%X_BUILD_NAME%\signatures 31 | 32 | copy %X_SOURCE_PATH%\build\release\xapkd.exe %X_SOURCE_PATH%\release\%X_BUILD_NAME%\ 33 | copy %X_SOURCE_PATH%\build\release\xapkdc.exe %X_SOURCE_PATH%\release\%X_BUILD_NAME%\ 34 | xcopy %X_SOURCE_PATH%\XStyles\qss %X_SOURCE_PATH%\release\%X_BUILD_NAME%\qss /E /I /Y 35 | xcopy %X_SOURCE_PATH%\signatures\crypto.db %X_SOURCE_PATH%\release\%X_BUILD_NAME%\signatures\ /Y 36 | 37 | call %X_SOURCE_PATH%\build_tools\windows.cmd deploy_qt_library Qt5Widgets 38 | call %X_SOURCE_PATH%\build_tools\windows.cmd deploy_qt_library Qt5Gui 39 | call %X_SOURCE_PATH%\build_tools\windows.cmd deploy_qt_library Qt5Core 40 | call %X_SOURCE_PATH%\build_tools\windows.cmd deploy_qt_library Qt5OpenGL 41 | call %X_SOURCE_PATH%\build_tools\windows.cmd deploy_qt_library Qt5Svg 42 | call %X_SOURCE_PATH%\build_tools\windows.cmd deploy_qt_library Qt5Widgets 43 | call %X_SOURCE_PATH%\build_tools\windows.cmd deploy_qt_plugin platforms qwindows 44 | call %X_SOURCE_PATH%\build_tools\windows.cmd deploy_qt_plugin imageformats qjpeg 45 | call %X_SOURCE_PATH%\build_tools\windows.cmd deploy_qt_plugin imageformats qtiff 46 | call %X_SOURCE_PATH%\build_tools\windows.cmd deploy_qt_plugin imageformats qico 47 | call %X_SOURCE_PATH%\build_tools\windows.cmd deploy_qt_plugin imageformats qgif 48 | call %X_SOURCE_PATH%\build_tools\windows.cmd deploy_vc_redist 49 | 50 | call %X_SOURCE_PATH%\build_tools\windows.cmd make_release 51 | 52 | :exit 53 | call %X_SOURCE_PATH%\build_tools\windows.cmd make_clear -------------------------------------------------------------------------------- /changelog.txt: -------------------------------------------------------------------------------- 1 | 0.03 2 | ----------------------------------------------------------------------- 3 | [+] Source code qt6 compatibility 4 | [+] Bundle for Apple M1 processor 5 | [+] APKS support 6 | [+] CMAKE build system 7 | [+] More than 100 new detects 8 | [+] New "All types" mode 9 | [+] New console features 10 | [+] Colored output for console 11 | [+] New translations 12 | [+] Many bugs have been fixed 13 | 14 | 0.02 15 | ----------------------------------------------------------------------- 16 | [+] Docker image 17 | [+] Linux AppImage 18 | [+] Autotools build system 19 | [+] New detects 20 | [+] Many bugs have been fixed 21 | [+] PKG installer for OSX 22 | ####################################################################### 23 | -------------------------------------------------------------------------------- /configure.ac: -------------------------------------------------------------------------------- 1 | AC_INIT([XAPKDetector], 0.03) 2 | AC_PROG_CC 3 | AC_LANG(C++) 4 | PKG_CHECK_MODULES(Qt5Core, [Qt5Core >= 5.2.0], [], [AC_MSG_ERROR([Qt5Core >= 5.2.0] is required.)]) 5 | PKG_CHECK_MODULES(Qt5Gui, [Qt5Gui >= 5.2.0], [], [AC_MSG_ERROR([Qt5Gui >= 5.2.0] is required.)]) 6 | PKG_CHECK_MODULES(Qt5Widgets, [Qt5Widgets >= 5.2.0], [], [AC_MSG_ERROR([Qt5Widgets >= 5.2.0] is required.)]) 7 | PKG_CHECK_MODULES(Qt5Sql, [Qt5Sql >= 5.2.0], [], [AC_MSG_ERROR([Qt5Sql >= 5.2.0] is required.)]) 8 | PKG_CHECK_MODULES(Qt5Script, [Qt5Script >= 5.2.0], [], [AC_MSG_ERROR([Qt5Script >= 5.2.0] is required.)]) 9 | PKG_CHECK_MODULES(Qt5ScriptTools, [Qt5ScriptTools >= 5.2.0], [], [AC_MSG_ERROR([Qt5ScriptTools >= 5.2.0] is required.)]) 10 | PKG_CHECK_MODULES(Qt5Network, [Qt5Network >= 5.2.0], [], [AC_MSG_ERROR([Qt5Network >= 5.2.0] is required.)]) 11 | 12 | PKG_CHECK_EXISTS([Qt5Core >= 5.2.0],[PKG_CHECK_VAR(QT_QMAKE,[Qt5Core >= 5.2.0],[host_bins])]) 13 | 14 | AS_IF([test -f "$QT_QMAKE/qmake"],[QT_QMAKE="$QT_QMAKE/qmake"],[AS_IF([test -f "$QT_QMAKE/qmake-qt5"],[QT_QMAKE="$QT_QMAKE/qmake-qt5"],[QT_QMAKE=""])]) 15 | 16 | X_QMAKE_SPEC=$($QT_QMAKE -query QMAKE_SPEC) 17 | X_QT_VERSION=$($QT_QMAKE -query QT_VERSION) 18 | AC_MSG_NOTICE([Qt version: $X_QT_VERSION]) 19 | AC_MSG_NOTICE([Running qmake to generate the makefile...]) 20 | $QT_QMAKE "xapkdetector_source.pro" -spec $X_QMAKE_SPEC 21 | 22 | AC_MSG_NOTICE([The configure finished. Please type "make" to compile the project.]) 23 | AS_ECHO() 24 | -------------------------------------------------------------------------------- /console_source/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.10) 2 | 3 | project(xapkdc VERSION 0.03 LANGUAGES CXX) 4 | 5 | include_guard(DIRECTORY) 6 | 7 | set(CMAKE_INCLUDE_CURRENT_DIR ON) 8 | 9 | set(CMAKE_AUTOUIC ON) 10 | set(CMAKE_AUTOMOC ON) 11 | set(CMAKE_AUTORCC ON) 12 | 13 | set(CMAKE_CXX_STANDARD 11) 14 | set(CMAKE_CXX_STANDARD_REQUIRED ON) 15 | 16 | file(MAKE_DIRECTORY ../release) 17 | set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ../release) 18 | set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ../release) 19 | set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ../release) 20 | 21 | find_package(QT NAMES Qt5 COMPONENTS Core REQUIRED) 22 | find_package(Qt5 COMPONENTS Concurrent REQUIRED) 23 | 24 | add_definitions(-DUSE_DEX) 25 | add_definitions(-DUSE_PDF) 26 | add_definitions(-DUSE_ARCHIVE) 27 | 28 | include(${PROJECT_SOURCE_DIR}/../StaticScan/staticscan.cmake) 29 | 30 | set(PROJECT_SOURCES 31 | ${STATICSCAN_SOURCES} 32 | main_console.cpp 33 | ) 34 | 35 | if(APPLE) 36 | add_library(${PROJECT_NAME} MODULE ${PROJECT_SOURCES}) 37 | set_target_properties(${PROJECT_NAME} PROPERTIES 38 | MACOSX_BUNDLE_GUI_IDENTIFIER ntinfo.xapkd 39 | MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION} 40 | MACOSX_BUNDLE_SHORT_VERSION_STRING ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR} 41 | BUNDLE TRUE) 42 | set(MACOSX_BUNDLE_ICON_FILE ../icons/main.icns) 43 | else() 44 | add_executable(${PROJECT_NAME} 45 | ${PROJECT_SOURCES} 46 | ) 47 | endif() 48 | 49 | target_link_libraries(${PROJECT_NAME} bzip2) 50 | target_link_libraries(${PROJECT_NAME} lzma) 51 | target_link_libraries(${PROJECT_NAME} zlib) 52 | target_link_libraries(${PROJECT_NAME} capstone_x86) 53 | 54 | target_link_libraries(${PROJECT_NAME} Qt5::Core) 55 | target_link_libraries(${PROJECT_NAME} Qt5::Concurrent) 56 | 57 | if(WIN32) 58 | target_link_libraries(${PROJECT_NAME} Wintrust) 59 | target_link_libraries(${PROJECT_NAME} Crypt32) 60 | endif() 61 | 62 | 63 | -------------------------------------------------------------------------------- /console_source/console_source.pro: -------------------------------------------------------------------------------- 1 | QT += core 2 | QT -= gui 3 | 4 | XCONFIG += use_dex 5 | XCONFIG += use_archive 6 | XCONFIG += use_pdf 7 | 8 | include(../build.pri) 9 | 10 | CONFIG += c++11 11 | 12 | TARGET = xapkdc 13 | CONFIG += console 14 | CONFIG -= app_bundle 15 | 16 | TEMPLATE = app 17 | 18 | SOURCES += \ 19 | main_console.cpp 20 | 21 | !contains(XCONFIG, specabstract) { 22 | XCONFIG += specabstract 23 | include(../../_mylibs/SpecAbstract/specabstract.pri) 24 | } 25 | 26 | win32 { 27 | CONFIG -= embed_manifest_exe 28 | QMAKE_MANIFEST = windows.manifest.xml 29 | } 30 | 31 | DISTFILES += \ 32 | CMakeLists.txt 33 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /console_source/windows.manifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | true 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | -------------------------------------------------------------------------------- /create_appimage.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash -x 2 | export X_SOURCE_PATH=$PWD 3 | export X_RELEASE_VERSION=$(cat "release_version.txt") 4 | export VERSION=$X_RELEASE_VERSION 5 | 6 | source build_tools/linux.sh 7 | 8 | create_image_app_dir xapkd 9 | 10 | cp -f $X_SOURCE_PATH/build/release/xapkd $X_SOURCE_PATH/release/appDir/usr/bin/ 11 | cp -f $X_SOURCE_PATH/build/release/xapkdc $X_SOURCE_PATH/release/appDir/usr/bin/ 12 | cp -f $X_SOURCE_PATH/LINUX/xapkd.desktop $X_SOURCE_PATH/release/appDir/usr/share/applications/ 13 | sed -i "s/#VERSION#/1.0/" $X_SOURCE_PATH/release/appDir/usr/share/applications/xapkd.desktop 14 | cp -Rf $X_SOURCE_PATH/LINUX/hicolor/ $X_SOURCE_PATH/release/appDir/usr/share/icons/ 15 | cp -Rf $X_SOURCE_PATH/XStyles/qss/ $X_SOURCE_PATH/release/appDir/usr/lib/xapkd/ 16 | mkdir -p $X_SOURCE_PATH/release/appDir/usr/lib/xapkd/signatures 17 | cp -f $X_SOURCE_PATH/signatures/crypto.db $X_SOURCE_PATH/release/appDir/usr/lib/xapkd/signatures/ 18 | 19 | cd $X_SOURCE_PATH/release 20 | 21 | linuxdeployqt $X_SOURCE_PATH/release/appDir/usr/share/applications/xapkd.desktop -appimage -always-overwrite 22 | #mv *.AppImage xapkd_${X_RELEASE_VERSION}.AppImage 23 | 24 | cd $X_SOURCE_PATH 25 | 26 | rm -Rf $X_SOURCE_PATH/release/appDir 27 | -------------------------------------------------------------------------------- /docs/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/horsicq/XAPKDetector/b59b127eed35adfd07ec6e41841dfeb2cb734093/docs/1.png -------------------------------------------------------------------------------- /docs/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/horsicq/XAPKDetector/b59b127eed35adfd07ec6e41841dfeb2cb734093/docs/2.png -------------------------------------------------------------------------------- /docs/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/horsicq/XAPKDetector/b59b127eed35adfd07ec6e41841dfeb2cb734093/docs/3.png -------------------------------------------------------------------------------- /docs/4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/horsicq/XAPKDetector/b59b127eed35adfd07ec6e41841dfeb2cb734093/docs/4.png -------------------------------------------------------------------------------- /docs/5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/horsicq/XAPKDetector/b59b127eed35adfd07ec6e41841dfeb2cb734093/docs/5.png -------------------------------------------------------------------------------- /docs/6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/horsicq/XAPKDetector/b59b127eed35adfd07ec6e41841dfeb2cb734093/docs/6.png -------------------------------------------------------------------------------- /docs/7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/horsicq/XAPKDetector/b59b127eed35adfd07ec6e41841dfeb2cb734093/docs/7.png -------------------------------------------------------------------------------- /docs/BUILD.md: -------------------------------------------------------------------------------- 1 | How to build on Docker 2 | ======= 3 | git clone --recursive https://github.com/horsicq/XAPKDetector.git 4 | 5 | cd XAPKDetector 6 | 7 | docker build . 8 | 9 | How to build on Linux(Debian package, tested on Ubuntu 14.04-20.04) 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 qt5-default qtbase5-dev qttools5-dev-tools 17 | 18 | git clone --recursive https://github.com/horsicq/XAPKDetector.git 19 | 20 | cd XAPKDetector 21 | 22 | Run build script: bash -x build_dpkg.sh 23 | 24 | How to build on Linux(Automake) 25 | ======= 26 | 27 | Qt framework has to be installed on the system. 28 | 29 | - (Ubuntu) Install GIT: sudo apt-get install --quiet --assume-yes git 30 | - (Ubuntu 20.04)Install Qt Framework: sudo apt-get install --quiet --assume-yes build-essential qt5-default qtbase5-dev qttools5-dev-tools 31 | 32 | Clone project: git clone --recursive https://github.com/horsicq/XAPKDetector.git 33 | 34 | cd XAPKDetector 35 | 36 | - chmod a+x configure 37 | - ./configure 38 | - make 39 | - sudo make install 40 | 41 | How to build on OSX 42 | ======= 43 | 44 | Install Qt 5.15.2: https://github.com/horsicq/build_tools 45 | 46 | Clone project: git clone --recursive https://github.com/horsicq/XAPKDetector.git 47 | 48 | cd XAPKDetector 49 | 50 | Edit build_mac.bat ( check QT_PATH variable) 51 | 52 | Run build_mac.bat 53 | 54 | How to build on Windows(XP) 55 | ======= 56 | 57 | Install Visual Studio 2013: https://github.com/horsicq/build_tools 58 | 59 | Install Qt 5.6.3 for VS2013: https://github.com/horsicq/build_tools 60 | 61 | Install 7-Zip: https://www.7-zip.org/ 62 | 63 | Clone project: git clone --recursive https://github.com/horsicq/XAPKDetector.git 64 | 65 | cd XAPKDetector 66 | 67 | Edit build_winxp.bat ( check VS_PATH, SEVENZIP_PATH, QT_PATH variables) 68 | 69 | Run build_winxp.bat 70 | 71 | How to build on Windows(7-10) 72 | ======= 73 | 74 | Install Visual Studio 2019: https://github.com/horsicq/build_tools 75 | 76 | Install Qt 5.15.2 for VS2019: https://github.com/horsicq/build_tools 77 | 78 | Install 7-Zip: https://www.7-zip.org/ 79 | 80 | Install Inno Setup: https://github.com/horsicq/build_tools 81 | 82 | Clone project: git clone --recursive https://github.com/horsicq/XAPKDetector.git 83 | 84 | cd XAPKDetector 85 | 86 | Edit build_msvc_win32.bat ( check VSVARS_PATH, SEVENZIP_PATH, INNOSETUP_PATH, QMAKE_PATH variables) 87 | 88 | Edit build_msvc_win64.bat ( check VSVARS_PATH, SEVENZIP_PATH, INNOSETUP_PATH, QMAKE_PATH variables) 89 | 90 | Run build_win32.bat 91 | 92 | Run build_win64.bat 93 | 94 | How to build with CMAKE 95 | ======= 96 | git clone --recursive https://github.com/horsicq/XAPKDetector.git 97 | 98 | cd XAPKDetector 99 | 100 | cmake . 101 | 102 | make 103 | 104 | sudo make install 105 | -------------------------------------------------------------------------------- /docs/RUN.md: -------------------------------------------------------------------------------- 1 | How to run portable version on Linux 2 | ======= 3 | 4 | * download an appImage file https://github.com/horsicq/XAPKDetector/releases/download/0.03/XAPKDetector-0.03-x86_64.AppImage 5 | * make the file executable (chmod +x XAPKDetector-0.03-x86_64.AppImage) 6 | * run it (./XAPKDetector-0.03-x86_64.AppImage) 7 | -------------------------------------------------------------------------------- /global.h: -------------------------------------------------------------------------------- 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 | #ifndef _GLOBAL_H 22 | #define _GLOBAL_H 23 | 24 | #include 25 | 26 | #define X_APPLICATIONDISPLAYNAME "XAPKDetector" 27 | #define X_APPLICATIONNAME "xapkd" 28 | #define X_APPLICATIONVERSION "0.03" 29 | #define X_ORGANIZATIONNAME "NTInfo" 30 | #define X_ORGANIZATIONDOMAIN "ntinfo.biz" 31 | #define X_OPTIONSFILE "xapkd.ini" 32 | #define X_SHORTCUTSFILE "shortcuts.ini" 33 | 34 | #endif // _GLOBAL_H 35 | -------------------------------------------------------------------------------- /gui_source/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.10) 2 | 3 | project(xapkd VERSION 0.03 LANGUAGES CXX) 4 | 5 | include_guard(DIRECTORY) 6 | 7 | set(CMAKE_INCLUDE_CURRENT_DIR ON) 8 | 9 | set(CMAKE_AUTOUIC ON) 10 | set(CMAKE_AUTOMOC ON) 11 | set(CMAKE_AUTORCC ON) 12 | 13 | set(CMAKE_CXX_STANDARD 11) 14 | set(CMAKE_CXX_STANDARD_REQUIRED ON) 15 | 16 | file(MAKE_DIRECTORY ../release) 17 | set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ../release) 18 | set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ../release) 19 | set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ../release) 20 | 21 | find_package(QT NAMES Qt5 COMPONENTS Widgets REQUIRED) 22 | find_package(Qt5 COMPONENTS Widgets REQUIRED) 23 | find_package(Qt5 COMPONENTS Concurrent REQUIRED) 24 | find_package(Qt5 COMPONENTS OpenGL REQUIRED) 25 | find_package(Qt5 COMPONENTS PrintSupport REQUIRED) 26 | find_package(Qt5 COMPONENTS Svg REQUIRED) 27 | find_package(Qt5 COMPONENTS Network REQUIRED) 28 | 29 | add_definitions(-DUSE_DEX) 30 | add_definitions(-DUSE_PDF) 31 | add_definitions(-DUSE_ARCHIVE) 32 | 33 | include(${PROJECT_SOURCE_DIR}/../archive_widget/archive_widget.cmake) 34 | 35 | set(PROJECT_SOURCES 36 | ${ARCHIVE_WIDGET_SOURCES} 37 | dialogabout.cpp 38 | dialogabout.ui 39 | dialogoptions.cpp 40 | dialogoptions.ui 41 | guimainwindow.cpp 42 | guimainwindow.ui 43 | main_gui.cpp 44 | resources.qrc 45 | ) 46 | 47 | if(APPLE) 48 | add_library(${PROJECT_NAME} MODULE ${PROJECT_SOURCES}) 49 | set_target_properties(${PROJECT_NAME} PROPERTIES 50 | MACOSX_BUNDLE_GUI_IDENTIFIER ntinfo.xapkd 51 | MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION} 52 | MACOSX_BUNDLE_SHORT_VERSION_STRING ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR} 53 | BUNDLE TRUE) 54 | set(MACOSX_BUNDLE_ICON_FILE ../icons/main.icns) 55 | else() 56 | add_executable(${PROJECT_NAME} WIN32 57 | ${PROJECT_SOURCES} 58 | ) 59 | endif() 60 | 61 | target_link_libraries(${PROJECT_NAME} bzip2) 62 | target_link_libraries(${PROJECT_NAME} lzma) 63 | target_link_libraries(${PROJECT_NAME} zlib) 64 | target_link_libraries(${PROJECT_NAME} capstone) 65 | target_link_libraries(${PROJECT_NAME} cppfilt) 66 | 67 | target_link_libraries(${PROJECT_NAME} Qt5::Widgets) 68 | target_link_libraries(${PROJECT_NAME} Qt5::Concurrent) 69 | target_link_libraries(${PROJECT_NAME} Qt5::OpenGL) 70 | target_link_libraries(${PROJECT_NAME} Qt5::PrintSupport) 71 | target_link_libraries(${PROJECT_NAME} Qt5::Svg) 72 | target_link_libraries(${PROJECT_NAME} Qt5::Network) 73 | 74 | if(WIN32) 75 | target_link_libraries(${PROJECT_NAME} Wintrust) 76 | target_link_libraries(${PROJECT_NAME} Crypt32) 77 | endif() 78 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /gui_source/dialogabout.h: -------------------------------------------------------------------------------- 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 | #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 | -------------------------------------------------------------------------------- /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/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.h: -------------------------------------------------------------------------------- 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 | #ifndef DIALOGDIRECTORYSCAN_H 22 | #define DIALOGDIRECTORYSCAN_H 23 | 24 | #include "../global.h" 25 | #include 26 | #include 27 | #include "dialogoptions.h" 28 | #include "dialogstaticscan.h" 29 | 30 | namespace Ui { 31 | class DialogDirectoryScan; 32 | } 33 | 34 | class DialogDirectoryScan : public QDialog 35 | { 36 | Q_OBJECT 37 | 38 | public: 39 | explicit DialogDirectoryScan(QWidget *parent, NFD::OPTIONS *pOptions, QString sDirName); 40 | ~DialogDirectoryScan(); 41 | 42 | private slots: 43 | void on_pushButtonOpenDirectory_clicked(); 44 | void on_pushButtonScan_clicked(); 45 | void scanDirectory(QString sDirectoryName); 46 | void scanResult(SpecAbstract::SCAN_RESULT scanResult); 47 | void appendResult(QString sResult); 48 | void on_pushButtonOK_clicked(); 49 | void on_pushButtonClear_clicked(); 50 | void on_pushButtonSave_clicked(); 51 | 52 | signals: 53 | void resultSignal(QString sText); 54 | 55 | private: 56 | Ui::DialogDirectoryScan *ui; 57 | NFD::OPTIONS *pOptions; 58 | }; 59 | 60 | #endif // DIALOGDIRECTORYSCAN_H 61 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /gui_source/dialogoptions.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 "dialogoptions.h" 22 | 23 | #include "ui_dialogoptions.h" 24 | 25 | DialogOptions::DialogOptions(QWidget *pParent, XOptions *pOptions) : QDialog(pParent), ui(new Ui::DialogOptions) 26 | { 27 | ui->setupUi(this); 28 | 29 | g_pDIEOptionsWidget = new DIEOptionsWidget(this); 30 | g_pSearchSignaturesOptionsWidget = new SearchSignaturesOptionsWidget(this); 31 | g_pXHexViewOptionsWidget = new XHexViewOptionsWidget(this); 32 | g_pXDisasmViewOptionsWidget = new XDisasmViewOptionsWidget(this); 33 | 34 | ui->widgetOptions->setOptions(pOptions, X_APPLICATIONDISPLAYNAME); 35 | 36 | ui->widgetOptions->addPage(g_pDIEOptionsWidget, tr("Scan")); 37 | g_pDIEOptionsWidget->setOptions(pOptions); 38 | 39 | ui->widgetOptions->addPage(g_pSearchSignaturesOptionsWidget, tr("Signatures")); 40 | g_pSearchSignaturesOptionsWidget->setOptions(pOptions); 41 | 42 | ui->widgetOptions->addPage(g_pXHexViewOptionsWidget, tr("Hex")); 43 | g_pXHexViewOptionsWidget->setOptions(pOptions); 44 | 45 | ui->widgetOptions->addPage(g_pXDisasmViewOptionsWidget, tr("Disasm")); 46 | g_pXDisasmViewOptionsWidget->setOptions(pOptions); 47 | 48 | ui->widgetOptions->setCurrentPage(1); 49 | } 50 | 51 | DialogOptions::~DialogOptions() 52 | { 53 | delete ui; 54 | } 55 | -------------------------------------------------------------------------------- /gui_source/dialogoptions.h: -------------------------------------------------------------------------------- 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 | #ifndef DIALOGOPTIONS_H 22 | #define DIALOGOPTIONS_H 23 | 24 | #include 25 | #include 26 | #include 27 | #include 28 | #include 29 | 30 | #include "../global.h" 31 | #include "searchsignaturesoptionswidget.h" 32 | #include "dieoptionswidget.h" 33 | #include "xbinary.h" 34 | #include "xdisasmviewoptionswidget.h" 35 | #include "xhexviewoptionswidget.h" 36 | #include "xoptions.h" 37 | 38 | namespace Ui { 39 | class DialogOptions; 40 | } 41 | 42 | class DialogOptions : public QDialog { 43 | Q_OBJECT 44 | 45 | public: 46 | explicit DialogOptions(QWidget *pParent, XOptions *pOptions); 47 | ~DialogOptions(); 48 | 49 | private: 50 | Ui::DialogOptions *ui; 51 | DIEOptionsWidget *g_pDIEOptionsWidget; 52 | SearchSignaturesOptionsWidget *g_pSearchSignaturesOptionsWidget; 53 | XHexViewOptionsWidget *g_pXHexViewOptionsWidget; 54 | XDisasmViewOptionsWidget *g_pXDisasmViewOptionsWidget; 55 | }; 56 | 57 | #endif // DIALOGOPTIONS_H 58 | -------------------------------------------------------------------------------- /gui_source/dialogoptions.ui: -------------------------------------------------------------------------------- 1 | 2 | 3 | DialogOptions 4 | 5 | 6 | Qt::ApplicationModal 7 | 8 | 9 | 10 | 0 11 | 0 12 | 372 13 | 318 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 | -------------------------------------------------------------------------------- /gui_source/gui_source.pro: -------------------------------------------------------------------------------- 1 | QT += core gui 2 | 3 | greaterThan(QT_MAJOR_VERSION, 4): QT += widgets 4 | 5 | TARGET = xapkd 6 | 7 | macx { 8 | TARGET = XAPKD 9 | } 10 | 11 | TEMPLATE = app 12 | 13 | include(../build.pri) 14 | 15 | XCONFIG += use_dex 16 | XCONFIG += use_archive 17 | XCONFIG += use_pdf 18 | 19 | CONFIG += c++11 20 | 21 | SOURCES +=\ 22 | guimainwindow.cpp \ 23 | dialogabout.cpp \ 24 | main_gui.cpp \ 25 | dialogoptions.cpp 26 | 27 | HEADERS += \ 28 | guimainwindow.h \ 29 | ../global.h \ 30 | dialogabout.h \ 31 | dialogoptions.h 32 | 33 | FORMS += \ 34 | guimainwindow.ui \ 35 | dialogabout.ui \ 36 | dialogoptions.ui \ 37 | dialogdirectoryscan.ui 38 | 39 | 40 | !contains(XCONFIG, archive_widget) { 41 | XCONFIG += archive_widget 42 | include(../archive_widget/archive_widget.pri) 43 | } 44 | 45 | win32 { 46 | RC_ICONS = ../icons/main.ico 47 | CONFIG -= embed_manifest_exe 48 | QMAKE_MANIFEST = windows.manifest.xml 49 | } 50 | 51 | macx { 52 | ICON = ../icons/main.icns 53 | } 54 | 55 | RESOURCES += \ 56 | resources.qrc 57 | 58 | DISTFILES += \ 59 | ../changelog.txt \ 60 | ../release_version.txt \ 61 | CMakeLists.txt 62 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /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/guimainwindow.h: -------------------------------------------------------------------------------- 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 | #ifndef GUIMAINWINDOW_H 22 | #define GUIMAINWINDOW_H 23 | 24 | #include 25 | #include 26 | #include 27 | #include 28 | 29 | #include "../global.h" 30 | #include "archive_widget.h" 31 | #include "dialogabout.h" 32 | #include "dialogoptions.h" 33 | #include "dialogshortcuts.h" 34 | #include "xoptions.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 handleFile(QString sFileName); 49 | void on_pushButtonScan_clicked(); 50 | void on_pushButtonExit_clicked(); 51 | void on_pushButtonOpenFile_clicked(); 52 | void on_pushButtonAbout_clicked(); 53 | void on_pushButtonShortcuts_clicked(); 54 | void on_pushButtonOptions_clicked(); 55 | void adjustWindow(); 56 | void on_pushButtonHex_clicked(); 57 | void on_pushButtonStrings_clicked(); 58 | void on_pushButtonHash_clicked(); 59 | void on_pushButtonEntropy_clicked(); 60 | void scanFile(QString sFileName); 61 | void on_pushButtonSignature_clicked(); 62 | void on_pushButtonDEX_clicked(); 63 | void on_pushButtonELF_clicked(); 64 | void on_pushButtonManifestMF_clicked(); 65 | void on_pushButtonAndroidManifest_clicked(); 66 | void openFile(QString sRecordName, XBinary::FT fileType, bool bIsVirtual); 67 | void openFile(); 68 | 69 | private: 70 | void _handleList(QList *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/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 |
archive_widget.h
247 | 1 248 |
249 |
250 | 251 | 252 |
253 | -------------------------------------------------------------------------------- /gui_source/images/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/horsicq/XAPKDetector/b59b127eed35adfd07ec6e41841dfeb2cb734093/gui_source/images/icon.png -------------------------------------------------------------------------------- /gui_source/images/main.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/horsicq/XAPKDetector/b59b127eed35adfd07ec6e41841dfeb2cb734093/gui_source/images/main.png -------------------------------------------------------------------------------- /gui_source/main_gui.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 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/XAPKD") + "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 | #ifdef Q_OS_LINUX 54 | #if QT_VERSION >= QT_VERSION_CHECK(5, 7, 0) 55 | a.setDesktopFileName("xapkd"); 56 | #endif 57 | #endif 58 | 59 | QApplication::setWindowIcon(QIcon(":/images/icon.png")); 60 | 61 | XOptions xOptions; 62 | 63 | xOptions.setName(X_OPTIONSFILE); 64 | 65 | xOptions.addID(XOptions::ID_VIEW_FONT, ""); 66 | xOptions.addID(XOptions::ID_VIEW_LANG, "System"); 67 | xOptions.addID(XOptions::ID_VIEW_QSS); 68 | xOptions.addID(XOptions::ID_VIEW_STYLE, "Fusion"); 69 | 70 | xOptions.load(); 71 | 72 | XOptions::adjustApplicationView(X_APPLICATIONNAME, &xOptions); 73 | 74 | GuiMainWindow w; 75 | w.show(); 76 | 77 | return a.exec(); 78 | } 79 | -------------------------------------------------------------------------------- /gui_source/resources.qrc: -------------------------------------------------------------------------------- 1 | 2 | 3 | images/main.png 4 | images/icon.png 5 | 6 | 7 | -------------------------------------------------------------------------------- /gui_source/windows.manifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | true 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | -------------------------------------------------------------------------------- /icons/main.icns: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/horsicq/XAPKDetector/b59b127eed35adfd07ec6e41841dfeb2cb734093/icons/main.icns -------------------------------------------------------------------------------- /icons/main.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/horsicq/XAPKDetector/b59b127eed35adfd07ec6e41841dfeb2cb734093/icons/main.ico -------------------------------------------------------------------------------- /install.iss: -------------------------------------------------------------------------------- 1 | #define MyAppName "XAPKDetector" 2 | #define MyAppVersion "0.03" 3 | #define MyAppPublisher "NTInfo" 4 | #define MyAppURL "ntinfo.biz" 5 | #define MyAppExeName "xapkd.exe" 6 | 7 | [Setup] 8 | AppId={{4D856E80-2DE7-4DBC-857E-61614D75F028} 9 | AppName={#MyAppName} 10 | AppVersion={#MyAppVersion} 11 | AppPublisher={#MyAppPublisher} 12 | AppPublisherURL={#MyAppURL} 13 | AppSupportURL={#MyAppURL} 14 | AppUpdatesURL={#MyAppURL} 15 | DefaultDirName={userpf}\{#MyAppName} 16 | DefaultGroupName={#MyAppName} 17 | OutputDir=release 18 | OutputBaseFilename=install 19 | Compression=lzma 20 | SolidCompression=yes 21 | LicenseFile=LICENSE 22 | PrivilegesRequired=lowest 23 | 24 | [Languages] 25 | Name: "english"; MessagesFile: "compiler:Default.isl" 26 | 27 | [Tasks] 28 | Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; 29 | 30 | [Files] 31 | Source: "release\xapkdetector\*"; DestDir: "{app}\"; Flags: ignoreversion recursesubdirs createallsubdirs 32 | 33 | [Icons] 34 | Name: "{group}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}" 35 | Name: "{group}\Uninstall"; Filename: "{app}\unins000.exe" 36 | Name: "{userdesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: desktopicon 37 | 38 | [InstallDelete] 39 | Type: filesandordirs; Name: {app}\*; 40 | 41 | [Run] 42 | Filename: "{app}\{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}"; Flags: nowait postinstall 43 | 44 | -------------------------------------------------------------------------------- /install.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash -x 2 | export X_SOURCE_PATH=$PWD 3 | 4 | cp -f $X_SOURCE_PATH/build/release/xapkd /usr/bin/ 5 | cp -f $X_SOURCE_PATH/build/release/xapkdc /usr/bin/ 6 | cp -f $X_SOURCE_PATH/LINUX/xapkd.desktop /usr/share/applications/ 7 | cp -Rf $X_SOURCE_PATH/LINUX/hicolor/ /usr/share/icons/ 8 | cp -Rf $X_SOURCE_PATH/XStyles/qss/ /usr/lib/xapkd/ 9 | mkdir -p /usr/lib/xapkd/signatures 10 | cp -f $X_SOURCE_PATH/signatures/crypto.db /usr/lib/xapkd/signatures/ 11 | -------------------------------------------------------------------------------- /mascots/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/horsicq/XAPKDetector/b59b127eed35adfd07ec6e41841dfeb2cb734093/mascots/1.png -------------------------------------------------------------------------------- /mascots/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/horsicq/XAPKDetector/b59b127eed35adfd07ec6e41841dfeb2cb734093/mascots/2.png -------------------------------------------------------------------------------- /mascots/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/horsicq/XAPKDetector/b59b127eed35adfd07ec6e41841dfeb2cb734093/mascots/3.png -------------------------------------------------------------------------------- /mascots/version.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/horsicq/XAPKDetector/b59b127eed35adfd07ec6e41841dfeb2cb734093/mascots/version.jpg -------------------------------------------------------------------------------- /mascots/version.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/horsicq/XAPKDetector/b59b127eed35adfd07ec6e41841dfeb2cb734093/mascots/version.png -------------------------------------------------------------------------------- /mascots/xad.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/horsicq/XAPKDetector/b59b127eed35adfd07ec6e41841dfeb2cb734093/mascots/xad.jpg -------------------------------------------------------------------------------- /mascots/xad.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/horsicq/XAPKDetector/b59b127eed35adfd07ec6e41841dfeb2cb734093/mascots/xad.png -------------------------------------------------------------------------------- /mascots/xapkd.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/horsicq/XAPKDetector/b59b127eed35adfd07ec6e41841dfeb2cb734093/mascots/xapkd.png -------------------------------------------------------------------------------- /release_version.txt: -------------------------------------------------------------------------------- 1 | 0.03 -------------------------------------------------------------------------------- /winloader_source/rsrc.rc: -------------------------------------------------------------------------------- 1 | 500 ICON MOVEABLE PURE LOADONCALL DISCARDABLE "..\icons\main.ico" -------------------------------------------------------------------------------- /winloader_source/winloader.cpp: -------------------------------------------------------------------------------- 1 | // Copyright (c) 2018-2019 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 | 23 | void GetWorkDirectory(char *pszModuleName,char *pszWorkDirectory) 24 | { 25 | int nTotalNumberOfSlashes=0; 26 | char *pOffset=pszModuleName; 27 | 28 | while(*pOffset) 29 | { 30 | if(*pOffset=='\\') 31 | { 32 | nTotalNumberOfSlashes++; 33 | } 34 | pOffset++; 35 | } 36 | 37 | int nCurrentNumberOfSlashes=0; 38 | 39 | while(*pszModuleName) 40 | { 41 | if(*pszModuleName=='\\') 42 | { 43 | nCurrentNumberOfSlashes++; 44 | if(nCurrentNumberOfSlashes==nTotalNumberOfSlashes) 45 | { 46 | *pszWorkDirectory=0; 47 | break; 48 | } 49 | } 50 | *pszWorkDirectory=*pszModuleName; 51 | pszModuleName++; 52 | pszWorkDirectory++; 53 | } 54 | } 55 | 56 | void entry() 57 | { 58 | char szModuleFileName[256]; 59 | char szWorkDirectory[256]; 60 | char szArgument[256]; 61 | 62 | char *szFile="\\base\\xad.exe"; 63 | char *szStuff="\\base\\"; 64 | 65 | char *pszCommandLine=GetCommandLineA(); 66 | GetModuleFileName(0,szModuleFileName,sizeof(szModuleFileName)-1); 67 | 68 | int nFileNameLength=lstrlenA(szModuleFileName); 69 | 70 | if(*(pszCommandLine+nFileNameLength+2)) 71 | { 72 | lstrcpyA(szArgument,pszCommandLine+nFileNameLength+3); 73 | } 74 | 75 | GetWorkDirectory(szModuleFileName,szWorkDirectory); 76 | lstrcpyA(szModuleFileName,szWorkDirectory); 77 | lstrcatA(szModuleFileName,szFile); 78 | lstrcatA(szWorkDirectory,szStuff); 79 | 80 | if(ShellExecuteA(0,0,szModuleFileName,szArgument,szWorkDirectory,SW_SHOW)<=(HINSTANCE)32) 81 | { 82 | MessageBoxA(0,szModuleFileName,"Cannot open",MB_ICONERROR); 83 | } 84 | 85 | ExitProcess(0); 86 | } -------------------------------------------------------------------------------- /xapkdetector_source.pro: -------------------------------------------------------------------------------- 1 | TEMPLATE = subdirs 2 | 3 | SUBDIRS += build_libs 4 | SUBDIRS += gui_source 5 | SUBDIRS += console_source 6 | 7 | isEmpty(PREFIX) { 8 | PREFIX = /usr 9 | } 10 | 11 | target.path = $PWD 12 | target.commands = bash -x "$$PWD/install.sh $$PREFIX" 13 | INSTALLS += target --------------------------------------------------------------------------------