├── .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 |
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 |
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 | 
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 |
--------------------------------------------------------------------------------