├── .gitignore ├── GH .NET Parser ├── GH .NET Parser.csproj ├── GH .NET Parser.csproj.user ├── Program.cs ├── Properties │ └── PublishProfiles │ │ ├── FolderProfile.pubxml │ │ └── FolderProfile.pubxml.user └── obj │ ├── GH .NET Parser.csproj.nuget.dgspec.json │ ├── GH .NET Parser.csproj.nuget.g.props │ ├── GH .NET Parser.csproj.nuget.g.targets │ ├── project.assets.json │ └── project.nuget.cache ├── GH Injector GUI.sln ├── GH Injector GUI ├── CmdArg.cpp ├── CmdArg.h ├── DarkStyle.cpp ├── DarkStyle.h ├── DebugConsole.cpp ├── DebugConsole.h ├── DotNetOptions.cpp ├── DotNetOptions.h ├── DownloadProgress.cpp ├── DownloadProgress.h ├── DownloadProgressWindow.cpp ├── DownloadProgressWindow.h ├── DragDropWindow.cpp ├── DragDropWindow.h ├── GH Injector GUI.aps ├── GH Injector GUI.filters ├── GH Injector GUI.rc ├── GH Injector GUI.user ├── GH Injector GUI.vcxproj ├── GH Injector GUI.vcxproj.filters ├── GH Injector GUI.vcxproj.user ├── GuiMain.cpp ├── GuiMain.h ├── GuiMain.qrc ├── GuiMain.ui ├── GuiProcess.cpp ├── GuiProcess.h ├── GuiProcess.ui ├── GuiScanHook.cpp ├── GuiScanHook.h ├── GuiScanHook.ui ├── Injection.h ├── InjectionLib.cpp ├── InjectionLib.h ├── PDB_Download.cpp ├── PDB_Download.h ├── Process.cpp ├── Process.h ├── ShortCut.cpp ├── ShortCut.h ├── StatusBox.cpp ├── StatusBox.h ├── Update.cpp ├── Update.h ├── WindowDocker.cpp ├── WindowDocker.h ├── Zip.cpp ├── Zip.h ├── darkstyle.qrc ├── darkstyle │ ├── darkstyle.qss │ ├── icon_branch_closed.png │ ├── icon_branch_end.png │ ├── icon_branch_more.png │ ├── icon_branch_open.png │ ├── icon_checkbox_checked.png │ ├── icon_checkbox_checked_disabled.png │ ├── icon_checkbox_checked_pressed.png │ ├── icon_checkbox_indeterminate.png │ ├── icon_checkbox_indeterminate_disabled.png │ ├── icon_checkbox_indeterminate_pressed.png │ ├── icon_checkbox_unchecked.png │ ├── icon_checkbox_unchecked_disabled.png │ ├── icon_checkbox_unchecked_pressed.png │ ├── icon_close.png │ ├── icon_dock.png │ ├── icon_radiobutton_checked.png │ ├── icon_radiobutton_checked_disabled.png │ ├── icon_radiobutton_checked_pressed.png │ ├── icon_radiobutton_unchecked.png │ ├── icon_radiobutton_unchecked_disabled.png │ ├── icon_radiobutton_unchecked_pressed.png │ ├── icon_restore.png │ ├── icon_undock.png │ └── icon_vline.png ├── frameless_window_dark.pro ├── framelesswindow.qrc ├── framelesswindow │ ├── framelesswindow.cpp │ ├── framelesswindow.h │ ├── framelesswindow.ui │ ├── windowdragger.cpp │ └── windowdragger.h ├── gh_resource │ ├── Console.ico │ ├── DragDrop Icon.ico │ ├── Error Icon.png │ ├── GH Banner.png │ ├── GH Icon.ico │ ├── Generic Icon.png │ ├── LUL Icon.png │ ├── Log Icon.ico │ ├── cog.ico │ └── console.png ├── images │ ├── icon_dock_b.png │ ├── icon_dock_l.png │ ├── icon_dock_r.png │ ├── icon_dock_t.png │ ├── icon_undock_b.png │ ├── icon_undock_l.png │ ├── icon_undock_r.png │ ├── icon_undock_t.png │ ├── icon_window_close.png │ ├── icon_window_maximize.png │ ├── icon_window_minimize.png │ └── icon_window_restore.png ├── main.cpp ├── mainwindow.cpp ├── mainwindow.h ├── mainwindow.qrc ├── mainwindow.ui ├── pch.cpp ├── pch.h └── resource.h ├── GH Injector ├── GH Icon.ico ├── GH Injector.aps ├── GH Injector.rc ├── GH Injector.vcxproj ├── GH Injector.vcxproj.filters ├── GH Injector.vcxproj.user ├── main.cpp └── resource.h └── README.md /.gitignore: -------------------------------------------------------------------------------- 1 | .vs/ 2 | Static/ 3 | Debug/ 4 | Release/ 5 | GH Injector/Release/ 6 | GH Injector GUI/x64/ 7 | GH Injector GUI/x86/ 8 | GH Injector GUI/Debug/ 9 | GH Injector GUI/Release/ 10 | GH Injector GUI/Static/ 11 | GH Injector GUI/GH Injector.zip 12 | GH Injector GUI/Settings.ini 13 | GH Injector GUI/GH_Inj_Log.txt 14 | GH .NET Parser/obj/publish/ 15 | GH .NET Parser/bin/ -------------------------------------------------------------------------------- /GH .NET Parser/GH .NET Parser.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Exe 5 | net7.0 6 | GH_.NET_Parser 7 | enable 8 | enable 9 | 4.8 10 | 4.8 11 | 4.8 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /GH .NET Parser/GH .NET Parser.csproj.user: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | <_LastSelectedProfileId>C:\Users\konra\Documents\Visual Studio 2022\Projects\GH Injector 3.4\GH Injector GUI\GH .NET Parser\Properties\PublishProfiles\FolderProfile.pubxml 5 | 6 | -------------------------------------------------------------------------------- /GH .NET Parser/Program.cs: -------------------------------------------------------------------------------- 1 | /* 2 | * Author: Broihon 3 | * Copyright: Guided Hacking™ © 2012-2023 Guided Hacking LLC 4 | */ 5 | 6 | using System.Reflection; 7 | using System.Runtime.InteropServices; 8 | using System.IO.Pipes; 9 | 10 | namespace GH_DotNet_Parser 11 | { 12 | public class Tree 13 | { 14 | public List nodes; 15 | public String Data; 16 | 17 | public Tree(string data) 18 | { 19 | Data = data; 20 | nodes = new List(); 21 | } 22 | 23 | public Tree? SearchNode(String value) 24 | { 25 | foreach (var node in nodes) 26 | { 27 | if (node.Data == value) 28 | { 29 | return node; 30 | } 31 | } 32 | 33 | return null; 34 | } 35 | 36 | public Tree AddNode(String value) 37 | { 38 | nodes.Add(new(value)); 39 | 40 | return nodes.Last(); 41 | } 42 | 43 | public void SendToPipe(String pipe_name) 44 | { 45 | String output = ""; 46 | 47 | foreach (var namespace_node in nodes) 48 | { 49 | var current_namespace = namespace_node.Data; 50 | foreach (var classname_node in namespace_node.nodes) 51 | { 52 | var current_classname = classname_node.Data; 53 | foreach (var methodname_node in classname_node.nodes) 54 | { 55 | var current_methodname = methodname_node.Data; 56 | 57 | output += current_namespace + ";" + current_classname + ";" + current_methodname + "!"; 58 | } 59 | } 60 | } 61 | 62 | Console.WriteLine("Opening pipe to host process"); 63 | 64 | var client = new NamedPipeClientStream(".", pipe_name); 65 | if (client == null) 66 | { 67 | Console.WriteLine("Failed to connect to pipe: " + pipe_name); 68 | 69 | return; 70 | } 71 | 72 | client.Connect(); 73 | 74 | var writer = new StreamWriter(client); 75 | if (writer == null) 76 | { 77 | Console.WriteLine("Failed to create write for pipe client"); 78 | 79 | client.Close(); 80 | 81 | return; 82 | } 83 | 84 | writer.WriteLine(output); 85 | writer.Close(); 86 | client.Close(); 87 | 88 | Console.WriteLine("Assembly data sent to pipe successfully"); 89 | } 90 | } 91 | 92 | public class PARSER 93 | { 94 | static void Main(String[] args) 95 | { 96 | if (args.Length != 2) 97 | { 98 | Console.WriteLine("Invalid parameter count"); 99 | 100 | return; 101 | } 102 | 103 | if (!args[0].EndsWith(".dll", StringComparison.OrdinalIgnoreCase)) 104 | { 105 | Console.WriteLine("Invalid path provided: " + args[0]); 106 | 107 | return; 108 | } 109 | 110 | var dll_path = args[0]; 111 | var pipe_name = args[1]; 112 | 113 | if (!File.Exists(dll_path)) 114 | { 115 | Console.WriteLine("File doesn't exist"); 116 | 117 | return; 118 | } 119 | 120 | string[] runtimeAssemblies = Directory.GetFiles(RuntimeEnvironment.GetRuntimeDirectory(), "*.dll"); 121 | var paths = new List(runtimeAssemblies); 122 | var resolver = new PathAssemblyResolver(paths); 123 | 124 | var mlc = new MetadataLoadContext(resolver); 125 | if (mlc == null) 126 | { 127 | Console.WriteLine("Failed to create MetadataLoadContext"); 128 | 129 | return; 130 | } 131 | 132 | Tree root = new(""); 133 | 134 | Console.WriteLine("Parsing assembly: " + dll_path); 135 | 136 | Assembly assembly = mlc.LoadFromAssemblyPath(dll_path); 137 | foreach (System.Type attr in assembly.GetTypes()) 138 | { 139 | MemberInfo[] members; 140 | try 141 | { 142 | members = attr.GetMembers(); 143 | } 144 | catch (FileNotFoundException) 145 | { 146 | continue; 147 | } 148 | 149 | foreach (MemberInfo member in members) 150 | { 151 | if (attr.Namespace == null) 152 | { 153 | continue; 154 | } 155 | 156 | if (member.MemberType != MemberTypes.Method) 157 | { 158 | continue; 159 | } 160 | 161 | var method = (MethodInfo)member; 162 | if (!method.IsPublic || method.ReturnType.ToString() != typeof(int).ToString()) 163 | { 164 | continue; 165 | } 166 | 167 | var parameters = method.GetParameters(); 168 | if (parameters.Length != 1) 169 | { 170 | continue; 171 | } 172 | 173 | if (parameters[0].ParameterType.ToString() != typeof(string).ToString()) 174 | { 175 | continue; 176 | } 177 | 178 | Tree? dag_namespace = root.SearchNode(attr.Namespace.ToString()); 179 | dag_namespace ??= root.AddNode(attr.Namespace.ToString()); 180 | 181 | Tree? dag_class = dag_namespace.SearchNode(attr.Name.ToString()); 182 | dag_class ??= dag_namespace.AddNode(attr.Name.ToString()); 183 | 184 | if (dag_class.SearchNode(method.Name.ToString()) == null) 185 | { 186 | dag_class.AddNode(method.Name.ToString()); 187 | } 188 | } 189 | } 190 | 191 | Console.WriteLine("Finished parsing assembly"); 192 | 193 | if (!root.nodes.Any()) 194 | { 195 | Console.WriteLine("No valid data found in the assembly"); 196 | 197 | return; 198 | } 199 | 200 | root.SendToPipe(pipe_name); 201 | } 202 | } 203 | } -------------------------------------------------------------------------------- /GH .NET Parser/Properties/PublishProfiles/FolderProfile.pubxml: -------------------------------------------------------------------------------- 1 |  2 | 5 | 6 | 7 | Release 8 | Any CPU 9 | ../Release/x86/ 10 | FileSystem 11 | <_TargetId>Folder 12 | net7.0 13 | win-x86 14 | false 15 | true 16 | false 17 | 18 | -------------------------------------------------------------------------------- /GH .NET Parser/Properties/PublishProfiles/FolderProfile.pubxml.user: -------------------------------------------------------------------------------- 1 |  2 | 5 | 6 | 7 | True|2023-02-23T15:08:24.8179850Z;True|2023-02-23T16:07:42.2137855+01:00;True|2023-01-31T11:16:58.2645122+01:00;True|2023-01-31T11:11:43.1116808+01:00;True|2023-01-31T11:10:47.8375685+01:00;True|2023-01-31T11:09:32.8966606+01:00; 8 | 9 | 10 | -------------------------------------------------------------------------------- /GH .NET Parser/obj/GH .NET Parser.csproj.nuget.dgspec.json: -------------------------------------------------------------------------------- 1 | { 2 | "format": 1, 3 | "restore": { 4 | "C:\\Users\\konra\\Documents\\Visual Studio 2022\\Projects\\GH_TEMP\\GH-Injector-GUI\\GH .NET Parser\\GH .NET Parser.csproj": {} 5 | }, 6 | "projects": { 7 | "C:\\Users\\konra\\Documents\\Visual Studio 2022\\Projects\\GH_TEMP\\GH-Injector-GUI\\GH .NET Parser\\GH .NET Parser.csproj": { 8 | "version": "4.8.0", 9 | "restore": { 10 | "projectUniqueName": "C:\\Users\\konra\\Documents\\Visual Studio 2022\\Projects\\GH_TEMP\\GH-Injector-GUI\\GH .NET Parser\\GH .NET Parser.csproj", 11 | "projectName": "GH .NET Parser", 12 | "projectPath": "C:\\Users\\konra\\Documents\\Visual Studio 2022\\Projects\\GH_TEMP\\GH-Injector-GUI\\GH .NET Parser\\GH .NET Parser.csproj", 13 | "packagesPath": "C:\\Users\\konra\\.nuget\\packages\\", 14 | "outputPath": "C:\\Users\\konra\\Documents\\Visual Studio 2022\\Projects\\GH_TEMP\\GH-Injector-GUI\\GH .NET Parser\\obj\\", 15 | "projectStyle": "PackageReference", 16 | "fallbackFolders": [ 17 | "C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages" 18 | ], 19 | "configFilePaths": [ 20 | "C:\\Users\\konra\\AppData\\Roaming\\NuGet\\NuGet.Config", 21 | "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.FallbackLocation.config", 22 | "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config" 23 | ], 24 | "originalTargetFrameworks": [ 25 | "net7.0" 26 | ], 27 | "sources": { 28 | "C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {}, 29 | "https://api.nuget.org/v3/index.json": {} 30 | }, 31 | "frameworks": { 32 | "net7.0": { 33 | "targetAlias": "net7.0", 34 | "projectReferences": {} 35 | } 36 | }, 37 | "warningProperties": { 38 | "warnAsError": [ 39 | "NU1605" 40 | ] 41 | } 42 | }, 43 | "frameworks": { 44 | "net7.0": { 45 | "targetAlias": "net7.0", 46 | "dependencies": { 47 | "System.Reflection.MetadataLoadContext": { 48 | "target": "Package", 49 | "version": "[7.0.0, )" 50 | } 51 | }, 52 | "imports": [ 53 | "net461", 54 | "net462", 55 | "net47", 56 | "net471", 57 | "net472", 58 | "net48", 59 | "net481" 60 | ], 61 | "assetTargetFallback": true, 62 | "warn": true, 63 | "frameworkReferences": { 64 | "Microsoft.NETCore.App": { 65 | "privateAssets": "all" 66 | } 67 | }, 68 | "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\7.0.306\\RuntimeIdentifierGraph.json" 69 | } 70 | } 71 | } 72 | } 73 | } -------------------------------------------------------------------------------- /GH .NET Parser/obj/GH .NET Parser.csproj.nuget.g.props: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | True 5 | NuGet 6 | $(MSBuildThisFileDirectory)project.assets.json 7 | $(UserProfile)\.nuget\packages\ 8 | C:\Users\konra\.nuget\packages\;C:\Program Files (x86)\Microsoft Visual Studio\Shared\NuGetPackages 9 | PackageReference 10 | 6.6.0 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /GH .NET Parser/obj/GH .NET Parser.csproj.nuget.g.targets: -------------------------------------------------------------------------------- 1 |  2 | -------------------------------------------------------------------------------- /GH .NET Parser/obj/project.assets.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": 3, 3 | "targets": { 4 | "net7.0": { 5 | "System.Collections.Immutable/7.0.0": { 6 | "type": "package", 7 | "compile": { 8 | "lib/net7.0/System.Collections.Immutable.dll": { 9 | "related": ".xml" 10 | } 11 | }, 12 | "runtime": { 13 | "lib/net7.0/System.Collections.Immutable.dll": { 14 | "related": ".xml" 15 | } 16 | }, 17 | "build": { 18 | "buildTransitive/net6.0/_._": {} 19 | } 20 | }, 21 | "System.Reflection.Metadata/7.0.0": { 22 | "type": "package", 23 | "dependencies": { 24 | "System.Collections.Immutable": "7.0.0" 25 | }, 26 | "compile": { 27 | "lib/net7.0/System.Reflection.Metadata.dll": { 28 | "related": ".xml" 29 | } 30 | }, 31 | "runtime": { 32 | "lib/net7.0/System.Reflection.Metadata.dll": { 33 | "related": ".xml" 34 | } 35 | }, 36 | "build": { 37 | "buildTransitive/net6.0/_._": {} 38 | } 39 | }, 40 | "System.Reflection.MetadataLoadContext/7.0.0": { 41 | "type": "package", 42 | "dependencies": { 43 | "System.Collections.Immutable": "7.0.0", 44 | "System.Reflection.Metadata": "7.0.0" 45 | }, 46 | "compile": { 47 | "lib/net7.0/System.Reflection.MetadataLoadContext.dll": { 48 | "related": ".xml" 49 | } 50 | }, 51 | "runtime": { 52 | "lib/net7.0/System.Reflection.MetadataLoadContext.dll": { 53 | "related": ".xml" 54 | } 55 | }, 56 | "build": { 57 | "buildTransitive/net6.0/_._": {} 58 | } 59 | } 60 | } 61 | }, 62 | "libraries": { 63 | "System.Collections.Immutable/7.0.0": { 64 | "sha512": "dQPcs0U1IKnBdRDBkrCTi1FoajSTBzLcVTpjO4MBCMC7f4pDOIPzgBoX8JjG7X6uZRJ8EBxsi8+DR1JuwjnzOQ==", 65 | "type": "package", 66 | "path": "system.collections.immutable/7.0.0", 67 | "files": [ 68 | ".nupkg.metadata", 69 | ".signature.p7s", 70 | "Icon.png", 71 | "LICENSE.TXT", 72 | "README.md", 73 | "THIRD-PARTY-NOTICES.TXT", 74 | "buildTransitive/net461/System.Collections.Immutable.targets", 75 | "buildTransitive/net462/_._", 76 | "buildTransitive/net6.0/_._", 77 | "buildTransitive/netcoreapp2.0/System.Collections.Immutable.targets", 78 | "lib/net462/System.Collections.Immutable.dll", 79 | "lib/net462/System.Collections.Immutable.xml", 80 | "lib/net6.0/System.Collections.Immutable.dll", 81 | "lib/net6.0/System.Collections.Immutable.xml", 82 | "lib/net7.0/System.Collections.Immutable.dll", 83 | "lib/net7.0/System.Collections.Immutable.xml", 84 | "lib/netstandard2.0/System.Collections.Immutable.dll", 85 | "lib/netstandard2.0/System.Collections.Immutable.xml", 86 | "system.collections.immutable.7.0.0.nupkg.sha512", 87 | "system.collections.immutable.nuspec", 88 | "useSharedDesignerContext.txt" 89 | ] 90 | }, 91 | "System.Reflection.Metadata/7.0.0": { 92 | "sha512": "MclTG61lsD9sYdpNz9xsKBzjsmsfCtcMZYXz/IUr2zlhaTaABonlr1ESeompTgM+Xk+IwtGYU7/voh3YWB/fWw==", 93 | "type": "package", 94 | "path": "system.reflection.metadata/7.0.0", 95 | "files": [ 96 | ".nupkg.metadata", 97 | ".signature.p7s", 98 | "Icon.png", 99 | "LICENSE.TXT", 100 | "README.md", 101 | "THIRD-PARTY-NOTICES.TXT", 102 | "buildTransitive/net461/System.Reflection.Metadata.targets", 103 | "buildTransitive/net462/_._", 104 | "buildTransitive/net6.0/_._", 105 | "buildTransitive/netcoreapp2.0/System.Reflection.Metadata.targets", 106 | "lib/net462/System.Reflection.Metadata.dll", 107 | "lib/net462/System.Reflection.Metadata.xml", 108 | "lib/net6.0/System.Reflection.Metadata.dll", 109 | "lib/net6.0/System.Reflection.Metadata.xml", 110 | "lib/net7.0/System.Reflection.Metadata.dll", 111 | "lib/net7.0/System.Reflection.Metadata.xml", 112 | "lib/netstandard2.0/System.Reflection.Metadata.dll", 113 | "lib/netstandard2.0/System.Reflection.Metadata.xml", 114 | "system.reflection.metadata.7.0.0.nupkg.sha512", 115 | "system.reflection.metadata.nuspec", 116 | "useSharedDesignerContext.txt" 117 | ] 118 | }, 119 | "System.Reflection.MetadataLoadContext/7.0.0": { 120 | "sha512": "z9PvtMJra5hK8n+g0wmPtaG7HQRZpTmIPRw5Z0LEemlcdQMHuTD5D7OAY/fZuuz1L9db++QOcDF0gJTLpbMtZQ==", 121 | "type": "package", 122 | "path": "system.reflection.metadataloadcontext/7.0.0", 123 | "files": [ 124 | ".nupkg.metadata", 125 | ".signature.p7s", 126 | "Icon.png", 127 | "LICENSE.TXT", 128 | "README.md", 129 | "THIRD-PARTY-NOTICES.TXT", 130 | "buildTransitive/net461/System.Reflection.MetadataLoadContext.targets", 131 | "buildTransitive/net462/_._", 132 | "buildTransitive/net6.0/_._", 133 | "buildTransitive/netcoreapp2.0/System.Reflection.MetadataLoadContext.targets", 134 | "lib/net462/System.Reflection.MetadataLoadContext.dll", 135 | "lib/net462/System.Reflection.MetadataLoadContext.xml", 136 | "lib/net6.0/System.Reflection.MetadataLoadContext.dll", 137 | "lib/net6.0/System.Reflection.MetadataLoadContext.xml", 138 | "lib/net7.0/System.Reflection.MetadataLoadContext.dll", 139 | "lib/net7.0/System.Reflection.MetadataLoadContext.xml", 140 | "lib/netstandard2.0/System.Reflection.MetadataLoadContext.dll", 141 | "lib/netstandard2.0/System.Reflection.MetadataLoadContext.xml", 142 | "system.reflection.metadataloadcontext.7.0.0.nupkg.sha512", 143 | "system.reflection.metadataloadcontext.nuspec", 144 | "useSharedDesignerContext.txt" 145 | ] 146 | } 147 | }, 148 | "projectFileDependencyGroups": { 149 | "net7.0": [ 150 | "System.Reflection.MetadataLoadContext >= 7.0.0" 151 | ] 152 | }, 153 | "packageFolders": { 154 | "C:\\Users\\konra\\.nuget\\packages\\": {}, 155 | "C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages": {} 156 | }, 157 | "project": { 158 | "version": "4.8.0", 159 | "restore": { 160 | "projectUniqueName": "C:\\Users\\konra\\Documents\\Visual Studio 2022\\Projects\\GH_TEMP\\GH-Injector-GUI\\GH .NET Parser\\GH .NET Parser.csproj", 161 | "projectName": "GH .NET Parser", 162 | "projectPath": "C:\\Users\\konra\\Documents\\Visual Studio 2022\\Projects\\GH_TEMP\\GH-Injector-GUI\\GH .NET Parser\\GH .NET Parser.csproj", 163 | "packagesPath": "C:\\Users\\konra\\.nuget\\packages\\", 164 | "outputPath": "C:\\Users\\konra\\Documents\\Visual Studio 2022\\Projects\\GH_TEMP\\GH-Injector-GUI\\GH .NET Parser\\obj\\", 165 | "projectStyle": "PackageReference", 166 | "fallbackFolders": [ 167 | "C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages" 168 | ], 169 | "configFilePaths": [ 170 | "C:\\Users\\konra\\AppData\\Roaming\\NuGet\\NuGet.Config", 171 | "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.FallbackLocation.config", 172 | "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config" 173 | ], 174 | "originalTargetFrameworks": [ 175 | "net7.0" 176 | ], 177 | "sources": { 178 | "C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {}, 179 | "https://api.nuget.org/v3/index.json": {} 180 | }, 181 | "frameworks": { 182 | "net7.0": { 183 | "targetAlias": "net7.0", 184 | "projectReferences": {} 185 | } 186 | }, 187 | "warningProperties": { 188 | "warnAsError": [ 189 | "NU1605" 190 | ] 191 | } 192 | }, 193 | "frameworks": { 194 | "net7.0": { 195 | "targetAlias": "net7.0", 196 | "dependencies": { 197 | "System.Reflection.MetadataLoadContext": { 198 | "target": "Package", 199 | "version": "[7.0.0, )" 200 | } 201 | }, 202 | "imports": [ 203 | "net461", 204 | "net462", 205 | "net47", 206 | "net471", 207 | "net472", 208 | "net48", 209 | "net481" 210 | ], 211 | "assetTargetFallback": true, 212 | "warn": true, 213 | "frameworkReferences": { 214 | "Microsoft.NETCore.App": { 215 | "privateAssets": "all" 216 | } 217 | }, 218 | "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\7.0.306\\RuntimeIdentifierGraph.json" 219 | } 220 | } 221 | } 222 | } -------------------------------------------------------------------------------- /GH .NET Parser/obj/project.nuget.cache: -------------------------------------------------------------------------------- 1 | { 2 | "version": 2, 3 | "dgSpecHash": "RCTfxhDflkmkn1uU5RNq4jbUF+zICcnjktPeqXLGzoAvQhB0vYP+hwthgxuzvVzGrOOgQBv/BWHw1JVxTeGS0w==", 4 | "success": true, 5 | "projectFilePath": "C:\\Users\\konra\\Documents\\Visual Studio 2022\\Projects\\GH_TEMP\\GH-Injector-GUI\\GH .NET Parser\\GH .NET Parser.csproj", 6 | "expectedPackageFiles": [ 7 | "C:\\Users\\konra\\.nuget\\packages\\system.collections.immutable\\7.0.0\\system.collections.immutable.7.0.0.nupkg.sha512", 8 | "C:\\Users\\konra\\.nuget\\packages\\system.reflection.metadata\\7.0.0\\system.reflection.metadata.7.0.0.nupkg.sha512", 9 | "C:\\Users\\konra\\.nuget\\packages\\system.reflection.metadataloadcontext\\7.0.0\\system.reflection.metadataloadcontext.7.0.0.nupkg.sha512" 10 | ], 11 | "logs": [] 12 | } -------------------------------------------------------------------------------- /GH Injector GUI.sln: -------------------------------------------------------------------------------- 1 |  2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # Visual Studio Version 17 4 | VisualStudioVersion = 17.0.31919.166 5 | MinimumVisualStudioVersion = 10.0.40219.1 6 | Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "GH Injector GUI", "GH Injector GUI\GH Injector GUI.vcxproj", "{6D2B70ED-A9AA-4587-9ABF-305DDAB2B233}" 7 | EndProject 8 | Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "GH Injector", "GH Injector\GH Injector.vcxproj", "{204EDBBB-EA55-46EF-B9B1-96985AD09028}" 9 | EndProject 10 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GH .NET Parser", "GH .NET Parser\GH .NET Parser.csproj", "{83BAF54D-7322-4381-A5A4-569BE83024D4}" 11 | EndProject 12 | Global 13 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 14 | Debug|Any CPU = Debug|Any CPU 15 | Debug|x64 = Debug|x64 16 | Debug|x86 = Debug|x86 17 | Release|Any CPU = Release|Any CPU 18 | Release|x64 = Release|x64 19 | Release|x86 = Release|x86 20 | Static|Any CPU = Static|Any CPU 21 | Static|x64 = Static|x64 22 | Static|x86 = Static|x86 23 | EndGlobalSection 24 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 25 | {6D2B70ED-A9AA-4587-9ABF-305DDAB2B233}.Debug|Any CPU.ActiveCfg = Debug|x64 26 | {6D2B70ED-A9AA-4587-9ABF-305DDAB2B233}.Debug|Any CPU.Build.0 = Debug|x64 27 | {6D2B70ED-A9AA-4587-9ABF-305DDAB2B233}.Debug|x64.ActiveCfg = Debug|x64 28 | {6D2B70ED-A9AA-4587-9ABF-305DDAB2B233}.Debug|x64.Build.0 = Debug|x64 29 | {6D2B70ED-A9AA-4587-9ABF-305DDAB2B233}.Debug|x86.ActiveCfg = Debug|Win32 30 | {6D2B70ED-A9AA-4587-9ABF-305DDAB2B233}.Debug|x86.Build.0 = Debug|Win32 31 | {6D2B70ED-A9AA-4587-9ABF-305DDAB2B233}.Release|Any CPU.ActiveCfg = Release|x64 32 | {6D2B70ED-A9AA-4587-9ABF-305DDAB2B233}.Release|Any CPU.Build.0 = Release|x64 33 | {6D2B70ED-A9AA-4587-9ABF-305DDAB2B233}.Release|x64.ActiveCfg = Release|x64 34 | {6D2B70ED-A9AA-4587-9ABF-305DDAB2B233}.Release|x86.ActiveCfg = Release|Win32 35 | {6D2B70ED-A9AA-4587-9ABF-305DDAB2B233}.Release|x86.Build.0 = Release|Win32 36 | {6D2B70ED-A9AA-4587-9ABF-305DDAB2B233}.Static|Any CPU.ActiveCfg = Static|x64 37 | {6D2B70ED-A9AA-4587-9ABF-305DDAB2B233}.Static|Any CPU.Build.0 = Static|x64 38 | {6D2B70ED-A9AA-4587-9ABF-305DDAB2B233}.Static|x64.ActiveCfg = Static|x64 39 | {6D2B70ED-A9AA-4587-9ABF-305DDAB2B233}.Static|x64.Build.0 = Static|x64 40 | {6D2B70ED-A9AA-4587-9ABF-305DDAB2B233}.Static|x86.ActiveCfg = Static|Win32 41 | {6D2B70ED-A9AA-4587-9ABF-305DDAB2B233}.Static|x86.Build.0 = Static|Win32 42 | {204EDBBB-EA55-46EF-B9B1-96985AD09028}.Debug|Any CPU.ActiveCfg = Release|Win32 43 | {204EDBBB-EA55-46EF-B9B1-96985AD09028}.Debug|Any CPU.Build.0 = Release|Win32 44 | {204EDBBB-EA55-46EF-B9B1-96985AD09028}.Debug|x64.ActiveCfg = Release|Win32 45 | {204EDBBB-EA55-46EF-B9B1-96985AD09028}.Debug|x64.Build.0 = Release|Win32 46 | {204EDBBB-EA55-46EF-B9B1-96985AD09028}.Debug|x86.ActiveCfg = Release|Win32 47 | {204EDBBB-EA55-46EF-B9B1-96985AD09028}.Debug|x86.Build.0 = Release|Win32 48 | {204EDBBB-EA55-46EF-B9B1-96985AD09028}.Release|Any CPU.ActiveCfg = Release|Win32 49 | {204EDBBB-EA55-46EF-B9B1-96985AD09028}.Release|Any CPU.Build.0 = Release|Win32 50 | {204EDBBB-EA55-46EF-B9B1-96985AD09028}.Release|x64.ActiveCfg = Release|Win32 51 | {204EDBBB-EA55-46EF-B9B1-96985AD09028}.Release|x86.ActiveCfg = Release|Win32 52 | {204EDBBB-EA55-46EF-B9B1-96985AD09028}.Release|x86.Build.0 = Release|Win32 53 | {204EDBBB-EA55-46EF-B9B1-96985AD09028}.Static|Any CPU.ActiveCfg = Release|Win32 54 | {204EDBBB-EA55-46EF-B9B1-96985AD09028}.Static|Any CPU.Build.0 = Release|Win32 55 | {204EDBBB-EA55-46EF-B9B1-96985AD09028}.Static|x64.ActiveCfg = Release|Win32 56 | {204EDBBB-EA55-46EF-B9B1-96985AD09028}.Static|x86.ActiveCfg = Release|Win32 57 | {204EDBBB-EA55-46EF-B9B1-96985AD09028}.Static|x86.Build.0 = Release|Win32 58 | {83BAF54D-7322-4381-A5A4-569BE83024D4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 59 | {83BAF54D-7322-4381-A5A4-569BE83024D4}.Debug|Any CPU.Build.0 = Debug|Any CPU 60 | {83BAF54D-7322-4381-A5A4-569BE83024D4}.Debug|x64.ActiveCfg = Debug|Any CPU 61 | {83BAF54D-7322-4381-A5A4-569BE83024D4}.Debug|x64.Build.0 = Debug|Any CPU 62 | {83BAF54D-7322-4381-A5A4-569BE83024D4}.Debug|x86.ActiveCfg = Debug|Any CPU 63 | {83BAF54D-7322-4381-A5A4-569BE83024D4}.Debug|x86.Build.0 = Debug|Any CPU 64 | {83BAF54D-7322-4381-A5A4-569BE83024D4}.Release|Any CPU.ActiveCfg = Release|Any CPU 65 | {83BAF54D-7322-4381-A5A4-569BE83024D4}.Release|Any CPU.Build.0 = Release|Any CPU 66 | {83BAF54D-7322-4381-A5A4-569BE83024D4}.Release|x64.ActiveCfg = Release|Any CPU 67 | {83BAF54D-7322-4381-A5A4-569BE83024D4}.Release|x64.Build.0 = Release|Any CPU 68 | {83BAF54D-7322-4381-A5A4-569BE83024D4}.Release|x86.ActiveCfg = Release|Any CPU 69 | {83BAF54D-7322-4381-A5A4-569BE83024D4}.Release|x86.Build.0 = Release|Any CPU 70 | {83BAF54D-7322-4381-A5A4-569BE83024D4}.Static|Any CPU.ActiveCfg = Debug|Any CPU 71 | {83BAF54D-7322-4381-A5A4-569BE83024D4}.Static|Any CPU.Build.0 = Debug|Any CPU 72 | {83BAF54D-7322-4381-A5A4-569BE83024D4}.Static|x64.ActiveCfg = Debug|Any CPU 73 | {83BAF54D-7322-4381-A5A4-569BE83024D4}.Static|x64.Build.0 = Debug|Any CPU 74 | {83BAF54D-7322-4381-A5A4-569BE83024D4}.Static|x86.ActiveCfg = Debug|Any CPU 75 | {83BAF54D-7322-4381-A5A4-569BE83024D4}.Static|x86.Build.0 = Debug|Any CPU 76 | EndGlobalSection 77 | GlobalSection(SolutionProperties) = preSolution 78 | HideSolutionNode = FALSE 79 | EndGlobalSection 80 | GlobalSection(ExtensibilityGlobals) = postSolution 81 | SolutionGuid = {808F1ED8-0D22-41C5-93F1-5FD309E2843D} 82 | EndGlobalSection 83 | EndGlobal 84 | -------------------------------------------------------------------------------- /GH Injector GUI/CmdArg.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | * Author: Broihon 3 | * Copyright: Guided Hacking™ © 2012-2023 Guided Hacking LLC 4 | */ 5 | 6 | #include "pch.h" 7 | 8 | #include "CmdArg.h" 9 | 10 | void help(); 11 | 12 | int FindArg(int argc, const wchar_t * arg, const wchar_t * const argv[], bool Parameter = false); 13 | 14 | template 15 | T GetArg(int argc, const wchar_t * arg, const wchar_t * const argv[], T DefaultValue = T()); 16 | template <> bool GetArg (int argc, const wchar_t * arg, const wchar_t * const argv[], bool DefaultValue); 17 | template <> DWORD GetArg (int argc, const wchar_t * arg, const wchar_t * const argv[], DWORD DefaultValue); 18 | template <> UINT GetArg (int argc, const wchar_t * arg, const wchar_t * const argv[], UINT DefaultValue); 19 | template <> std::wstring GetArg(int argc, const wchar_t * arg, const wchar_t * const argv[], std::wstring DefaultValue); 20 | 21 | int CmdArg(int argc, const wchar_t * const argv[], bool & silent) 22 | { 23 | //Console output is buggy for non ASCII characters, works fine internally 24 | 25 | silent = GetArg(argc, L"-silent", argv); 26 | if (!silent) 27 | { 28 | AllocConsole(); 29 | FILE * pFile = nullptr; 30 | freopen_s(&pFile, "CONOUT$", "w", stdout); 31 | } 32 | 33 | if (!SetDebugPrivilege(true)) 34 | { 35 | printf("Failed to enable debug privileges. This might affect the functionality of the injector.\n"); 36 | } 37 | 38 | if (GetArg(argc, L"-help", argv)) 39 | { 40 | silent = false; 41 | 42 | help(); 43 | 44 | return -1; 45 | } 46 | 47 | InjectionLib lib; 48 | if (!lib.Init()) 49 | { 50 | printf("Failed to initialze injection library.\n"); 51 | 52 | return -1; 53 | } 54 | else 55 | { 56 | printf("Injection library intialized\n"); 57 | } 58 | 59 | lib.StartDownload(); 60 | 61 | if (GetArg(argc, L"-version", argv)) 62 | { 63 | printf("GH Injector library Version = V%s\n", lib.GetVersionA().c_str()); 64 | printf("GH Injector GUI Version = V%s\n", GH_INJ_GUI_VERSIONA.c_str()); 65 | 66 | silent = false; 67 | 68 | return -1; 69 | } 70 | 71 | auto ProcessID = GetArg(argc, L"-i", argv, 0); 72 | auto ProcessName = GetArg(argc, L"-p", argv); 73 | 74 | if (ProcessName.empty() && !ProcessID) 75 | { 76 | printf("No target process specified.\n"); 77 | 78 | return -1; 79 | } 80 | else 81 | { 82 | if (ProcessID) 83 | { 84 | printf("Target process = %08X\n", ProcessID); 85 | } 86 | else 87 | { 88 | printf("Target process = %ls\n", ProcessName.c_str()); 89 | } 90 | } 91 | 92 | auto DllPath = GetArg(argc, L"-f", argv); 93 | if (DllPath.empty()) 94 | { 95 | printf("No dll to inject specified.\n"); 96 | 97 | return -1; 98 | } 99 | else 100 | { 101 | if (!FileExistsW(DllPath)) 102 | { 103 | printf("Specified DLL file doesn't exist.\n"); 104 | 105 | return -1; 106 | } 107 | 108 | printf("DLL file = %ls\n", DllPath.c_str()); 109 | } 110 | 111 | bool isDotNet = false; 112 | bool fromMemory = false; 113 | INJECTIONDATAW data { 0 }; 114 | DOTNET_INJECTIONDATAW dotnet_data { 0 }; 115 | MEMORY_INJECTIONDATA memory_data { 0 }; 116 | 117 | if (DllPath.length() + 1 >= sizeof(data.szDllPath) / sizeof(wchar_t)) 118 | { 119 | printf("Target DLL path exceeds 520 characters.\n"); 120 | 121 | return -1; 122 | } 123 | 124 | DllPath.copy(data.szDllPath, DllPath.length()); 125 | 126 | auto injection_mode = (INJECTION_MODE)GetArg(argc, L"-l", argv); 127 | switch (injection_mode) 128 | { 129 | case INJECTION_MODE::IM_LoadLibraryExW: 130 | case INJECTION_MODE::IM_LdrLoadDll: 131 | case INJECTION_MODE::IM_LdrpLoadDll: 132 | case INJECTION_MODE::IM_LdrpLoadDllInternal: 133 | case INJECTION_MODE::IM_ManualMap: 134 | data.Mode = injection_mode; 135 | break; 136 | 137 | default: 138 | printf("Invalid injection mode specified. Defaulting to LoadLibraryExW.\n"); 139 | data.Mode = INJECTION_MODE::IM_LoadLibraryExW; 140 | } 141 | printf("Injection mode = %d\n", injection_mode); 142 | 143 | auto launch_method = (LAUNCH_METHOD)GetArg(argc, L"-s", argv); 144 | switch (launch_method) 145 | { 146 | case LAUNCH_METHOD::LM_NtCreateThreadEx: 147 | case LAUNCH_METHOD::LM_HijackThread: 148 | case LAUNCH_METHOD::LM_SetWindowsHookEx: 149 | case LAUNCH_METHOD::LM_QueueUserAPC: 150 | case LAUNCH_METHOD::LM_KernelCallback: 151 | case LAUNCH_METHOD::LM_FakeVEH: 152 | data.Method = launch_method; 153 | break; 154 | 155 | default: 156 | printf("Invalid launch method specified. Defaulting to NtCreateThreadEx.\n"); 157 | data.Method = LAUNCH_METHOD::LM_NtCreateThreadEx; 158 | break; 159 | } 160 | printf("Launch method = %d\n", launch_method); 161 | 162 | DWORD Flags = 0; 163 | 164 | auto peh_option = GetArg(argc, L"-peh", argv); 165 | switch (peh_option) 166 | { 167 | case 1: Flags |= INJ_ERASE_HEADER; break; 168 | case 2: Flags |= INJ_FAKE_HEADER; break; 169 | default: break; 170 | } 171 | 172 | Flags |= GetArg(argc, L"-unlink", argv) ? INJ_UNLINK_FROM_PEB : NULL; 173 | Flags |= GetArg(argc, L"-random", argv) ? INJ_SCRAMBLE_DLL_NAME : NULL; 174 | Flags |= GetArg(argc, L"-copy", argv) ? INJ_LOAD_DLL_COPY : NULL; 175 | Flags |= GetArg(argc, L"-hijack", argv) ? INJ_HIJACK_HANDLE : NULL; 176 | 177 | if (data.Method == LAUNCH_METHOD::LM_NtCreateThreadEx) 178 | { 179 | if (GetArg(argc, L"-cloak", argv)) 180 | { 181 | Flags |= INJ_THREAD_CREATE_CLOAKED; 182 | } 183 | 184 | DWORD cflags = GetArg(argc, L"-cloakflags", argv, NULL); 185 | Flags |= (cflags & CTF_MASK); 186 | } 187 | 188 | if (data.Mode == INJECTION_MODE::IM_ManualMap) 189 | { 190 | DWORD mmflags = GetArg(argc, L"-mmflags", argv, MM_DEFAULT); 191 | Flags |= (mmflags & MM_MASK); 192 | } 193 | 194 | data.Flags = Flags; 195 | 196 | printf("Flags = %08X\n", Flags); 197 | 198 | data.GenerateErrorLog = GetArg(argc, L"-log", argv); 199 | data.Timeout = GetArg(argc, L"-timeout", argv, 2000); 200 | 201 | printf("Timeout = %d\n", data.Timeout); 202 | 203 | isDotNet = GetArg(argc, L"-dotnet", argv); 204 | if (isDotNet) 205 | { 206 | auto name = GetArg(argc, L"-namespace", argv); 207 | if (name.empty()) 208 | { 209 | printf("Target DLL is .NET but no namespace was provided.\n"); 210 | 211 | return -1; 212 | } 213 | else 214 | { 215 | auto max = (DWORD)(sizeof(dotnet_data.szNamespace) / sizeof(wchar_t)); 216 | if (name.length() >= max) 217 | { 218 | printf(".NET namespace name exceeds %d characters.\n", max); 219 | 220 | return -1; 221 | } 222 | 223 | name.copy(dotnet_data.szNamespace, name.length()); 224 | } 225 | 226 | auto classname = GetArg(argc, L"-class", argv); 227 | if (classname.empty()) 228 | { 229 | printf("Target DLL is .NET but no class was provided.\n"); 230 | 231 | return -1; 232 | } 233 | else 234 | { 235 | auto max = (DWORD)(sizeof(dotnet_data.szClassName) / sizeof(wchar_t)); 236 | if (classname.length() >= max) 237 | { 238 | printf(".NET class name name exceeds %d characters.\n", max); 239 | 240 | return -1; 241 | } 242 | 243 | classname.copy(dotnet_data.szClassName, classname.length()); 244 | } 245 | 246 | auto method = GetArg(argc, L"-method", argv); 247 | if (method.empty()) 248 | { 249 | printf("Target DLL is .NET but no method was provided.\n"); 250 | 251 | return -1; 252 | } 253 | else 254 | { 255 | auto max = (DWORD)(sizeof(dotnet_data.szMethodName) / sizeof(wchar_t)); 256 | if (method.length() >= max) 257 | { 258 | printf(".NET method name exceeds %d characters.\n", max); 259 | 260 | return -1; 261 | } 262 | 263 | method.copy(dotnet_data.szMethodName, method.length()); 264 | } 265 | 266 | auto argument = GetArg(argc, L"-argument", argv); 267 | if (!argument.empty()) 268 | { 269 | auto max = (DWORD)(sizeof(dotnet_data.szArgument) / sizeof(wchar_t)); 270 | if (argument.length() >= max) 271 | { 272 | printf(".NET argument exceeds %d characters.\n", max); 273 | 274 | return -1; 275 | } 276 | 277 | argument.copy(dotnet_data.szArgument, argument.length()); 278 | } 279 | 280 | dotnet_data.Method = data.Method; 281 | dotnet_data.Mode = data.Mode; 282 | dotnet_data.Flags = data.Flags; 283 | dotnet_data.Timeout = data.Timeout; 284 | dotnet_data.GenerateErrorLog = data.GenerateErrorLog; 285 | memcpy(dotnet_data.szDllPath, data.szDllPath, sizeof(data.szDllPath)); 286 | } 287 | else if (data.Flags & INJ_MM_MAP_FROM_MEMORY) 288 | { 289 | fromMemory = true; 290 | 291 | memory_data.Method = data.Method; 292 | memory_data.Mode = data.Mode; 293 | memory_data.Flags = data.Flags; 294 | memory_data.Timeout = data.Timeout; 295 | memory_data.GenerateErrorLog = data.GenerateErrorLog; 296 | 297 | std::ifstream File(data.szDllPath, std::ios::binary | std::ios::ate); 298 | if (!File.good()) 299 | { 300 | printf("Can't open file:\n\t%ls\n", data.szDllPath); 301 | 302 | return -1; 303 | } 304 | 305 | memory_data.RawSize = static_cast(File.tellg()); 306 | memory_data.RawData = new(std::nothrow) BYTE[memory_data.RawSize]; 307 | if (!memory_data.RawData) 308 | { 309 | printf("Memory allocation of %08X bytes failed for:\n\t%ls\n", memory_data.RawSize, data.szDllPath); 310 | 311 | return -1; 312 | } 313 | 314 | File.seekg(0, std::ios::beg); 315 | File.read(reinterpret_cast(memory_data.RawData), memory_data.RawSize); 316 | File.close(); 317 | } 318 | 319 | printf("Waiting for library to initialize\n"); 320 | 321 | auto symbol_state = lib.GetSymbolState(); 322 | while (symbol_state == INJ_ERR_SYMBOL_INIT_NOT_DONE) 323 | { 324 | Sleep(10); 325 | 326 | symbol_state = lib.GetSymbolState(); 327 | } 328 | 329 | if (symbol_state != INJ_ERR_SUCCESS) 330 | { 331 | printf("Failed to load PDBs: 0x%08X\n", symbol_state); 332 | 333 | return -1; 334 | } 335 | 336 | printf("Symbol files initialized\n"); 337 | printf("Waiting for imports to be resolved\n"); 338 | 339 | auto import_state = lib.GetImportState(); 340 | while (import_state == INJ_ERR_IMPORT_HANDLER_NOT_DONE) 341 | { 342 | Sleep(10); 343 | 344 | import_state = lib.GetImportState(); 345 | } 346 | 347 | if (import_state != INJ_ERR_SUCCESS) 348 | { 349 | printf("Failed to resolve imports: 0x%08X\n", import_state); 350 | 351 | return -1; 352 | } 353 | 354 | printf("Imports resolved\n"); 355 | printf("Injection library ready\n"); 356 | 357 | auto proc_struct = ProcessData(); 358 | if (ProcessID) 359 | { 360 | if (!proc_struct.UpdateData(ProcessID)) 361 | { 362 | printf("Target process doesn't exist.\n"); 363 | 364 | return -1; 365 | } 366 | } 367 | else 368 | { 369 | proc_struct.UpdateData(ProcessName); 370 | } 371 | 372 | if (!proc_struct.IsValid()) 373 | { 374 | if (!GetArg(argc, L"-wait", argv)) 375 | { 376 | printf("Target process doesn't exist.\n"); 377 | 378 | return -1; 379 | } 380 | 381 | printf("Waiting for target process"); 382 | 383 | auto current_tick = GetTickCount64(); 384 | UINT dot_count = 0; 385 | 386 | while (!proc_struct.IsValid()) 387 | { 388 | Sleep(50); 389 | proc_struct.UpdateData(ProcessName); 390 | 391 | if (current_tick + 500 < GetTickCount64()) 392 | { 393 | current_tick = GetTickCount64(); 394 | switch (dot_count++) 395 | { 396 | case 0: 397 | case 1: 398 | case 2: 399 | printf("."); 400 | break; 401 | 402 | default: 403 | dot_count = 0; 404 | printf("\b\b\b \b\b\b"); 405 | } 406 | } 407 | } 408 | 409 | printf("\n"); 410 | } 411 | 412 | DWORD PID = 0; 413 | proc_struct.GetProcessID(PID); 414 | printf("Target process found (pid = %d)\n", PID); 415 | 416 | data.ProcessID = PID; 417 | dotnet_data.ProcessID = PID; 418 | memory_data.ProcessID = PID; 419 | 420 | UINT delay = GetArg(argc, L"-delay", argv); 421 | if (delay) 422 | { 423 | printf("Executing delay\n"); 424 | Sleep(delay); 425 | } 426 | 427 | printf("Injecting\n"); 428 | 429 | DWORD inj_status = INJ_ERR_SUCCESS; 430 | if (isDotNet) 431 | { 432 | inj_status = lib.DotNet_InjectW(&dotnet_data); 433 | } 434 | else if (fromMemory) 435 | { 436 | inj_status = lib.Memory_Inject(&memory_data); 437 | } 438 | else 439 | { 440 | inj_status = lib.InjectW(&data); 441 | } 442 | 443 | lib.Unload(); 444 | 445 | if (inj_status != ERROR_SUCCESS) 446 | { 447 | printf("Injection failed with code %08X\n", inj_status); 448 | 449 | return -1; 450 | } 451 | else 452 | { 453 | printf("Injection succeeded. Dll laoded at "); 454 | if (isDotNet) 455 | { 456 | printf("%p\n", dotnet_data.hDllOut); 457 | } 458 | else if (fromMemory) 459 | { 460 | printf("%p\n", memory_data.hDllOut); 461 | } 462 | else 463 | { 464 | printf("%p\n", data.hDllOut); 465 | } 466 | } 467 | 468 | return 0; 469 | } 470 | 471 | int FindArg(int argc, const wchar_t * arg, const wchar_t * const argv[], bool HasParameter) 472 | { 473 | for (int i = 0; i < argc; ++i) 474 | { 475 | if (!lstrcmpiW(arg, argv[i])) 476 | { 477 | if (HasParameter) 478 | { 479 | if (i + 1 >= argc) 480 | { 481 | return 0; 482 | } 483 | } 484 | 485 | return i; 486 | } 487 | } 488 | 489 | return 0; 490 | } 491 | 492 | template <> bool GetArg(int argc, const wchar_t * arg, const wchar_t * const argv[], bool DefaultValue) 493 | { 494 | auto index = FindArg(argc, arg, argv); 495 | if (!index) 496 | { 497 | return DefaultValue; 498 | } 499 | 500 | return true; 501 | } 502 | 503 | template <> DWORD GetArg(int argc, const wchar_t * arg, const wchar_t * const argv[], DWORD DefaultValue) 504 | { 505 | auto index = FindArg(argc, arg, argv, true); 506 | if (!index) 507 | { 508 | return DefaultValue; 509 | } 510 | 511 | return (DWORD)std::stoul(argv[index + 1], nullptr, 0x10); 512 | } 513 | 514 | template <> UINT GetArg(int argc, const wchar_t * arg, const wchar_t * const argv[], UINT DefaultValue) 515 | { 516 | auto index = FindArg(argc, arg, argv, true); 517 | if (!index) 518 | { 519 | return DefaultValue; 520 | } 521 | 522 | return (UINT)std::stoul(argv[index + 1], nullptr, 10); 523 | } 524 | 525 | template <> std::wstring GetArg(int argc, const wchar_t * arg, const wchar_t * const argv[], std::wstring DefaultValue) 526 | { 527 | auto index = FindArg(argc, arg, argv, true); 528 | if (!index) 529 | { 530 | return DefaultValue; 531 | } 532 | 533 | return std::wstring(argv[index + 1]); 534 | } 535 | 536 | void help() 537 | { 538 | //required 539 | printf("The following arguments are required:\n\n"); 540 | 541 | printf("\t-f [\"path_to_dll\\dll_name.dll\"]\n"); 542 | printf("\t\tThis argument specifies the path to dll to inject. This path can be relative.\n\n"); 543 | 544 | //either required 545 | printf("Either one of the following arguments are required:\n\n"); 546 | 547 | printf("\t-p [\"TargetProcess.exe\"]\n"); 548 | printf("\t\tThis argument specifies the target process by name.\n\n"); 549 | 550 | printf("\t-i [procdess identifier]\n"); 551 | printf("\t\tThis argument specifies the target process by process id.\n\n"); 552 | 553 | //optional 554 | printf("The following arguments are optional:\n\n"); 555 | 556 | printf("\t-l [0,1,2,3]\n"); 557 | printf("\t\tThis argument specifies the injection method:\n"); 558 | printf("\t\t\t 0 = LoadLibraryExW (default)\n"); 559 | printf("\t\t\t 1 = LdrLoadDll\n"); 560 | printf("\t\t\t 2 = LdrpLoadDll\n"); 561 | printf("\t\t\t 3 = LdrpLoadDllInternal (Windows 10+ only)\n"); 562 | printf("\t\t\t 4 = Manual Mapping\n\n"); 563 | 564 | printf("\t-s [0,1,2,3,4,5]\n"); 565 | printf("\t\tThis argument specifies the launch method:\n"); 566 | printf("\t\t\t 0 = NtCreateThreadEx (default)\n"); 567 | printf("\t\t\t 1 = Thread hijacking\n"); 568 | printf("\t\t\t 2 = SetWindowsHookEx\n"); 569 | printf("\t\t\t 3 = QueueUserAPC\n"); 570 | printf("\t\t\t 4 = KernelCallbackTable\n"); 571 | printf("\t\t\t 5 = FakeVEH\n\n"); 572 | 573 | printf("\t-peh [0,1,2]\n"); 574 | printf("\t\tThis argument specifies the header option:\n"); 575 | printf("\t\t\t 0 = Keep PE header (default)\n"); 576 | printf("\t\t\t 1 = Erase PE header\n"); 577 | printf("\t\t\t 2 = Fake PE header\n\n"); 578 | 579 | printf("\t-wait\n"); 580 | printf("\t\tIf specified the injector waits for the target process to start.\n\n"); 581 | 582 | printf("\t-log\n"); 583 | printf("\t\tIf specified the injector generates an error log if the injection fails.\n\n"); 584 | 585 | printf("\t-silent\n"); 586 | printf("\t\tIf specified the no console will be spawned and thus no debug output generated.\n\n"); 587 | 588 | printf("\t-delay [value in ms]\n"); 589 | printf("\t\tIf specified the injector waits for specified amount in milliseconds before the injection.\n"); 590 | printf("\t\tThe default value is 0ms.\n\n"); 591 | 592 | printf("\t-timeout [value in ms]\n"); 593 | printf("\t\tThis argument specifies how long the injector waits for the shellcode and DllMain to execute.\n"); 594 | printf("\t\tThe default value is 2000ms.\n\n"); 595 | 596 | printf("\t-unlink\n"); 597 | printf("\t\tIf set the injected module will be unlinked from the PEB.\n\n"); 598 | 599 | printf("\t-cloak\n"); 600 | printf("\t\tCreates the thread cloaked with INJ_CTF_FAKE_START_ADDRESS and INJ_CTF_HIDE_FROM_DEBUGGER. See -cloakflags for more information.\n\n"); 601 | 602 | printf("\t-cloakflags [value (hex)]\n"); 603 | printf("\t\tFlags that specify how the thread will be created (NtCreateThreadEx) in hexadecimal and a bitwise combination of these flags:\n"); 604 | printf("\t\t\t0x00001000 = INJ_CTF_FAKE_START_ADDRESS\n"); 605 | printf("\t\t\t0x00002000 = INJ_CTF_HIDE_FROM_DEBUGGER\n"); 606 | printf("\t\t\t0x00004000 = INJ_CTF_SKIP_THREAD_ATTACH\n"); 607 | printf("\t\t\t0x00008000 = INJ_CTF_FAKE_TEB_CLIENT_ID\n"); 608 | 609 | printf("\t-random\n"); 610 | printf("\t\tIf set the dll name will be scrambled before the injection.\n\n"); 611 | 612 | printf("\t-copy\n"); 613 | printf("\t\tIf set a copy of the dll will be loaded.\n\n"); 614 | 615 | printf("\t-hijack\n"); 616 | printf("\t\tIf set the injector will try to hijack a handle to the target process instead of opening a new one.\n\n"); 617 | 618 | printf("\t-mmflags [value (hex)]\n"); 619 | printf("\t\tFlags that specify the manual mapping options in hexadecimal and a bitwise combination of these flags:\n"); 620 | printf("\t\t\t0x00010000 = INJ_MM_CLEAN_DATA_DIR\n"); 621 | printf("\t\t\t0x00020000 = INJ_MM_RESOLVE_IMPORTS\n"); 622 | printf("\t\t\t0x00040000 = INJ_MM_RESOLVE_DELAY_IMPORTS\n"); 623 | printf("\t\t\t0x00080000 = INJ_MM_EXECUTE_TLS\n"); 624 | printf("\t\t\t0x00100000 = INJ_MM_ENABLE_EXCEPTIONS\n"); 625 | printf("\t\t\t0x00200000 = INJ_MM_SET_PAGE_PROTECTIONS\n"); 626 | printf("\t\t\t0x00400000 = INJ_MM_INIT_SECURITY_COOKIE\n"); 627 | printf("\t\t\t0x00800000 = INJ_MM_RUN_DLL_MAIN\n"); 628 | printf("\t\t\t0x01000000 = INJ_MM_RUN_UNDER_LDR_LOCK\n"); 629 | printf("\t\t\t0x02000000 = INJ_MM_SHIFT_MODULE_BASE\n"); 630 | printf("\t\t\t0x04000000 = INJ_MM_MAP_FROM_MEMORY\n"); 631 | printf("\t\tThe default value is MM_DEFAULT (0x01FE0000)\n\n"); 632 | 633 | //optional 634 | printf("The following arguments are .NET related:\n\n"); 635 | printf("\t-dotnet\n"); 636 | printf("\t\tIf set the dll will be forwarded to the .NET injection functions.\n\n"); 637 | printf("\t-namespace [value]\n"); 638 | printf("\t\tUse this argument to specify the namespace of the function to be executed. This parameter is required.\n\n"); 639 | printf("\t-class [value]\n"); 640 | printf("\t\tUse this argument to specify the name of the class of the function to be executed. This parameter is required.\n\n"); 641 | printf("\t-method [value]\n"); 642 | printf("\t\tUse this argument to specify the name of the method to be executed. This parameter is required.\n\n"); 643 | printf("\t-argument [value]\n"); 644 | printf("\t\tUse this argument to specify the argument which will be sent to the specified function. This parameter is optional.\n\n"); 645 | 646 | //additional 647 | printf("Additional commands:\n\n"); 648 | 649 | printf("\t-help\n"); 650 | printf("\t\tThis command lists all the commands and arguments (this).\n\n"); 651 | 652 | printf("\t-version\n"); 653 | printf("\t\tThis command prints the current version of the injector.\n\n"); 654 | } -------------------------------------------------------------------------------- /GH Injector GUI/CmdArg.h: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guided-hacking/GH-Injector-GUI/801280f8d705b4cc9474169940cbc5852e11df08/GH Injector GUI/CmdArg.h -------------------------------------------------------------------------------- /GH Injector GUI/DarkStyle.cpp: -------------------------------------------------------------------------------- 1 | #include "pch.h" 2 | 3 | /* 4 | ############################################################################### 5 | # # 6 | # The MIT License # 7 | # # 8 | # Copyright (C) 2017 by Juergen Skrotzky (JorgenVikingGod@gmail.com) # 9 | # >> https://github.com/Jorgen-VikingGod # 10 | # # 11 | # Sources: https://github.com/Jorgen-VikingGod/Qt-Frameless-Window-DarkStyle # 12 | # # 13 | ############################################################################### 14 | */ 15 | 16 | #include "DarkStyle.h" 17 | 18 | DarkStyle::DarkStyle() : DarkStyle(styleBase()) 19 | { 20 | 21 | } 22 | 23 | DarkStyle::DarkStyle(QStyle * style) : QProxyStyle(style) 24 | { 25 | 26 | } 27 | 28 | QStyle * DarkStyle::styleBase(QStyle * style) const 29 | { 30 | if (style == Q_NULLPTR) 31 | { 32 | return QStyleFactory::create(QStringLiteral("Fusion")); 33 | } 34 | else 35 | { 36 | return style; 37 | } 38 | } 39 | 40 | QStyle * DarkStyle::baseStyle() const 41 | { 42 | return styleBase(); 43 | } 44 | 45 | void DarkStyle::polish(QPalette & palette) 46 | { 47 | // modify palette to dark 48 | palette.setColor(QPalette::Window, QColor(0x2D, 0x2D, 0x2D)); 49 | palette.setColor(QPalette::WindowText, Qt::white); 50 | palette.setColor(QPalette::Disabled, QPalette::WindowText, QColor(127, 127, 127)); 51 | palette.setColor(QPalette::Base, QColor(35, 35, 35)); 52 | palette.setColor(QPalette::AlternateBase, QColor(53, 53, 53)); 53 | palette.setColor(QPalette::ToolTipBase, Qt::white); 54 | palette.setColor(QPalette::ToolTipText, QColor(53, 53, 53)); 55 | palette.setColor(QPalette::Text, Qt::white); 56 | palette.setColor(QPalette::Disabled, QPalette::Text, QColor(127, 127, 127)); 57 | palette.setColor(QPalette::Dark, QColor(35, 35, 35)); 58 | palette.setColor(QPalette::Shadow, QColor(20, 20, 20)); 59 | palette.setColor(QPalette::Button, QColor(53, 53, 53)); 60 | palette.setColor(QPalette::ButtonText, Qt::white); 61 | palette.setColor(QPalette::Disabled, QPalette::ButtonText, QColor(127, 127, 127)); 62 | palette.setColor(QPalette::BrightText, Qt::red); 63 | palette.setColor(QPalette::Link, QColor(42, 130, 218)); 64 | palette.setColor(QPalette::Highlight, QColor(42, 130, 218)); 65 | palette.setColor(QPalette::Disabled, QPalette::Highlight, QColor(80, 80, 80)); 66 | palette.setColor(QPalette::HighlightedText, Qt::white); 67 | palette.setColor(QPalette::Disabled, QPalette::HighlightedText, QColor(127, 127, 127)); 68 | } 69 | 70 | void DarkStyle::polish(QApplication * app) 71 | { 72 | if (app == Q_NULLPTR) 73 | { 74 | return; 75 | } 76 | 77 | // increase font size for better reading, 78 | // setPointSize was reduced from +2 because when applied this way in Qt5, the 79 | // font is larger than intended for some reason 80 | auto defaultFont = QApplication::font(); 81 | defaultFont.setPointSize(11); //defaultFont.pointSize() + 1 82 | app->setFont(defaultFont); 83 | 84 | // loadstylesheet 85 | QFile qfDarkstyle(QStringLiteral(":/darkstyle/darkstyle.qss")); 86 | if (qfDarkstyle.open(QIODevice::ReadOnly | QIODevice::Text)) 87 | { 88 | // set stylesheet 89 | QString qsStylesheet = QString::fromLatin1(qfDarkstyle.readAll()); 90 | app->setStyleSheet(qsStylesheet); 91 | qfDarkstyle.close(); 92 | } 93 | } -------------------------------------------------------------------------------- /GH Injector GUI/DarkStyle.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | /* 4 | ############################################################################### 5 | # # 6 | # The MIT License # 7 | # # 8 | # Copyright (C) 2017 by Juergen Skrotzky (JorgenVikingGod@gmail.com) # 9 | # >> https://github.com/Jorgen-VikingGod # 10 | # # 11 | # Sources: https://github.com/Jorgen-VikingGod/Qt-Frameless-Window-DarkStyle # 12 | # # 13 | ############################################################################### 14 | */ 15 | 16 | #include "pch.h" 17 | 18 | class DarkStyle : public QProxyStyle 19 | { 20 | Q_OBJECT 21 | 22 | public: 23 | DarkStyle(); 24 | explicit DarkStyle(QStyle * style); 25 | 26 | QStyle * baseStyle() const; 27 | 28 | void polish(QPalette & palette) override; 29 | void polish(QApplication * app) override; 30 | 31 | private: 32 | QStyle * styleBase(QStyle * style = Q_NULLPTR) const; 33 | }; -------------------------------------------------------------------------------- /GH Injector GUI/DebugConsole.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guided-hacking/GH-Injector-GUI/801280f8d705b4cc9474169940cbc5852e11df08/GH Injector GUI/DebugConsole.cpp -------------------------------------------------------------------------------- /GH Injector GUI/DebugConsole.h: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guided-hacking/GH-Injector-GUI/801280f8d705b4cc9474169940cbc5852e11df08/GH Injector GUI/DebugConsole.h -------------------------------------------------------------------------------- /GH Injector GUI/DotNetOptions.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guided-hacking/GH-Injector-GUI/801280f8d705b4cc9474169940cbc5852e11df08/GH Injector GUI/DotNetOptions.cpp -------------------------------------------------------------------------------- /GH Injector GUI/DotNetOptions.h: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guided-hacking/GH-Injector-GUI/801280f8d705b4cc9474169940cbc5852e11df08/GH Injector GUI/DotNetOptions.h -------------------------------------------------------------------------------- /GH Injector GUI/DownloadProgress.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guided-hacking/GH-Injector-GUI/801280f8d705b4cc9474169940cbc5852e11df08/GH Injector GUI/DownloadProgress.cpp -------------------------------------------------------------------------------- /GH Injector GUI/DownloadProgress.h: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guided-hacking/GH-Injector-GUI/801280f8d705b4cc9474169940cbc5852e11df08/GH Injector GUI/DownloadProgress.h -------------------------------------------------------------------------------- /GH Injector GUI/DownloadProgressWindow.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guided-hacking/GH-Injector-GUI/801280f8d705b4cc9474169940cbc5852e11df08/GH Injector GUI/DownloadProgressWindow.cpp -------------------------------------------------------------------------------- /GH Injector GUI/DownloadProgressWindow.h: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guided-hacking/GH-Injector-GUI/801280f8d705b4cc9474169940cbc5852e11df08/GH Injector GUI/DownloadProgressWindow.h -------------------------------------------------------------------------------- /GH Injector GUI/DragDropWindow.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guided-hacking/GH-Injector-GUI/801280f8d705b4cc9474169940cbc5852e11df08/GH Injector GUI/DragDropWindow.cpp -------------------------------------------------------------------------------- /GH Injector GUI/DragDropWindow.h: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guided-hacking/GH-Injector-GUI/801280f8d705b4cc9474169940cbc5852e11df08/GH Injector GUI/DragDropWindow.h -------------------------------------------------------------------------------- /GH Injector GUI/GH Injector GUI.aps: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guided-hacking/GH-Injector-GUI/801280f8d705b4cc9474169940cbc5852e11df08/GH Injector GUI/GH Injector GUI.aps -------------------------------------------------------------------------------- /GH Injector GUI/GH Injector GUI.filters: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | {4FC737F1-C7A5-4376-A066-2A32D752A2FF} 6 | cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx 7 | 8 | 9 | {93995380-89BD-4b04-88EB-625FBE52EBFB} 10 | h;hh;hpp;hxx;hm;inl;inc;xsd 11 | 12 | 13 | {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} 14 | rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms 15 | 16 | 17 | {99349809-55BA-4b9d-BF79-8FDBB0286EB3} 18 | ui 19 | 20 | 21 | {D9D6E242-F8AF-46E4-B9FD-80ECBC20BA3E} 22 | qrc;* 23 | false 24 | 25 | 26 | 27 | 28 | Header Files 29 | 30 | 31 | Source Files 32 | 33 | 34 | Form Files 35 | 36 | 37 | Form Files 38 | 39 | 40 | Form Files 41 | 42 | 43 | Form Files 44 | 45 | 46 | 47 | 48 | Source Files 49 | 50 | 51 | Source Files 52 | 53 | 54 | Source Files 55 | 56 | 57 | Source Files 58 | 59 | 60 | Source Files 61 | 62 | 63 | Source Files 64 | 65 | 66 | Source Files 67 | 68 | 69 | Source Files 70 | 71 | 72 | Source Files 73 | 74 | 75 | Source Files 76 | 77 | 78 | Source Files 79 | 80 | 81 | Source Files 82 | 83 | 84 | Source Files 85 | 86 | 87 | Source Files 88 | 89 | 90 | Source Files 91 | 92 | 93 | Source Files 94 | 95 | 96 | Source Files 97 | 98 | 99 | Source Files 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | Header Files 108 | 109 | 110 | Header Files 111 | 112 | 113 | Header Files 114 | 115 | 116 | Header Files 117 | 118 | 119 | Header Files 120 | 121 | 122 | Header Files 123 | 124 | 125 | Header Files 126 | 127 | 128 | Header Files 129 | 130 | 131 | Header Files 132 | 133 | 134 | Header Files 135 | 136 | 137 | Header Files 138 | 139 | 140 | Header Files 141 | 142 | 143 | Header Files 144 | 145 | 146 | 147 | 148 | Header Files 149 | 150 | 151 | Header Files 152 | 153 | 154 | Header Files 155 | 156 | 157 | Header Files 158 | 159 | 160 | Header Files 161 | 162 | 163 | Header Files 164 | 165 | 166 | Header Files 167 | 168 | 169 | Header Files 170 | 171 | 172 | 173 | 174 | 175 | 176 | 177 | 178 | Form Files 179 | 180 | 181 | 182 | 183 | Resource Files 184 | 185 | 186 | 187 | 188 | Resource Files 189 | 190 | 191 | Resource Files 192 | 193 | 194 | 195 | -------------------------------------------------------------------------------- /GH Injector GUI/GH Injector GUI.rc: -------------------------------------------------------------------------------- 1 | // Microsoft Visual C++ generated resource script. 2 | // 3 | #include "resource.h" 4 | 5 | #define APSTUDIO_READONLY_SYMBOLS 6 | ///////////////////////////////////////////////////////////////////////////// 7 | // 8 | // Generated from the TEXTINCLUDE 2 resource. 9 | // 10 | #include "winres.h" 11 | 12 | ///////////////////////////////////////////////////////////////////////////// 13 | #undef APSTUDIO_READONLY_SYMBOLS 14 | 15 | ///////////////////////////////////////////////////////////////////////////// 16 | // German (Germany) resources 17 | 18 | #if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_DEU) 19 | LANGUAGE LANG_GERMAN, SUBLANG_GERMAN 20 | #pragma code_page(1252) 21 | 22 | #ifdef APSTUDIO_INVOKED 23 | ///////////////////////////////////////////////////////////////////////////// 24 | // 25 | // TEXTINCLUDE 26 | // 27 | 28 | 1 TEXTINCLUDE 29 | BEGIN 30 | "resource.h\0" 31 | END 32 | 33 | 2 TEXTINCLUDE 34 | BEGIN 35 | "#include ""winres.h""\r\n" 36 | "\0" 37 | END 38 | 39 | 3 TEXTINCLUDE 40 | BEGIN 41 | "\r\n" 42 | "\0" 43 | END 44 | 45 | #endif // APSTUDIO_INVOKED 46 | 47 | 48 | ///////////////////////////////////////////////////////////////////////////// 49 | // 50 | // Icon 51 | // 52 | 53 | // Icon with lowest ID value placed first to ensure application icon 54 | // remains consistent on all systems. 55 | IDI_ICON1 ICON "gh_resource\\GH Icon.ico" 56 | 57 | IDI_ICON2 ICON "gh_resource\\DragDrop Icon.ico" 58 | 59 | 60 | ///////////////////////////////////////////////////////////////////////////// 61 | // 62 | // Version 63 | // 64 | 65 | VS_VERSION_INFO VERSIONINFO 66 | FILEVERSION 4,8,0,0 67 | PRODUCTVERSION 4,8,0,0 68 | FILEFLAGSMASK 0x3fL 69 | #ifdef _DEBUG 70 | FILEFLAGS 0x1L 71 | #else 72 | FILEFLAGS 0x0L 73 | #endif 74 | FILEOS 0x40004L 75 | FILETYPE 0x1L 76 | FILESUBTYPE 0x0L 77 | BEGIN 78 | BLOCK "StringFileInfo" 79 | BEGIN 80 | BLOCK "000904b0" 81 | BEGIN 82 | VALUE "CompanyName", "Guided Hacking" 83 | VALUE "FileDescription", "GUI of the GH Injector" 84 | VALUE "FileVersion", "4.8.0.0" 85 | VALUE "LegalCopyright", "Broihon (C) 1987 - 2035" 86 | VALUE "ProductName", "GH Injector GUI" 87 | VALUE "ProductVersion", "4.8.0.0" 88 | END 89 | END 90 | BLOCK "VarFileInfo" 91 | BEGIN 92 | VALUE "Translation", 0x9, 1200 93 | END 94 | END 95 | 96 | #endif // German (Germany) resources 97 | ///////////////////////////////////////////////////////////////////////////// 98 | 99 | 100 | 101 | #ifndef APSTUDIO_INVOKED 102 | ///////////////////////////////////////////////////////////////////////////// 103 | // 104 | // Generated from the TEXTINCLUDE 3 resource. 105 | // 106 | 107 | 108 | ///////////////////////////////////////////////////////////////////////////// 109 | #endif // not APSTUDIO_INVOKED 110 | 111 | -------------------------------------------------------------------------------- /GH Injector GUI/GH Injector GUI.user: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | false 5 | 6 | -------------------------------------------------------------------------------- /GH Injector GUI/GH Injector GUI.vcxproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | Debug 6 | Win32 7 | 8 | 9 | Debug 10 | x64 11 | 12 | 13 | Release 14 | Win32 15 | 16 | 17 | Release 18 | x64 19 | 20 | 21 | Static 22 | Win32 23 | 24 | 25 | Static 26 | x64 27 | 28 | 29 | 30 | {6D2B70ED-A9AA-4587-9ABF-305DDAB2B233} 31 | QtVS_v302 32 | 10.0 33 | 10.0 34 | 10.0 35 | 10.0 36 | 10.0 37 | 10.0 38 | $(MSBuildProjectDirectory)\QtMsBuild 39 | GH Injector GUI 40 | 41 | 42 | 43 | Application 44 | v143 45 | Unicode 46 | true 47 | 48 | 49 | Application 50 | v143 51 | Unicode 52 | 53 | 54 | Application 55 | v143 56 | Unicode 57 | 58 | 59 | Application 60 | v143 61 | Unicode 62 | 63 | 64 | Application 65 | v143 66 | Unicode 67 | 68 | 69 | Application 70 | v143 71 | Unicode 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | $(ProjectDir)framelesswindow;$(IncludePath) 100 | $(SolutionDir)$(Configuration)\$(PlatformShortName)\ 101 | $(Configuration)\$(PlatformShortName)\ 102 | GH Injector - $(PlatformShortName) 103 | false 104 | 105 | 106 | GH Injector - $(PlatformShortName) 107 | $(ProjectDir)framelesswindow;$(IncludePath) 108 | $(SolutionDir)$(Configuration)\$(PlatformShortName)\ 109 | $(Configuration)\$(PlatformShortName)\ 110 | false 111 | 112 | 113 | $(ProjectDir)framelesswindow;$(IncludePath) 114 | $(SolutionDir)$(Configuration)\$(PlatformShortName)\ 115 | $(Configuration)\$(PlatformShortName)\ 116 | GH Injector - $(PlatformShortName) 117 | false 118 | 119 | 120 | GH Injector - $(PlatformShortName) 121 | $(ProjectDir)framelesswindow;$(IncludePath) 122 | $(SolutionDir)$(Configuration)\$(PlatformShortName)\ 123 | $(Configuration)\$(PlatformShortName)\ 124 | false 125 | 126 | 127 | $(ProjectDir)framelesswindow;$(IncludePath) 128 | $(SolutionDir)$(Configuration)\$(PlatformShortName)\ 129 | $(Configuration)\$(PlatformShortName)\ 130 | GH Injector - $(PlatformShortName) 131 | false 132 | true 133 | false 134 | 135 | 136 | GH Injector - $(PlatformShortName) 137 | false 138 | true 139 | $(ProjectDir)framelesswindow;$(IncludePath) 140 | $(SolutionDir)$(Configuration)\$(PlatformShortName)\ 141 | $(Configuration)\$(PlatformShortName)\ 142 | false 143 | 144 | 145 | 146 | 147 | 148 | msvc2019_64 149 | core;gui;widgets 150 | 151 | 152 | msvc2019 153 | core;gui;widgets 154 | 155 | 156 | msvc2019_64 157 | core;gui;widgets 158 | 159 | 160 | msvc2019 161 | core;gui;widgets 162 | 163 | 164 | qt-5.15.2-static-msvc2019-x86_64 165 | core;gui;widgets 166 | release 167 | 168 | 169 | qt-5.15.2-static-msvc2019-x86 170 | core;gui;widgets 171 | release 172 | 173 | 174 | 175 | 176 | 177 | 178 | true 179 | true 180 | ProgramDatabase 181 | Disabled 182 | MultiThreadedDebugDLL 183 | 184 | 185 | Windows 186 | DebugFull 187 | 188 | 189 | 190 | 191 | true 192 | true 193 | ProgramDatabase 194 | Disabled 195 | MultiThreadedDebugDLL 196 | 197 | 198 | Windows 199 | DebugFull 200 | 201 | 202 | 203 | 204 | true 205 | true 206 | None 207 | MaxSpeed 208 | MultiThreadedDLL 209 | 210 | 211 | Windows 212 | false 213 | 214 | 215 | 216 | 217 | true 218 | true 219 | None 220 | MaxSpeed 221 | MultiThreadedDLL 222 | 223 | 224 | Windows 225 | false 226 | 227 | 228 | 229 | 230 | true 231 | true 232 | None 233 | MaxSpeed 234 | MultiThreadedDLL 235 | 236 | 237 | Windows 238 | false 239 | 240 | 241 | 242 | 243 | true 244 | true 245 | None 246 | MaxSpeed 247 | MultiThreadedDLL 248 | 249 | 250 | Windows 251 | false 252 | 253 | 254 | 255 | 256 | stdcpp20 257 | Use 258 | pch.h 259 | Level4 260 | Default 261 | false 262 | true 263 | 264 | 265 | 266 | xcopy /y $(QTDIR)\bin\Qt5Cored.dll "$(OutDir)" 267 | xcopy /y $(QTDIR)\bin\Qt5Guid.dll "$(OutDir)" 268 | xcopy /y $(QTDIR)\bin\Qt5Widgetsd.dll "$(OutDir)" 269 | xcopy /y $(QTDIR)\bin\Qt5Cored.dll "$(OutDir)" 270 | xcopy /y $(QTDIR)\plugins\platforms\qwindowsd.dll "$(OutDir)platforms\" 271 | xcopy /y $(QTDIR)\plugins\imageformats\qjpegd.dll "$(OutDir)imageformats\" 272 | 273 | 274 | RequireAdministrator 275 | 276 | 277 | 278 | 279 | stdcpp20 280 | Use 281 | pch.h 282 | Level4 283 | Default 284 | false 285 | true 286 | 287 | 288 | 289 | xcopy /y $(QTDIR)\bin\Qt5Cored.dll "$(OutDir)" 290 | xcopy /y $(QTDIR)\bin\Qt5Guid.dll "$(OutDir)" 291 | xcopy /y $(QTDIR)\bin\Qt5Widgetsd.dll "$(OutDir)" 292 | xcopy /y $(QTDIR)\bin\Qt5Cored.dll "$(OutDir)" 293 | xcopy /y $(QTDIR)\plugins\platforms\qwindowsd.dll "$(OutDir)platforms\" 294 | xcopy /y $(QTDIR)\plugins\imageformats\qjpegd.dll "$(OutDir)imageformats\" 295 | 296 | 297 | RequireAdministrator 298 | 299 | 300 | 301 | 302 | %(AdditionalDependencies) 303 | RequireAdministrator 304 | 305 | 306 | stdcpp20 307 | Use 308 | pch.h 309 | Level4 310 | Default 311 | true 312 | 313 | 314 | 315 | xcopy /y $(QTDIR)\bin\Qt5Core.dll "$(OutDir)" 316 | xcopy /y $(QTDIR)\bin\Qt5Gui.dll "$(OutDir)" 317 | xcopy /y $(QTDIR)\bin\Qt5Widgets.dll "$(OutDir)" 318 | xcopy /y $(QTDIR)\bin\Qt5Core.dll "$(OutDir)" 319 | xcopy /y $(QTDIR)\plugins\platforms\qwindows.dll "$(OutDir)platforms\" 320 | xcopy /y $(QTDIR)\plugins\imageformats\qjpeg.dll "$(OutDir)imageformats\" 321 | 322 | 323 | 324 | 325 | %(AdditionalDependencies) 326 | RequireAdministrator 327 | 328 | 329 | stdcpp20 330 | Use 331 | pch.h 332 | Level4 333 | Default 334 | true 335 | 336 | 337 | 338 | xcopy /y $(QTDIR)\bin\Qt5Core.dll "$(OutDir)" 339 | xcopy /y $(QTDIR)\bin\Qt5Gui.dll "$(OutDir)" 340 | xcopy /y $(QTDIR)\bin\Qt5Widgets.dll "$(OutDir)" 341 | xcopy /y $(QTDIR)\bin\Qt5Core.dll "$(OutDir)" 342 | xcopy /y $(QTDIR)\plugins\platforms\qwindows.dll "$(OutDir)platforms\" 343 | xcopy /y $(QTDIR)\plugins\imageformats\qjpeg.dll "$(OutDir)imageformats\" 344 | 345 | 346 | 347 | 348 | %(AdditionalDependencies) 349 | RequireAdministrator 350 | 351 | 352 | stdcpp20 353 | Use 354 | pch.h 355 | Level4 356 | Default 357 | true 358 | 359 | 360 | 361 | 362 | %(AdditionalDependencies) 363 | RequireAdministrator 364 | 365 | 366 | stdcpp20 367 | Use 368 | pch.h 369 | Level4 370 | Default 371 | true 372 | 373 | 374 | 375 | 376 | 377 | 378 | 379 | 380 | 381 | ..\pch.h 382 | ..\pch.h 383 | ..\pch.h 384 | ..\pch.h 385 | ..\pch.h 386 | ..\pch.h 387 | 388 | 389 | ..\pch.h 390 | ..\pch.h 391 | ..\pch.h 392 | ..\pch.h 393 | ..\pch.h 394 | ..\pch.h 395 | 396 | 397 | Create 398 | Create 399 | Create 400 | Create 401 | Create 402 | Create 403 | 404 | 405 | 406 | 407 | 408 | 409 | 410 | 411 | 412 | 413 | 414 | 415 | 416 | 417 | 418 | 419 | 420 | 421 | 422 | 423 | 424 | 425 | 426 | input 427 | %(Filename).moc 428 | input 429 | %(Filename).moc 430 | input 431 | %(Filename).moc 432 | input 433 | %(Filename).moc 434 | input 435 | %(Filename).moc 436 | input 437 | %(Filename).moc 438 | 439 | 440 | 441 | 442 | 443 | 444 | 445 | 446 | 447 | 448 | 449 | 450 | 451 | 452 | 453 | 454 | 455 | 456 | 457 | 458 | 459 | 460 | 461 | 462 | 463 | 464 | 465 | 466 | 467 | 468 | 469 | 470 | 471 | 472 | 473 | 474 | 475 | 476 | 477 | 478 | 479 | 480 | 481 | 482 | 483 | -------------------------------------------------------------------------------- /GH Injector GUI/GH Injector GUI.vcxproj.filters: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | Quelldateien 6 | 7 | 8 | Quelldateien 9 | 10 | 11 | Quelldateien 12 | 13 | 14 | Quelldateien 15 | 16 | 17 | Quelldateien 18 | 19 | 20 | Quelldateien 21 | 22 | 23 | Quelldateien 24 | 25 | 26 | Quelldateien 27 | 28 | 29 | Quelldateien 30 | 31 | 32 | Quelldateien 33 | 34 | 35 | Quelldateien 36 | 37 | 38 | Quelldateien 39 | 40 | 41 | Quelldateien 42 | 43 | 44 | Quelldateien 45 | 46 | 47 | Quelldateien 48 | 49 | 50 | Quelldateien 51 | 52 | 53 | Quelldateien 54 | 55 | 56 | Quelldateien 57 | 58 | 59 | Quelldateien 60 | 61 | 62 | Quelldateien 63 | 64 | 65 | Quelldateien 66 | 67 | 68 | Quelldateien 69 | 70 | 71 | Quelldateien 72 | 73 | 74 | 75 | 76 | Headerdateien 77 | 78 | 79 | Headerdateien 80 | 81 | 82 | Headerdateien 83 | 84 | 85 | Headerdateien 86 | 87 | 88 | Headerdateien 89 | 90 | 91 | Headerdateien 92 | 93 | 94 | Headerdateien 95 | 96 | 97 | Headerdateien 98 | 99 | 100 | Headerdateien 101 | 102 | 103 | Headerdateien 104 | 105 | 106 | Headerdateien 107 | 108 | 109 | Headerdateien 110 | 111 | 112 | Headerdateien 113 | 114 | 115 | 116 | 117 | Ressourcendateien 118 | 119 | 120 | Ressourcendateien 121 | 122 | 123 | Ressourcendateien 124 | 125 | 126 | 127 | 128 | Headerdateien 129 | 130 | 131 | Headerdateien 132 | 133 | 134 | Headerdateien 135 | 136 | 137 | Headerdateien 138 | 139 | 140 | Headerdateien 141 | 142 | 143 | Headerdateien 144 | 145 | 146 | Headerdateien 147 | 148 | 149 | Headerdateien 150 | 151 | 152 | Headerdateien 153 | 154 | 155 | Headerdateien 156 | 157 | 158 | Headerdateien 159 | 160 | 161 | 162 | 163 | UI 164 | 165 | 166 | UI 167 | 168 | 169 | UI 170 | 171 | 172 | UI 173 | 174 | 175 | UI 176 | 177 | 178 | 179 | 180 | 181 | UI 182 | 183 | 184 | 185 | 186 | {8969f1a4-9aa1-441b-9328-f74016072f5d} 187 | 188 | 189 | {d36dffad-ab1b-4f9a-bf68-8eb462e4a572} 190 | 191 | 192 | {ae7bfe11-ca67-4819-8ac3-2c6d5df676d0} 193 | 194 | 195 | {e3066775-22c2-4b7c-9267-3baa441d1851} 196 | 197 | 198 | {4FC737F1-C7A5-4376-A066-2A32D752A2FF} 199 | cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx 200 | true 201 | 202 | 203 | 204 | 205 | Ressourcendateien 206 | 207 | 208 | 209 | 210 | Ressourcendateien 211 | 212 | 213 | -------------------------------------------------------------------------------- /GH Injector GUI/GH Injector GUI.vcxproj.user: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 2023-02-23T13:40:39.0316181Z 6 | 7 | 8 | 2023-02-23T13:40:38.2058190Z 9 | 10 | 11 | 2023-02-23T13:40:37.7800794Z 12 | 13 | 14 | 2023-02-23T13:40:38.6192234Z 15 | 16 | 17 | 2023-02-23T13:40:38.7218232Z 18 | 19 | 20 | 2023-02-23T13:40:38.8404359Z 21 | 22 | -------------------------------------------------------------------------------- /GH Injector GUI/GuiMain.h: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guided-hacking/GH-Injector-GUI/801280f8d705b4cc9474169940cbc5852e11df08/GH Injector GUI/GuiMain.h -------------------------------------------------------------------------------- /GH Injector GUI/GuiMain.qrc: -------------------------------------------------------------------------------- 1 | 2 | 3 | gh_resource/LUL Icon.png 4 | gh_resource/GH Icon.ico 5 | gh_resource/Log Icon.ico 6 | 7 | 8 | -------------------------------------------------------------------------------- /GH Injector GUI/GuiProcess.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guided-hacking/GH-Injector-GUI/801280f8d705b4cc9474169940cbc5852e11df08/GH Injector GUI/GuiProcess.cpp -------------------------------------------------------------------------------- /GH Injector GUI/GuiProcess.h: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guided-hacking/GH-Injector-GUI/801280f8d705b4cc9474169940cbc5852e11df08/GH Injector GUI/GuiProcess.h -------------------------------------------------------------------------------- /GH Injector GUI/GuiProcess.ui: -------------------------------------------------------------------------------- 1 | 2 | 3 | frm_proc 4 | 5 | 6 | 7 | 0 8 | 0 9 | 400 10 | 600 11 | 12 | 13 | 14 | Select a process 15 | 16 | 17 | 18 | :/GuiMain/GH Icon.ico:/GuiMain/GH Icon.ico 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | Filter process list: 27 | 28 | 29 | txt_filter 30 | 31 | 32 | 33 | 34 | 35 | 36 | Current session only 37 | 38 | 39 | true 40 | 41 | 42 | 43 | 44 | 45 | 46 | Select 47 | 48 | 49 | 50 | 51 | 52 | 53 | Refresh 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 0 62 | 0 63 | 64 | 65 | 66 | 67 | 370 68 | 0 69 | 70 | 71 | 72 | true 73 | 74 | 75 | 40 76 | 77 | 78 | 40 79 | 80 | 81 | true 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | PID 91 | 92 | 93 | 94 | 95 | Name 96 | 97 | 98 | 99 | 100 | Type 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | All processes 110 | 111 | 112 | 113 | 114 | x64 processes only 115 | 116 | 117 | 118 | 119 | x86 processes only 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | -------------------------------------------------------------------------------- /GH Injector GUI/GuiScanHook.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guided-hacking/GH-Injector-GUI/801280f8d705b4cc9474169940cbc5852e11df08/GH Injector GUI/GuiScanHook.cpp -------------------------------------------------------------------------------- /GH Injector GUI/GuiScanHook.h: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guided-hacking/GH-Injector-GUI/801280f8d705b4cc9474169940cbc5852e11df08/GH Injector GUI/GuiScanHook.h -------------------------------------------------------------------------------- /GH Injector GUI/GuiScanHook.ui: -------------------------------------------------------------------------------- 1 | 2 | 3 | Form 4 | 5 | 6 | 7 | 0 8 | 0 9 | 318 10 | 231 11 | 12 | 13 | 14 | Scan for hooks 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | Unhook 23 | 24 | 25 | 26 | 27 | 28 | 29 | Scan PID 42 30 | 31 | 32 | 33 | 34 | 35 | 36 | QAbstractItemView::NoEditTriggers 37 | 38 | 39 | QAbstractItemView::ExtendedSelection 40 | 41 | 42 | 0 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | -------------------------------------------------------------------------------- /GH Injector GUI/Injection.h: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guided-hacking/GH-Injector-GUI/801280f8d705b4cc9474169940cbc5852e11df08/GH Injector GUI/Injection.h -------------------------------------------------------------------------------- /GH Injector GUI/InjectionLib.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guided-hacking/GH-Injector-GUI/801280f8d705b4cc9474169940cbc5852e11df08/GH Injector GUI/InjectionLib.cpp -------------------------------------------------------------------------------- /GH Injector GUI/InjectionLib.h: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guided-hacking/GH-Injector-GUI/801280f8d705b4cc9474169940cbc5852e11df08/GH Injector GUI/InjectionLib.h -------------------------------------------------------------------------------- /GH Injector GUI/PDB_Download.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guided-hacking/GH-Injector-GUI/801280f8d705b4cc9474169940cbc5852e11df08/GH Injector GUI/PDB_Download.cpp -------------------------------------------------------------------------------- /GH Injector GUI/PDB_Download.h: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guided-hacking/GH-Injector-GUI/801280f8d705b4cc9474169940cbc5852e11df08/GH Injector GUI/PDB_Download.h -------------------------------------------------------------------------------- /GH Injector GUI/Process.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guided-hacking/GH-Injector-GUI/801280f8d705b4cc9474169940cbc5852e11df08/GH Injector GUI/Process.cpp -------------------------------------------------------------------------------- /GH Injector GUI/Process.h: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guided-hacking/GH-Injector-GUI/801280f8d705b4cc9474169940cbc5852e11df08/GH Injector GUI/Process.h -------------------------------------------------------------------------------- /GH Injector GUI/ShortCut.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guided-hacking/GH-Injector-GUI/801280f8d705b4cc9474169940cbc5852e11df08/GH Injector GUI/ShortCut.cpp -------------------------------------------------------------------------------- /GH Injector GUI/ShortCut.h: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guided-hacking/GH-Injector-GUI/801280f8d705b4cc9474169940cbc5852e11df08/GH Injector GUI/ShortCut.h -------------------------------------------------------------------------------- /GH Injector GUI/StatusBox.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guided-hacking/GH-Injector-GUI/801280f8d705b4cc9474169940cbc5852e11df08/GH Injector GUI/StatusBox.cpp -------------------------------------------------------------------------------- /GH Injector GUI/StatusBox.h: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guided-hacking/GH-Injector-GUI/801280f8d705b4cc9474169940cbc5852e11df08/GH Injector GUI/StatusBox.h -------------------------------------------------------------------------------- /GH Injector GUI/Update.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guided-hacking/GH-Injector-GUI/801280f8d705b4cc9474169940cbc5852e11df08/GH Injector GUI/Update.cpp -------------------------------------------------------------------------------- /GH Injector GUI/Update.h: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guided-hacking/GH-Injector-GUI/801280f8d705b4cc9474169940cbc5852e11df08/GH Injector GUI/Update.h -------------------------------------------------------------------------------- /GH Injector GUI/WindowDocker.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guided-hacking/GH-Injector-GUI/801280f8d705b4cc9474169940cbc5852e11df08/GH Injector GUI/WindowDocker.cpp -------------------------------------------------------------------------------- /GH Injector GUI/WindowDocker.h: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guided-hacking/GH-Injector-GUI/801280f8d705b4cc9474169940cbc5852e11df08/GH Injector GUI/WindowDocker.h -------------------------------------------------------------------------------- /GH Injector GUI/Zip.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guided-hacking/GH-Injector-GUI/801280f8d705b4cc9474169940cbc5852e11df08/GH Injector GUI/Zip.cpp -------------------------------------------------------------------------------- /GH Injector GUI/Zip.h: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guided-hacking/GH-Injector-GUI/801280f8d705b4cc9474169940cbc5852e11df08/GH Injector GUI/Zip.h -------------------------------------------------------------------------------- /GH Injector GUI/darkstyle.qrc: -------------------------------------------------------------------------------- 1 | 2 | 3 | darkstyle/darkstyle.qss 4 | darkstyle/icon_close.png 5 | darkstyle/icon_restore.png 6 | darkstyle/icon_undock.png 7 | darkstyle/icon_branch_closed.png 8 | darkstyle/icon_branch_end.png 9 | darkstyle/icon_branch_more.png 10 | darkstyle/icon_branch_open.png 11 | darkstyle/icon_vline.png 12 | darkstyle/icon_checkbox_checked.png 13 | darkstyle/icon_checkbox_indeterminate.png 14 | darkstyle/icon_checkbox_unchecked.png 15 | darkstyle/icon_checkbox_checked_pressed.png 16 | darkstyle/icon_checkbox_indeterminate_pressed.png 17 | darkstyle/icon_checkbox_unchecked_pressed.png 18 | darkstyle/icon_checkbox_checked_disabled.png 19 | darkstyle/icon_checkbox_indeterminate_disabled.png 20 | darkstyle/icon_checkbox_unchecked_disabled.png 21 | darkstyle/icon_radiobutton_checked.png 22 | darkstyle/icon_radiobutton_unchecked.png 23 | darkstyle/icon_radiobutton_checked_pressed.png 24 | darkstyle/icon_radiobutton_unchecked_pressed.png 25 | darkstyle/icon_radiobutton_checked_disabled.png 26 | darkstyle/icon_radiobutton_unchecked_disabled.png 27 | 28 | 29 | -------------------------------------------------------------------------------- /GH Injector GUI/darkstyle/darkstyle.qss: -------------------------------------------------------------------------------- 1 | QToolTip{ 2 | color:#ffffff; 3 | background-color:palette(base); 4 | border:1px solid palette(highlight); 5 | border-radius:4px; 6 | } 7 | QStatusBar{ 8 | background-color:qlineargradient(x1:0,y1:0,x2:0,y2:1,stop:0 rgba(25,25,25,127),stop:1 rgba(53,53,53,75)); 9 | color:palette(mid); 10 | } 11 | QMenuBar{ 12 | background-color:qlineargradient(x1:0,y1:0,x2:0,y2:1,stop:0 rgba(25,25,25,127),stop:1 rgba(53,53,53,75)); 13 | border-bottom:2px solid rgba(25,25,25,75); 14 | } 15 | QMenuBar::item{ 16 | spacing:2px; 17 | padding:3px 4px; 18 | background:transparent; 19 | } 20 | QMenuBar::item:selected{ 21 | background-color:qlineargradient(x1:0,y1:0,x2:0,y2:1,stop:0 rgba(106,106,106,255),stop:1 rgba(106,106,106,75)); 22 | border-left:1px solid rgba(106,106,106,127); 23 | border-right:1px solid rgba(106,106,106,127); 24 | } 25 | QMenuBar::item:pressed{ 26 | background-color:palette(highlight); 27 | border-left:1px solid rgba(25,25,25,127); 28 | border-right:1px solid rgba(25,25,25,127); 29 | } 30 | QMenu{ 31 | background-color:palette(window); 32 | border:1px solid palette(shadow); 33 | } 34 | QMenu::item{ 35 | padding:3px 25px 3px 25px; 36 | border:1px solid transparent; 37 | } 38 | QMenu::item:disabled{ 39 | background-color:rgba(35,35,35,127); 40 | color:palette(disabled); 41 | } 42 | QMenu::item:selected{ 43 | border-color:rgba(147,191,236,127); 44 | background:palette(highlight); 45 | } 46 | QMenu::icon:checked{ 47 | background-color:qlineargradient(x1:0,y1:1,x2:0,y2:0,stop:0 rgba(25,25,25,127),stop:1 rgba(53,53,53,75)); 48 | border:1px solid palette(highlight); 49 | border-radius:2px; 50 | } 51 | QMenu::separator{ 52 | height:1px; 53 | background:palette(alternate-base); 54 | margin-left:5px; 55 | margin-right:5px; 56 | } 57 | QMenu::indicator{ 58 | width:18px; 59 | height:18px; 60 | } 61 | QMenu::indicator:non-exclusive:checked{ 62 | image:url(:/darkstyle/icon_checkbox_checked.png); 63 | padding-left:2px; 64 | } 65 | QMenu::indicator:non-exclusive:unchecked{ 66 | image:url(:/darkstyle/icon_checkbox_unchecked.png); 67 | padding-left:2px; 68 | } 69 | QMenu::indicator:exclusive:checked{ 70 | image:url(:/darkstyle/icon_radiobutton_checked.png); 71 | padding-left:2px; 72 | } 73 | QMenu::indicator:exclusive:unchecked{ 74 | image:url(:/darkstyle/icon_radiobutton_unchecked.png); 75 | padding-left:2px; 76 | } 77 | QToolBar::top{ 78 | background-color:qlineargradient(x1:0,y1:0,x2:0,y2:1,stop:0 rgba(25,25,25,127),stop:1 rgba(53,53,53,75)); 79 | border-bottom:3px solid qlineargradient(x1:0,y1:0,x2:0,y2:1,stop:0 rgba(25,25,25,127),stop:1 rgba(53,53,53,75)); 80 | } 81 | QToolBar::bottom{ 82 | background-color:qlineargradient(x1:0,y1:1,x2:0,y2:0,stop:0 rgba(25,25,25,127),stop:1 rgba(53,53,53,75)); 83 | border-top:3px solid qlineargradient(x1:0,y1:1,x2:0,y2:0,stop:0 rgba(25,25,25,127),stop:1 rgba(53,53,53,75)); 84 | } 85 | QToolBar::left{ 86 | background-color:qlineargradient(x1:0,y1:0,x2:1,y2:0,stop:0 rgba(25,25,25,127),stop:1 rgba(53,53,53,75)); 87 | border-right:3px solid qlineargradient(x1:0,y1:0,x2:1,y2:0,stop:0 rgba(25,25,25,127),stop:1 rgba(53,53,53,75)); 88 | } 89 | QToolBar::right{ 90 | background-color:qlineargradient(x1:1,y1:0,x2:0,y2:0,stop:0 rgba(25,25,25,127),stop:1 rgba(53,53,53,75)); 91 | border-left:3px solid qlineargradient(x1:1,y1:0,x2:0,y2:0,stop:0 rgba(25,25,25,127),stop:1 rgba(53,53,53,75)); 92 | } 93 | QMainWindow::separator{ 94 | width:6px; 95 | height:5px; 96 | padding:2px; 97 | } 98 | QSplitter::handle:horizontal{ 99 | width:10px; 100 | } 101 | QSplitter::handle:vertical{ 102 | height:10px; 103 | } 104 | QMainWindow::separator:hover,QSplitter::handle:hover{ 105 | background:palette(highlight); 106 | } 107 | QDockWidget::title{ 108 | padding:4px; 109 | background-color:qlineargradient(x1:0,y1:1,x2:0,y2:0,stop:0 rgba(25,25,25,127),stop:1 rgba(53,53,53,75)); 110 | border:1px solid rgba(25,25,25,75); 111 | border-bottom:2px solid rgba(25,25,25,75); 112 | } 113 | QDockWidget{ 114 | titlebar-close-icon:url(:/darkstyle/icon_close.png); 115 | titlebar-normal-icon:url(:/darkstyle/icon_restore.png); 116 | } 117 | QDockWidget::close-button,QDockWidget::float-button{ 118 | subcontrol-position:top right; 119 | subcontrol-origin:margin; 120 | position:absolute; 121 | top:3px; 122 | bottom:0px; 123 | width:20px; 124 | height:20px; 125 | } 126 | QDockWidget::close-button{ 127 | right:3px; 128 | } 129 | QDockWidget::float-button{ 130 | right:25px; 131 | } 132 | QGroupBox{ 133 | background-color:rgba(66,66,66,50%); 134 | margin-top:27px; 135 | border:1px solid rgba(25,25,25,127); 136 | border-radius:4px; 137 | } 138 | QGroupBox::title{ 139 | subcontrol-origin:margin; 140 | subcontrol-position:left top; 141 | padding:4px 6px; 142 | margin-left:3px; 143 | background-color:qlineargradient(x1:0,y1:1,x2:0,y2:0,stop:0 rgba(25,25,25,127),stop:1 rgba(53,53,53,75)); 144 | border:1px solid rgba(25,25,25,75); 145 | border-bottom:2px solid rgb(127,127,127); 146 | border-top-left-radius:4px; 147 | border-top-right-radius:4px; 148 | } 149 | QTabWidget::pane{ 150 | background-color:rgba(66,66,66,50%); 151 | border-top:1px solid rgba(25,25,25,50%); 152 | } 153 | QTabWidget::tab-bar{ 154 | left:3px; 155 | top:1px; 156 | } 157 | QTabBar{ 158 | background-color:transparent; 159 | qproperty-drawBase:0; 160 | border-bottom:1px solid rgba(25,25,25,50%); 161 | } 162 | QTabBar::tab{ 163 | padding:4px 6px; 164 | background-color:qlineargradient(x1:0,y1:1,x2:0,y2:0,stop:0 rgba(25,25,25,127),stop:1 rgba(53,53,53,75)); 165 | border:1px solid rgba(25,25,25,75); 166 | border-top-left-radius:4px; 167 | border-top-right-radius:4px; 168 | } 169 | QTabBar::tab:selected,QTabBar::tab:hover{ 170 | background-color:qlineargradient(x1:0,y1:0,x2:0,y2:1,stop:0 rgba(53,53,53,127),stop:1 rgba(66,66,66,50%)); 171 | border-bottom-color:rgba(66,66,66,75%); 172 | } 173 | QTabBar::tab:selected{ 174 | border-bottom:2px solid palette(highlight); 175 | } 176 | QTabBar::tab::selected:disabled{ 177 | border-bottom:2px solid rgb(127,127,127); 178 | } 179 | QTabBar::tab:!selected{ 180 | margin-top:2px; 181 | } 182 | QCheckBox::indicator{ 183 | width:18px; 184 | height:18px; 185 | } 186 | QCheckBox::indicator:checked,QTreeView::indicator:checked,QTableView::indicator:checked,QGroupBox::indicator:checked{ 187 | image:url(:/darkstyle/icon_checkbox_checked.png); 188 | } 189 | QCheckBox::indicator:checked:pressed,QTreeView::indicator:checked:pressed,QTableView::indicator:checked:pressed,QGroupBox::indicator:checked:pressed{ 190 | image:url(:/darkstyle/icon_checkbox_checked_pressed.png); 191 | } 192 | QCheckBox::indicator:checked:disabled,QTreeView::indicator:checked:disabled,QTableView::indicator:checked:disabled,QGroupBox::indicator:checked:disabled{ 193 | image:url(:/darkstyle/icon_checkbox_checked_disabled.png); 194 | } 195 | QCheckBox::indicator:unchecked,QTreeView::indicator:unchecked,QTableView::indicator:unchecked,QGroupBox::indicator:unchecked{ 196 | image:url(:/darkstyle/icon_checkbox_unchecked.png); 197 | } 198 | QCheckBox::indicator:unchecked:pressed,QTreeView::indicator:unchecked:pressed,QTableView::indicator:unchecked:pressed,QGroupBox::indicator:unchecked:pressed{ 199 | image:url(:/darkstyle/icon_checkbox_unchecked_pressed.png); 200 | } 201 | QCheckBox::indicator:unchecked:disabled,QTreeView::indicator:unchecked:disabled,QTableView::indicator:unchecked:disabled,QGroupBox::indicator:unchecked:disabled{ 202 | image:url(:/darkstyle/icon_checkbox_unchecked_disabled.png); 203 | } 204 | QCheckBox::indicator:indeterminate,QTreeView::indicator:indeterminate,QTableView::indicator:indeterminate,QGroupBox::indicator:indeterminate{ 205 | image:url(:/darkstyle/icon_checkbox_indeterminate.png); 206 | } 207 | QCheckBox::indicator:indeterminate:pressed,QTreeView::indicator:indeterminate:pressed,QTableView::indicator:indeterminate:pressed,QGroupBox::indicator:indeterminate:pressed{ 208 | image:url(:/darkstyle/icon_checkbox_indeterminate_pressed.png); 209 | } 210 | QCheckBox::indicator:indeterminate:disabled,QTreeView::indicator:indeterminate:disabled,QTableView::indicator:indeterminate:disabled,QGroupBox::indicator:indeterminate:disabled{ 211 | image:url(:/darkstyle/icon_checkbox_indeterminate_disabled.png); 212 | } 213 | QRadioButton::indicator{ 214 | width:18px; 215 | height:18px; 216 | } 217 | QRadioButton::indicator:checked{ 218 | image:url(:/darkstyle/icon_radiobutton_checked.png); 219 | } 220 | QRadioButton::indicator:checked:pressed{ 221 | image:url(:/darkstyle/icon_radiobutton_checked_pressed.png); 222 | } 223 | QRadioButton::indicator:checked:disabled{ 224 | image:url(:/darkstyle/icon_radiobutton_checked_disabled.png); 225 | } 226 | QRadioButton::indicator:unchecked{ 227 | image:url(:/darkstyle/icon_radiobutton_unchecked.png); 228 | } 229 | QRadioButton::indicator:unchecked:pressed{ 230 | image:url(:/darkstyle/icon_radiobutton_unchecked_pressed.png); 231 | } 232 | QRadioButton::indicator:unchecked:disabled{ 233 | image:url(:/darkstyle/icon_radiobutton_unchecked_disabled.png); 234 | } 235 | QTreeView, QTableView{ 236 | alternate-background-color:palette(window); 237 | background:palette(base); 238 | } 239 | QTreeView QHeaderView::section, QTableView QHeaderView::section{ 240 | background-color:qlineargradient(x1:0,y1:1,x2:0,y2:0,stop:0 rgba(25,25,25,127),stop:1 rgba(53,53,53,75)); 241 | border-style:none; 242 | border-bottom:1px solid palette(dark); 243 | padding-left:5px; 244 | padding-right:5px; 245 | } 246 | QTreeView::item:selected:disabled, QTableView::item:selected:disabled{ 247 | background:rgb(80,80,80); 248 | } 249 | QTreeView::branch{ 250 | background-color:palette(base); 251 | } 252 | QTreeView::branch:has-siblings:!adjoins-item{ 253 | border-image:url(:/darkstyle/icon_vline.png) 0; 254 | } 255 | QTreeView::branch:has-siblings:adjoins-item{ 256 | border-image:url(:/darkstyle/icon_branch_more.png) 0; 257 | } 258 | QTreeView::branch:!has-children:!has-siblings:adjoins-item{ 259 | border-image:url(:/darkstyle/icon_branch_end.png) 0; 260 | } 261 | QTreeView::branch:has-children:!has-siblings:closed, 262 | QTreeView::branch:closed:has-children:has-siblings{ 263 | border-image:none; 264 | image:url(:/darkstyle/icon_branch_closed.png); 265 | } 266 | QTreeView::branch:open:has-children:!has-siblings, 267 | QTreeView::branch:open:has-children:has-siblings{ 268 | border-image:none; 269 | image:url(:/darkstyle/icon_branch_open.png); 270 | } 271 | QScrollBar:vertical{ 272 | background:palette(base); 273 | border-top-right-radius:2px; 274 | border-bottom-right-radius:2px; 275 | width:16px; 276 | margin:0px; 277 | } 278 | QScrollBar::handle:vertical{ 279 | background-color:palette(alternate-base); 280 | border-radius:2px; 281 | min-height:20px; 282 | margin:2px 4px 2px 4px; 283 | } 284 | QScrollBar::handle:vertical:hover{ 285 | background-color:palette(highlight); 286 | } 287 | QScrollBar::add-line:vertical{ 288 | background:none; 289 | height:0px; 290 | subcontrol-position:right; 291 | subcontrol-origin:margin; 292 | } 293 | QScrollBar::sub-line:vertical{ 294 | background:none; 295 | height:0px; 296 | subcontrol-position:left; 297 | subcontrol-origin:margin; 298 | } 299 | QScrollBar:horizontal{ 300 | background:palette(base); 301 | height:16px; 302 | margin:0px; 303 | } 304 | QScrollBar::handle:horizontal{ 305 | background-color:palette(alternate-base); 306 | border-radius:2px; 307 | min-width:20px; 308 | margin:4px 2px 4px 2px; 309 | } 310 | QScrollBar::handle:horizontal:hover{ 311 | background-color:palette(highlight); 312 | } 313 | QScrollBar::add-line:horizontal{ 314 | background:none; 315 | width:0px; 316 | subcontrol-position:bottom; 317 | subcontrol-origin:margin; 318 | } 319 | QScrollBar::sub-line:horizontal{ 320 | background:none; 321 | width:0px; 322 | subcontrol-position:top; 323 | subcontrol-origin:margin; 324 | } 325 | QSlider::handle:horizontal{ 326 | border-radius:4px; 327 | border:1px solid rgba(25,25,25,255); 328 | background-color:palette(alternate-base); 329 | min-height:20px; 330 | margin:0 -4px; 331 | } 332 | QSlider::handle:horizontal:hover{ 333 | background:palette(highlight); 334 | } 335 | QSlider::add-page:horizontal{ 336 | background:palette(base); 337 | } 338 | QSlider::sub-page:horizontal{ 339 | background:palette(highlight); 340 | } 341 | QSlider::sub-page:horizontal:disabled{ 342 | background:rgb(80,80,80); 343 | } 344 | -------------------------------------------------------------------------------- /GH Injector GUI/darkstyle/icon_branch_closed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guided-hacking/GH-Injector-GUI/801280f8d705b4cc9474169940cbc5852e11df08/GH Injector GUI/darkstyle/icon_branch_closed.png -------------------------------------------------------------------------------- /GH Injector GUI/darkstyle/icon_branch_end.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guided-hacking/GH-Injector-GUI/801280f8d705b4cc9474169940cbc5852e11df08/GH Injector GUI/darkstyle/icon_branch_end.png -------------------------------------------------------------------------------- /GH Injector GUI/darkstyle/icon_branch_more.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guided-hacking/GH-Injector-GUI/801280f8d705b4cc9474169940cbc5852e11df08/GH Injector GUI/darkstyle/icon_branch_more.png -------------------------------------------------------------------------------- /GH Injector GUI/darkstyle/icon_branch_open.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guided-hacking/GH-Injector-GUI/801280f8d705b4cc9474169940cbc5852e11df08/GH Injector GUI/darkstyle/icon_branch_open.png -------------------------------------------------------------------------------- /GH Injector GUI/darkstyle/icon_checkbox_checked.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guided-hacking/GH-Injector-GUI/801280f8d705b4cc9474169940cbc5852e11df08/GH Injector GUI/darkstyle/icon_checkbox_checked.png -------------------------------------------------------------------------------- /GH Injector GUI/darkstyle/icon_checkbox_checked_disabled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guided-hacking/GH-Injector-GUI/801280f8d705b4cc9474169940cbc5852e11df08/GH Injector GUI/darkstyle/icon_checkbox_checked_disabled.png -------------------------------------------------------------------------------- /GH Injector GUI/darkstyle/icon_checkbox_checked_pressed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guided-hacking/GH-Injector-GUI/801280f8d705b4cc9474169940cbc5852e11df08/GH Injector GUI/darkstyle/icon_checkbox_checked_pressed.png -------------------------------------------------------------------------------- /GH Injector GUI/darkstyle/icon_checkbox_indeterminate.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guided-hacking/GH-Injector-GUI/801280f8d705b4cc9474169940cbc5852e11df08/GH Injector GUI/darkstyle/icon_checkbox_indeterminate.png -------------------------------------------------------------------------------- /GH Injector GUI/darkstyle/icon_checkbox_indeterminate_disabled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guided-hacking/GH-Injector-GUI/801280f8d705b4cc9474169940cbc5852e11df08/GH Injector GUI/darkstyle/icon_checkbox_indeterminate_disabled.png -------------------------------------------------------------------------------- /GH Injector GUI/darkstyle/icon_checkbox_indeterminate_pressed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guided-hacking/GH-Injector-GUI/801280f8d705b4cc9474169940cbc5852e11df08/GH Injector GUI/darkstyle/icon_checkbox_indeterminate_pressed.png -------------------------------------------------------------------------------- /GH Injector GUI/darkstyle/icon_checkbox_unchecked.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guided-hacking/GH-Injector-GUI/801280f8d705b4cc9474169940cbc5852e11df08/GH Injector GUI/darkstyle/icon_checkbox_unchecked.png -------------------------------------------------------------------------------- /GH Injector GUI/darkstyle/icon_checkbox_unchecked_disabled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guided-hacking/GH-Injector-GUI/801280f8d705b4cc9474169940cbc5852e11df08/GH Injector GUI/darkstyle/icon_checkbox_unchecked_disabled.png -------------------------------------------------------------------------------- /GH Injector GUI/darkstyle/icon_checkbox_unchecked_pressed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guided-hacking/GH-Injector-GUI/801280f8d705b4cc9474169940cbc5852e11df08/GH Injector GUI/darkstyle/icon_checkbox_unchecked_pressed.png -------------------------------------------------------------------------------- /GH Injector GUI/darkstyle/icon_close.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guided-hacking/GH-Injector-GUI/801280f8d705b4cc9474169940cbc5852e11df08/GH Injector GUI/darkstyle/icon_close.png -------------------------------------------------------------------------------- /GH Injector GUI/darkstyle/icon_dock.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guided-hacking/GH-Injector-GUI/801280f8d705b4cc9474169940cbc5852e11df08/GH Injector GUI/darkstyle/icon_dock.png -------------------------------------------------------------------------------- /GH Injector GUI/darkstyle/icon_radiobutton_checked.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guided-hacking/GH-Injector-GUI/801280f8d705b4cc9474169940cbc5852e11df08/GH Injector GUI/darkstyle/icon_radiobutton_checked.png -------------------------------------------------------------------------------- /GH Injector GUI/darkstyle/icon_radiobutton_checked_disabled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guided-hacking/GH-Injector-GUI/801280f8d705b4cc9474169940cbc5852e11df08/GH Injector GUI/darkstyle/icon_radiobutton_checked_disabled.png -------------------------------------------------------------------------------- /GH Injector GUI/darkstyle/icon_radiobutton_checked_pressed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guided-hacking/GH-Injector-GUI/801280f8d705b4cc9474169940cbc5852e11df08/GH Injector GUI/darkstyle/icon_radiobutton_checked_pressed.png -------------------------------------------------------------------------------- /GH Injector GUI/darkstyle/icon_radiobutton_unchecked.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guided-hacking/GH-Injector-GUI/801280f8d705b4cc9474169940cbc5852e11df08/GH Injector GUI/darkstyle/icon_radiobutton_unchecked.png -------------------------------------------------------------------------------- /GH Injector GUI/darkstyle/icon_radiobutton_unchecked_disabled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guided-hacking/GH-Injector-GUI/801280f8d705b4cc9474169940cbc5852e11df08/GH Injector GUI/darkstyle/icon_radiobutton_unchecked_disabled.png -------------------------------------------------------------------------------- /GH Injector GUI/darkstyle/icon_radiobutton_unchecked_pressed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guided-hacking/GH-Injector-GUI/801280f8d705b4cc9474169940cbc5852e11df08/GH Injector GUI/darkstyle/icon_radiobutton_unchecked_pressed.png -------------------------------------------------------------------------------- /GH Injector GUI/darkstyle/icon_restore.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guided-hacking/GH-Injector-GUI/801280f8d705b4cc9474169940cbc5852e11df08/GH Injector GUI/darkstyle/icon_restore.png -------------------------------------------------------------------------------- /GH Injector GUI/darkstyle/icon_undock.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guided-hacking/GH-Injector-GUI/801280f8d705b4cc9474169940cbc5852e11df08/GH Injector GUI/darkstyle/icon_undock.png -------------------------------------------------------------------------------- /GH Injector GUI/darkstyle/icon_vline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guided-hacking/GH-Injector-GUI/801280f8d705b4cc9474169940cbc5852e11df08/GH Injector GUI/darkstyle/icon_vline.png -------------------------------------------------------------------------------- /GH Injector GUI/frameless_window_dark.pro: -------------------------------------------------------------------------------- 1 | ############################################################################### 2 | # # 3 | # The MIT License # 4 | # # 5 | # Copyright (C) 2017 by Juergen Skrotzky (JorgenVikingGod@gmail.com) # 6 | # >> https://github.com/Jorgen-VikingGod # 7 | # # 8 | # Sources: https://github.com/Jorgen-VikingGod/Qt-Frameless-Window-DarkStyle # 9 | # # 10 | ############################################################################### 11 | 12 | QT += core gui 13 | 14 | greaterThan(QT_MAJOR_VERSION, 4): QT += widgets 15 | 16 | INCLUDEPATH +="framelesswindow" 17 | 18 | TARGET = QtFramelessWindowDarkStyle 19 | TEMPLATE = app 20 | 21 | SOURCES += main.cpp\ 22 | mainwindow.cpp \ 23 | framelesswindow/framelesswindow.cpp \ 24 | framelesswindow/windowdragger.cpp \ 25 | DarkStyle.cpp 26 | 27 | 28 | HEADERS += mainwindow.h \ 29 | framelesswindow/framelesswindow.h \ 30 | framelesswindow/windowdragger.h \ 31 | DarkStyle.h 32 | 33 | 34 | FORMS += mainwindow.ui \ 35 | framelesswindow/framelesswindow.ui 36 | 37 | RESOURCES += darkstyle.qrc \ 38 | framelesswindow.qrc 39 | -------------------------------------------------------------------------------- /GH Injector GUI/framelesswindow.qrc: -------------------------------------------------------------------------------- 1 | 2 | 3 | images/icon_window_minimize.png 4 | images/icon_window_restore.png 5 | images/icon_window_maximize.png 6 | images/icon_window_close.png 7 | 8 | 9 | -------------------------------------------------------------------------------- /GH Injector GUI/framelesswindow/framelesswindow.cpp: -------------------------------------------------------------------------------- 1 | #include "..\pch.h" 2 | 3 | /* 4 | ############################################################################### 5 | # # 6 | # The MIT License # 7 | # # 8 | # Copyright (C) 2017 by Juergen Skrotzky (JorgenVikingGod@gmail.com) # 9 | # >> https://github.com/Jorgen-VikingGod # 10 | # # 11 | # Sources: https://github.com/Jorgen-VikingGod/Qt-Frameless-Window-DarkStyle # 12 | # # 13 | ############################################################################### 14 | */ 15 | 16 | //modified by me >:] 17 | 18 | #include "framelesswindow.h" 19 | 20 | FramelessWindow::FramelessWindow(QWidget * parent) 21 | : QWidget(parent), ui(new Ui::FramelessWindow) 22 | { 23 | setWindowFlags(Qt::FramelessWindowHint | Qt::WindowSystemMenuHint | Qt::WindowMinimizeButtonHint); 24 | setAttribute(Qt::WA_NoSystemBackground, true); 25 | setAttribute(Qt::WA_TranslucentBackground); 26 | 27 | ui->setupUi(this); 28 | 29 | // window shadow 30 | QGraphicsDropShadowEffect * windowShadow = new(std::nothrow) QGraphicsDropShadowEffect; 31 | if (windowShadow == Q_NULLPTR) 32 | { 33 | THROW("Failed to create drop shadow effect for frameless window."); 34 | } 35 | 36 | windowShadow->setBlurRadius(9.0); 37 | windowShadow->setColor(palette().color(QPalette::Highlight)); 38 | windowShadow->setOffset(0.0); 39 | ui->windowFrame->setGraphicsEffect(windowShadow); 40 | 41 | QObject::connect(qApp, &QGuiApplication::applicationStateChanged, this, &FramelessWindow::on_applicationStateChanged); 42 | setMouseTracking(true); 43 | 44 | auto al = ui->titleText->alignment(); 45 | al.setFlag(Qt::AlignmentFlag::AlignVCenter); 46 | ui->titleText->setAlignment(al); 47 | 48 | auto x = ui->titleText->x(); 49 | auto txt_height = ui->titleText->sizeHint().height(); 50 | auto bar_height = ui->windowTitlebar->height(); 51 | ui->titleText->move(x, bar_height / 2 - txt_height / 2); 52 | 53 | // important to watch mouse move from all child widgets 54 | QApplication::instance()->installEventFilter(this); 55 | } 56 | 57 | FramelessWindow::~FramelessWindow() 58 | { 59 | delete ui; 60 | } 61 | 62 | void FramelessWindow::changeEvent(QEvent * event) 63 | { 64 | if (event->type() == QEvent::WindowStateChange) 65 | { 66 | if (windowState().testFlag(Qt::WindowNoState)) 67 | { 68 | styleWindow(true, true); 69 | event->ignore(); 70 | } 71 | else if (windowState().testFlag(Qt::WindowMaximized)) 72 | { 73 | styleWindow(true, false); 74 | event->ignore(); 75 | } 76 | } 77 | 78 | event->accept(); 79 | } 80 | 81 | void FramelessWindow::setContent(QWidget * w) 82 | { 83 | content = w; 84 | 85 | ui->windowContent->layout()->addWidget(w); 86 | } 87 | 88 | void FramelessWindow::setTitleBar(bool active) 89 | { 90 | if (active) 91 | { 92 | ui->windowTitlebar->setHidden(false); 93 | } 94 | else 95 | { 96 | ui->windowTitlebar->setHidden(true); 97 | } 98 | } 99 | 100 | void FramelessWindow::setMinimizeButton(bool active) 101 | { 102 | if (active) 103 | { 104 | ui->minimizeButton->setDisabled(false); 105 | ui->minimizeButton->setHidden(false); 106 | } 107 | else 108 | { 109 | ui->minimizeButton->setHidden(true); 110 | ui->minimizeButton->setDisabled(true); 111 | } 112 | } 113 | 114 | void FramelessWindow::setDockButton(bool active, bool docked = false, int direction = DOCK_RIGHT) 115 | { 116 | if (active) 117 | { 118 | if (!m_bDockButton) 119 | { 120 | ui->dockButton->setDisabled(false); 121 | ui->dockButton->setHidden(false); 122 | 123 | m_bDockButton = true; 124 | } 125 | 126 | if (docked) 127 | { 128 | switch (direction) 129 | { 130 | case DOCK_RIGHT: 131 | ui->dockButton->setIcon(QIcon(":/images/icon_undock_r.png")); 132 | break; 133 | 134 | case DOCK_LEFT: 135 | ui->dockButton->setIcon(QIcon(":/images/icon_undock_l.png")); 136 | break; 137 | 138 | case DOCK_TOP: 139 | ui->dockButton->setIcon(QIcon(":/images/icon_undock_t.png")); 140 | break; 141 | 142 | case DOCK_BOTTOM: 143 | ui->dockButton->setIcon(QIcon(":/images/icon_undock_b.png")); 144 | break; 145 | 146 | default: 147 | return; 148 | } 149 | 150 | ui->dockButton->setToolTip("Undock"); 151 | } 152 | else 153 | { 154 | switch (direction) 155 | { 156 | case DOCK_RIGHT: 157 | ui->dockButton->setIcon(QIcon(":/images/icon_dock_r.png")); 158 | break; 159 | 160 | case DOCK_LEFT: 161 | ui->dockButton->setIcon(QIcon(":/images/icon_dock_l.png")); 162 | break; 163 | 164 | case DOCK_TOP: 165 | ui->dockButton->setIcon(QIcon(":/images/icon_dock_t.png")); 166 | break; 167 | 168 | case DOCK_BOTTOM: 169 | ui->dockButton->setIcon(QIcon(":/images/icon_dock_b.png")); 170 | break; 171 | 172 | default: 173 | return; 174 | } 175 | 176 | ui->dockButton->setToolTip("Dock"); 177 | } 178 | } 179 | else 180 | { 181 | if (m_bDockButton) 182 | { 183 | ui->dockButton->setHidden(true); 184 | ui->dockButton->setDisabled(true); 185 | 186 | m_bDockButton = false; 187 | } 188 | } 189 | } 190 | 191 | void FramelessWindow::setResizeLeft(bool enabled) 192 | { 193 | resize_left = enabled; 194 | 195 | updateSizePolicy(); 196 | } 197 | 198 | void FramelessWindow::setResizeRight(bool enabled) 199 | { 200 | resize_right = enabled; 201 | 202 | updateSizePolicy(); 203 | } 204 | 205 | void FramelessWindow::setResizeTop(bool enabled) 206 | { 207 | resize_top = enabled; 208 | 209 | updateSizePolicy(); 210 | } 211 | 212 | void FramelessWindow::setResizeBottom(bool enabled) 213 | { 214 | resize_bottom = enabled; 215 | 216 | updateSizePolicy(); 217 | } 218 | 219 | void FramelessWindow::setResizeHorizontal(bool enabled) 220 | { 221 | resize_left = enabled; 222 | resize_right = enabled; 223 | 224 | updateSizePolicy(); 225 | } 226 | 227 | void FramelessWindow::setResizeVertical(bool enabled) 228 | { 229 | resize_top = enabled; 230 | resize_bottom = enabled; 231 | 232 | updateSizePolicy(); 233 | } 234 | 235 | void FramelessWindow::setResize(bool enabled) 236 | { 237 | resize_left = enabled; 238 | resize_right = enabled; 239 | resize_top = enabled; 240 | resize_bottom = enabled; 241 | 242 | updateSizePolicy(); 243 | } 244 | 245 | void FramelessWindow::setBorderStyle(QString style) 246 | { 247 | ui->windowFrame->setStyleSheet(style); 248 | } 249 | 250 | int FramelessWindow::getFullButtonWidth() const 251 | { 252 | int ret = 0; 253 | 254 | if (ui->closeButton->isVisible()) 255 | { 256 | ret += ui->closeButton->width(); 257 | } 258 | 259 | if (ui->minimizeButton->isVisible()) 260 | { 261 | ret += ui->minimizeButton->width(); 262 | } 263 | 264 | if (ui->dockButton->isVisible()) 265 | { 266 | ret += ui->dockButton->width(); 267 | } 268 | 269 | return ret; 270 | } 271 | 272 | int FramelessWindow::getFullButtonHeight() const 273 | { 274 | int ret = 0; 275 | 276 | if (ui->closeButton->isVisible()) 277 | { 278 | ret = ui->closeButton->height(); 279 | } 280 | else if (ui->minimizeButton->isVisible()) 281 | { 282 | ret = ui->minimizeButton->height(); 283 | } 284 | else if (ui->dockButton->isVisible()) 285 | { 286 | ret = ui->dockButton->height(); 287 | } 288 | 289 | return ret; 290 | } 291 | 292 | int FramelessWindow::getButtonCount() const 293 | { 294 | int ret = 0; 295 | 296 | if (ui->closeButton->isVisible()) 297 | { 298 | ++ret; 299 | } 300 | 301 | if (ui->minimizeButton->isVisible()) 302 | { 303 | ++ret; 304 | } 305 | 306 | if (ui->dockButton->isVisible()) 307 | { 308 | ++ret; 309 | } 310 | 311 | return ret; 312 | } 313 | 314 | void FramelessWindow::setWindowTitle(const QString & text) 315 | { 316 | ui->titleText->setText(text); 317 | } 318 | 319 | void FramelessWindow::setWindowIcon(const QIcon & ico) 320 | { 321 | ui->icon->setPixmap(ico.pixmap(16, 16)); 322 | } 323 | 324 | void FramelessWindow::styleWindow(bool bActive, bool bNoState) 325 | { 326 | if (bActive) 327 | { 328 | if (bNoState) 329 | { 330 | layout()->setContentsMargins(15, 15, 15, 15); 331 | 332 | ui->windowTitlebar->setStyleSheet(QStringLiteral( 333 | "#windowTitlebar{border: 0px none palette(shadow); " 334 | "border-top-left-radius:5px; border-top-right-radius:5px; " 335 | "background-color:palette(shadow); height:20px;}") 336 | ); 337 | 338 | ui->windowFrame->setStyleSheet(QStringLiteral( 339 | "#windowFrame{border:1px solid palette(highlight); border-radius:5px " 340 | "5px 5px 5px; background-color:palette(Window);}") 341 | ); 342 | 343 | QGraphicsEffect * oldShadow = ui->windowFrame->graphicsEffect(); 344 | if (oldShadow) 345 | { 346 | delete oldShadow; 347 | } 348 | 349 | QGraphicsDropShadowEffect * windowShadow = new(std::nothrow) QGraphicsDropShadowEffect; 350 | if (windowShadow) 351 | { 352 | windowShadow->setBlurRadius(9.0); 353 | windowShadow->setColor(palette().color(QPalette::Highlight)); 354 | windowShadow->setOffset(0.0); 355 | 356 | ui->windowFrame->setGraphicsEffect(windowShadow); 357 | } 358 | else 359 | { 360 | ui->windowFrame->setGraphicsEffect(nullptr); 361 | } 362 | } 363 | else 364 | { 365 | layout()->setContentsMargins(0, 0, 0, 0); 366 | 367 | ui->windowTitlebar->setStyleSheet(QStringLiteral( 368 | "#windowTitlebar{border: 0px none palette(shadow); " 369 | "border-top-left-radius:0px; border-top-right-radius:0px; " 370 | "background-color:palette(shadow); height:20px;}") 371 | ); 372 | 373 | ui->windowFrame->setStyleSheet(QStringLiteral( 374 | "#windowFrame{border:1px solid palette(dark); border-radius:0px 0px " 375 | "0px 0px; background-color:palette(Window);}") 376 | ); 377 | 378 | QGraphicsEffect * oldShadow = ui->windowFrame->graphicsEffect(); 379 | if (oldShadow) 380 | { 381 | delete oldShadow; 382 | } 383 | 384 | ui->windowFrame->setGraphicsEffect(nullptr); 385 | } 386 | } 387 | else 388 | { 389 | if (bNoState) 390 | { 391 | layout()->setContentsMargins(15, 15, 15, 15); 392 | 393 | ui->windowTitlebar->setStyleSheet(QStringLiteral( 394 | "#windowTitlebar{border: 0px none palette(shadow); " 395 | "border-top-left-radius:5px; border-top-right-radius:5px; " 396 | "background-color:palette(dark); height:20px;}") 397 | ); 398 | 399 | ui->windowFrame->setStyleSheet(QStringLiteral( 400 | "#windowFrame{border:1px solid #000000; border-radius:5px 5px 5px " 401 | "5px; background-color:palette(Window);}") 402 | ); 403 | 404 | QGraphicsEffect * oldShadow = ui->windowFrame->graphicsEffect(); 405 | if (oldShadow) 406 | { 407 | delete oldShadow; 408 | } 409 | 410 | QGraphicsDropShadowEffect * windowShadow = new(std::nothrow) QGraphicsDropShadowEffect; 411 | if (windowShadow) 412 | { 413 | windowShadow->setBlurRadius(9.0); 414 | windowShadow->setColor(palette().color(QPalette::Shadow)); 415 | windowShadow->setOffset(0.0); 416 | 417 | ui->windowFrame->setGraphicsEffect(windowShadow); 418 | } 419 | else 420 | { 421 | ui->windowFrame->setGraphicsEffect(nullptr); 422 | } 423 | } 424 | else 425 | { 426 | layout()->setContentsMargins(0, 0, 0, 0); 427 | 428 | ui->windowTitlebar->setStyleSheet(QStringLiteral( 429 | "#titlebarWidget{border: 0px none palette(shadow); " 430 | "border-top-left-radius:0px; border-top-right-radius:0px; " 431 | "background-color:palette(dark); height:20px;}") 432 | ); 433 | 434 | ui->windowFrame->setStyleSheet(QStringLiteral( 435 | "#windowFrame{border:1px solid palette(shadow); border-radius:0px " 436 | "0px 0px 0px; background-color:palette(Window);}") 437 | ); 438 | 439 | QGraphicsEffect * oldShadow = ui->windowFrame->graphicsEffect(); 440 | if (oldShadow) 441 | { 442 | delete oldShadow; 443 | } 444 | 445 | ui->windowFrame->setGraphicsEffect(nullptr); 446 | } 447 | } 448 | } 449 | 450 | void FramelessWindow::updateSizePolicy() 451 | { 452 | QSizePolicy policy; 453 | 454 | if (resize_left || resize_right) 455 | { 456 | policy.setHorizontalPolicy(QSizePolicy::Policy::MinimumExpanding); 457 | } 458 | else 459 | { 460 | policy.setHorizontalPolicy(QSizePolicy::Policy::Fixed); 461 | } 462 | 463 | if (resize_top || resize_bottom) 464 | { 465 | policy.setVerticalPolicy(QSizePolicy::Policy::MinimumExpanding); 466 | } 467 | else 468 | { 469 | policy.setVerticalPolicy(QSizePolicy::Policy::Fixed); 470 | } 471 | 472 | this->setSizePolicy(policy); 473 | this->ui->windowFrame->setSizePolicy(policy); 474 | this->ui->windowContent->setSizePolicy(policy); 475 | 476 | if (content) 477 | { 478 | this->content->setSizePolicy(policy); 479 | } 480 | } 481 | 482 | void FramelessWindow::on_applicationStateChanged(Qt::ApplicationState state) 483 | { 484 | if (windowState().testFlag(Qt::WindowNoState)) 485 | { 486 | if (state == Qt::ApplicationActive) 487 | { 488 | styleWindow(true, true); 489 | } 490 | else 491 | { 492 | styleWindow(false, true); 493 | } 494 | } 495 | else if (windowState().testFlag(Qt::WindowFullScreen)) 496 | { 497 | if (state == Qt::ApplicationActive) 498 | { 499 | styleWindow(true, false); 500 | } 501 | else 502 | { 503 | styleWindow(false, false); 504 | } 505 | } 506 | } 507 | 508 | void FramelessWindow::on_dockButton_clicked() 509 | { 510 | emit dockButton_clicked(); 511 | } 512 | 513 | void FramelessWindow::on_minimizeButton_clicked() 514 | { 515 | setWindowState(Qt::WindowMinimized); 516 | } 517 | 518 | void FramelessWindow::on_closeButton_clicked() 519 | { 520 | emit closeButton_clicked(); 521 | 522 | hide(); 523 | } 524 | 525 | void FramelessWindow::checkBorderDragging(QMouseEvent * event) 526 | { 527 | QPoint globalMousePos = event->globalPos(); 528 | if (m_bMousePressed) 529 | { 530 | QScreen * screen = QGuiApplication::primaryScreen(); 531 | 532 | // available geometry excludes taskbar 533 | QRect availGeometry = screen->availableGeometry(); 534 | int h = availGeometry.height(); 535 | int w = availGeometry.width(); 536 | 537 | QList screenlist = screen->virtualSiblings(); 538 | if (screenlist.contains(screen)) 539 | { 540 | QSize sz = screen->size(); 541 | h = sz.height() + 50; 542 | w = sz.width(); 543 | } 544 | 545 | // top right corner 546 | if (m_bDragTop && m_bDragRight) 547 | { 548 | int diff = globalMousePos.x() - (m_StartGeometry.x() + m_StartGeometry.width()); 549 | int neww = m_StartGeometry.width() + diff; 550 | diff = globalMousePos.y() - m_StartGeometry.y(); 551 | int newy = m_StartGeometry.y() + diff; 552 | 553 | if (neww > 0 && newy > 0 && newy < h - 50) 554 | { 555 | QRect newg = m_StartGeometry; 556 | newg.setWidth(neww); 557 | newg.setX(m_StartGeometry.x()); 558 | newg.setY(newy); 559 | setGeometry(newg); 560 | } 561 | } 562 | // top left corner 563 | else if (m_bDragTop && m_bDragLeft) 564 | { 565 | int diff = globalMousePos.y() - m_StartGeometry.y(); 566 | int newy = m_StartGeometry.y() + diff; 567 | diff = globalMousePos.x() - m_StartGeometry.x(); 568 | int newx = m_StartGeometry.x() + diff; 569 | 570 | if (newy > 0 && newx > 0) 571 | { 572 | QRect newg = m_StartGeometry; 573 | newg.setY(newy); 574 | newg.setX(newx); 575 | setGeometry(newg); 576 | } 577 | } 578 | // bottom right corner 579 | else if (m_bDragBottom && m_bDragLeft) 580 | { 581 | int diff = globalMousePos.y() - (m_StartGeometry.y() + m_StartGeometry.height()); 582 | int newh = m_StartGeometry.height() + diff; 583 | diff = globalMousePos.x() - m_StartGeometry.x(); 584 | int newx = m_StartGeometry.x() + diff; 585 | 586 | if (newh > 0 && newx > 0) 587 | { 588 | QRect newg = m_StartGeometry; 589 | newg.setX(newx); 590 | newg.setHeight(newh); 591 | setGeometry(newg); 592 | } 593 | } 594 | else if (m_bDragTop) 595 | { 596 | int diff = globalMousePos.y() - m_StartGeometry.y(); 597 | int newh = m_StartGeometry.height() - diff / 2; 598 | 599 | if (newh > 0 && newh < h - 50) 600 | { 601 | int old_height = 0; 602 | if (content) 603 | { 604 | old_height = content->height(); 605 | } 606 | 607 | QRect newg = m_StartGeometry; 608 | newg.setHeight(newh); 609 | setGeometry(newg); 610 | 611 | int new_height = 0; 612 | if (content) 613 | { 614 | new_height = content->height(); 615 | } 616 | 617 | if (old_height != new_height || !content) 618 | { 619 | newg.setY(globalMousePos.y()); 620 | setGeometry(newg); 621 | } 622 | } 623 | } 624 | else if (m_bDragLeft) 625 | { 626 | int diff = globalMousePos.x() - m_StartGeometry.x(); 627 | int newx = m_StartGeometry.x() + diff; 628 | 629 | if (newx > 0 && newx < w - 50) 630 | { 631 | QRect newg = m_StartGeometry; 632 | newg.setX(newx); 633 | setGeometry(newg); 634 | } 635 | } 636 | else if (m_bDragRight) 637 | { 638 | int diff = globalMousePos.x() - (m_StartGeometry.x() + m_StartGeometry.width()); 639 | int neww = m_StartGeometry.width() + diff; 640 | 641 | if (neww > 0) 642 | { 643 | QRect newg = m_StartGeometry; 644 | newg.setWidth(neww); 645 | newg.setX(m_StartGeometry.x()); 646 | setGeometry(newg); 647 | } 648 | } 649 | else if (m_bDragBottom) 650 | { 651 | int diff = globalMousePos.y() - (m_StartGeometry.y() + m_StartGeometry.height()); 652 | int newh = m_StartGeometry.height() + diff; 653 | 654 | if (newh > 0) 655 | { 656 | QRect newg = m_StartGeometry; 657 | newg.setHeight(newh); 658 | newg.setY(m_StartGeometry.y()); 659 | setGeometry(newg); 660 | } 661 | } 662 | } 663 | else 664 | { 665 | // no mouse pressed 666 | if (leftBorderHit(globalMousePos) && topBorderHit(globalMousePos)) 667 | { 668 | setCursor(Qt::SizeFDiagCursor); 669 | } 670 | else if (rightBorderHit(globalMousePos) && topBorderHit(globalMousePos)) 671 | { 672 | setCursor(Qt::SizeBDiagCursor); 673 | } 674 | else if (leftBorderHit(globalMousePos) && bottomBorderHit(globalMousePos)) 675 | { 676 | setCursor(Qt::SizeBDiagCursor); 677 | } 678 | else 679 | { 680 | if (topBorderHit(globalMousePos)) 681 | { 682 | setCursor(Qt::SizeVerCursor); 683 | } 684 | else if (leftBorderHit(globalMousePos)) 685 | { 686 | setCursor(Qt::SizeHorCursor); 687 | } 688 | else if (rightBorderHit(globalMousePos)) 689 | { 690 | setCursor(Qt::SizeHorCursor); 691 | } 692 | else if (bottomBorderHit(globalMousePos)) 693 | { 694 | setCursor(Qt::SizeVerCursor); 695 | } 696 | else 697 | { 698 | m_bDragTop = false; 699 | m_bDragLeft = false; 700 | m_bDragRight = false; 701 | m_bDragBottom = false; 702 | setCursor(Qt::ArrowCursor); 703 | } 704 | } 705 | } 706 | } 707 | 708 | // pos in global virtual desktop coordinates 709 | bool FramelessWindow::leftBorderHit(const QPoint & pos) 710 | { 711 | if (resize_left) 712 | { 713 | const QRect & rect = this->geometry(); 714 | if (pos.x() >= rect.x() && pos.x() <= rect.x() + CONST_DRAG_BORDER_SIZE) 715 | { 716 | return true; 717 | } 718 | } 719 | 720 | return false; 721 | } 722 | 723 | bool FramelessWindow::rightBorderHit(const QPoint & pos) 724 | { 725 | if (resize_right) 726 | { 727 | const QRect & rect = this->geometry(); 728 | int tmp = rect.x() + rect.width(); 729 | if (pos.x() <= tmp && pos.x() >= (tmp - CONST_DRAG_BORDER_SIZE)) 730 | { 731 | return true; 732 | } 733 | } 734 | 735 | return false; 736 | } 737 | 738 | bool FramelessWindow::topBorderHit(const QPoint & pos) 739 | { 740 | if (resize_top) 741 | { 742 | const QRect & rect = this->geometry(); 743 | if (pos.y() >= rect.y() && pos.y() <= rect.y() + CONST_DRAG_BORDER_SIZE) 744 | { 745 | return true; 746 | } 747 | } 748 | 749 | return false; 750 | } 751 | 752 | bool FramelessWindow::bottomBorderHit(const QPoint & pos) 753 | { 754 | if (resize_bottom) 755 | { 756 | const QRect & rect = this->geometry(); 757 | int tmp = rect.y() + rect.height(); 758 | if (pos.y() <= tmp && pos.y() >= (tmp - CONST_DRAG_BORDER_SIZE)) 759 | { 760 | return true; 761 | } 762 | } 763 | 764 | return false; 765 | } 766 | 767 | void FramelessWindow::mousePressEvent(QMouseEvent * event) 768 | { 769 | if (isMaximized()) 770 | { 771 | return; 772 | } 773 | 774 | m_bMousePressed = true; 775 | m_StartGeometry = this->geometry(); 776 | 777 | QPoint globalMousePos = mapToGlobal(QPoint(event->x(), event->y())); 778 | 779 | if (leftBorderHit(globalMousePos) && topBorderHit(globalMousePos)) 780 | { 781 | m_bDragTop = true; 782 | m_bDragLeft = true; 783 | setCursor(Qt::SizeFDiagCursor); 784 | } 785 | else if (rightBorderHit(globalMousePos) && topBorderHit(globalMousePos)) 786 | { 787 | m_bDragRight = true; 788 | m_bDragTop = true; 789 | setCursor(Qt::SizeBDiagCursor); 790 | } 791 | else if (leftBorderHit(globalMousePos) && bottomBorderHit(globalMousePos)) 792 | { 793 | m_bDragLeft = true; 794 | m_bDragBottom = true; 795 | setCursor(Qt::SizeBDiagCursor); 796 | } 797 | else 798 | { 799 | if (topBorderHit(globalMousePos)) 800 | { 801 | m_bDragTop = true; 802 | setCursor(Qt::SizeVerCursor); 803 | } 804 | else if (leftBorderHit(globalMousePos)) 805 | { 806 | m_bDragLeft = true; 807 | setCursor(Qt::SizeHorCursor); 808 | } 809 | else if (rightBorderHit(globalMousePos)) 810 | { 811 | m_bDragRight = true; 812 | setCursor(Qt::SizeHorCursor); 813 | } 814 | else if (bottomBorderHit(globalMousePos)) 815 | { 816 | m_bDragBottom = true; 817 | setCursor(Qt::SizeVerCursor); 818 | } 819 | } 820 | } 821 | 822 | void FramelessWindow::mouseReleaseEvent(QMouseEvent * event) 823 | { 824 | Q_UNUSED(event); 825 | 826 | if (isMaximized()) 827 | { 828 | return; 829 | } 830 | 831 | m_bMousePressed = false; 832 | bool bSwitchBackCursorNeeded = m_bDragTop || m_bDragLeft || m_bDragRight || m_bDragBottom; 833 | 834 | m_bDragTop = false; 835 | m_bDragLeft = false; 836 | m_bDragRight = false; 837 | m_bDragBottom = false; 838 | 839 | if (bSwitchBackCursorNeeded) 840 | { 841 | setCursor(Qt::ArrowCursor); 842 | } 843 | } 844 | 845 | bool FramelessWindow::eventFilter(QObject * obj, QEvent * event) 846 | { 847 | if (event->type() == QEvent::MouseMove) 848 | { 849 | QMouseEvent * pMouse = dynamic_cast(event); 850 | if (pMouse) 851 | { 852 | checkBorderDragging(pMouse); 853 | } 854 | } 855 | else if (event->type() == QEvent::MouseButtonPress && obj == ui->windowTitlebar) 856 | { 857 | QMouseEvent * pMouse = dynamic_cast(event); 858 | if (pMouse) 859 | { 860 | mousePressEvent(pMouse); 861 | emit windowTitlebar_clicked(); 862 | } 863 | } 864 | else if (event->type() == QEvent::MouseButtonRelease) 865 | { 866 | if (m_bMousePressed) 867 | { 868 | QMouseEvent * pMouse = dynamic_cast(event); 869 | if (pMouse) 870 | { 871 | mouseReleaseEvent(pMouse); 872 | emit windowTitlebar_released(); 873 | } 874 | } 875 | } 876 | 877 | return QWidget::eventFilter(obj, event); 878 | } -------------------------------------------------------------------------------- /GH Injector GUI/framelesswindow/framelesswindow.h: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guided-hacking/GH-Injector-GUI/801280f8d705b4cc9474169940cbc5852e11df08/GH Injector GUI/framelesswindow/framelesswindow.h -------------------------------------------------------------------------------- /GH Injector GUI/framelesswindow/framelesswindow.ui: -------------------------------------------------------------------------------- 1 | 2 | 3 | FramelessWindow 4 | 5 | 6 | 7 | 0 8 | 0 9 | 292 10 | 29 11 | 12 | 13 | 14 | 15 | 0 16 | 0 17 | 18 | 19 | 20 | 21 | 22 | 23 | false 24 | 25 | 26 | 27 | 0 28 | 29 | 30 | QLayout::SetMinimumSize 31 | 32 | 33 | 0 34 | 35 | 36 | 0 37 | 38 | 39 | 0 40 | 41 | 42 | 0 43 | 44 | 45 | 46 | 47 | 48 | 0 49 | 0 50 | 51 | 52 | 53 | false 54 | 55 | 56 | #windowFrame{border:1px solid palette(highlight); border-radius:5px 5px 5px 5px; background-color:palette(Window);} 57 | 58 | 59 | 60 | 0 61 | 62 | 63 | QLayout::SetMinimumSize 64 | 65 | 66 | 1 67 | 68 | 69 | 1 70 | 71 | 72 | 1 73 | 74 | 75 | 1 76 | 77 | 78 | 79 | 80 | 81 | 0 82 | 0 83 | 84 | 85 | 86 | false 87 | 88 | 89 | #windowTitlebar{border: 0px none palette(base); border-top-left-radius:5px; border-top-right-radius:5px; background-color:palette(shadow); height:20px;} 90 | 91 | 92 | 93 | 0 94 | 95 | 96 | QLayout::SetMinimumSize 97 | 98 | 99 | 0 100 | 101 | 102 | 0 103 | 104 | 105 | 0 106 | 107 | 108 | 0 109 | 110 | 111 | 112 | 113 | 114 | 0 115 | 0 116 | 117 | 118 | 119 | 120 | 4 121 | 0 122 | 123 | 124 | 125 | 126 | 4 127 | 16777215 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 0 137 | 0 138 | 139 | 140 | 141 | 142 | 16 143 | 16 144 | 145 | 146 | 147 | 148 | 16 149 | 16 150 | 151 | 152 | 153 | Qt::NoContextMenu 154 | 155 | 156 | #icon {background-color:palette(shadow);} 157 | 158 | 159 | 160 | 161 | 162 | 163 | 164 | 0 165 | 0 166 | 167 | 168 | 169 | 170 | 75 171 | true 172 | 173 | 174 | 175 | padding-left:5px; 176 | color:rgb(153,153,153); 177 | 178 | 179 | 180 | 181 | 182 | Qt::AlignBottom|Qt::AlignLeading|Qt::AlignLeft 183 | 184 | 185 | 186 | 187 | 188 | 189 | false 190 | 191 | 192 | 193 | 27 194 | 27 195 | 196 | 197 | 198 | 199 | 27 200 | 27 201 | 202 | 203 | 204 | Dock 205 | 206 | 207 | #dockButton{ 208 | background-color:none; 209 | border:none; 210 | width:16px; 211 | height:16px; 212 | padding:4px; 213 | } 214 | #dockButton:hover{ 215 | background-color:palette(highlight); 216 | } 217 | #dockButton:pressed{ 218 | background-color:palette(alternate-base); 219 | } 220 | 221 | 222 | 223 | 224 | 225 | 226 | 227 | 228 | 229 | 230 | 0 231 | 0 232 | 233 | 234 | 235 | 236 | 75 237 | true 238 | 239 | 240 | 241 | Minimize 242 | 243 | 244 | #minimizeButton{ 245 | background-color:none; 246 | border:none; 247 | width:16px; 248 | height:16px; 249 | padding:4px; 250 | image:url(:/images/icon_window_minimize.png); 251 | } 252 | #minimizeButton:hover{ 253 | background-color:palette(highlight); 254 | } 255 | #minimizeButton:pressed{ 256 | background-color:palette(alternate-base); 257 | } 258 | 259 | 260 | 261 | 262 | 263 | 264 | 265 | 266 | 267 | 268 | 0 269 | 0 270 | 271 | 272 | 273 | 274 | 75 275 | true 276 | 277 | 278 | 279 | Close 280 | 281 | 282 | #closeButton{ 283 | background-color:none; 284 | border:none; 285 | width:16px; 286 | height:16px; 287 | padding:4px; 288 | image:url(:/images/icon_window_close.png); 289 | border-top-right-radius: 5px; 290 | } 291 | #closeButton:hover{ 292 | background-color: rgb(232, 17, 35); 293 | } 294 | #closeButton:pressed{ 295 | background-color: rgb(241, 112, 122); 296 | } 297 | 298 | 299 | 300 | 301 | 302 | 303 | 304 | 305 | 306 | 307 | 0 308 | 0 309 | 310 | 311 | 312 | false 313 | 314 | 315 | #windowContent{ 316 | border: 0px none palette(base); 317 | border-radius:0px 0px 5px 5px; 318 | } 319 | 320 | 321 | 322 | 0 323 | 324 | 325 | QLayout::SetMinimumSize 326 | 327 | 328 | 0 329 | 330 | 331 | 0 332 | 333 | 334 | 0 335 | 336 | 337 | 0 338 | 339 | 340 | 341 | 342 | 343 | 344 | 345 | 346 | 347 | 348 | 349 | 350 | WindowDragger 351 | QWidget 352 |
windowdragger.h
353 | 1 354 |
355 |
356 | 357 | 358 | 359 | 360 |
361 | -------------------------------------------------------------------------------- /GH Injector GUI/framelesswindow/windowdragger.cpp: -------------------------------------------------------------------------------- 1 | #include "..\pch.h" 2 | 3 | /* 4 | ############################################################################### 5 | # # 6 | # The MIT License # 7 | # # 8 | # Copyright (C) 2017 by Juergen Skrotzky (JorgenVikingGod@gmail.com) # 9 | # >> https://github.com/Jorgen-VikingGod # 10 | # # 11 | # Sources: https://github.com/Jorgen-VikingGod/Qt-Frameless-Window-DarkStyle # 12 | # # 13 | ############################################################################### 14 | */ 15 | 16 | #include "windowdragger.h" 17 | 18 | WindowDragger::WindowDragger(QWidget * parent) : QWidget(parent) 19 | { 20 | mousePressed = false; 21 | } 22 | 23 | void WindowDragger::mousePressEvent(QMouseEvent * event) 24 | { 25 | mousePressed = true; 26 | mousePos = event->globalPos(); 27 | 28 | QWidget * parent = parentWidget(); 29 | if (parent) 30 | { 31 | parent = parent->parentWidget(); 32 | wndPos = parent->pos(); 33 | } 34 | } 35 | 36 | void WindowDragger::mouseMoveEvent(QMouseEvent * event) 37 | { 38 | QWidget * parent = parentWidget(); 39 | if (parent) 40 | { 41 | parent = parent->parentWidget(); 42 | } 43 | 44 | if (parent && mousePressed) 45 | { 46 | parent->move(wndPos + (event->globalPos() - mousePos)); 47 | } 48 | } 49 | 50 | void WindowDragger::mouseReleaseEvent(QMouseEvent * event) 51 | { 52 | Q_UNUSED(event); 53 | 54 | mousePressed = false; 55 | } 56 | 57 | void WindowDragger::paintEvent(QPaintEvent * event) 58 | { 59 | Q_UNUSED(event); 60 | 61 | QStyleOption styleOption; 62 | styleOption.initFrom(this); 63 | QPainter painter(this); 64 | style()->drawPrimitive(QStyle::PE_Widget, &styleOption, &painter, this); 65 | } 66 | 67 | void WindowDragger::mouseDoubleClickEvent(QMouseEvent * event) 68 | { 69 | Q_UNUSED(event); 70 | 71 | emit doubleClicked(); 72 | } -------------------------------------------------------------------------------- /GH Injector GUI/framelesswindow/windowdragger.h: -------------------------------------------------------------------------------- 1 | /* 2 | ############################################################################### 3 | # # 4 | # The MIT License # 5 | # # 6 | # Copyright (C) 2017 by Juergen Skrotzky (JorgenVikingGod@gmail.com) # 7 | # >> https://github.com/Jorgen-VikingGod # 8 | # # 9 | # Sources: https://github.com/Jorgen-VikingGod/Qt-Frameless-Window-DarkStyle # 10 | # # 11 | ############################################################################### 12 | */ 13 | 14 | #ifndef WINDOWDRAGGER_H 15 | #define WINDOWDRAGGER_H 16 | 17 | #include "..\pch.h" 18 | 19 | class WindowDragger : public QWidget 20 | { 21 | Q_OBJECT 22 | 23 | public: 24 | explicit WindowDragger(QWidget * parent = Q_NULLPTR); 25 | virtual ~WindowDragger() 26 | { 27 | } 28 | 29 | signals: 30 | void doubleClicked(); 31 | 32 | protected: 33 | void mousePressEvent(QMouseEvent * event); 34 | void mouseMoveEvent(QMouseEvent * event); 35 | void mouseReleaseEvent(QMouseEvent * event); 36 | void mouseDoubleClickEvent(QMouseEvent * event); 37 | void paintEvent(QPaintEvent * event); 38 | 39 | protected: 40 | QPoint mousePos; 41 | QPoint wndPos; 42 | bool mousePressed; 43 | }; 44 | 45 | #endif // WINDOWDRAGGER_H -------------------------------------------------------------------------------- /GH Injector GUI/gh_resource/Console.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guided-hacking/GH-Injector-GUI/801280f8d705b4cc9474169940cbc5852e11df08/GH Injector GUI/gh_resource/Console.ico -------------------------------------------------------------------------------- /GH Injector GUI/gh_resource/DragDrop Icon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guided-hacking/GH-Injector-GUI/801280f8d705b4cc9474169940cbc5852e11df08/GH Injector GUI/gh_resource/DragDrop Icon.ico -------------------------------------------------------------------------------- /GH Injector GUI/gh_resource/Error Icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guided-hacking/GH-Injector-GUI/801280f8d705b4cc9474169940cbc5852e11df08/GH Injector GUI/gh_resource/Error Icon.png -------------------------------------------------------------------------------- /GH Injector GUI/gh_resource/GH Banner.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guided-hacking/GH-Injector-GUI/801280f8d705b4cc9474169940cbc5852e11df08/GH Injector GUI/gh_resource/GH Banner.png -------------------------------------------------------------------------------- /GH Injector GUI/gh_resource/GH Icon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guided-hacking/GH-Injector-GUI/801280f8d705b4cc9474169940cbc5852e11df08/GH Injector GUI/gh_resource/GH Icon.ico -------------------------------------------------------------------------------- /GH Injector GUI/gh_resource/Generic Icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guided-hacking/GH-Injector-GUI/801280f8d705b4cc9474169940cbc5852e11df08/GH Injector GUI/gh_resource/Generic Icon.png -------------------------------------------------------------------------------- /GH Injector GUI/gh_resource/LUL Icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guided-hacking/GH-Injector-GUI/801280f8d705b4cc9474169940cbc5852e11df08/GH Injector GUI/gh_resource/LUL Icon.png -------------------------------------------------------------------------------- /GH Injector GUI/gh_resource/Log Icon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guided-hacking/GH-Injector-GUI/801280f8d705b4cc9474169940cbc5852e11df08/GH Injector GUI/gh_resource/Log Icon.ico -------------------------------------------------------------------------------- /GH Injector GUI/gh_resource/cog.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guided-hacking/GH-Injector-GUI/801280f8d705b4cc9474169940cbc5852e11df08/GH Injector GUI/gh_resource/cog.ico -------------------------------------------------------------------------------- /GH Injector GUI/gh_resource/console.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guided-hacking/GH-Injector-GUI/801280f8d705b4cc9474169940cbc5852e11df08/GH Injector GUI/gh_resource/console.png -------------------------------------------------------------------------------- /GH Injector GUI/images/icon_dock_b.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guided-hacking/GH-Injector-GUI/801280f8d705b4cc9474169940cbc5852e11df08/GH Injector GUI/images/icon_dock_b.png -------------------------------------------------------------------------------- /GH Injector GUI/images/icon_dock_l.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guided-hacking/GH-Injector-GUI/801280f8d705b4cc9474169940cbc5852e11df08/GH Injector GUI/images/icon_dock_l.png -------------------------------------------------------------------------------- /GH Injector GUI/images/icon_dock_r.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guided-hacking/GH-Injector-GUI/801280f8d705b4cc9474169940cbc5852e11df08/GH Injector GUI/images/icon_dock_r.png -------------------------------------------------------------------------------- /GH Injector GUI/images/icon_dock_t.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guided-hacking/GH-Injector-GUI/801280f8d705b4cc9474169940cbc5852e11df08/GH Injector GUI/images/icon_dock_t.png -------------------------------------------------------------------------------- /GH Injector GUI/images/icon_undock_b.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guided-hacking/GH-Injector-GUI/801280f8d705b4cc9474169940cbc5852e11df08/GH Injector GUI/images/icon_undock_b.png -------------------------------------------------------------------------------- /GH Injector GUI/images/icon_undock_l.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guided-hacking/GH-Injector-GUI/801280f8d705b4cc9474169940cbc5852e11df08/GH Injector GUI/images/icon_undock_l.png -------------------------------------------------------------------------------- /GH Injector GUI/images/icon_undock_r.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guided-hacking/GH-Injector-GUI/801280f8d705b4cc9474169940cbc5852e11df08/GH Injector GUI/images/icon_undock_r.png -------------------------------------------------------------------------------- /GH Injector GUI/images/icon_undock_t.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guided-hacking/GH-Injector-GUI/801280f8d705b4cc9474169940cbc5852e11df08/GH Injector GUI/images/icon_undock_t.png -------------------------------------------------------------------------------- /GH Injector GUI/images/icon_window_close.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guided-hacking/GH-Injector-GUI/801280f8d705b4cc9474169940cbc5852e11df08/GH Injector GUI/images/icon_window_close.png -------------------------------------------------------------------------------- /GH Injector GUI/images/icon_window_maximize.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guided-hacking/GH-Injector-GUI/801280f8d705b4cc9474169940cbc5852e11df08/GH Injector GUI/images/icon_window_maximize.png -------------------------------------------------------------------------------- /GH Injector GUI/images/icon_window_minimize.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guided-hacking/GH-Injector-GUI/801280f8d705b4cc9474169940cbc5852e11df08/GH Injector GUI/images/icon_window_minimize.png -------------------------------------------------------------------------------- /GH Injector GUI/images/icon_window_restore.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guided-hacking/GH-Injector-GUI/801280f8d705b4cc9474169940cbc5852e11df08/GH Injector GUI/images/icon_window_restore.png -------------------------------------------------------------------------------- /GH Injector GUI/main.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guided-hacking/GH-Injector-GUI/801280f8d705b4cc9474169940cbc5852e11df08/GH Injector GUI/main.cpp -------------------------------------------------------------------------------- /GH Injector GUI/mainwindow.cpp: -------------------------------------------------------------------------------- 1 | #include "pch.h" 2 | 3 | /* 4 | ############################################################################### 5 | # # 6 | # The MIT License # 7 | # # 8 | # Copyright (C) 2017 by Juergen Skrotzky (JorgenVikingGod@gmail.com) # 9 | # >> https://github.com/Jorgen-VikingGod # 10 | # # 11 | # Sources: https://github.com/Jorgen-VikingGod/Qt-Frameless-Window-DarkStyle # 12 | # # 13 | ############################################################################### 14 | */ 15 | 16 | #include "mainwindow.h" 17 | #include "ui_mainwindow.h" 18 | 19 | MainWindow::MainWindow(QWidget * parent) 20 | : QMainWindow(parent /*, Qt::FramelessWindowHint*/), 21 | ui(new(std::nothrow) Ui::MainWindow) 22 | { 23 | ui->setupUi(this); 24 | } 25 | 26 | MainWindow::~MainWindow() 27 | { 28 | delete ui; 29 | } -------------------------------------------------------------------------------- /GH Injector GUI/mainwindow.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | /* 4 | ############################################################################### 5 | # # 6 | # The MIT License # 7 | # # 8 | # Copyright (C) 2017 by Juergen Skrotzky (JorgenVikingGod@gmail.com) # 9 | # >> https://github.com/Jorgen-VikingGod # 10 | # # 11 | # Sources: https://github.com/Jorgen-VikingGod/Qt-Frameless-Window-DarkStyle # 12 | # # 13 | ############################################################################### 14 | */ 15 | 16 | #include "pch.h" 17 | 18 | namespace Ui 19 | { 20 | class MainWindow; 21 | } 22 | 23 | class MainWindow : public QMainWindow 24 | { 25 | Q_OBJECT 26 | 27 | public: 28 | explicit MainWindow(QWidget * parent = Q_NULLPTR); 29 | ~MainWindow(); 30 | 31 | private: 32 | Ui::MainWindow * ui; 33 | }; -------------------------------------------------------------------------------- /GH Injector GUI/mainwindow.qrc: -------------------------------------------------------------------------------- 1 | 2 | 3 | images/icon_window_close.png 4 | images/icon_window_maximize.png 5 | images/icon_window_minimize.png 6 | images/icon_window_restore.png 7 | darkstyle/darkstyle.qss 8 | darkstyle/icon_branch_closed.png 9 | darkstyle/icon_branch_end.png 10 | darkstyle/icon_branch_more.png 11 | darkstyle/icon_branch_open.png 12 | darkstyle/icon_checkbox_checked.png 13 | darkstyle/icon_checkbox_checked_disabled.png 14 | darkstyle/icon_checkbox_checked_pressed.png 15 | darkstyle/icon_checkbox_indeterminate.png 16 | darkstyle/icon_checkbox_indeterminate_disabled.png 17 | darkstyle/icon_checkbox_indeterminate_pressed.png 18 | darkstyle/icon_checkbox_unchecked.png 19 | darkstyle/icon_checkbox_unchecked_disabled.png 20 | darkstyle/icon_checkbox_unchecked_pressed.png 21 | darkstyle/icon_close.png 22 | darkstyle/icon_radiobutton_checked.png 23 | darkstyle/icon_radiobutton_checked_disabled.png 24 | darkstyle/icon_radiobutton_checked_pressed.png 25 | darkstyle/icon_radiobutton_unchecked.png 26 | darkstyle/icon_radiobutton_unchecked_disabled.png 27 | darkstyle/icon_radiobutton_unchecked_pressed.png 28 | darkstyle/icon_restore.png 29 | darkstyle/icon_undock.png 30 | darkstyle/icon_vline.png 31 | images/icon_dock_l.png 32 | images/icon_undock_l.png 33 | images/icon_dock_b.png 34 | images/icon_dock_r.png 35 | images/icon_dock_t.png 36 | images/icon_undock_b.png 37 | images/icon_undock_r.png 38 | images/icon_undock_t.png 39 | 40 | 41 | gh_resource/GH Icon.ico 42 | gh_resource/Log Icon.ico 43 | gh_resource/LUL Icon.png 44 | gh_resource/Error Icon.png 45 | gh_resource/Generic Icon.png 46 | gh_resource/GH Banner.png 47 | gh_resource/Console.ico 48 | gh_resource/cog.ico 49 | 50 | 51 | -------------------------------------------------------------------------------- /GH Injector GUI/mainwindow.ui: -------------------------------------------------------------------------------- 1 | 2 | 3 | MainWindow 4 | 5 | 6 | MainWindow 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | Label 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | New Item 24 | 25 | 26 | 27 | 28 | New Item 2 29 | 30 | 31 | 32 | 33 | New Item 3 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | Qt::Horizontal 42 | 43 | 44 | 45 | 40 46 | 20 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | Disable Widgets 55 | 56 | 57 | false 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | GroupBox 67 | 68 | 69 | 70 | 71 | 72 | -10 73 | 74 | 75 | RadioButton 76 | 77 | 78 | true 79 | 80 | 81 | 82 | 83 | 84 | 85 | RadioButton 86 | 87 | 88 | 89 | 90 | 91 | 92 | RadioButton 93 | 94 | 95 | 96 | 97 | 98 | 99 | CheckBox 100 | 101 | 102 | true 103 | 104 | 105 | false 106 | 107 | 108 | false 109 | 110 | 111 | true 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | GroupBox 122 | 123 | 124 | 125 | 126 | 127 | PushButton 128 | 129 | 130 | 131 | 132 | 133 | 134 | PushButton 135 | 136 | 137 | true 138 | 139 | 140 | 141 | 142 | 143 | 144 | PushButton 145 | 146 | 147 | true 148 | 149 | 150 | 151 | 152 | 153 | 154 | PushButton 155 | 156 | 157 | true 158 | 159 | 160 | 161 | 162 | 163 | 164 | 165 | 166 | 167 | 1 168 | 169 | 170 | 171 | TextEdit 172 | 173 | 174 | 175 | 176 | 177 | <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> 178 | <html><head><meta name="qrichtext" content="1" /><style type="text/css"> 179 | p, li { white-space: pre-wrap; } 180 | </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> 181 | <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'.SF NS Text'; font-size:13pt;">test<br />test<br />test<br />test<br />test<br />test<br />test<br />test<br />test<br />test<br />test<br />test<br />test<br />test<br />test<br />test<br />test<br />test<br />test<br />test<br />test<br />test<br />test<br />test<br />test<br />test<br />test<br />test<br />test<br />test<br />test<br />test<br />test<br />test<br />test<br />test<br />test<br />test<br />test<br />test<br />test<br />test<br />test<br />test<br />test<br />test<br />test<br />test<br />test<br />test<br />test<br />test<br />test<br />test<br />test<br />test<br />test<br />test<br />test<br />test<br />test<br />test<br />test<br />test<br />test<br />test<br /></span></p></body></html> 182 | 183 | 184 | 185 | 186 | 187 | 188 | 189 | Tab Table 190 | 191 | 192 | 193 | 194 | 195 | 196 | 1 197 | 198 | 199 | 200 | 201 | 2 202 | 203 | 204 | 205 | 206 | 3 207 | 208 | 209 | 210 | 211 | 4 212 | 213 | 214 | 215 | 216 | 5 217 | 218 | 219 | 220 | 221 | 6 222 | 223 | 224 | 225 | 226 | 7 227 | 228 | 229 | 230 | 231 | 8 232 | 233 | 234 | 235 | 236 | 9 237 | 238 | 239 | 240 | 241 | 10 242 | 243 | 244 | 245 | 246 | 1 247 | 248 | 249 | 250 | 251 | 2 252 | 253 | 254 | 255 | 256 | 3 257 | 258 | 259 | 260 | 261 | 4 262 | 263 | 264 | 265 | 266 | 5 267 | 268 | 269 | 270 | 271 | 6 272 | 273 | 274 | 275 | 276 | 7 277 | 278 | 279 | 280 | 281 | 8 282 | 283 | 284 | 285 | 286 | 9 287 | 288 | 289 | 290 | 291 | 10 292 | 293 | 294 | 295 | 296 | Cell 1/1 297 | 298 | 299 | 300 | 301 | Cell 2/1 302 | 303 | 304 | 305 | 306 | Cell 1/2 307 | 308 | 309 | 310 | 311 | 312 | 313 | 314 | 315 | 316 | 317 | 318 | GroupBox 319 | 320 | 321 | true 322 | 323 | 324 | 325 | 326 | 327 | 30 328 | 329 | 330 | 331 | 332 | 333 | 334 | 335 | 336 | 337 | 60 338 | 339 | 340 | Qt::Horizontal 341 | 342 | 343 | 344 | 345 | 346 | 347 | 348 | 349 | 350 | 25 351 | 352 | 353 | Qt::Horizontal 354 | 355 | 356 | 357 | 358 | 359 | 360 | test 361 | 362 | 363 | QLineEdit::Password 364 | 365 | 366 | 367 | 368 | 369 | 370 | Qt::Vertical 371 | 372 | 373 | 374 | 20 375 | 40 376 | 377 | 378 | 379 | 380 | 381 | 382 | 383 | 384 | 385 | 386 | 24 387 | 388 | 389 | 390 | 391 | 392 | 393 | 394 | 395 | 0 396 | 0 397 | 514 398 | 21 399 | 400 | 401 | 402 | 403 | Test 404 | 405 | 406 | 407 | 408 | 409 | 410 | 411 | 412 | Test2 413 | 414 | 415 | 416 | Test2 417 | 418 | 419 | 420 | 421 | 422 | 423 | 424 | 425 | 426 | 427 | 428 | TopToolBarArea 429 | 430 | 431 | false 432 | 433 | 434 | 435 | 436 | 437 | 438 | 439 | 440 | Test 441 | 442 | 443 | 444 | 445 | true 446 | 447 | 448 | true 449 | 450 | 451 | Test 452 | 453 | 454 | 455 | 456 | true 457 | 458 | 459 | Test 460 | 461 | 462 | 463 | 464 | Test3 465 | 466 | 467 | 468 | 469 | Test3 470 | 471 | 472 | 473 | 474 | 475 | 476 | 477 | 478 | 479 | checkBox_4 480 | toggled(bool) 481 | groupBox_2 482 | setDisabled(bool) 483 | 484 | 485 | 543 486 | 70 487 | 488 | 489 | 376 490 | 97 491 | 492 | 493 | 494 | 495 | checkBox_4 496 | toggled(bool) 497 | groupBox 498 | setDisabled(bool) 499 | 500 | 501 | 617 502 | 70 503 | 504 | 505 | 47 506 | 104 507 | 508 | 509 | 510 | 511 | checkBox_4 512 | toggled(bool) 513 | tabWidget 514 | setDisabled(bool) 515 | 516 | 517 | 623 518 | 74 519 | 520 | 521 | 234 522 | 264 523 | 524 | 525 | 526 | 527 | checkBox_4 528 | toggled(bool) 529 | groupBox_3 530 | setDisabled(bool) 531 | 532 | 533 | 503 534 | 80 535 | 536 | 537 | 503 538 | 262 539 | 540 | 541 | 542 | 543 | checkBox_4 544 | toggled(bool) 545 | progressBar 546 | setDisabled(bool) 547 | 548 | 549 | 631 550 | 73 551 | 552 | 553 | 607 554 | 517 555 | 556 | 557 | 558 | 559 | checkBox_4 560 | toggled(bool) 561 | mainToolBar 562 | setDisabled(bool) 563 | 564 | 565 | 648 566 | 71 567 | 568 | 569 | 105 570 | 33 571 | 572 | 573 | 574 | 575 | checkBox_4 576 | toggled(bool) 577 | menuBar 578 | setDisabled(bool) 579 | 580 | 581 | 634 582 | 73 583 | 584 | 585 | 64 586 | 7 587 | 588 | 589 | 590 | 591 | checkBox_4 592 | toggled(bool) 593 | statusBar 594 | setDisabled(bool) 595 | 596 | 597 | 650 598 | 70 599 | 600 | 601 | 533 602 | 549 603 | 604 | 605 | 606 | 607 | checkBox_4 608 | toggled(bool) 609 | comboBox 610 | setDisabled(bool) 611 | 612 | 613 | 626 614 | 70 615 | 616 | 617 | 297 618 | 65 619 | 620 | 621 | 622 | 623 | checkBox_4 624 | toggled(bool) 625 | label 626 | setDisabled(bool) 627 | 628 | 629 | 639 630 | 78 631 | 632 | 633 | 28 634 | 66 635 | 636 | 637 | 638 | 639 | 640 | -------------------------------------------------------------------------------- /GH Injector GUI/pch.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guided-hacking/GH-Injector-GUI/801280f8d705b4cc9474169940cbc5852e11df08/GH Injector GUI/pch.cpp -------------------------------------------------------------------------------- /GH Injector GUI/pch.h: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guided-hacking/GH-Injector-GUI/801280f8d705b4cc9474169940cbc5852e11df08/GH Injector GUI/pch.h -------------------------------------------------------------------------------- /GH Injector GUI/resource.h: -------------------------------------------------------------------------------- 1 | //{{NO_DEPENDENCIES}} 2 | // Von Microsoft Visual C++ generierte Includedatei. 3 | // Verwendet durch GH Injector GUI.rc 4 | // 5 | #define IDI_ICON1 101 6 | #define IDI_ICON2 107 7 | 8 | // Next default values for new objects 9 | // 10 | #ifdef APSTUDIO_INVOKED 11 | #ifndef APSTUDIO_READONLY_SYMBOLS 12 | #define _APS_NEXT_RESOURCE_VALUE 109 13 | #define _APS_NEXT_COMMAND_VALUE 40001 14 | #define _APS_NEXT_CONTROL_VALUE 1001 15 | #define _APS_NEXT_SYMED_VALUE 101 16 | #endif 17 | #endif 18 | -------------------------------------------------------------------------------- /GH Injector/GH Icon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guided-hacking/GH-Injector-GUI/801280f8d705b4cc9474169940cbc5852e11df08/GH Injector/GH Icon.ico -------------------------------------------------------------------------------- /GH Injector/GH Injector.aps: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guided-hacking/GH-Injector-GUI/801280f8d705b4cc9474169940cbc5852e11df08/GH Injector/GH Injector.aps -------------------------------------------------------------------------------- /GH Injector/GH Injector.rc: -------------------------------------------------------------------------------- 1 | // Microsoft Visual C++ generated resource script. 2 | // 3 | #include "resource.h" 4 | 5 | #define APSTUDIO_READONLY_SYMBOLS 6 | ///////////////////////////////////////////////////////////////////////////// 7 | // 8 | // Generated from the TEXTINCLUDE 2 resource. 9 | // 10 | #include "winres.h" 11 | 12 | ///////////////////////////////////////////////////////////////////////////// 13 | #undef APSTUDIO_READONLY_SYMBOLS 14 | 15 | ///////////////////////////////////////////////////////////////////////////// 16 | // German (Germany) resources 17 | 18 | #if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_DEU) 19 | LANGUAGE LANG_GERMAN, SUBLANG_GERMAN 20 | #pragma code_page(1252) 21 | 22 | #ifdef APSTUDIO_INVOKED 23 | ///////////////////////////////////////////////////////////////////////////// 24 | // 25 | // TEXTINCLUDE 26 | // 27 | 28 | 1 TEXTINCLUDE 29 | BEGIN 30 | "resource.h\0" 31 | END 32 | 33 | 2 TEXTINCLUDE 34 | BEGIN 35 | "#include ""winres.h""\r\n" 36 | "\0" 37 | END 38 | 39 | 3 TEXTINCLUDE 40 | BEGIN 41 | "\r\n" 42 | "\0" 43 | END 44 | 45 | #endif // APSTUDIO_INVOKED 46 | 47 | 48 | ///////////////////////////////////////////////////////////////////////////// 49 | // 50 | // Icon 51 | // 52 | 53 | // Icon with lowest ID value placed first to ensure application icon 54 | // remains consistent on all systems. 55 | IDI_ICON1 ICON "GH Icon.ico" 56 | 57 | 58 | ///////////////////////////////////////////////////////////////////////////// 59 | // 60 | // Version 61 | // 62 | 63 | VS_VERSION_INFO VERSIONINFO 64 | FILEVERSION 4,8,0,0 65 | PRODUCTVERSION 4,8,0,0 66 | FILEFLAGSMASK 0x3fL 67 | #ifdef _DEBUG 68 | FILEFLAGS 0x1L 69 | #else 70 | FILEFLAGS 0x0L 71 | #endif 72 | FILEOS 0x40004L 73 | FILETYPE 0x0L 74 | FILESUBTYPE 0x0L 75 | BEGIN 76 | BLOCK "StringFileInfo" 77 | BEGIN 78 | BLOCK "000904b0" 79 | BEGIN 80 | VALUE "CompanyName", "Guided Hacking" 81 | VALUE "FileDescription", "Platform selector for the GH Injector" 82 | VALUE "FileVersion", "4.8.0.0" 83 | VALUE "LegalCopyright", "Broihon (C) 1987 - 2035" 84 | VALUE "ProductName", "GH Injector Selector" 85 | VALUE "ProductVersion", "4.8.0.0" 86 | END 87 | END 88 | BLOCK "VarFileInfo" 89 | BEGIN 90 | VALUE "Translation", 0x9, 1200 91 | END 92 | END 93 | 94 | #endif // German (Germany) resources 95 | ///////////////////////////////////////////////////////////////////////////// 96 | 97 | 98 | 99 | #ifndef APSTUDIO_INVOKED 100 | ///////////////////////////////////////////////////////////////////////////// 101 | // 102 | // Generated from the TEXTINCLUDE 3 resource. 103 | // 104 | 105 | 106 | ///////////////////////////////////////////////////////////////////////////// 107 | #endif // not APSTUDIO_INVOKED 108 | 109 | -------------------------------------------------------------------------------- /GH Injector/GH Injector.vcxproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Release 6 | Win32 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 16.0 23 | Win32Proj 24 | {204edbbb-ea55-46ef-b9b1-96985ad09028} 25 | GHInjector 26 | 10.0 27 | 28 | 29 | 30 | Application 31 | false 32 | v143 33 | true 34 | Unicode 35 | false 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | false 48 | $(SolutionDir)$(Configuration)\$(PlatformShortName)\ 49 | $(Configuration)\$(PlatformShortName)\ 50 | 51 | 52 | 53 | Level4 54 | true 55 | %(PreprocessorDefinitions) 56 | true 57 | stdcpp20 58 | MaxSpeed 59 | None 60 | true 61 | true 62 | true 63 | 64 | 65 | Console 66 | false 67 | RequireAdministrator 68 | Default 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | -------------------------------------------------------------------------------- /GH Injector/GH Injector.vcxproj.filters: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | {4FC737F1-C7A5-4376-A066-2A32D752A2FF} 6 | cpp;c;cc;cxx;c++;cppm;ixx;def;odl;idl;hpj;bat;asm;asmx 7 | 8 | 9 | {93995380-89BD-4b04-88EB-625FBE52EBFB} 10 | h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd 11 | 12 | 13 | {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} 14 | rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms 15 | 16 | 17 | 18 | 19 | Quelldateien 20 | 21 | 22 | 23 | 24 | Headerdateien 25 | 26 | 27 | 28 | 29 | Ressourcendateien 30 | 31 | 32 | 33 | 34 | Ressourcendateien 35 | 36 | 37 | -------------------------------------------------------------------------------- /GH Injector/GH Injector.vcxproj.user: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | -------------------------------------------------------------------------------- /GH Injector/main.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guided-hacking/GH-Injector-GUI/801280f8d705b4cc9474169940cbc5852e11df08/GH Injector/main.cpp -------------------------------------------------------------------------------- /GH Injector/resource.h: -------------------------------------------------------------------------------- 1 | //{{NO_DEPENDENCIES}} 2 | // Von Microsoft Visual C++ generierte Includedatei. 3 | // Verwendet durch GH Injector.rc 4 | // 5 | #define IDI_ICON1 101 6 | 7 | // Next default values for new objects 8 | // 9 | #ifdef APSTUDIO_INVOKED 10 | #ifndef APSTUDIO_READONLY_SYMBOLS 11 | #define _APS_NEXT_RESOURCE_VALUE 102 12 | #define _APS_NEXT_COMMAND_VALUE 40001 13 | #define _APS_NEXT_CONTROL_VALUE 1001 14 | #define _APS_NEXT_SYMED_VALUE 101 15 | #endif 16 | #endif 17 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Qt GH DLL Injector GUI Interface 2 | - This is the GUI Interface for the [Guided Hacking DLL Injector](https://guidedhacking.com/resources/guided-hacking-dll-injector.4/) 3 | - This Version works with MSVC2019/MSVC2022 and QT 5.15.2 4 | 5 | ## Initial Qt GUI Interace by Kage/Multikill 6 | 7 | The original GH Injector used AutoIt as a GUI frontend. [Kage](https://guidedhacking.com/members/kage.109622/) / [Multikill](https://github.com/multikill) developed the initial version of Qt front end in 2020, which Broihon has continued to improve over the past 5 years. 8 | 9 | ## Picture 10 | ![image](https://github.com/guided-hacking/GH-Injector-GUI/assets/15186628/81f934c8-b319-4058-928c-69d8c971672a) 11 | 12 |

Official Guided Hacking Courses

13 | 25 | 26 | ## How to build 27 | 1. Visual Studio 2019 28 | 1. Download https://visualstudio.microsoft.com/vs/ 29 | 2. Qt 30 | 1. Download https://www.qt.io/download-qt-installer 31 | 1. Install Qt 5.15.2 -> MSVC 2019 32-bit 32 | 2. Install Qt 5.15.2 -> MSVC 2019 64-bit 33 | 3. Qt VS Tools for Visual Studio 2019 34 | 1. Download https://marketplace.visualstudio.com/items?itemName=TheQtCompany.QtVisualStudioTools2022 35 | 4. Static Qt 5.15.2 36 | 1. Download https://github.com/martinrotter/qt5-minimalistic-builds/releases 37 | 2. Extract to "C:\Qt\5.15.2\qt-5.15.2-static-msvc2019-x86_64" 38 | 5. Setup MSVC 39 | 1. Toolbar -> Qt VS Tools -> Qt Options -> Add -> 40 | 1. "C:\Qt\5.15.2\msvc2019" 41 | 2. "C:\Qt\5.15.2\msvc2019_64" 42 | 3. "C:\Qt\5.15.2\qt-5.15.2-static-msvc2019-x86_64" 43 | 2. Toolbar -> Project -> Properties -> Qt Project Settings -> Qt Installation -> 44 | 1. x86 -> msvc2019 45 | 2. x64 -> msvc2019_64 46 | 3. x64_static -> qt-5.15.2-static-msvc2019-x86_64 47 | 3. Restart MSVC to repair intellisense 48 | 4. Build project 49 | 6. GH Injector-Library 50 | 1. Download https://github.com/Broihon/GH-Injector-Library 51 | 2. Change C++ Language to std:c++20 52 | 3. Build and Copy to Project Folder 53 | 54 | ## Features: 55 | - Intelligent drag and drop that bypasses UIPI 56 | - Commandline interface 57 | - Shortcut generator 58 | - Auto injection 59 | 60 | ## Credits: 61 | - https://guidedhacking.com/resources/guided-hacking-dll-injector.4/ 62 | - https://github.com/Jorgen-VikingGod/Qt-Frameless-Window-DarkStyle 63 | - https://github.com/fpoussin/Qt5-MSVC-Static 64 | 65 | ## License 66 | All original licenses of all used components Qt are respected with the additional exception that compiling, linking or using is allowed. Go to Qt website and check for License. 67 | 68 | 69 | --------------------------------------------------------------------------------