├── GitHub SimpleLoader.sln
├── GitHub SimpleLoader
├── App.config
├── Form1.Designer.cs
├── Form1.cs
├── Form1.resx
├── Injection
│ ├── Helpers.cs
│ ├── ManualMapInjector.cs
│ ├── Types
│ │ └── ManagedPtr.cs
│ └── Win32
│ │ ├── Definitions.cs
│ │ ├── Imports.cs
│ │ └── PDefinitions.cs
├── Loader.csproj
├── Program.cs
├── Properties
│ ├── AssemblyInfo.cs
│ ├── Resources.Designer.cs
│ ├── Resources.resx
│ ├── Settings.Designer.cs
│ └── Settings.settings
├── app.manifest
└── icon.ico
└── README.md
/GitHub SimpleLoader.sln:
--------------------------------------------------------------------------------
1 |
2 | Microsoft Visual Studio Solution File, Format Version 12.00
3 | # Visual Studio 15
4 | VisualStudioVersion = 15.0.27130.2036
5 | MinimumVisualStudioVersion = 10.0.40219.1
6 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Loader", "GitHub SimpleLoader\Loader.csproj", "{33FCD856-2414-4A47-814A-07A50FB8D937}"
7 | EndProject
8 | Global
9 | GlobalSection(SolutionConfigurationPlatforms) = preSolution
10 | Debug|Any CPU = Debug|Any CPU
11 | Release|Any CPU = Release|Any CPU
12 | EndGlobalSection
13 | GlobalSection(ProjectConfigurationPlatforms) = postSolution
14 | {33FCD856-2414-4A47-814A-07A50FB8D937}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
15 | {33FCD856-2414-4A47-814A-07A50FB8D937}.Debug|Any CPU.Build.0 = Debug|Any CPU
16 | {33FCD856-2414-4A47-814A-07A50FB8D937}.Release|Any CPU.ActiveCfg = Release|Any CPU
17 | {33FCD856-2414-4A47-814A-07A50FB8D937}.Release|Any CPU.Build.0 = Release|Any CPU
18 | EndGlobalSection
19 | GlobalSection(SolutionProperties) = preSolution
20 | HideSolutionNode = FALSE
21 | EndGlobalSection
22 | GlobalSection(ExtensibilityGlobals) = postSolution
23 | SolutionGuid = {451A427C-B32F-426B-BA46-B2CCD18B8E63}
24 | EndGlobalSection
25 | EndGlobal
26 |
--------------------------------------------------------------------------------
/GitHub SimpleLoader/App.config:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/GitHub SimpleLoader/Form1.Designer.cs:
--------------------------------------------------------------------------------
1 | namespace WindowsFormsApp2
2 | {
3 | partial class Form1
4 | {
5 | ///
6 | /// Required designer variable.
7 | ///
8 | private System.ComponentModel.IContainer components = null;
9 |
10 | ///
11 | /// Clean up any resources being used.
12 | ///
13 | /// true if managed resources should be disposed; otherwise, false.
14 | protected override void Dispose(bool disposing)
15 | {
16 | if (disposing && (components != null))
17 | {
18 | components.Dispose();
19 | }
20 | base.Dispose(disposing);
21 | }
22 |
23 | #region Windows Form Designer generated code
24 |
25 | ///
26 | /// Required method for Designer support - do not modify
27 | /// the contents of this method with the code editor.
28 | ///
29 | private void InitializeComponent()
30 | {
31 | System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Form1));
32 | this.button1 = new System.Windows.Forms.Button();
33 | this.label1 = new System.Windows.Forms.Label();
34 | this.label2 = new System.Windows.Forms.Label();
35 | this.textBox1 = new System.Windows.Forms.TextBox();
36 | this.button2 = new System.Windows.Forms.Button();
37 | this.SuspendLayout();
38 | //
39 | // button1
40 | //
41 | this.button1.Location = new System.Drawing.Point(12, 12);
42 | this.button1.Name = "button1";
43 | this.button1.Size = new System.Drawing.Size(238, 23);
44 | this.button1.TabIndex = 0;
45 | this.button1.Text = "Inject";
46 | this.button1.UseVisualStyleBackColor = true;
47 | this.button1.Click += new System.EventHandler(this.button1_Click);
48 | //
49 | // label1
50 | //
51 | this.label1.AutoSize = true;
52 | this.label1.Location = new System.Drawing.Point(12, 72);
53 | this.label1.Name = "label1";
54 | this.label1.Size = new System.Drawing.Size(43, 13);
55 | this.label1.TabIndex = 1;
56 | this.label1.Text = "[Status]";
57 | //
58 | // label2
59 | //
60 | this.label2.AutoSize = true;
61 | this.label2.Location = new System.Drawing.Point(475, 72);
62 | this.label2.Name = "label2";
63 | this.label2.Size = new System.Drawing.Size(35, 13);
64 | this.label2.TabIndex = 2;
65 | this.label2.Text = "label2";
66 | //
67 | // textBox1
68 | //
69 | this.textBox1.Font = new System.Drawing.Font("Courier New", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
70 | this.textBox1.Location = new System.Drawing.Point(12, 41);
71 | this.textBox1.Name = "textBox1";
72 | this.textBox1.Size = new System.Drawing.Size(151, 20);
73 | this.textBox1.TabIndex = 3;
74 | //
75 | // button2
76 | //
77 | this.button2.Font = new System.Drawing.Font("Courier New", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
78 | this.button2.Location = new System.Drawing.Point(169, 40);
79 | this.button2.Name = "button2";
80 | this.button2.Size = new System.Drawing.Size(81, 23);
81 | this.button2.TabIndex = 4;
82 | this.button2.Text = "Copy";
83 | this.button2.UseVisualStyleBackColor = true;
84 | this.button2.Click += new System.EventHandler(this.button2_Click);
85 | //
86 | // Form1
87 | //
88 | this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
89 | this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
90 | this.ClientSize = new System.Drawing.Size(262, 95);
91 | this.Controls.Add(this.button2);
92 | this.Controls.Add(this.textBox1);
93 | this.Controls.Add(this.label2);
94 | this.Controls.Add(this.label1);
95 | this.Controls.Add(this.button1);
96 | this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
97 | this.Name = "Form1";
98 | this.Text = "SimpleLoader";
99 | this.Load += new System.EventHandler(this.Form1_Load);
100 | this.ResumeLayout(false);
101 | this.PerformLayout();
102 |
103 | }
104 |
105 | #endregion
106 |
107 | private System.Windows.Forms.Button button1;
108 | private System.Windows.Forms.Label label1;
109 | private System.Windows.Forms.Label label2;
110 | private System.Windows.Forms.TextBox textBox1;
111 | private System.Windows.Forms.Button button2;
112 | }
113 | }
114 |
115 |
--------------------------------------------------------------------------------
/GitHub SimpleLoader/Form1.cs:
--------------------------------------------------------------------------------
1 | //SimpleLoader by Wilson, https://github.com/WilsonPublic/SimpleLoader [Open Source Cheat Loader]
2 | //This is very noob friendly and can easily be adapted, this has no form of protection against cracking so please come up with your own ideas on how to prevent cracking
3 | //I recommend using Dot Net Reactor to protect your programs
4 |
5 | using System;
6 | using System.Collections.Generic;
7 | using System.ComponentModel;
8 | using System.Data;
9 | using System.Drawing;
10 | using System.Linq;
11 | using System.Text;
12 | using System.Threading.Tasks;
13 | using System.Windows.Forms;
14 | using ManualMapInjection.Injection;
15 | using System.Net;
16 | using System.IO;
17 | using System.Diagnostics;
18 |
19 | namespace WindowsFormsApp2
20 | {
21 | public partial class Form1 : Form
22 | {
23 | public Form1()
24 | {
25 | InitializeComponent();
26 | }
27 |
28 | string HWID;
29 |
30 | private void Form1_Load(object sender, EventArgs e)
31 | {
32 | HWID = System.Security.Principal.WindowsIdentity.GetCurrent().User.Value; //Changing the variable "HWID (String)" to the WindowsIdentity Value, you can use any other forms of HWID, you can even use MAC/IP (Not recommended)
33 | textBox1.Text = HWID;
34 | textBox1.ReadOnly = true;
35 | checkonline();
36 | }
37 |
38 | private void button1_Click(object sender, EventArgs e)
39 | {
40 | checkonline();
41 | WebClient wb = new WebClient();
42 | string HWIDLIST = wb.DownloadString("HWID List URL"); //Replace "HWID List URL" with your own URL to a RAW text (txt) file with all your wanted HWIDs [Example: http://myurl.com/HWID.txt]
43 | if (HWIDLIST.Contains(textBox1.Text)) //You can add a "!" before the "HWIDLIST" and after the "if (" to make it into a blacklist HWID system instead of a whitelist HWID system
44 | {
45 | string mainpath = "C:\\Windows\\random.dll"; //You can change the path to wherever you want but just remember to use "\\" instead of just one "\"
46 | wb.DownloadFile("DLL URL", mainpath); //Replace "DLL URL" with the URL to directly download your DLL [Example: http://myurl.com/MYDLL.dll]
47 | var name = "csgo"; //Replace "csgo" with any exe you want [Example: For Team Fortress 2 you would replace it with "hl2"]
48 | var target = Process.GetProcessesByName(name).FirstOrDefault();
49 | var path = mainpath;
50 | var file = File.ReadAllBytes(path);
51 |
52 | //Checking if the DLL isn't found
53 | if (!File.Exists(path))
54 | {
55 | MessageBox.Show("Error: DLL not found");
56 | return;
57 | }
58 |
59 | //Injection, just leave this alone if you are a beginner
60 | var injector = new ManualMapInjector(target) { AsyncInjection = true };
61 | label2.Text = $"hmodule = 0x{injector.Inject(file).ToInt64():x8}";
62 |
63 | if (System.IO.File.Exists(mainpath)) //Checking if the DLL exists
64 | {
65 | System.IO.File.Delete(mainpath); //Deleting the DLL
66 | }
67 | }
68 | else
69 | {
70 | MessageBox.Show("HWID Incorrect");
71 | }
72 | }
73 |
74 | private void checkonline()
75 | {
76 | //Checking if the user can get a response from "https://google.com/"
77 | try
78 | {
79 | using (var client = new WebClient())
80 | {
81 | using (client.OpenRead("https://google.com/"))
82 | {
83 | label1.ForeColor = Color.Green;
84 | label1.Text = ("Online");
85 | }
86 | }
87 | }
88 | catch
89 | {
90 | //If it does not get a response (This means the user is offline or google is down for some reason) it will Exit the application, you can stop this by removing "Application.Exit();"
91 | label1.ForeColor = Color.Red;
92 | label1.Text = ("Offline");
93 | Application.Exit();
94 | }
95 | }
96 |
97 | private void button2_Click(object sender, EventArgs e)
98 | {
99 | Clipboard.SetText(HWID);
100 | button2.Enabled = false;
101 | button2.Text = "Copied";
102 | }
103 | }
104 | }
105 |
--------------------------------------------------------------------------------
/GitHub SimpleLoader/Form1.resx:
--------------------------------------------------------------------------------
1 |
2 |
3 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
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 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 | text/microsoft-resx
110 |
111 |
112 | 2.0
113 |
114 |
115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
116 |
117 |
118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
119 |
120 |
121 |
122 |
123 | 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
151 | 9e7u7u7q7e3t7PDw8PDy8vK76OjoOAAAAAGvr684z8/PHW9vbwqenp4Inp6eAAAAAAAAAAAAa2trAHJy
152 | cgafn58Wt7e3WODg4JDAwMBv7u7u4OTk5CLJyckAoKCgH9XV1aHu7u7j7e3t6dbW1qvU1NQksbGxAHV1
153 | dRTe3t7Q6+vrgMLCwnrh4eFkcXFxDbW1tQW4uLgAkZGRAJCQkBbZ2dme4ODgyO7u7qrHx8d48/Pz587O
154 | zi4AAAABpaWlHuTk5LHt7e3q6urq7ubm5rrj4+Mk////AH9/fx/l5eXa7e3tjNLS0pni4uLI1tbWpNvb
155 | 2yLb29sAcXFxADc3NwTBwcF07u7u9PLy8tDc3Ny88PDw5s3Nzajj4+NNf39/E8DAwDHe3t6f7OzsqbW1
156 | tTm9vb0Vra2tPM3NzaDl5eXd5OTkwd7e3sr09PT55ubmgcrKygfV1dUAiYmJAIqKihXa2tqj4uLidsnJ
157 | yYXx8fH69PT08OPj4+Lq6uplx8fHhO/v79Da2tq03NzcveHh4dPt7e2Iurq6U+Li4uHq6urr9/f3/eXl
158 | 5ZDl5eV37OzssN/f3x7e3t4AnZ2dAP///wCdnZ0jysrKlOvr6+zs7Ozf3Nzc2PT09Pvs7Oym1dXVqfj4
159 | +P/29vb99fX1/vj4+P/k5OSry8vLm/Pz8/vs7OzX8PDw3fT09Ofp6emH1tbWKNjY2APY2NgAAAAAAMHB
160 | wQCxsbE26urq0fDw8Ii/v79j4uLiv+Tk5GrW1taY7+/v+PX19ebm5uaF29vbh+np6ePy8vL64+PjqeTk
161 | 5Gzs7OzA39/fbevr64vy8vLd5+fnROzs7AAAAAAAAAAAAL6+vgDAwMAD1dXVFMvLywPIyMgJ0NDQD7W1
162 | tVjm5ubh9fX1++rq6pvd3d0LbGxsCNfX15H09PT68/Pz5ubm5mDU1NQU39/fD7y8vATb29se3NzcCdzc
163 | 3AAAAAAAAAAAAIODgwB8fHwMs7OzLcjIyAmPj48Ttra2IsvLy0Pu7u7G9fX1++3t7a6/v78VZGRkEtHR
164 | 0anz8/P68vLyyOTk5EiQkJAbxMTED0pKSgahoaEgxsbGCMXFxQAAAAAAAAAAAL+/vwCtra086Ojo4+/v
165 | 76TGxsZ05ubmyeLi4n/Nzc2f7e3t8vPz8+3V1dWu3t7eq+rq6uf29vb05eXlmcbGxnbc3NzJxsbGc83N
166 | zZbp6ene5+fnQOrq6gAAAAAAaGhoAGBgYAWrq6sr4+PjcfPz89vy8vLm5eXl2PPz8/7p6emX0dHRoPf3
167 | 9//19fX99/f3+/j4+P/v7++s3t7emPLy8v3i4uLb4+Pj5PPz8+bp6emIurq6KLOzswLBwcEAkZGRAJCQ
168 | kBjd3d2x6OjojMzMzI/x8fH68vLy7OHh4d7q6upbz8/PbfDw8LPU1NSj5ubmouzs7Kjt7e17vr6+XOXl
169 | 5d/s7Ozs+Pj4+97e3o3ExMSB39/fr97e3hrc3NwAe3t7AFBQUAbExMR67+/v+u7u7szb29uz8fHx4dfX
170 | 15Po6Og9goKCBpqami7T09Or7u7usM7Oziu7u7sHwcHBP9TU1Jvn5+fi7u7utubm5svy8vL45ubmecPD
171 | wwXS0tIAmpqaAJeXlx3V1dWY3d3duu3t7aHLy8uD8/Pz4dzc3CDHx8cAl5eXItXV1b3n5+fr8fHx6evr
172 | 677g4OAnzc3NAJSUlCTn5+fi6urqgdTU1KHu7u7A5+fnndzc3Bzc3NwAr6+vALOzswK0tLQFxsbGVOXl
173 | 5XXLy8tx8PDwzuDg4BfZ2dkAkZGRI8nJyajm5ubr8/Pz6uTk5KjU1NQmvb29AJCQkBrm5ubV6urqctLS
174 | 0n/p6elYyMjIDNjY2AXX19cAAAAAAAAAAAC5ubkAsLCwBLy8vAXExMQT3d3dK1BQUACoqKg+3Nzcx/Hx
175 | 8e/u7u7k8/Pz4/X19ezw8PDI5OTkQQAAAAHX19c04ODgGLu7uwnOzs4H0dHRAAAAAAAAAAAAAAAAAAAA
176 | AAAAAAAAAAAAAAAAAAAAAAAAAwMDAP///wDKyspi8PDwvtbW1mHLy8ue6enpotzc3Fjw8PC66+vrbP//
177 | /wDBwcEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMXF
178 | xQDLy8sEm5ubJc7Ozqfq6urs8/Pz6+vr66jV1dUnxMTEBdDQ0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
179 | 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
207 | 6qdzc3Mqv7+/d9vb2yp4eHgl39/f4cvLy67u7u717e3t7d/f393w8PDV9fX19Orq6qvW1tYk4eHhAJ2d
208 | nQAAAAAA0NDQAKqqqkPn5+e95OTkXoaGhjHJycm0+Pj4//r6+v3e3t7Z7+/v7uHh4Te0tLR18vLy/+/v
209 | 78/X19fK4eHh1dfX19P19fX/7e3tfHR0dCTj4+Pl2dnZ1/Ly8vr7+/v/6+vrv8LCwjLd3d1h7e3tzuTk
210 | 5F/z8/MAurq6AAAAAACfn58AtLS0Anx8fBWjo6Ni2NjY0vT09P/z8/Ps19fXyO/v7/f4+Pj75OTkeLS0
211 | tHf09PT/+vr6//n5+f/5+fn/+vr6//n5+f/a2tp8oKCgZevr6/T39/f76OjoyvPz8+v4+Pj97+/vxtnZ
212 | 2VG+vr4az8/PCc7OzgD///8AAAAAAAAAAADCwsIAnZ2dT+fn5/f4+Pj67+/vsrm5uYvY2Njh8PDw4+zs
213 | 7KPs7OzQ5eXl4vb29v/u7u7W7+/v1/Dw8N3d3d3W+Pj4/+Dg4ODj4+Pa7OzsrfHx8eLt7e3c29vbi+vr
214 | 67X39/f79fX19eXl5Vbx8fEAAAAAAAAAAAAAAAAAAAAAAMbGxgCsrKwm5OTkl+Xl5WLCwsILuLi4ROfn
215 | 55bb29s2bm5uI729vZny8vL8+vr6/+3t7aPHx8ckwcHBJsbGxpj5+fn/+fn5/+Li4q25ubkr0NDQNOjo
216 | 6KDl5eVbrKysDd/f32js7Oyz4+PjPurq6gCxsbEAAAAAAAAAAAAAAAAAAAAAAB8fHwA+Pj4ANzc3AF9f
217 | XwBtbW0AdHR0AGpqahvPz8/I9PT0//n5+f/q6urI3NzcPezs7AD///8Atra2Mtvb27729vb/+Pj4/+/v
218 | 79La2toiODg4AaOjowKjo6MAlJSUAa2trQanp6cBn5+fAAAAAAAAAAAAAAAAAAAAAAAhISEAIyMjAmRk
219 | ZBCAgIAEY2NjAEJCQgZpaWkKfHx8EeHh4aD39/fu+fn5/+7u7t3g4OBb////AP///wCfn59X29vb3Pf3
220 | 9//29vbw7e3tp9zc3BYAAAAFTU1NAzs7OwASEhIBMDAwBz4+PgEwMDAAAAAAAAAAAAAAAAAAAAAAALa2
221 | tgCSkpJA2NjYyOTk5InCwsIcpaWlW9/f37zd3d1OfX19F7q6uofv7+/5+/v7/+fn56+goKBTwcHBUsTE
222 | xKD6+vr/9vb2+d3d3YOEhIQTkpKSRM3Nza7e3t5aTExME6+vr3TZ2dmz3t7eOOXl5QAAAAAAAAAAAAAA
223 | AAAAAAAA09PTAK6urkHu7u7m+fn5//Dw8NDR0dGS5eXlzPLy8u/f39/G4eHh2+Dg4NL29vb+6enp7Onp
224 | 6fP19fX05ubm6Pj4+P/v7+/Z7u7u19vb27zk5OTr5ubm3Ly8vJfR0dHC8fHx/fX19fXm5uZU8PDwAAAA
225 | AAAAAAAAAAAAAH5+fgBqamoQm5ubJszMzDnq6uqp9/f39vf39/Xi4uLU7+/v+fj4+Pbl5eVbrq6ub/Pz
226 | 8//6+vr/9vb2/ff39/v5+fn++vr6/+np6YLFxcVb7+/v9fj4+PrX19fS6enp8fj4+Pzy8vLE3NzcUoSE
227 | hBydnZ0HoKCgAAAAAAAAAAAA29vbAKamplfl5eXg5+fngqOjozbNzc22+Pj4//n5+fvZ2dnP7+/v6eDg
228 | 4C23t7dk8fHx9uvr66/Q0NC46enpuuPj45zz8/P17OzseYODgy3m5ubp4ODg0PX19fv7+/v/6enpuaCg
229 | oDSrq6tv2tra0uDg4FXp6ekAAAAAAAAAAADLy8sAr6+vFNjY2JDw8PD26+vr5+Xl5dfm5ubi+Pj4+crK
230 | yqrq6uri5OTkLampqQ7b29s+g4ODE8LCwp7s7OyqmZmZDdfX1znj4+MUjY2NLuXl5eTJycmt8PDw+fPz
231 | 8+bt7e3Y4+Pj2e3t7fbs7Oyo39/fI+Xl5QAAAAAAAAAAAMDAwACEhIQsxcXFruvr6/X39/f42dnZWcnJ
232 | yaP4+Pj/29vba9bW1knc3NwM////AHZ2diS8vLyS6enp8Pb29vLm5uaUzc3NJc7OzgCNjY0M1dXVUra2
233 | tnTx8fH/7+/vorq6ul7w8PD59fX19+Tk5JbPz88b2dnZAK6urgAAAAAA////ALKyslbm5ualxcXFhezs
234 | 7PDX19dFycnJoff39//o6OhV7+/vAEtLSwA8PDwNysrKtOrq6unk5OTo8PDw5+/v7+Ps7Oy90NDQEdLS
235 | 0gDS0tIAqampWfHx8f/y8vKempqaRurq6vDm5uaP6urqueLi4lzx8fEAurq6AAAAAACwsLAApaWlA6qq
236 | qgKjo6M85ubm2NTU1DnJycmb9vb2/+bm5lLt7e0ARkZGABYWFgOwsLBgv7+/tOTk5Ov09PTs3t7ertbW
237 | 1mXDw8MGxcXFANTU1ACqqqpZ8fHx//Dw8JmdnZ0+5ubm4ebm5jyurq4KzMzMCczMzADW1tYAAAAAAAAA
238 | AAAAAAAAnJycAJ2dnQfNzc0purq6BsPDwz7l5eWE3d3dG8HBwQBWVlYQp6enZtjY2M/z8/P9+fn5//n5
239 | +f/4+Pj97+/v0N3d3We+vr4QwMDAAKenpyHi4uKU5eXlSIyMjAnS0tI52dnZDNbW1gAAAAAAAAAAAAAA
240 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcHBwAAAAAAri4uI7u7u79+Pj4+e3t
241 | 7bTX19fB7Ozsxerq6qr29vb29/f3/urq6panp6cDzMzMAEBAQAE+Pj4AOjo6AAAAAAAAAAAAAAAAAAAA
242 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACMjIwAAAAABzMzMc+/v
243 | 78Di4uJee3t7LMrKyrfu7u6/u7u7KdnZ2VLt7e266enpgrGxsQPNzc0AAAAAAAAAAAAAAAAAAAAAAAAA
244 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALKy
245 | sgCvr68Eh4eHDqKiol3X19fU8vLy/ff39/3v7+/V39/fX7Ozsw66uroGw8PDAAAAAAAAAAAAAAAAAAAA
246 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
247 | AAAAAAAAAAAAAFFRUQBGRkYM0tLSq+zs7LLW1tbA7OzsxOnp6ajr6+u109PTEdTU1AAAAAAAAAAAAAAA
248 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
249 | AAAAAAAAAAAAAAAAAAAAAAAAWVlZAAAAAADAwMASgoKCCcPDw4/q6uqdn5+fCMrKyhTS0tIBz8/PAAAA
250 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
251 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcHBwD///8AvLy8M9nZ2Tvz8/MAycnJAAAA
252 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//n////AP///w
253 | D///4Af//8AD//5AAn/wIAQPwDAMA8AwDAPACBADwAAAA8AAAAPAAAAD4AAAB+AAAAf/gYBH4gGAR+AA
254 | AAfgAAAHwAAAA8AAAAPAAAADwAgQA8AwDAPAMAwD8CAED//AAv//wAP//+AH///wD///+A////5//ygA
255 | AAAwAAAAYAAAAAEAIAAAAAAAACQAACMuAAAjLgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
256 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
257 | AAAICAgAAAAAAWNjYzGYmJgyzc3NAaCgoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
258 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
259 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
260 | AAAAAAAAAAAAAAAAAAAiIiIAAwMDDbS0tLrl5eXHyMjIE8jIyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
261 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
262 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
263 | 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
305 | nUC8vLwILy8vFMvLy8/y8vLf0dHRHggICAp9fX1Jp6enOLm5uQP///8Ao6OjkPT09P/Q0NCgxsbGyfz8
306 | /P/y8vL2xMTEzOTk5Pb19fX7+Pj4/vf39/rg4OCmv7+/LygoKAGQkJAAAAAAAAAAAAAAAAAAAAAAAExM
307 | TABFRUUhxcXF2fj4+P/y8vLr4+Pjjc/PzznNzc2R7e3t+Pv7+//6+vr/8vLy4qOjo5bw8PD/7e3tt9vb
308 | 2wRcXFwzycnJ4O7u7vPk5OSXf39/L8fHx8zx8fHcf39/PqOjo57g4OD27Ozs49fX1zb///8Aqampkvb2
309 | 9v/Q0NCnxcXFy/v7+//6+vr/9/f3/urq6sDX19dc3NzckvHx8e75+fn/7e3t29LS0i3W1tYAAAAAAAAA
310 | AAAAAAAAAAAAAFlZWQBOTk4Qzs7Olubm5qnZ2dk9XV1dBFRUVC+lpaWi6Ojo+fv7+//7+/v/+Pj4+NfX
311 | 19/09PT/7OzstcvLywN6enpH5ubm9vz8/P/5+fn+4eHh0dra2uju7u7yyMjI2PHx8f78/Pz/9vb2+t/f
312 | 30////8AqKiokfb29v/a2trg4ODg7/z8/P/6+vr/9vb2/Nzc3J6vr68fSUlJA8bGxkTk5OS36urqzdfX
313 | 1y3Z2dkAAAAAAAAAAAAAAAAAAAAAAAAAAADExMQAjY2NBqampgU7OzsakpKSftDQ0OL09PT/+/v7//n5
314 | +f7s7Ozc4ODg3vn5+f/7+/v/7e3tyrq6uh5nZ2cy3t7e7Pz8/P/6+vr/+vr6//n5+f/6+vr/+vr6//v7
315 | +//6+vr/9PT08t7e3joAAAAQrKysq/f39//6+vr/8fHx6+7u7t/4+Pj++/v7//j4+P7r6+vV0tLSZZ2d
316 | nQ2oqKgNvLy8GLe3twG2trYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAn5+fAGFhYTi7u7vI7e3t/fz8
317 | /P/6+vr/8vLy79HR0aiYmJiQy8vL2/j4+P/39/f+9vb2/evr682wsLB/19fX5vz8/P/39/f99/f3/fv7
318 | +//6+vr/9vb2/vT09P37+/v/8PDw7Jqamne3t7e76enp+vj4+P/6+vr/7Ozs3sfHx4LZ2dmh8fHx7/r6
319 | +v/7+/v/9fX1+eTk5LTNzc0t3d3dAG1tbQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////AJub
320 | m4Pz8/P/+/v7//X19fro6Oi5x8fHSZeXl4/l5eX4+Pj4/+7u7trd3d1539/fkvLy8uvx8fH78vLy/Pv7
321 | +//u7u7g1NTUlu/v7+rz8/Px0NDQoc7Oztr7+/v/9PT0/OXl5fjz8/P36urqtNvb24Dr6+vW+Pj4//T0
322 | 9PTc3NyNxcXFTuXl5b719fX7+/v7//n5+f/n5+eXAAAAALu7uwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
323 | AAAAAAAA6+vrAJycnELl5eXR6+vrz9zc3GjExMQQAAAAAbe3t4Tt7e3j4+PjlM/PzyfCwsIAOjo6FaCg
324 | oI/q6ur6+/v7//v7+//y8vLjyMjIKMTExDXV1dU9WFhYI8/Pz9j8/Pz/+vr6//j4+P/Y2NiwoKCgJP//
325 | /wC3t7cl29vbku/v7+zo6Oiturq6CKSkpBLT09Nw7Ozs2vHx8fHh4eFy////AMnJyQAAAAAAAAAAAAAA
326 | AAAAAAAAAAAAAAAAAAAAAAAAaWlpAFVVVQG2trYZv7+/F42NjQGenp4AvLy8AJubmwy+vr4hv7+/BgAA
327 | AAV9fX1avLy8wOPj4/P4+Pj/+vr6//f39//q6urC0NDQFtLS0gBCQkIAJycnDcrKyqr39/f9+/v7//r6
328 | +v/z8/P24uLiys/Pz2e5ubkHhYWFBcLCwi/Ly8sd09PTAHx8fAAyMjIBvLy8I83NzTfExMQKxsbGAAAA
329 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
330 | AAAAAAAAV1dXAFBQUCnNzc3j+/v7//v7+//7+/v/8PDw9NXV1Y7GxsYh3d3dAMHBwQAAAAAAy8vLAJub
331 | mxa6urp94ODg7vr6+v/6+vr/+/v7//Ly8u7W1tY32dnZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
332 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
333 | AAAAAAAAAAAAAAAAAAAAAAAAY2NjAFlZWRnV1dXA+Pj4/vr6+v/7+/v/9fX1+uDg4MLOzs5VpKSkA7S0
334 | tAAREREAAAAAA3l5eVa9vb3C6enp+Pv7+//6+vr/9/f3/uvr68zW1tYk2NjYAAAAAAAAAAAAAAAAAAAA
335 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAR0dHADU1
336 | NRGIiIhXra2tRpmZmQmenp4A////AGFhYS6goKBUqqqqFf///wCzs7Me3NzccOfn58n09PT8+/v7//r6
337 | +v/w8PDd0dHRIf///wAAAAAAKioqF8PDw9D7+/v/+/v7//f39/zr6+vM39/fds3NzSJlZWUAJycnDnl5
338 | eT6kpKQfnZ2dABUVFQAAAAAEXl5eLJGRkTefn58In5+fAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
339 | AAAAAAAA////AIuLi3Pi4uL78PDw8+Dg4KG+vr4vAAAABqysrKfu7u7+5ubmv8nJyUuDg4MGMzMzGpiY
340 | mI/l5eX3/Pz8//r6+v/x8fHijIyMR5+fn4rLy8uOj4+PPcvLy8/7+/v/+vr6//Pz8/fS0tKFnJycEgAA
341 | AANjY2M9rq6ureDg4PXl5eWqoaGhBz8/Px6VlZWD0dHR4unp6e/e3t5m////ALCwsAAAAAAAAAAAAAAA
342 | AAAAAAAAAAAAAAAAAAAAAAAA////AKampnfy8vL++/v7//n5+f/u7u7h0tLSebKysnPs7Ozd+vr6//Pz
343 | 8+/R0dGrw8PDzOvr6/3s7Ozv7e3t+Pv7+//q6urwxsbG2PDw8P75+fn/5eXl2djY2Of7+/v/9/f3+/Hx
344 | 8fH19fX75eXlv7KyspvV1dXn9vb2//X19fDMzMyQgYGBZMLCws7u7u79/Pz8//n5+f/m5uaT////AMLC
345 | wgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAApaWlAIyMjBPV1dWE7+/v6Pn5+f/7+/v/9/f3/Obm
346 | 5sTAwMCBzs7Ozvj4+P/5+fn/9PT09ejo6KOdnZ1a1NTU4/z8/P/5+fn/+vr6//v7+//6+vr/+vr6//n5
347 | +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
792 | AABJRU5ErkJggg==
793 |
794 |
795 |
--------------------------------------------------------------------------------
/GitHub SimpleLoader/Injection/Helpers.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Text;
3 |
4 | namespace ManualMapInjection.Injection
5 | {
6 | internal static class Helpers
7 | {
8 | internal static string ToStringAnsi(byte[] buffer)
9 | {
10 | var sb = new StringBuilder();
11 | foreach (var t in buffer)
12 | {
13 | if (t == 0)
14 | {
15 | break;
16 | }
17 |
18 | sb.Append((char) t);
19 | }
20 |
21 | return sb.ToString();
22 | }
23 |
24 | internal static bool _stricmp(char[] str1, char[] str2)
25 | {
26 | var min = Math.Min(str1.Length, str2.Length);
27 | for (var i = 0; i < min; i++)
28 | {
29 | if (str1[i] != str2[i])
30 | {
31 | return false;
32 | }
33 |
34 | if (str1[i] == 0)
35 | {
36 | break;
37 | }
38 | }
39 |
40 | return true;
41 | }
42 | }
43 | }
--------------------------------------------------------------------------------
/GitHub SimpleLoader/Injection/ManualMapInjector.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Diagnostics;
4 | using System.IO;
5 | using System.Linq;
6 | using System.Runtime.InteropServices;
7 | using System.Text;
8 | using System.Threading;
9 | using ManualMapInjection.Injection.Win32;
10 |
11 | namespace ManualMapInjection.Injection
12 | {
13 | internal class ManualMapInjector
14 | {
15 | #region settings
16 |
17 | public bool AsyncInjection { get; set; } = false;
18 |
19 | public uint TimeOut { get; set; } = 5000;
20 |
21 | #endregion
22 |
23 | #region fields
24 |
25 | private readonly Process _process;
26 |
27 | private IntPtr _hProcess;
28 |
29 | #endregion
30 |
31 | #region code
32 |
33 | private PIMAGE_DOS_HEADER GetDosHeader(IntPtr address)
34 | {
35 | var imageDosHeader = (PIMAGE_DOS_HEADER) address;
36 |
37 | if (!imageDosHeader.Value.isValid)
38 | {
39 | return null;
40 | }
41 |
42 | return imageDosHeader;
43 | }
44 |
45 | private PIMAGE_NT_HEADERS32 GetNtHeader(IntPtr address)
46 | {
47 | var imageDosHeader = GetDosHeader(address);
48 |
49 | if (imageDosHeader == null)
50 | {
51 | return null;
52 | }
53 |
54 | var imageNtHeaders = (PIMAGE_NT_HEADERS32) (address + imageDosHeader.Value.e_lfanew);
55 |
56 | if (!imageNtHeaders.Value.isValid)
57 | {
58 | return null;
59 | }
60 |
61 | return imageNtHeaders;
62 | }
63 |
64 | private IntPtr RemoteAllocateMemory(uint size)
65 | {
66 | return Imports.VirtualAllocEx(_hProcess,
67 | UIntPtr.Zero,
68 | new IntPtr(size),
69 | Imports.AllocationType.Commit | Imports.AllocationType.Reserve,
70 | Imports.MemoryProtection.ExecuteReadWrite);
71 | }
72 |
73 | private IntPtr AllocateMemory(uint size)
74 | {
75 | return Imports.VirtualAlloc(IntPtr.Zero, new UIntPtr(size), Imports.AllocationType.Commit | Imports.AllocationType.Reserve,
76 | Imports.MemoryProtection.ExecuteReadWrite);
77 | }
78 |
79 | private IntPtr RvaToPointer(uint rva, IntPtr baseAddress)
80 | {
81 | var imageNtHeaders = GetNtHeader(baseAddress);
82 | if (imageNtHeaders == null)
83 | {
84 | return IntPtr.Zero;
85 | }
86 |
87 | return Imports.ImageRvaToVa(imageNtHeaders.Address, baseAddress, new UIntPtr(rva), IntPtr.Zero);
88 | }
89 |
90 | private bool InjectDependency(string dependency)
91 | {
92 | // standard LoadLibrary, CreateRemoteThread injection
93 | var procAddress = Imports.GetProcAddress(Imports.GetModuleHandle("kernel32.dll"), "LoadLibraryA");
94 |
95 | if (procAddress == IntPtr.Zero)
96 | {
97 | #if DEBUG
98 | Debug.WriteLine("[InjectDependency] GetProcAddress failed");
99 | #endif
100 | return false;
101 | }
102 |
103 | var lpAddress = RemoteAllocateMemory((uint) dependency.Length);
104 |
105 | if (lpAddress == IntPtr.Zero)
106 | {
107 | #if DEBUG
108 | Debug.WriteLine("[InjectDependency] RemoteAllocateMemory failed");
109 | #endif
110 | return false;
111 | }
112 |
113 | var buffer = Encoding.ASCII.GetBytes(dependency);
114 |
115 | UIntPtr bytesWritten;
116 | var result = Imports.WriteProcessMemory(_hProcess, lpAddress, buffer, buffer.Length, out bytesWritten);
117 |
118 | if (result)
119 | {
120 | var hHandle = Imports.CreateRemoteThread(_hProcess, IntPtr.Zero, 0, procAddress, lpAddress, 0, IntPtr.Zero);
121 |
122 | if (Imports.WaitForSingleObject(hHandle, TimeOut) != 0)
123 | {
124 | #if DEBUG
125 | Debug.WriteLine("[InjectDependency] remote thread not signaled");
126 | #endif
127 | return false;
128 | }
129 | }
130 | #if DEBUG
131 | else
132 | {
133 | Debug.WriteLine("[InjectDependency] WriteProcessMemory failed");
134 | }
135 | #endif
136 |
137 | Imports.VirtualFreeEx(_hProcess, lpAddress, 0, Imports.FreeType.Release);
138 | return result;
139 | }
140 |
141 | private IntPtr GetRemoteModuleHandleA(string module)
142 | {
143 | var dwModuleHandle = IntPtr.Zero;
144 | var hHeap = Imports.GetProcessHeap();
145 | var dwSize = (uint) Marshal.SizeOf(typeof(PROCESS_BASIC_INFORMATION));
146 | var pbi = (PPROCESS_BASIC_INFORMATION) Imports.HeapAlloc(hHeap, /*HEAP_ZERO_MEMORY*/ 0x8, new UIntPtr(dwSize));
147 |
148 | uint dwSizeNeeded;
149 | var dwStatus = Imports.NtQueryInformationProcess(_hProcess, /*ProcessBasicInformation*/ 0, pbi.Address, dwSize, out dwSizeNeeded);
150 |
151 | if (dwStatus >= 0 && dwSize < dwSizeNeeded)
152 | {
153 | if (pbi != null)
154 | {
155 | Imports.HeapFree(hHeap, 0, pbi.Address);
156 | }
157 |
158 | pbi = (PPROCESS_BASIC_INFORMATION) Imports.HeapAlloc(hHeap, /*HEAP_ZERO_MEMORY*/ 0x8, new UIntPtr(dwSize));
159 |
160 | if (pbi == null)
161 | {
162 | #if DEBUG
163 | Debug.WriteLine("[GetRemoteModuleHandleA] Couldn't allocate heap buffer");
164 | #endif
165 | return IntPtr.Zero; //Couldn't allocate heap buffer
166 | }
167 |
168 | dwStatus = Imports.NtQueryInformationProcess(_hProcess, /*ProcessBasicInformation*/ 0, pbi.Address, dwSizeNeeded, out dwSizeNeeded);
169 | }
170 |
171 | if (dwStatus >= 0)
172 | {
173 | if (pbi.Value.PebBaseAddress != IntPtr.Zero)
174 | {
175 | UIntPtr dwBytesRead;
176 | uint pebLdrAddress;
177 |
178 | if (Imports.ReadProcessMemory(_hProcess, pbi.Value.PebBaseAddress + 12 /*peb.Ldr*/, out pebLdrAddress, out dwBytesRead) )
179 | {
180 | var pLdrListHead = pebLdrAddress + /*InLoadOrderModuleList*/ 0x0C;
181 | var pLdrCurrentNode = pebLdrAddress + /*InLoadOrderModuleList*/ 0x0C;
182 |
183 | do
184 | {
185 | uint lstEntryAddress;
186 | if (!Imports.ReadProcessMemory(_hProcess, new IntPtr(pLdrCurrentNode), out lstEntryAddress, out dwBytesRead))
187 | {
188 | Imports.HeapFree(hHeap, 0, pbi.Address);
189 | }
190 | pLdrCurrentNode = lstEntryAddress;
191 |
192 | UNICODE_STRING baseDllName;
193 | Imports.ReadProcessMemory(_hProcess, new IntPtr(lstEntryAddress) + /*BaseDllName*/ 0x2C, out baseDllName, out dwBytesRead);
194 |
195 | var strBaseDllName = string.Empty;
196 |
197 | if (baseDllName.Length > 0)
198 | {
199 | var buffer = new byte[baseDllName.Length];
200 | Imports.ReadProcessMemory(_hProcess, baseDllName.Buffer, buffer, out dwBytesRead);
201 | strBaseDllName = Encoding.Unicode.GetString(buffer);
202 | }
203 |
204 | uint dllBase;
205 | uint sizeOfImage;
206 |
207 | Imports.ReadProcessMemory(_hProcess, new IntPtr(lstEntryAddress) + /*DllBase*/ 0x18, out dllBase, out dwBytesRead);
208 | Imports.ReadProcessMemory(_hProcess, new IntPtr(lstEntryAddress) + /*SizeOfImage*/ 0x20, out sizeOfImage, out dwBytesRead);
209 |
210 | if (dllBase != 0 && sizeOfImage != 0)
211 | {
212 | if(string.Equals(strBaseDllName, module, StringComparison.OrdinalIgnoreCase))
213 | {
214 | dwModuleHandle = new IntPtr(dllBase);
215 | break;
216 | }
217 | }
218 |
219 | } while (pLdrListHead != pLdrCurrentNode);
220 | }
221 | }
222 | }
223 |
224 | if (pbi != null)
225 | {
226 | Imports.HeapFree(hHeap, 0, pbi.Address);
227 | }
228 |
229 | return dwModuleHandle;
230 | }
231 |
232 | private IntPtr GetDependencyProcAddressA(IntPtr moduleBase, PCHAR procName)
233 | {
234 | IntPtr pFunc = IntPtr.Zero;
235 | IMAGE_DOS_HEADER hdrDos;
236 | IMAGE_NT_HEADERS32 hdrNt32;
237 |
238 | UIntPtr dwRead;
239 | Imports.ReadProcessMemory(_hProcess, moduleBase, out hdrDos, out dwRead);
240 |
241 | if (!hdrDos.isValid)
242 | {
243 | return IntPtr.Zero;
244 | }
245 |
246 | Imports.ReadProcessMemory(_hProcess, moduleBase + hdrDos.e_lfanew, out hdrNt32, out dwRead);
247 |
248 | if (!hdrNt32.isValid)
249 | {
250 | return IntPtr.Zero;
251 | }
252 |
253 | var expBase = hdrNt32.OptionalHeader.ExportTable.VirtualAddress;
254 | if (expBase > 0)
255 | {
256 | var expSize = hdrNt32.OptionalHeader.ExportTable.Size;
257 | var expData = (PIMAGE_EXPORT_DIRECTORY) AllocateMemory(expSize);
258 | Imports.ReadProcessMemory(_hProcess, moduleBase + (int) expBase, expData.Address, (int) expSize, out dwRead);
259 |
260 | var pAddressOfOrds = (PWORD) (expData.Address + (int) expData.Value.AddressOfNameOrdinals - (int) expBase);
261 | var pAddressOfNames = (PDWORD) (expData.Address + (int) expData.Value.AddressOfNames - (int) expBase);
262 | var pAddressOfFuncs = (PDWORD) (expData.Address + (int) expData.Value.AddressOfFunctions - (int) expBase);
263 |
264 |
265 | for (uint i = 0; i < expData.Value.NumberOfFunctions; i++)
266 | {
267 | ushort ordIndex;
268 | PCHAR pName = null;
269 |
270 | if (new PDWORD(procName.Address).Value <= 0xFFFF)
271 | {
272 | ordIndex = unchecked((ushort) i);
273 | }
274 | else if (new PDWORD(procName.Address).Value > 0xFFFF && i < expData.Value.NumberOfNames)
275 | {
276 | pName = (PCHAR) new IntPtr(pAddressOfNames[i] + expData.Address.ToInt32() - expBase);
277 | ordIndex = pAddressOfOrds[i];
278 | }
279 | else
280 | {
281 | return IntPtr.Zero;
282 | }
283 |
284 | if ((new PDWORD(procName.Address).Value <= 0xFFFF && new PDWORD(procName.Address).Value == ordIndex + expData.Value.Base) || (new PDWORD(procName.Address).Value > 0xFFFF && pName.ToString() == procName.ToString()))
285 | {
286 | pFunc = moduleBase + (int) pAddressOfFuncs[ordIndex];
287 |
288 | if (pFunc.ToInt64() >= (moduleBase + (int) expBase).ToInt64() && pFunc.ToInt64() <= (moduleBase + (int) expBase + (int) expSize).ToInt64())
289 | {
290 | var forwardStr = new byte[255];
291 | Imports.ReadProcessMemory(_hProcess, pFunc, forwardStr, out dwRead);
292 |
293 | var chainExp = Helpers.ToStringAnsi(forwardStr);
294 |
295 | var strDll = chainExp.Substring(0, chainExp.IndexOf(".")) + ".dll";
296 | var strName = chainExp.Substring(chainExp.IndexOf(".") + 1);
297 |
298 | var hChainMod = GetRemoteModuleHandleA(strDll);
299 | if (hChainMod == IntPtr.Zero)
300 | {
301 | // todo
302 | //hChainMod = LoadDependencyA(strDll.c_str());
303 | InjectDependency(strDll);
304 | }
305 |
306 | if (strName.StartsWith("#"))
307 | {
308 | pFunc = GetDependencyProcAddressA(hChainMod, new PCHAR(strName) + 1);
309 | }
310 | else
311 | {
312 | pFunc = GetDependencyProcAddressA(hChainMod, new PCHAR(strName));
313 | }
314 | }
315 |
316 | break;
317 | }
318 | }
319 |
320 | Imports.VirtualFree(expData.Address, 0, Imports.FreeType.Release);
321 | }
322 |
323 | return pFunc;
324 | }
325 |
326 | private bool ProcessImportTable(IntPtr baseAddress)
327 | {
328 | var imageNtHeaders = GetNtHeader(baseAddress);
329 |
330 | if (imageNtHeaders == null)
331 | {
332 | return false;
333 | }
334 |
335 | if (imageNtHeaders.Value.OptionalHeader.ImportTable.Size > 0)
336 | {
337 | var imageImportDescriptor = (PIMAGE_IMPORT_DESCRIPTOR) RvaToPointer(imageNtHeaders.Value.OptionalHeader.ImportTable.VirtualAddress, baseAddress);
338 |
339 | if (imageImportDescriptor != null)
340 | {
341 | for (; imageImportDescriptor.Value.Name > 0; imageImportDescriptor++)
342 | {
343 | var moduleName = (PCHAR) RvaToPointer(imageImportDescriptor.Value.Name, baseAddress);
344 | if (moduleName == null)
345 | {
346 | continue;
347 | }
348 |
349 | if (moduleName.ToString().Contains("-ms-win-crt-"))
350 | {
351 | moduleName = new PCHAR("ucrtbase.dll");
352 | }
353 |
354 | var moduleBase = GetRemoteModuleHandleA(moduleName.ToString());
355 | if (moduleBase == IntPtr.Zero)
356 | {
357 | // todo manual map injection for dependency
358 | InjectDependency(moduleName.ToString());
359 | moduleBase = GetRemoteModuleHandleA(moduleName.ToString());
360 |
361 | if (moduleBase == IntPtr.Zero)
362 | {
363 | #if DEBUG
364 | Debug.WriteLine("[ProcessImportTable] failed to obtain module handle");
365 | #endif
366 | // failed to obtain module handle
367 | continue;
368 | }
369 | }
370 |
371 | PIMAGE_THUNK_DATA imageThunkData;
372 | PIMAGE_THUNK_DATA imageFuncData;
373 |
374 | if (imageImportDescriptor.Value.OriginalFirstThunk > 0)
375 | {
376 | imageThunkData = (PIMAGE_THUNK_DATA) RvaToPointer(imageImportDescriptor.Value.OriginalFirstThunk, baseAddress);
377 | imageFuncData = (PIMAGE_THUNK_DATA) RvaToPointer(imageImportDescriptor.Value.FirstThunk, baseAddress);
378 | }
379 | else
380 | {
381 | imageThunkData = (PIMAGE_THUNK_DATA) RvaToPointer(imageImportDescriptor.Value.FirstThunk, baseAddress);
382 | imageFuncData = (PIMAGE_THUNK_DATA) RvaToPointer(imageImportDescriptor.Value.FirstThunk, baseAddress);
383 | }
384 |
385 | for (; imageThunkData.Value.AddressOfData > 0; imageThunkData++, imageFuncData++)
386 | {
387 | IntPtr functionAddress;
388 | var bSnapByOrdinal = (imageThunkData.Value.Ordinal & /*IMAGE_ORDINAL_FLAG32*/ 0x80000000) != 0;
389 |
390 | if (bSnapByOrdinal)
391 | {
392 | var ordinal = (short) (imageThunkData.Value.Ordinal & 0xffff);
393 | functionAddress = GetDependencyProcAddressA(moduleBase, new PCHAR(ordinal));
394 |
395 | if (functionAddress == IntPtr.Zero)
396 | {
397 | return false;
398 | }
399 | }
400 | else
401 | {
402 | var imageImportByName = (PIMAGE_IMPORT_BY_NAME) RvaToPointer(imageFuncData.Value.Ordinal, baseAddress);
403 | var mameOfImport = (PCHAR) imageImportByName.Address + /*imageImportByName->Name*/ 2;
404 | functionAddress = GetDependencyProcAddressA(moduleBase, mameOfImport);
405 | }
406 |
407 | //ImageFuncData->u1.Function = (size_t)FunctionAddress;
408 | Marshal.WriteInt32(imageFuncData.Address, functionAddress.ToInt32());
409 | }
410 | }
411 |
412 | return true;
413 | }
414 | else
415 | {
416 | #if DEBUG
417 | Debug.WriteLine("[ProcessImportTable] Size of table confirmed but pointer to data invalid");
418 | #endif
419 | // Size of table confirmed but pointer to data invalid
420 | return false;
421 | }
422 | }
423 | else
424 | {
425 | #if DEBUG
426 | Debug.WriteLine("[ProcessImportTable] no imports");
427 | #endif
428 | // no imports
429 | return true;
430 | }
431 | }
432 |
433 | private bool ProcessDelayedImportTable(IntPtr baseAddress, IntPtr remoteAddress)
434 | {
435 | var imageNtHeaders = GetNtHeader(baseAddress);
436 |
437 | if (imageNtHeaders == null)
438 | {
439 | return false;
440 | }
441 |
442 | if (imageNtHeaders.Value.OptionalHeader.DelayImportDescriptor.Size > 0)
443 | {
444 | var imageDelayedImportDescriptor =
445 | (PIMAGE_IMPORT_DESCRIPTOR) RvaToPointer(imageNtHeaders.Value.OptionalHeader.DelayImportDescriptor.VirtualAddress, baseAddress);
446 |
447 | if (imageDelayedImportDescriptor != null)
448 | {
449 | for (; imageDelayedImportDescriptor.Value.Name > 0; imageDelayedImportDescriptor++)
450 | {
451 | var moduleName = (PCHAR)RvaToPointer(imageDelayedImportDescriptor.Value.Name, baseAddress);
452 | if (moduleName == null)
453 | {
454 | continue;
455 | }
456 |
457 | var moduleBase = GetRemoteModuleHandleA(moduleName.ToString());
458 | if (moduleBase == IntPtr.Zero)
459 | {
460 | // todo manual map injection for dependency
461 | InjectDependency(moduleName.ToString());
462 | moduleBase = GetRemoteModuleHandleA(moduleName.ToString());
463 |
464 | if (moduleBase == IntPtr.Zero)
465 | {
466 | #if DEBUG
467 | Debug.WriteLine("[ProcessDelayedImportTable] no imports");
468 | #endif
469 | // failed to obtain module handle
470 | continue;
471 | }
472 | }
473 |
474 | PIMAGE_THUNK_DATA imageThunkData = null;
475 | PIMAGE_THUNK_DATA imageFuncData = null;
476 |
477 | if (imageDelayedImportDescriptor.Value.OriginalFirstThunk > 0)
478 | {
479 | imageThunkData = (PIMAGE_THUNK_DATA) RvaToPointer(imageDelayedImportDescriptor.Value.OriginalFirstThunk, baseAddress);
480 | imageFuncData = (PIMAGE_THUNK_DATA) RvaToPointer(imageDelayedImportDescriptor.Value.FirstThunk, baseAddress);
481 | }
482 | else
483 | {
484 | imageThunkData = (PIMAGE_THUNK_DATA) RvaToPointer(imageDelayedImportDescriptor.Value.FirstThunk, baseAddress);
485 | imageFuncData = (PIMAGE_THUNK_DATA) RvaToPointer(imageDelayedImportDescriptor.Value.FirstThunk, baseAddress);
486 | }
487 |
488 | for (; imageThunkData.Value.AddressOfData > 0; imageThunkData++, imageFuncData++)
489 | {
490 | IntPtr functionAddress;
491 | var bSnapByOrdinal = ((imageThunkData.Value.Ordinal & /*IMAGE_ORDINAL_FLAG32*/ 0x80000000) != 0);
492 |
493 | if (bSnapByOrdinal)
494 | {
495 | var ordinal = (short)(imageThunkData.Value.Ordinal & 0xffff);
496 | functionAddress = GetDependencyProcAddressA(moduleBase, new PCHAR(ordinal));
497 |
498 | if (functionAddress == IntPtr.Zero)
499 | {
500 | return false;
501 | }
502 | }
503 | else
504 | {
505 | var imageImportByName = (PIMAGE_IMPORT_BY_NAME) RvaToPointer(imageFuncData.Value.Ordinal, baseAddress);
506 | var mameOfImport = (PCHAR) imageImportByName.Address + /*imageImportByName->Name*/ 2;
507 | functionAddress = GetDependencyProcAddressA(moduleBase, mameOfImport);
508 | }
509 |
510 | //ImageFuncData->u1.Function = (size_t)FunctionAddress;
511 | Marshal.WriteInt32(imageFuncData.Address, functionAddress.ToInt32());
512 | }
513 | }
514 |
515 | return true;
516 | }
517 | else
518 | {
519 | #if DEBUG
520 | Debug.WriteLine("[ProcessDelayedImportTable] Size of table confirmed but pointer to data invalid");
521 | #endif
522 | // Size of table confirmed but pointer to data invalid
523 | return false;
524 | }
525 | }
526 | else
527 | {
528 | // no imports
529 | return true;
530 | }
531 | }
532 |
533 | private bool ProcessRelocation(uint imageBaseDelta, ushort data, PBYTE relocationBase)
534 | {
535 | var bReturn = true;
536 | PSHORT raw;
537 | PDWORD raw2;
538 |
539 | switch ((data >> 12) & 0xF)
540 | {
541 | case 1: // IMAGE_REL_BASED_HIGH
542 | raw = (PSHORT) (relocationBase + (data & 0xFFF)).Address;
543 | Marshal.WriteInt16(raw.Address, unchecked ((short) (raw.Value + (uint) ((ushort) ((imageBaseDelta >> 16) & 0xffff)))));
544 | break;
545 |
546 | case 2: // IMAGE_REL_BASED_LOW
547 | raw = (PSHORT) (relocationBase + (data & 0xFFF)).Address;
548 | Marshal.WriteInt16(raw.Address, unchecked((short) (raw.Value + (uint) ((ushort) (imageBaseDelta & 0xffff)))));
549 | break;
550 |
551 | case 3: // IMAGE_REL_BASED_HIGHLOW
552 | raw2 = (PDWORD) (relocationBase + (data & 0xFFF)).Address;
553 | Marshal.WriteInt32(raw2.Address, unchecked((int) (raw2.Value + imageBaseDelta)));
554 | break;
555 |
556 | case 10: // IMAGE_REL_BASED_DIR64
557 | raw2 = (PDWORD) (relocationBase + (data & 0xFFF)).Address;
558 | Marshal.WriteInt32(raw2.Address, unchecked((int) (raw2.Value + imageBaseDelta)));
559 | break;
560 |
561 | case 0: // IMAGE_REL_BASED_ABSOLUTE
562 | break;
563 |
564 | case 4: // IMAGE_REL_BASED_HIGHADJ
565 | break;
566 |
567 | default:
568 | bReturn = false;
569 | break;
570 | }
571 |
572 | return bReturn;
573 | }
574 |
575 | private bool ProcessRelocations(IntPtr baseAddress, IntPtr remoteAddress)
576 | {
577 | var imageNtHeaders = GetNtHeader(baseAddress);
578 |
579 | if (imageNtHeaders == null)
580 | {
581 | return false;
582 | }
583 |
584 | if ((imageNtHeaders.Value.FileHeader.Characteristics & /*IMAGE_FILE_RELOCS_STRIPPED*/ 0x01) > 0)
585 | {
586 | return true;
587 | }
588 | else
589 | {
590 | var imageBaseDelta = (uint) (remoteAddress.ToInt32() - imageNtHeaders.Value.OptionalHeader.ImageBase);
591 | var relocationSize = imageNtHeaders.Value.OptionalHeader.BaseRelocationTable.Size;
592 |
593 | if (relocationSize > 0)
594 | {
595 | var relocationDirectory = (PIMAGE_BASE_RELOCATION) RvaToPointer(imageNtHeaders.Value.OptionalHeader.BaseRelocationTable.VirtualAddress, baseAddress);
596 |
597 | if (relocationDirectory != null)
598 | {
599 | var relocationEnd = (PBYTE) relocationDirectory.Address + (int) relocationSize;
600 |
601 | while (relocationDirectory.Address.ToInt64() < relocationEnd.Address.ToInt64())
602 | {
603 | var relocBase = (PBYTE) RvaToPointer(relocationDirectory.Value.VirtualAddress, baseAddress);
604 | var numRelocs = (relocationDirectory.Value.SizeOfBlock - 8) >> 1;
605 | var relocationData = (PWORD) ((relocationDirectory + 1).Address);
606 |
607 | for (uint i = 0; i < numRelocs; i++, relocationData++)
608 | {
609 | ProcessRelocation(imageBaseDelta, relocationData.Value, relocBase);
610 | }
611 |
612 | relocationDirectory = (PIMAGE_BASE_RELOCATION) relocationData.Address;
613 | }
614 | }
615 | else
616 | {
617 | return false;
618 | }
619 |
620 | }
621 | }
622 |
623 | return true;
624 | }
625 |
626 | private uint GetSectionProtection(DataSectionFlags characteristics)
627 | {
628 | uint result = 0;
629 | if (characteristics.HasFlag(DataSectionFlags.MemoryNotCached))
630 | result |= /*PAGE_NOCACHE*/ 0x200;
631 |
632 | if (characteristics.HasFlag(DataSectionFlags.MemoryExecute))
633 | {
634 | if (characteristics.HasFlag(DataSectionFlags.MemoryRead))
635 | {
636 | if (characteristics.HasFlag(DataSectionFlags.MemoryWrite))
637 | result |= /*PAGE_EXECUTE_READWRITE*/ 0x40;
638 | else
639 | result |= /*PAGE_EXECUTE_READ*/ 0x20;
640 | }
641 | else if (characteristics.HasFlag(DataSectionFlags.MemoryWrite))
642 | result |= /*PAGE_EXECUTE_WRITECOPY*/ 0x80;
643 | else
644 | result |= /*PAGE_EXECUTE*/ 0x10;
645 | }
646 | else if (characteristics.HasFlag(DataSectionFlags.MemoryRead))
647 | {
648 | if (characteristics.HasFlag(DataSectionFlags.MemoryWrite))
649 | result |= /*PAGE_READWRITE*/ 0x04;
650 | else
651 | result |= /*PAGE_READONLY*/ 0x02;
652 | }
653 | else if (characteristics.HasFlag(DataSectionFlags.MemoryWrite))
654 | result |= /*PAGE_WRITECOPY*/ 0x08;
655 | else
656 | result |= /*PAGE_NOACCESS*/ 0x01;
657 |
658 | return result;
659 | }
660 |
661 | private bool ProcessSection(char[] name, IntPtr baseAddress, IntPtr remoteAddress, ulong rawData, ulong virtualAddress, ulong rawSize, ulong virtualSize, uint protectFlag)
662 | {
663 | UIntPtr lpNumberOfBytesWritten;
664 | uint dwOldProtect;
665 |
666 | if (
667 | !Imports.WriteProcessMemory(_hProcess, new IntPtr(remoteAddress.ToInt64() + (long) virtualAddress), new IntPtr(baseAddress.ToInt64() + (long) rawData),
668 | new IntPtr((long) rawSize), out lpNumberOfBytesWritten))
669 | {
670 | return false;
671 | }
672 |
673 | if (!Imports.VirtualProtectEx(_hProcess, new IntPtr(remoteAddress.ToInt64() + (long)virtualAddress), new UIntPtr(virtualSize), protectFlag, out dwOldProtect))
674 | {
675 | return false;
676 | }
677 |
678 | return true;
679 | }
680 |
681 | private bool ProcessSections(IntPtr baseAddress, IntPtr remoteAddress)
682 | {
683 | var imageNtHeaders = GetNtHeader(baseAddress);
684 |
685 | if (imageNtHeaders == null)
686 | {
687 | return false;
688 | }
689 |
690 | // skip PE header
691 |
692 | var imageSectionHeader = (PIMAGE_SECTION_HEADER) (imageNtHeaders.Address + /*OptionalHeader*/ 24 + imageNtHeaders.Value.FileHeader.SizeOfOptionalHeader);
693 | for (ushort i = 0; i < imageNtHeaders.Value.FileHeader.NumberOfSections; i++)
694 | {
695 | if (Helpers._stricmp(".reloc".ToCharArray(), imageSectionHeader[i].Name))
696 | {
697 | continue;
698 | }
699 |
700 | var characteristics = imageSectionHeader[i].Characteristics;
701 |
702 | if (characteristics.HasFlag(DataSectionFlags.MemoryRead) || characteristics.HasFlag(DataSectionFlags.MemoryWrite) || characteristics.HasFlag(DataSectionFlags.MemoryExecute))
703 | {
704 | var protection = GetSectionProtection(imageSectionHeader[i].Characteristics);
705 | ProcessSection(imageSectionHeader[i].Name, baseAddress, remoteAddress, imageSectionHeader[i].PointerToRawData,
706 | imageSectionHeader[i].VirtualAddress, imageSectionHeader[i].SizeOfRawData, imageSectionHeader[i].VirtualSize, protection);
707 | }
708 | }
709 |
710 | return true;
711 | }
712 |
713 | private bool ExecuteRemoteThreadBuffer(byte[] threadData, bool async)
714 | {
715 | var lpAddress = RemoteAllocateMemory((uint) threadData.Length);
716 |
717 |
718 | if (lpAddress == IntPtr.Zero)
719 | {
720 | return false;
721 | }
722 |
723 | UIntPtr bytesWritten;
724 | var result = Imports.WriteProcessMemory(_hProcess, lpAddress, threadData, threadData.Length, out bytesWritten);
725 |
726 | if (result)
727 | {
728 | var hHandle = Imports.CreateRemoteThread(_hProcess, IntPtr.Zero, 0, lpAddress, IntPtr.Zero, 0, IntPtr.Zero);
729 |
730 | if (async)
731 | {
732 | var t = new Thread(() =>
733 | {
734 | Imports.WaitForSingleObject(hHandle, 5000);
735 | Imports.VirtualFreeEx(_hProcess, lpAddress, 0, Imports.FreeType.Release);
736 | }) {IsBackground = true};
737 | t.Start();
738 | }
739 | else
740 | {
741 | Imports.WaitForSingleObject(hHandle, 4000);
742 | Imports.VirtualFreeEx(_hProcess, lpAddress, 0, Imports.FreeType.Release);
743 | }
744 | }
745 |
746 | return result;
747 | }
748 |
749 | private bool CallEntryPoint(IntPtr baseAddress, uint entrypoint, bool async)
750 | {
751 | var buffer = new List();
752 | buffer.Add(0x68);
753 | buffer.AddRange(BitConverter.GetBytes(baseAddress.ToInt32()));
754 | buffer.Add(0x68);
755 | buffer.AddRange(BitConverter.GetBytes(/*DLL_PROCESS_ATTACH*/1));
756 | buffer.Add(0x68);
757 | buffer.AddRange(BitConverter.GetBytes(0));
758 | buffer.Add(0xB8);
759 | buffer.AddRange(BitConverter.GetBytes(entrypoint));
760 | buffer.Add(0xFF);
761 | buffer.Add(0xD0);
762 | buffer.Add(0x33);
763 | buffer.Add(0xC0);
764 | buffer.Add(0xC2);
765 | buffer.Add(0x04);
766 | buffer.Add(0x00);
767 |
768 | return ExecuteRemoteThreadBuffer(buffer.ToArray(), async);
769 | }
770 |
771 | private bool ProcessTlsEntries(IntPtr baseAddress, IntPtr remoteAddress)
772 | {
773 | UIntPtr dwRead;
774 | var imageNtHeaders = GetNtHeader(baseAddress);
775 |
776 | if (imageNtHeaders == null)
777 | {
778 | return false;
779 | }
780 |
781 | if (imageNtHeaders.Value.OptionalHeader.TLSTable.Size == 0)
782 | {
783 | return true;
784 | }
785 |
786 | var tlsDirectory = (PIMAGE_TLS_DIRECTORY32) RvaToPointer(imageNtHeaders.Value.OptionalHeader.TLSTable.VirtualAddress, baseAddress);
787 |
788 | if (tlsDirectory == null)
789 | {
790 | return true;
791 | }
792 |
793 | if (tlsDirectory.Value.AddressOfCallBacks == 0)
794 | {
795 | return true;
796 | }
797 |
798 | var buffer = new byte[0xFF * 4];
799 | if (!Imports.ReadProcessMemory(_hProcess, new IntPtr(tlsDirectory.Value.AddressOfCallBacks), buffer, out dwRead))
800 | {
801 | return false;
802 | }
803 |
804 | var tLSCallbacks = new PDWORD(buffer);
805 | var result = true;
806 |
807 | for (uint i = 0; tLSCallbacks[i] > 0; i++)
808 | {
809 | result = CallEntryPoint(remoteAddress, tLSCallbacks[i], false);
810 |
811 | if (!result)
812 | {
813 | break;
814 | }
815 | }
816 |
817 | return result;
818 | }
819 |
820 | private IntPtr LoadImageToMemory(IntPtr baseAddress)
821 | {
822 | var imageNtHeaders = GetNtHeader(baseAddress);
823 |
824 | if (imageNtHeaders == null)
825 | {
826 | #if DEBUG
827 | Debug.WriteLine("[LoadImageToMemory] Invalid Image: No IMAGE_NT_HEADERS");
828 | #endif
829 | // Invalid Image: No IMAGE_NT_HEADERS
830 | return IntPtr.Zero;
831 | }
832 |
833 | if (imageNtHeaders.Value.FileHeader.NumberOfSections == 0)
834 | {
835 | #if DEBUG
836 | Debug.WriteLine("[LoadImageToMemory] Invalid Image: No Sections");
837 | #endif
838 | // Invalid Image: No Sections
839 | return IntPtr.Zero;
840 | }
841 |
842 | var rvaLow = unchecked((uint) -1);
843 | var rvaHigh = 0u;
844 | var imageSectionHeader = (PIMAGE_SECTION_HEADER) (imageNtHeaders.Address + /*OptionalHeader*/
845 | 24 + imageNtHeaders.Value.FileHeader.SizeOfOptionalHeader);
846 |
847 | for (uint i = 0; i < imageNtHeaders.Value.FileHeader.NumberOfSections; i++)
848 | {
849 | if (imageSectionHeader[i].VirtualSize == 0)
850 | {
851 | continue;
852 | }
853 |
854 | if (imageSectionHeader[i].VirtualAddress < rvaLow)
855 | {
856 | rvaLow = imageSectionHeader[i].VirtualAddress;
857 | }
858 |
859 | if (imageSectionHeader[i].VirtualAddress + imageSectionHeader[i].VirtualSize > rvaHigh)
860 | {
861 | rvaHigh = imageSectionHeader[i].VirtualAddress + imageSectionHeader[i].VirtualSize;
862 | }
863 | }
864 |
865 | var imageSize = rvaHigh - rvaLow;
866 |
867 | if (imageNtHeaders.Value.OptionalHeader.ImageBase % 4096 != 0)
868 | {
869 | #if DEBUG
870 | Debug.WriteLine("[LoadImageToMemory] Invalid Image: Not Page Aligned");
871 | #endif
872 | // Invalid Image: Not Page Aligned
873 | return IntPtr.Zero;
874 | }
875 |
876 | if (imageNtHeaders.Value.OptionalHeader.DelayImportDescriptor.Size > 0)
877 | {
878 | #if DEBUG
879 | Debug.WriteLine("[LoadImageToMemory] This method is not supported for Managed executables");
880 | #endif
881 | // This method is not supported for Managed executables
882 | return IntPtr.Zero;
883 | }
884 |
885 | var allocatedRemoteMemory = RemoteAllocateMemory(imageSize);
886 | if (allocatedRemoteMemory == IntPtr.Zero)
887 | {
888 | #if DEBUG
889 | Debug.WriteLine("[LoadImageToMemory] Failed to allocate remote memory for module");
890 | #endif
891 | // Failed to allocate remote memory for module
892 | return IntPtr.Zero;
893 | }
894 |
895 | if (!ProcessImportTable(baseAddress))
896 | {
897 | #if DEBUG
898 | Debug.WriteLine("[LoadImageToMemory] Failed to fix imports");
899 | #endif
900 | // Failed to fix imports
901 | return IntPtr.Zero;
902 | }
903 |
904 | if (!ProcessDelayedImportTable(baseAddress, allocatedRemoteMemory))
905 | {
906 | #if DEBUG
907 | Debug.WriteLine("[LoadImageToMemory] Failed to fix delayed imports");
908 | #endif
909 | // Failed to fix delayed imports
910 | return IntPtr.Zero;
911 | }
912 |
913 | if (!ProcessRelocations(baseAddress, allocatedRemoteMemory))
914 | {
915 | #if DEBUG
916 | Debug.WriteLine("[LoadImageToMemory] Failed to process relocations");
917 | #endif
918 | // Failed to process relocations
919 | return IntPtr.Zero;
920 | }
921 |
922 | if (!ProcessSections(baseAddress, allocatedRemoteMemory))
923 | {
924 | #if DEBUG
925 | Debug.WriteLine("[LoadImageToMemory] Failed to process sections");
926 | #endif
927 | // Failed to process sections
928 | return IntPtr.Zero;
929 | }
930 |
931 | if (!ProcessTlsEntries(baseAddress, allocatedRemoteMemory))
932 | {
933 | #if DEBUG
934 | Debug.WriteLine("[LoadImageToMemory] ProcessTlsEntries Failed");
935 | #endif
936 | // ProcessTlsEntries Failed
937 | return IntPtr.Zero;
938 | }
939 |
940 | if (imageNtHeaders.Value.OptionalHeader.AddressOfEntryPoint > 0)
941 | {
942 | var dllEntryPoint = allocatedRemoteMemory.ToInt32() + (int) imageNtHeaders.Value.OptionalHeader.AddressOfEntryPoint;
943 |
944 | if (!CallEntryPoint(allocatedRemoteMemory, (uint) dllEntryPoint, AsyncInjection))
945 | {
946 | #if DEBUG
947 | Debug.WriteLine("[LoadImageToMemory] Failed to call entrypoint");
948 | #endif
949 | return IntPtr.Zero;
950 | }
951 | }
952 |
953 | return allocatedRemoteMemory;
954 | }
955 |
956 | private GCHandle PinBuffer(byte[] buffer)
957 | {
958 | return GCHandle.Alloc(buffer, GCHandleType.Pinned);
959 | }
960 |
961 | private void FreeHandle(GCHandle handle)
962 | {
963 | if (handle.IsAllocated)
964 | {
965 | handle.Free();
966 | }
967 | }
968 |
969 | private void OpenTarget()
970 | {
971 | _hProcess = Imports.OpenProcess(_process, Imports.ProcessAccessFlags.All);
972 |
973 | if (_hProcess == IntPtr.Zero)
974 | {
975 | throw new Exception($"Failed to open handle. Error {Marshal.GetLastWin32Error()}");
976 | }
977 | }
978 |
979 | private void CloseTarget()
980 | {
981 | if (_hProcess != IntPtr.Zero)
982 | {
983 | Imports.CloseHandle(_hProcess);
984 | _hProcess = IntPtr.Zero;
985 | }
986 | }
987 |
988 | #endregion
989 |
990 | #region API
991 |
992 | public IntPtr Inject(byte[] buffer)
993 | {
994 | var handle = new GCHandle();
995 |
996 | // clone buffer
997 | buffer = buffer.ToArray();
998 |
999 | var result = IntPtr.Zero;
1000 |
1001 | try
1002 | {
1003 | // verify target
1004 | if (_process == null || _process.HasExited)
1005 | {
1006 | return result;
1007 | }
1008 |
1009 | //
1010 | handle = PinBuffer(buffer);
1011 | OpenTarget();
1012 |
1013 | // inject
1014 | result = LoadImageToMemory(handle.AddrOfPinnedObject());
1015 | }
1016 | catch (Exception e)
1017 | {
1018 | #if DEBUG
1019 | Debug.WriteLine($"Unexpected error {e}");
1020 | #endif
1021 | }
1022 | finally
1023 | {
1024 | // close stuff
1025 | FreeHandle(handle);
1026 | CloseTarget();
1027 | }
1028 |
1029 | return result;
1030 | }
1031 |
1032 | public IntPtr Inject(string file)
1033 | {
1034 | return Inject(File.ReadAllBytes(file));
1035 | }
1036 |
1037 | #endregion
1038 |
1039 | public ManualMapInjector(Process p)
1040 | {
1041 | _process = p;
1042 | }
1043 | }
1044 | }
1045 |
--------------------------------------------------------------------------------
/GitHub SimpleLoader/Injection/Types/ManagedPtr.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Runtime.InteropServices;
3 |
4 | namespace ManualMapInjection.Injection.Types
5 | {
6 | public class ManagedPtr where T : struct
7 | {
8 | public IntPtr Address { get; }
9 |
10 | public T Value
11 | {
12 | get { return this[0]; }
13 | }
14 |
15 | private int? _structSize;
16 |
17 | public int StructSize
18 | {
19 | get
20 | {
21 | if (_structSize == null)
22 | {
23 | _structSize = Marshal.SizeOf(typeof(T));
24 | }
25 |
26 | return _structSize.Value;
27 | }
28 | }
29 |
30 | private static T GetStructure(IntPtr address)
31 | {
32 | return (T) Marshal.PtrToStructure(address, typeof(T));
33 | }
34 |
35 | public T this[uint index]
36 | {
37 | get { return GetStructure(Address + (int) index * StructSize); }
38 | }
39 |
40 | public static ManagedPtr operator +(ManagedPtr c1, int c2)
41 | {
42 | return new ManagedPtr(c1.Address + c2 * c1.StructSize);
43 | }
44 |
45 | public static ManagedPtr operator ++(ManagedPtr a)
46 | {
47 | return a + 1;
48 | }
49 |
50 | public static ManagedPtr operator -(ManagedPtr c1, int c2)
51 | {
52 | return new ManagedPtr(c1.Address - c2 * c1.StructSize);
53 | }
54 |
55 | public static ManagedPtr operator --(ManagedPtr a)
56 | {
57 | return a - 1;
58 | }
59 |
60 | public static explicit operator ManagedPtr(IntPtr ptr)
61 | {
62 | if (ptr == IntPtr.Zero)
63 | {
64 | return null;
65 | }
66 |
67 | return new ManagedPtr(ptr);
68 | }
69 |
70 | public static explicit operator IntPtr(ManagedPtr ptr)
71 | {
72 | return ptr.Address;
73 | }
74 |
75 | private GCHandle _handle;
76 |
77 | private bool _freeHandle;
78 |
79 | public ManagedPtr(IntPtr address)
80 | {
81 | Address = address;
82 | }
83 |
84 | public ManagedPtr(object value, bool freeHandle = true)
85 | {
86 | if (value == null)
87 | {
88 | throw new InvalidOperationException("Cannot create a pointer of type null");
89 | }
90 |
91 | try
92 | {
93 | _handle = GCHandle.Alloc(value, GCHandleType.Pinned);
94 | }
95 | catch (Exception)
96 | {
97 | throw new InvalidOperationException($"Cannot create a pointer of type {value.GetType().Name}");
98 | }
99 |
100 | _freeHandle = freeHandle;
101 | Address = _handle.AddrOfPinnedObject();
102 | }
103 |
104 | ~ManagedPtr()
105 | {
106 | if (_handle.IsAllocated && _freeHandle)
107 | {
108 | _handle.Free();
109 | }
110 | }
111 | }
112 | }
113 |
--------------------------------------------------------------------------------
/GitHub SimpleLoader/Injection/Win32/Definitions.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Runtime.InteropServices;
3 | using ManualMapInjection.Injection.Types;
4 |
5 | namespace ManualMapInjection.Injection.Win32
6 | {
7 | public enum MachineType : ushort
8 | {
9 | Native = 0,
10 | I386 = 0x014c,
11 | Itanium = 0x0200,
12 | x64 = 0x8664
13 | }
14 |
15 | public enum MagicType : ushort
16 | {
17 | IMAGE_NT_OPTIONAL_HDR32_MAGIC = 0x10b,
18 | IMAGE_NT_OPTIONAL_HDR64_MAGIC = 0x20b
19 | }
20 |
21 | public enum SubSystemType : ushort
22 | {
23 | IMAGE_SUBSYSTEM_UNKNOWN = 0,
24 | IMAGE_SUBSYSTEM_NATIVE = 1,
25 | IMAGE_SUBSYSTEM_WINDOWS_GUI = 2,
26 | IMAGE_SUBSYSTEM_WINDOWS_CUI = 3,
27 | IMAGE_SUBSYSTEM_POSIX_CUI = 7,
28 | IMAGE_SUBSYSTEM_WINDOWS_CE_GUI = 9,
29 | IMAGE_SUBSYSTEM_EFI_APPLICATION = 10,
30 | IMAGE_SUBSYSTEM_EFI_BOOT_SERVICE_DRIVER = 11,
31 | IMAGE_SUBSYSTEM_EFI_RUNTIME_DRIVER = 12,
32 | IMAGE_SUBSYSTEM_EFI_ROM = 13,
33 | IMAGE_SUBSYSTEM_XBOX = 14
34 | }
35 |
36 | public enum DllCharacteristicsType : ushort
37 | {
38 | RES_0 = 0x0001,
39 | RES_1 = 0x0002,
40 | RES_2 = 0x0004,
41 | RES_3 = 0x0008,
42 | IMAGE_DLL_CHARACTERISTICS_DYNAMIC_BASE = 0x0040,
43 | IMAGE_DLL_CHARACTERISTICS_FORCE_INTEGRITY = 0x0080,
44 | IMAGE_DLL_CHARACTERISTICS_NX_COMPAT = 0x0100,
45 | IMAGE_DLLCHARACTERISTICS_NO_ISOLATION = 0x0200,
46 | IMAGE_DLLCHARACTERISTICS_NO_SEH = 0x0400,
47 | IMAGE_DLLCHARACTERISTICS_NO_BIND = 0x0800,
48 | RES_4 = 0x1000,
49 | IMAGE_DLLCHARACTERISTICS_WDM_DRIVER = 0x2000,
50 | IMAGE_DLLCHARACTERISTICS_TERMINAL_SERVER_AWARE = 0x8000
51 | }
52 |
53 | [Flags]
54 | public enum DataSectionFlags : uint
55 | {
56 | ///
57 | /// Reserved for future use.
58 | ///
59 | TypeReg = 0x00000000,
60 |
61 | ///
62 | /// Reserved for future use.
63 | ///
64 | TypeDsect = 0x00000001,
65 |
66 | ///
67 | /// Reserved for future use.
68 | ///
69 | TypeNoLoad = 0x00000002,
70 |
71 | ///
72 | /// Reserved for future use.
73 | ///
74 | TypeGroup = 0x00000004,
75 |
76 | ///
77 | /// The section should not be padded to the next boundary. This flag is obsolete and is replaced by IMAGE_SCN_ALIGN_1BYTES. This is valid only for object files.
78 | ///
79 | TypeNoPadded = 0x00000008,
80 |
81 | ///
82 | /// Reserved for future use.
83 | ///
84 | TypeCopy = 0x00000010,
85 |
86 | ///
87 | /// The section contains executable code.
88 | ///
89 | ContentCode = 0x00000020,
90 |
91 | ///
92 | /// The section contains initialized data.
93 | ///
94 | ContentInitializedData = 0x00000040,
95 |
96 | ///
97 | /// The section contains uninitialized data.
98 | ///
99 | ContentUninitializedData = 0x00000080,
100 |
101 | ///
102 | /// Reserved for future use.
103 | ///
104 | LinkOther = 0x00000100,
105 |
106 | ///
107 | /// The section contains comments or other information. The .drectve section has this type. This is valid for object files only.
108 | ///
109 | LinkInfo = 0x00000200,
110 |
111 | ///
112 | /// Reserved for future use.
113 | ///
114 | TypeOver = 0x00000400,
115 |
116 | ///
117 | /// The section will not become part of the image. This is valid only for object files.
118 | ///
119 | LinkRemove = 0x00000800,
120 |
121 | ///
122 | /// The section contains COMDAT data. For more information, see section 5.5.6, COMDAT Sections (Object Only). This is valid only for object files.
123 | ///
124 | LinkComDat = 0x00001000,
125 |
126 | ///
127 | /// Reset speculative exceptions handling bits in the TLB entries for this section.
128 | ///
129 | NoDeferSpecExceptions = 0x00004000,
130 |
131 | ///
132 | /// The section contains data referenced through the global pointer (GP).
133 | ///
134 | RelativeGP = 0x00008000,
135 |
136 | ///
137 | /// Reserved for future use.
138 | ///
139 | MemPurgeable = 0x00020000,
140 |
141 | ///
142 | /// Reserved for future use.
143 | ///
144 | Memory16Bit = 0x00020000,
145 |
146 | ///
147 | /// Reserved for future use.
148 | ///
149 | MemoryLocked = 0x00040000,
150 |
151 | ///
152 | /// Reserved for future use.
153 | ///
154 | MemoryPreload = 0x00080000,
155 |
156 | ///
157 | /// Align data on a 1-byte boundary. Valid only for object files.
158 | ///
159 | Align1Bytes = 0x00100000,
160 |
161 | ///
162 | /// Align data on a 2-byte boundary. Valid only for object files.
163 | ///
164 | Align2Bytes = 0x00200000,
165 |
166 | ///
167 | /// Align data on a 4-byte boundary. Valid only for object files.
168 | ///
169 | Align4Bytes = 0x00300000,
170 |
171 | ///
172 | /// Align data on an 8-byte boundary. Valid only for object files.
173 | ///
174 | Align8Bytes = 0x00400000,
175 |
176 | ///
177 | /// Align data on a 16-byte boundary. Valid only for object files.
178 | ///
179 | Align16Bytes = 0x00500000,
180 |
181 | ///
182 | /// Align data on a 32-byte boundary. Valid only for object files.
183 | ///
184 | Align32Bytes = 0x00600000,
185 |
186 | ///
187 | /// Align data on a 64-byte boundary. Valid only for object files.
188 | ///
189 | Align64Bytes = 0x00700000,
190 |
191 | ///
192 | /// Align data on a 128-byte boundary. Valid only for object files.
193 | ///
194 | Align128Bytes = 0x00800000,
195 |
196 | ///
197 | /// Align data on a 256-byte boundary. Valid only for object files.
198 | ///
199 | Align256Bytes = 0x00900000,
200 |
201 | ///
202 | /// Align data on a 512-byte boundary. Valid only for object files.
203 | ///
204 | Align512Bytes = 0x00A00000,
205 |
206 | ///
207 | /// Align data on a 1024-byte boundary. Valid only for object files.
208 | ///
209 | Align1024Bytes = 0x00B00000,
210 |
211 | ///
212 | /// Align data on a 2048-byte boundary. Valid only for object files.
213 | ///
214 | Align2048Bytes = 0x00C00000,
215 |
216 | ///
217 | /// Align data on a 4096-byte boundary. Valid only for object files.
218 | ///
219 | Align4096Bytes = 0x00D00000,
220 |
221 | ///
222 | /// Align data on an 8192-byte boundary. Valid only for object files.
223 | ///
224 | Align8192Bytes = 0x00E00000,
225 |
226 | ///
227 | /// The section contains extended relocations.
228 | ///
229 | LinkExtendedRelocationOverflow = 0x01000000,
230 |
231 | ///
232 | /// The section can be discarded as needed.
233 | ///
234 | MemoryDiscardable = 0x02000000,
235 |
236 | ///
237 | /// The section cannot be cached.
238 | ///
239 | MemoryNotCached = 0x04000000,
240 |
241 | ///
242 | /// The section is not pageable.
243 | ///
244 | MemoryNotPaged = 0x08000000,
245 |
246 | ///
247 | /// The section can be shared in memory.
248 | ///
249 | MemoryShared = 0x10000000,
250 |
251 | ///
252 | /// The section can be executed as code.
253 | ///
254 | MemoryExecute = 0x20000000,
255 |
256 | ///
257 | /// The section can be read.
258 | ///
259 | MemoryRead = 0x40000000,
260 |
261 | ///
262 | /// The section can be written to.
263 | ///
264 | MemoryWrite = 0x80000000
265 | }
266 |
267 | [StructLayout(LayoutKind.Sequential)]
268 | public struct IMAGE_DOS_HEADER
269 | {
270 | [MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)] public char[] e_magic; // Magic number
271 | public UInt16 e_cblp; // Bytes on last page of file
272 | public UInt16 e_cp; // Pages in file
273 | public UInt16 e_crlc; // Relocations
274 | public UInt16 e_cparhdr; // Size of header in paragraphs
275 | public UInt16 e_minalloc; // Minimum extra paragraphs needed
276 | public UInt16 e_maxalloc; // Maximum extra paragraphs needed
277 | public UInt16 e_ss; // Initial (relative) SS value
278 | public UInt16 e_sp; // Initial SP value
279 | public UInt16 e_csum; // Checksum
280 | public UInt16 e_ip; // Initial IP value
281 | public UInt16 e_cs; // Initial (relative) CS value
282 | public UInt16 e_lfarlc; // File address of relocation table
283 | public UInt16 e_ovno; // Overlay number
284 | [MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)] public UInt16[] e_res1; // Reserved words
285 | public UInt16 e_oemid; // OEM identifier (for e_oeminfo)
286 | public UInt16 e_oeminfo; // OEM information; e_oemid specific
287 | [MarshalAs(UnmanagedType.ByValArray, SizeConst = 10)] public UInt16[] e_res2; // Reserved words
288 | public Int32 e_lfanew; // File address of new exe header
289 |
290 | private string _e_magic
291 | {
292 | get { return new string(e_magic); }
293 | }
294 |
295 | public bool isValid
296 | {
297 | get { return _e_magic == "MZ"; }
298 | }
299 | }
300 |
301 | [StructLayout(LayoutKind.Sequential)]
302 | public struct IMAGE_FILE_HEADER
303 | {
304 | public UInt16 Machine;
305 | public UInt16 NumberOfSections;
306 | public UInt32 TimeDateStamp;
307 | public UInt32 PointerToSymbolTable;
308 | public UInt32 NumberOfSymbols;
309 | public UInt16 SizeOfOptionalHeader;
310 | public UInt16 Characteristics;
311 | }
312 |
313 | [StructLayout(LayoutKind.Sequential)]
314 | public struct IMAGE_DATA_DIRECTORY
315 | {
316 | public UInt32 VirtualAddress;
317 | public UInt32 Size;
318 | }
319 |
320 | [StructLayout(LayoutKind.Explicit)]
321 | public struct IMAGE_OPTIONAL_HEADER32
322 | {
323 | [FieldOffset(0)] public MagicType Magic;
324 |
325 | [FieldOffset(2)] public byte MajorLinkerVersion;
326 |
327 | [FieldOffset(3)] public byte MinorLinkerVersion;
328 |
329 | [FieldOffset(4)] public uint SizeOfCode;
330 |
331 | [FieldOffset(8)] public uint SizeOfInitializedData;
332 |
333 | [FieldOffset(12)] public uint SizeOfUninitializedData;
334 |
335 | [FieldOffset(16)] public uint AddressOfEntryPoint;
336 |
337 | [FieldOffset(20)] public uint BaseOfCode;
338 |
339 | // PE32 contains this additional field
340 | [FieldOffset(24)] public uint BaseOfData;
341 |
342 | [FieldOffset(28)] public uint ImageBase;
343 |
344 | [FieldOffset(32)] public uint SectionAlignment;
345 |
346 | [FieldOffset(36)] public uint FileAlignment;
347 |
348 | [FieldOffset(40)] public ushort MajorOperatingSystemVersion;
349 |
350 | [FieldOffset(42)] public ushort MinorOperatingSystemVersion;
351 |
352 | [FieldOffset(44)] public ushort MajorImageVersion;
353 |
354 | [FieldOffset(46)] public ushort MinorImageVersion;
355 |
356 | [FieldOffset(48)] public ushort MajorSubsystemVersion;
357 |
358 | [FieldOffset(50)] public ushort MinorSubsystemVersion;
359 |
360 | [FieldOffset(52)] public uint Win32VersionValue;
361 |
362 | [FieldOffset(56)] public uint SizeOfImage;
363 |
364 | [FieldOffset(60)] public uint SizeOfHeaders;
365 |
366 | [FieldOffset(64)] public uint CheckSum;
367 |
368 | [FieldOffset(68)] public SubSystemType Subsystem;
369 |
370 | [FieldOffset(70)] public DllCharacteristicsType DllCharacteristics;
371 |
372 | [FieldOffset(72)] public uint SizeOfStackReserve;
373 |
374 | [FieldOffset(76)] public uint SizeOfStackCommit;
375 |
376 | [FieldOffset(80)] public uint SizeOfHeapReserve;
377 |
378 | [FieldOffset(84)] public uint SizeOfHeapCommit;
379 |
380 | [FieldOffset(88)] public uint LoaderFlags;
381 |
382 | [FieldOffset(92)] public uint NumberOfRvaAndSizes;
383 |
384 | [FieldOffset(96)] public IMAGE_DATA_DIRECTORY ExportTable;
385 |
386 | [FieldOffset(104)] public IMAGE_DATA_DIRECTORY ImportTable;
387 |
388 | [FieldOffset(112)] public IMAGE_DATA_DIRECTORY ResourceTable;
389 |
390 | [FieldOffset(120)] public IMAGE_DATA_DIRECTORY ExceptionTable;
391 |
392 | [FieldOffset(128)] public IMAGE_DATA_DIRECTORY CertificateTable;
393 |
394 | [FieldOffset(136)] public IMAGE_DATA_DIRECTORY BaseRelocationTable;
395 |
396 | [FieldOffset(144)] public IMAGE_DATA_DIRECTORY Debug;
397 |
398 | [FieldOffset(152)] public IMAGE_DATA_DIRECTORY Architecture;
399 |
400 | [FieldOffset(160)] public IMAGE_DATA_DIRECTORY GlobalPtr;
401 |
402 | [FieldOffset(168)] public IMAGE_DATA_DIRECTORY TLSTable;
403 |
404 | [FieldOffset(176)] public IMAGE_DATA_DIRECTORY LoadConfigTable;
405 |
406 | [FieldOffset(184)] public IMAGE_DATA_DIRECTORY BoundImport;
407 |
408 | [FieldOffset(192)] public IMAGE_DATA_DIRECTORY IAT;
409 |
410 | [FieldOffset(200)] public IMAGE_DATA_DIRECTORY DelayImportDescriptor;
411 |
412 | [FieldOffset(208)] public IMAGE_DATA_DIRECTORY CLRRuntimeHeader;
413 |
414 | [FieldOffset(216)] public IMAGE_DATA_DIRECTORY Reserved;
415 | }
416 |
417 | [StructLayout(LayoutKind.Explicit)]
418 | public struct IMAGE_OPTIONAL_HEADER64
419 | {
420 | [FieldOffset(0)] public MagicType Magic;
421 |
422 | [FieldOffset(2)] public byte MajorLinkerVersion;
423 |
424 | [FieldOffset(3)] public byte MinorLinkerVersion;
425 |
426 | [FieldOffset(4)] public uint SizeOfCode;
427 |
428 | [FieldOffset(8)] public uint SizeOfInitializedData;
429 |
430 | [FieldOffset(12)] public uint SizeOfUninitializedData;
431 |
432 | [FieldOffset(16)] public uint AddressOfEntryPoint;
433 |
434 | [FieldOffset(20)] public uint BaseOfCode;
435 |
436 | [FieldOffset(24)] public ulong ImageBase;
437 |
438 | [FieldOffset(32)] public uint SectionAlignment;
439 |
440 | [FieldOffset(36)] public uint FileAlignment;
441 |
442 | [FieldOffset(40)] public ushort MajorOperatingSystemVersion;
443 |
444 | [FieldOffset(42)] public ushort MinorOperatingSystemVersion;
445 |
446 | [FieldOffset(44)] public ushort MajorImageVersion;
447 |
448 | [FieldOffset(46)] public ushort MinorImageVersion;
449 |
450 | [FieldOffset(48)] public ushort MajorSubsystemVersion;
451 |
452 | [FieldOffset(50)] public ushort MinorSubsystemVersion;
453 |
454 | [FieldOffset(52)] public uint Win32VersionValue;
455 |
456 | [FieldOffset(56)] public uint SizeOfImage;
457 |
458 | [FieldOffset(60)] public uint SizeOfHeaders;
459 |
460 | [FieldOffset(64)] public uint CheckSum;
461 |
462 | [FieldOffset(68)] public SubSystemType Subsystem;
463 |
464 | [FieldOffset(70)] public DllCharacteristicsType DllCharacteristics;
465 |
466 | [FieldOffset(72)] public ulong SizeOfStackReserve;
467 |
468 | [FieldOffset(80)] public ulong SizeOfStackCommit;
469 |
470 | [FieldOffset(88)] public ulong SizeOfHeapReserve;
471 |
472 | [FieldOffset(96)] public ulong SizeOfHeapCommit;
473 |
474 | [FieldOffset(104)] public uint LoaderFlags;
475 |
476 | [FieldOffset(108)] public uint NumberOfRvaAndSizes;
477 |
478 | [FieldOffset(112)] public IMAGE_DATA_DIRECTORY ExportTable;
479 |
480 | [FieldOffset(120)] public IMAGE_DATA_DIRECTORY ImportTable;
481 |
482 | [FieldOffset(128)] public IMAGE_DATA_DIRECTORY ResourceTable;
483 |
484 | [FieldOffset(136)] public IMAGE_DATA_DIRECTORY ExceptionTable;
485 |
486 | [FieldOffset(144)] public IMAGE_DATA_DIRECTORY CertificateTable;
487 |
488 | [FieldOffset(152)] public IMAGE_DATA_DIRECTORY BaseRelocationTable;
489 |
490 | [FieldOffset(160)] public IMAGE_DATA_DIRECTORY Debug;
491 |
492 | [FieldOffset(168)] public IMAGE_DATA_DIRECTORY Architecture;
493 |
494 | [FieldOffset(176)] public IMAGE_DATA_DIRECTORY GlobalPtr;
495 |
496 | [FieldOffset(184)] public IMAGE_DATA_DIRECTORY TLSTable;
497 |
498 | [FieldOffset(192)] public IMAGE_DATA_DIRECTORY LoadConfigTable;
499 |
500 | [FieldOffset(200)] public IMAGE_DATA_DIRECTORY BoundImport;
501 |
502 | [FieldOffset(208)] public IMAGE_DATA_DIRECTORY IAT;
503 |
504 | [FieldOffset(216)] public IMAGE_DATA_DIRECTORY DelayImportDescriptor;
505 |
506 | [FieldOffset(224)] public IMAGE_DATA_DIRECTORY CLRRuntimeHeader;
507 |
508 | [FieldOffset(232)] public IMAGE_DATA_DIRECTORY Reserved;
509 | }
510 |
511 | [StructLayout(LayoutKind.Explicit)]
512 | public struct IMAGE_NT_HEADERS32
513 | {
514 | [FieldOffset(0)] [MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)] public char[] Signature;
515 |
516 | [FieldOffset(4)] public IMAGE_FILE_HEADER FileHeader;
517 |
518 | [FieldOffset(24)] public IMAGE_OPTIONAL_HEADER32 OptionalHeader;
519 |
520 | private string _Signature
521 | {
522 | get { return new string(Signature); }
523 | }
524 |
525 | public bool isValid
526 | {
527 | get
528 | {
529 | return _Signature == "PE\0\0"
530 | /*&& (OptionalHeader.Magic == PE.MagicType.IMAGE_NT_OPTIONAL_HDR32_MAGIC || OptionalHeader.Magic == PE.MagicType.IMAGE_NT_OPTIONAL_HDR64_MAGIC)*/;
531 | }
532 | }
533 | }
534 |
535 | [StructLayout(LayoutKind.Explicit)]
536 | public struct IMAGE_NT_HEADERS64
537 | {
538 | [FieldOffset(0)] [MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)] public char[] Signature;
539 |
540 | [FieldOffset(4)] public IMAGE_FILE_HEADER FileHeader;
541 |
542 | [FieldOffset(24)] public IMAGE_OPTIONAL_HEADER64 OptionalHeader;
543 |
544 | private string _Signature
545 | {
546 | get { return new string(Signature); }
547 | }
548 |
549 | public bool isValid
550 | {
551 | get
552 | {
553 | return _Signature == "PE\0\0"
554 | /*&& (OptionalHeader.Magic == PE.MagicType.IMAGE_NT_OPTIONAL_HDR32_MAGIC || OptionalHeader.Magic == PE.MagicType.IMAGE_NT_OPTIONAL_HDR64_MAGIC)*/;
555 | }
556 | }
557 | }
558 |
559 | [StructLayout(LayoutKind.Explicit)]
560 | public struct IMAGE_SECTION_HEADER
561 | {
562 | [FieldOffset(0)] [MarshalAs(UnmanagedType.ByValArray, SizeConst = 8)] public char[] Name;
563 |
564 | [FieldOffset(8)] public UInt32 VirtualSize;
565 |
566 | [FieldOffset(12)] public UInt32 VirtualAddress;
567 |
568 | [FieldOffset(16)] public UInt32 SizeOfRawData;
569 |
570 | [FieldOffset(20)] public UInt32 PointerToRawData;
571 |
572 | [FieldOffset(24)] public UInt32 PointerToRelocations;
573 |
574 | [FieldOffset(28)] public UInt32 PointerToLinenumbers;
575 |
576 | [FieldOffset(32)] public UInt16 NumberOfRelocations;
577 |
578 | [FieldOffset(34)] public UInt16 NumberOfLinenumbers;
579 |
580 | [FieldOffset(36)] public DataSectionFlags Characteristics;
581 |
582 | public string Section
583 | {
584 | get { return new string(Name); }
585 | }
586 | }
587 |
588 | [StructLayout(LayoutKind.Explicit)]
589 | public struct IMAGE_IMPORT_DESCRIPTOR
590 | {
591 | [FieldOffset(0)] public uint Characteristics;
592 |
593 | [FieldOffset(0)] public uint OriginalFirstThunk;
594 |
595 | [FieldOffset(4)] public uint TimeDateStamp;
596 |
597 | [FieldOffset(8)] public uint ForwarderChain;
598 |
599 | [FieldOffset(12)] public uint Name;
600 |
601 | [FieldOffset(16)] public uint FirstThunk;
602 | }
603 |
604 | [StructLayout(LayoutKind.Sequential, Pack = 1)]
605 | public struct PROCESS_BASIC_INFORMATION
606 | {
607 | public IntPtr ExitStatus;
608 | public IntPtr PebBaseAddress;
609 | public IntPtr AffinityMask;
610 | public IntPtr BasePriority;
611 | public UIntPtr UniqueProcessId;
612 | public IntPtr InheritedFromUniqueProcessId;
613 |
614 | public int Size
615 | {
616 | get { return (int) Marshal.SizeOf(typeof(PROCESS_BASIC_INFORMATION)); }
617 | }
618 | }
619 |
620 | [StructLayout(LayoutKind.Sequential, Pack = 0)]
621 | public struct UNICODE_STRING
622 | {
623 | public ushort Length;
624 | public ushort MaximumLength;
625 | public IntPtr Buffer;
626 | }
627 |
628 | [StructLayout(LayoutKind.Explicit)]
629 | public struct IMAGE_THUNK_DATA
630 | {
631 | [FieldOffset(0)] public uint ForwarderString; // PBYTE
632 |
633 | [FieldOffset(0)] public uint Function; // PDWORD
634 |
635 | [FieldOffset(0)] public uint Ordinal;
636 |
637 | [FieldOffset(0)] public uint AddressOfData; // PIMAGE_IMPORT_BY_NAME
638 | }
639 |
640 | [StructLayout(LayoutKind.Sequential)]
641 | public struct IMAGE_EXPORT_DIRECTORY
642 | {
643 | public UInt32 Characteristics;
644 | public UInt32 TimeDateStamp;
645 | public UInt16 MajorVersion;
646 | public UInt16 MinorVersion;
647 | public UInt32 Name;
648 | public UInt32 Base;
649 | public UInt32 NumberOfFunctions;
650 | public UInt32 NumberOfNames;
651 | public UInt32 AddressOfFunctions; // RVA from base of image
652 | public UInt32 AddressOfNames; // RVA from base of image
653 | public UInt32 AddressOfNameOrdinals; // RVA from base of image
654 | }
655 |
656 | [StructLayout(LayoutKind.Sequential)]
657 | public struct IMAGE_IMPORT_BY_NAME
658 | {
659 | public short Hint;
660 | public char Name;
661 | }
662 |
663 | [StructLayout(LayoutKind.Sequential)]
664 | public struct IMAGE_BASE_RELOCATION
665 | {
666 | public UInt32 VirtualAddress;
667 | public UInt32 SizeOfBlock;
668 | }
669 |
670 | [StructLayout(LayoutKind.Sequential)]
671 | public struct IMAGE_TLS_DIRECTORY32
672 | {
673 | public UInt32 StartAddressOfRawData;
674 | public UInt32 EndAddressOfRawData;
675 | public UInt32 AddressOfIndex; // PDWORD
676 | public UInt32 AddressOfCallBacks; // PIMAGE_TLS_CALLBACK *
677 | public UInt32 SizeOfZeroFill;
678 | public UInt32 Characteristics;
679 | }
680 |
681 | [StructLayout(LayoutKind.Sequential)]
682 | public struct IMAGE_LOAD_CONFIG_DIRECTORY32
683 | {
684 | public UInt32 Size;
685 | public UInt32 TimeDateStamp;
686 | public UInt16 MajorVersion;
687 | public UInt16 MinorVersion;
688 | public UInt32 GlobalFlagsClear;
689 | public UInt32 GlobalFlagsSet;
690 | public UInt32 CriticalSectionDefaultTimeout;
691 | public UInt32 DeCommitFreeBlockThreshold;
692 | public UInt32 DeCommitTotalFreeThreshold;
693 | public UInt32 LockPrefixTable; // VA
694 | public UInt32 MaximumAllocationSize;
695 | public UInt32 VirtualMemoryThreshold;
696 | public UInt32 ProcessHeapFlags;
697 | public UInt32 ProcessAffinityMask;
698 | public UInt16 CSDVersion;
699 | public UInt16 Reserved1;
700 | public UInt32 EditList; // VA
701 | public UInt32 SecurityCookie; // VA
702 | public UInt32 SEHandlerTable; // VA
703 | public UInt32 SEHandlerCount;
704 | public UInt32 GuardCFCheckFunctionPointer; // VA
705 | public UInt32 Reserved2;
706 | public UInt32 GuardCFFunctionTable; // VA
707 | public UInt32 GuardCFFunctionCount;
708 | public UInt32 GuardFlags;
709 | }
710 |
711 | [StructLayout(LayoutKind.Sequential)]
712 | public struct FILETIME
713 | {
714 | public uint DateTimeLow;
715 | public uint DateTimeHigh;
716 | }
717 | }
--------------------------------------------------------------------------------
/GitHub SimpleLoader/Injection/Win32/Imports.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Diagnostics;
3 | using System.Runtime.ConstrainedExecution;
4 | using System.Runtime.InteropServices;
5 | using System.Security;
6 |
7 | namespace ManualMapInjection.Injection.Win32
8 | {
9 | [SuppressUnmanagedCodeSecurity]
10 | internal static class Imports
11 | {
12 | [Flags]
13 | public enum AllocationType
14 | {
15 | Commit = 0x1000,
16 | Reserve = 0x2000,
17 | Decommit = 0x4000,
18 | Release = 0x8000,
19 | Reset = 0x80000,
20 | Physical = 0x400000,
21 | TopDown = 0x100000,
22 | WriteWatch = 0x200000,
23 | LargePages = 0x20000000
24 | }
25 |
26 | [Flags]
27 | public enum MemoryProtection
28 | {
29 | Execute = 0x10,
30 | ExecuteRead = 0x20,
31 | ExecuteReadWrite = 0x40,
32 | ExecuteWriteCopy = 0x80,
33 | NoAccess = 0x01,
34 | ReadOnly = 0x02,
35 | ReadWrite = 0x04,
36 | WriteCopy = 0x08,
37 | GuardModifierflag = 0x100,
38 | NoCacheModifierflag = 0x200,
39 | WriteCombineModifierflag = 0x400
40 | }
41 |
42 | [Flags]
43 | public enum ProcessAccessFlags : uint
44 | {
45 | All = 0x001F0FFF,
46 | Terminate = 0x00000001,
47 | CreateThread = 0x00000002,
48 | VirtualMemoryOperation = 0x00000008,
49 | VirtualMemoryRead = 0x00000010,
50 | VirtualMemoryWrite = 0x00000020,
51 | DuplicateHandle = 0x00000040,
52 | CreateProcess = 0x000000080,
53 | SetQuota = 0x00000100,
54 | SetInformation = 0x00000200,
55 | QueryInformation = 0x00000400,
56 | QueryLimitedInformation = 0x00001000,
57 | Synchronize = 0x00100000
58 | }
59 |
60 | [Flags]
61 | public enum FreeType
62 | {
63 | Decommit = 0x4000,
64 | Release = 0x8000,
65 | }
66 |
67 | [DllImport("kernel32.dll", SetLastError = true, ExactSpelling = true)]
68 | public static extern IntPtr VirtualAllocEx(IntPtr hProcess, UIntPtr lpAddress, IntPtr dwSize, AllocationType flAllocationType, MemoryProtection flProtect);
69 |
70 | [DllImport("kernel32.dll", SetLastError = true)]
71 | public static extern IntPtr VirtualAlloc(IntPtr lpAddress, UIntPtr dwSize, AllocationType flAllocationType, MemoryProtection flProtect);
72 |
73 | [DllImport("kernel32.dll", SetLastError = true)]
74 | public static extern IntPtr OpenProcess(ProcessAccessFlags processAccess, bool bInheritHandle,int processId);
75 |
76 | [DllImport("kernel32.dll", SetLastError = true)]
77 | [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
78 | [SuppressUnmanagedCodeSecurity]
79 | [return: MarshalAs(UnmanagedType.Bool)]
80 | public static extern bool CloseHandle(IntPtr hObject);
81 |
82 | [DllImport("Dbghelp.dll", CallingConvention = CallingConvention.Winapi)]
83 | public static extern IntPtr ImageRvaToVa(IntPtr NtHeaders, IntPtr Base, UIntPtr Rva, [Optional] IntPtr LastRvaSection);
84 |
85 | [DllImport("kernel32.dll", SetLastError = true)]
86 | public static extern IntPtr GetProcessHeap();
87 |
88 | [DllImport("kernel32.dll", SetLastError = false)]
89 | public static extern IntPtr HeapAlloc(IntPtr hHeap, uint dwFlags, UIntPtr dwBytes);
90 |
91 | [DllImport("kernel32.dll", SetLastError = true)]
92 | public static extern bool HeapFree(IntPtr hHeap, uint dwFlags, IntPtr lpMem);
93 |
94 | [DllImport("NTDLL.DLL", SetLastError = true)]
95 | public static extern int NtQueryInformationProcess(IntPtr hProcess, int pic, IntPtr pbi, uint cb, out uint pSize);
96 |
97 | //[DllImport("kernel32.dll", SetLastError = true)]
98 | //public static extern bool ReadProcessMemory(IntPtr hProcess, IntPtr lpBaseAddress, [Out] byte[] lpBuffer, uint dwSize, out UIntPtr lpNumberOfBytesRead);
99 |
100 | [DllImport("kernel32.dll", SetLastError = true)]
101 | public static extern bool ReadProcessMemory(IntPtr hProcess, IntPtr lpBaseAddress, IntPtr lpBuffer, int dwSize, out UIntPtr lpNumberOfBytesRead);
102 |
103 | [DllImport("kernel32.dll", SetLastError = true)]
104 | public static extern bool WriteProcessMemory(IntPtr hProcess, IntPtr lpBaseAddress, byte[] lpBuffer, int nSize, out UIntPtr lpNumberOfBytesWritten);
105 |
106 | [DllImport("kernel32.dll", SetLastError = true)]
107 | public static extern bool WriteProcessMemory(IntPtr hProcess, IntPtr lpBaseAddress, IntPtr lpBuffer, IntPtr nSize, out UIntPtr lpNumberOfBytesWritten);
108 |
109 | [DllImport("kernel32", CharSet = CharSet.Ansi, ExactSpelling = true, SetLastError = true)]
110 | public static extern IntPtr GetProcAddress(IntPtr hModule, string procName);
111 |
112 | [DllImport("kernel32.dll", CharSet = CharSet.Auto)]
113 | public static extern IntPtr GetModuleHandle(string lpModuleName);
114 |
115 | [DllImport("kernel32.dll")]
116 | public static extern IntPtr CreateRemoteThread(IntPtr hProcess, IntPtr lpThreadAttributes, uint dwStackSize, IntPtr lpStartAddress, IntPtr lpParameter, uint dwCreationFlags, IntPtr lpThreadId);
117 |
118 | [DllImport("kernel32.dll", SetLastError = true)]
119 | public static extern UInt32 WaitForSingleObject(IntPtr hHandle, UInt32 dwMilliseconds);
120 |
121 | [DllImport("kernel32.dll", SetLastError = true, ExactSpelling = true)]
122 | public static extern bool VirtualFreeEx(IntPtr hProcess, IntPtr lpAddress, int dwSize, FreeType dwFreeType);
123 |
124 | [DllImport("kernel32.dll", SetLastError = true)]
125 | public static extern bool VirtualFree(IntPtr lpAddress, int dwSize, FreeType dwFreeType);
126 |
127 | [DllImport("kernel32.dll")]
128 | public static extern bool VirtualProtectEx(IntPtr hProcess, IntPtr lpAddress, UIntPtr dwSize, uint flNewProtect, out uint lpflOldProtect);
129 |
130 | [DllImport("kernel32.dll")]
131 | public static extern void GetSystemTimeAsFileTime(out FILETIME lpSystemTimeAsFileTime);
132 |
133 | [DllImport("kernel32.dll", SetLastError = true)]
134 | public static extern bool QueryPerformanceCounter(out long lpPerformanceCount);
135 |
136 | // wrappers
137 | public static bool ReadProcessMemory(IntPtr hProcess, IntPtr lpBaseAddress, byte[] lpBuffer, out UIntPtr lpNumberOfBytesRead)
138 | {
139 | var handle = GCHandle.Alloc(lpBuffer, GCHandleType.Pinned);
140 | var result = ReadProcessMemory(hProcess, lpBaseAddress, handle.AddrOfPinnedObject(), lpBuffer.Length, out lpNumberOfBytesRead);
141 | handle.Free();
142 | return result;
143 | }
144 |
145 | public static bool ReadProcessMemory(IntPtr hProcess, IntPtr lpBaseAddress, out uint lpBuffer, out UIntPtr lpNumberOfBytesRead)
146 | {
147 | var buffer = new byte[4];
148 | var result = ReadProcessMemory(hProcess, lpBaseAddress, buffer, out lpNumberOfBytesRead);
149 | lpBuffer = BitConverter.ToUInt32(buffer, 0);
150 | return result;
151 | }
152 |
153 | public static bool ReadProcessMemory(IntPtr hProcess, IntPtr lpBaseAddress, out T lpBuffer, out UIntPtr lpNumberOfBytesRead) where T : struct
154 | {
155 | var buffer = new byte[Marshal.SizeOf(typeof(T))];
156 | var result = ReadProcessMemory(hProcess, lpBaseAddress, buffer, out lpNumberOfBytesRead);
157 | var handle = GCHandle.Alloc(buffer, GCHandleType.Pinned);
158 | lpBuffer = Marshal.PtrToStructure(handle.AddrOfPinnedObject());
159 | handle.Free();
160 |
161 | return result;
162 | }
163 |
164 | public static IntPtr OpenProcess(Process proc, ProcessAccessFlags flags)
165 | {
166 | return OpenProcess(flags, false, proc.Id);
167 | }
168 | }
169 | }
170 |
--------------------------------------------------------------------------------
/GitHub SimpleLoader/Injection/Win32/PDefinitions.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Runtime.InteropServices;
3 | using System.Text;
4 | using ManualMapInjection.Injection.Types;
5 |
6 | namespace ManualMapInjection.Injection.Win32
7 | {
8 | public class PIMAGE_DOS_HEADER : ManagedPtr
9 | {
10 | public PIMAGE_DOS_HEADER(IntPtr address) : base(address)
11 | {
12 | }
13 |
14 | public PIMAGE_DOS_HEADER(object value) : base(value)
15 | {
16 | }
17 |
18 | public static explicit operator PIMAGE_DOS_HEADER(IntPtr ptr)
19 | {
20 | if (ptr == IntPtr.Zero)
21 | {
22 | return null;
23 | }
24 |
25 | return new PIMAGE_DOS_HEADER(ptr);
26 | }
27 | }
28 |
29 | public class PIMAGE_NT_HEADERS32 : ManagedPtr
30 | {
31 | public PIMAGE_NT_HEADERS32(IntPtr address) : base(address)
32 | {
33 | }
34 |
35 | public PIMAGE_NT_HEADERS32(object value) : base(value)
36 | {
37 | }
38 |
39 | public static explicit operator PIMAGE_NT_HEADERS32(IntPtr ptr)
40 | {
41 | if (ptr == IntPtr.Zero)
42 | {
43 | return null;
44 | }
45 |
46 | return new PIMAGE_NT_HEADERS32(ptr);
47 | }
48 | }
49 |
50 | public class PCHAR : ManagedPtr
51 | {
52 | public PCHAR(IntPtr address) : base(address)
53 | {
54 | }
55 |
56 | public PCHAR(object value) : base(value)
57 | {
58 | }
59 |
60 | public PCHAR(string value) : base(Encoding.UTF8.GetBytes(value))
61 | {
62 | }
63 |
64 | public static PCHAR operator +(PCHAR c1, int c2)
65 | {
66 | return new PCHAR(c1.Address + c2 * c1.StructSize);
67 | }
68 |
69 | public static PCHAR operator ++(PCHAR a)
70 | {
71 | return a + 1;
72 | }
73 |
74 | public static explicit operator PCHAR(IntPtr ptr)
75 | {
76 | if (ptr == IntPtr.Zero)
77 | {
78 | return null;
79 | }
80 |
81 | return new PCHAR(ptr);
82 | }
83 |
84 | public override string ToString()
85 | {
86 | return Marshal.PtrToStringAnsi(Address) ?? string.Empty;
87 | }
88 | }
89 |
90 | public class PPROCESS_BASIC_INFORMATION : ManagedPtr
91 | {
92 | public PPROCESS_BASIC_INFORMATION(IntPtr address) : base(address)
93 | {
94 | }
95 |
96 | public PPROCESS_BASIC_INFORMATION(object value) : base(value)
97 | {
98 | }
99 |
100 | public static explicit operator PPROCESS_BASIC_INFORMATION(IntPtr ptr)
101 | {
102 | if (ptr == IntPtr.Zero)
103 | {
104 | return null;
105 | }
106 |
107 | return new PPROCESS_BASIC_INFORMATION(ptr);
108 | }
109 | }
110 |
111 | public class PIMAGE_IMPORT_DESCRIPTOR : ManagedPtr
112 | {
113 | public PIMAGE_IMPORT_DESCRIPTOR(IntPtr address) : base(address)
114 | {
115 | }
116 |
117 | public PIMAGE_IMPORT_DESCRIPTOR(object value) : base(value)
118 | {
119 | }
120 |
121 | public static PIMAGE_IMPORT_DESCRIPTOR operator +(PIMAGE_IMPORT_DESCRIPTOR c1, int c2)
122 | {
123 | return new PIMAGE_IMPORT_DESCRIPTOR(c1.Address + c2 * c1.StructSize);
124 | }
125 |
126 | public static PIMAGE_IMPORT_DESCRIPTOR operator ++(PIMAGE_IMPORT_DESCRIPTOR a)
127 | {
128 | return a + 1;
129 | }
130 |
131 | public static explicit operator PIMAGE_IMPORT_DESCRIPTOR(IntPtr ptr)
132 | {
133 | if (ptr == IntPtr.Zero)
134 | {
135 | return null;
136 | }
137 |
138 | return new PIMAGE_IMPORT_DESCRIPTOR(ptr);
139 | }
140 | }
141 |
142 | public class PIMAGE_SECTION_HEADER : ManagedPtr
143 | {
144 | public PIMAGE_SECTION_HEADER(IntPtr address) : base(address)
145 | {
146 | }
147 |
148 | public PIMAGE_SECTION_HEADER(object value) : base(value)
149 | {
150 | }
151 |
152 | public static explicit operator PIMAGE_SECTION_HEADER(IntPtr ptr)
153 | {
154 | if (ptr == IntPtr.Zero)
155 | {
156 | return null;
157 | }
158 |
159 | return new PIMAGE_SECTION_HEADER(ptr);
160 | }
161 | }
162 |
163 | public class PIMAGE_THUNK_DATA : ManagedPtr
164 | {
165 | public PIMAGE_THUNK_DATA(IntPtr address) : base(address)
166 | {
167 | }
168 |
169 | public PIMAGE_THUNK_DATA(object value) : base(value)
170 | {
171 | }
172 |
173 | public static PIMAGE_THUNK_DATA operator +(PIMAGE_THUNK_DATA c1, int c2)
174 | {
175 | return new PIMAGE_THUNK_DATA(c1.Address + c2 * c1.StructSize);
176 | }
177 |
178 | public static PIMAGE_THUNK_DATA operator ++(PIMAGE_THUNK_DATA a)
179 | {
180 | return a + 1;
181 | }
182 |
183 | public static explicit operator PIMAGE_THUNK_DATA(IntPtr ptr)
184 | {
185 | if (ptr == IntPtr.Zero)
186 | {
187 | return null;
188 | }
189 |
190 | return new PIMAGE_THUNK_DATA(ptr);
191 | }
192 | }
193 |
194 | public class PIMAGE_EXPORT_DIRECTORY : ManagedPtr
195 | {
196 | public PIMAGE_EXPORT_DIRECTORY(IntPtr address) : base(address)
197 | {
198 | }
199 |
200 | public PIMAGE_EXPORT_DIRECTORY(object value) : base(value)
201 | {
202 | }
203 |
204 | public static PIMAGE_EXPORT_DIRECTORY operator +(PIMAGE_EXPORT_DIRECTORY c1, int c2)
205 | {
206 | return new PIMAGE_EXPORT_DIRECTORY(c1.Address + c2 * c1.StructSize);
207 | }
208 |
209 | public static PIMAGE_EXPORT_DIRECTORY operator ++(PIMAGE_EXPORT_DIRECTORY a)
210 | {
211 | return a + 1;
212 | }
213 |
214 | public static explicit operator PIMAGE_EXPORT_DIRECTORY(IntPtr ptr)
215 | {
216 | if (ptr == IntPtr.Zero)
217 | {
218 | return null;
219 | }
220 |
221 | return new PIMAGE_EXPORT_DIRECTORY(ptr);
222 | }
223 | }
224 |
225 | public class PWORD : ManagedPtr
226 | {
227 | public PWORD(IntPtr address) : base(address)
228 | {
229 | }
230 |
231 | public PWORD(object value) : base(value)
232 | {
233 | }
234 |
235 | public static PWORD operator +(PWORD c1, int c2)
236 | {
237 | return new PWORD(c1.Address + c2 * c1.StructSize);
238 | }
239 |
240 | public static PWORD operator ++(PWORD a)
241 | {
242 | return a + 1;
243 | }
244 |
245 | public static explicit operator PWORD(IntPtr ptr)
246 | {
247 | if (ptr == IntPtr.Zero)
248 | {
249 | return null;
250 | }
251 |
252 | return new PWORD(ptr);
253 | }
254 | }
255 |
256 | public class PDWORD : ManagedPtr
257 | {
258 | public PDWORD(IntPtr address) : base(address)
259 | {
260 | }
261 |
262 | public PDWORD(object value) : base(value)
263 | {
264 | }
265 |
266 | public static PDWORD operator +(PDWORD c1, int c2)
267 | {
268 | return new PDWORD(c1.Address + c2 * c1.StructSize);
269 | }
270 |
271 | public static PDWORD operator ++(PDWORD a)
272 | {
273 | return a + 1;
274 | }
275 |
276 | public static explicit operator PDWORD(IntPtr ptr)
277 | {
278 | if (ptr == IntPtr.Zero)
279 | {
280 | return null;
281 | }
282 |
283 | return new PDWORD(ptr);
284 | }
285 | }
286 | public class PIMAGE_IMPORT_BY_NAME : ManagedPtr
287 | {
288 | public PIMAGE_IMPORT_BY_NAME(IntPtr address) : base(address)
289 | {
290 | }
291 |
292 | public PIMAGE_IMPORT_BY_NAME(object value) : base(value)
293 | {
294 | }
295 |
296 | public static PIMAGE_IMPORT_BY_NAME operator +(PIMAGE_IMPORT_BY_NAME c1, int c2)
297 | {
298 | return new PIMAGE_IMPORT_BY_NAME(c1.Address + c2 * c1.StructSize);
299 | }
300 |
301 | public static PIMAGE_IMPORT_BY_NAME operator ++(PIMAGE_IMPORT_BY_NAME a)
302 | {
303 | return a + 1;
304 | }
305 |
306 | public static explicit operator PIMAGE_IMPORT_BY_NAME(IntPtr ptr)
307 | {
308 | if (ptr == IntPtr.Zero)
309 | {
310 | return null;
311 | }
312 |
313 | return new PIMAGE_IMPORT_BY_NAME(ptr);
314 | }
315 | }
316 |
317 | public class PBYTE : ManagedPtr
318 | {
319 | public PBYTE(IntPtr address) : base(address)
320 | {
321 | }
322 |
323 | public PBYTE(object value) : base(value)
324 | {
325 | }
326 |
327 | public static PBYTE operator +(PBYTE c1, int c2)
328 | {
329 | return new PBYTE(c1.Address + c2 * c1.StructSize);
330 | }
331 |
332 | public static PBYTE operator ++(PBYTE a)
333 | {
334 | return a + 1;
335 | }
336 |
337 | public static explicit operator PBYTE(IntPtr ptr)
338 | {
339 | if (ptr == IntPtr.Zero)
340 | {
341 | return null;
342 | }
343 |
344 | return new PBYTE(ptr);
345 | }
346 | }
347 |
348 | public class PIMAGE_BASE_RELOCATION : ManagedPtr
349 | {
350 | public PIMAGE_BASE_RELOCATION(IntPtr address) : base(address)
351 | {
352 | }
353 |
354 | public PIMAGE_BASE_RELOCATION(object value) : base(value)
355 | {
356 | }
357 |
358 | public static PIMAGE_BASE_RELOCATION operator +(PIMAGE_BASE_RELOCATION c1, int c2)
359 | {
360 | return new PIMAGE_BASE_RELOCATION(c1.Address + c2 * c1.StructSize);
361 | }
362 |
363 | public static PIMAGE_BASE_RELOCATION operator ++(PIMAGE_BASE_RELOCATION a)
364 | {
365 | return a + 1;
366 | }
367 |
368 | public static explicit operator PIMAGE_BASE_RELOCATION(IntPtr ptr)
369 | {
370 | if (ptr == IntPtr.Zero)
371 | {
372 | return null;
373 | }
374 |
375 | return new PIMAGE_BASE_RELOCATION(ptr);
376 | }
377 | }
378 |
379 | public class PSHORT : ManagedPtr
380 | {
381 | public PSHORT(IntPtr address) : base(address)
382 | {
383 | }
384 |
385 | public PSHORT(object value) : base(value)
386 | {
387 | }
388 |
389 | public static PSHORT operator +(PSHORT c1, int c2)
390 | {
391 | return new PSHORT(c1.Address + c2 * c1.StructSize);
392 | }
393 |
394 | public static PSHORT operator ++(PSHORT a)
395 | {
396 | return a + 1;
397 | }
398 |
399 | public static explicit operator PSHORT(IntPtr ptr)
400 | {
401 | if (ptr == IntPtr.Zero)
402 | {
403 | return null;
404 | }
405 |
406 | return new PSHORT(ptr);
407 | }
408 | }
409 |
410 | public class PIMAGE_TLS_DIRECTORY32 : ManagedPtr
411 | {
412 | public PIMAGE_TLS_DIRECTORY32(IntPtr address) : base(address)
413 | {
414 | }
415 |
416 | public PIMAGE_TLS_DIRECTORY32(object value) : base(value)
417 | {
418 | }
419 |
420 | public static PIMAGE_TLS_DIRECTORY32 operator +(PIMAGE_TLS_DIRECTORY32 c1, int c2)
421 | {
422 | return new PIMAGE_TLS_DIRECTORY32(c1.Address + c2 * c1.StructSize);
423 | }
424 |
425 | public static PIMAGE_TLS_DIRECTORY32 operator ++(PIMAGE_TLS_DIRECTORY32 a)
426 | {
427 | return a + 1;
428 | }
429 |
430 | public static explicit operator PIMAGE_TLS_DIRECTORY32(IntPtr ptr)
431 | {
432 | if (ptr == IntPtr.Zero)
433 | {
434 | return null;
435 | }
436 |
437 | return new PIMAGE_TLS_DIRECTORY32(ptr);
438 | }
439 | }
440 |
441 | public class PIMAGE_LOAD_CONFIG_DIRECTORY32 : ManagedPtr
442 | {
443 | public PIMAGE_LOAD_CONFIG_DIRECTORY32(IntPtr address) : base(address)
444 | {
445 | }
446 |
447 | public PIMAGE_LOAD_CONFIG_DIRECTORY32(object value) : base(value)
448 | {
449 | }
450 |
451 | public static PIMAGE_LOAD_CONFIG_DIRECTORY32 operator +(PIMAGE_LOAD_CONFIG_DIRECTORY32 c1, int c2)
452 | {
453 | return new PIMAGE_LOAD_CONFIG_DIRECTORY32(c1.Address + c2 * c1.StructSize);
454 | }
455 |
456 | public static PIMAGE_LOAD_CONFIG_DIRECTORY32 operator ++(PIMAGE_LOAD_CONFIG_DIRECTORY32 a)
457 | {
458 | return a + 1;
459 | }
460 |
461 | public static explicit operator PIMAGE_LOAD_CONFIG_DIRECTORY32(IntPtr ptr)
462 | {
463 | if (ptr == IntPtr.Zero)
464 | {
465 | return null;
466 | }
467 |
468 | return new PIMAGE_LOAD_CONFIG_DIRECTORY32(ptr);
469 | }
470 | }
471 | }
--------------------------------------------------------------------------------
/GitHub SimpleLoader/Loader.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Debug
6 | AnyCPU
7 | {33FCD856-2414-4A47-814A-07A50FB8D937}
8 | WinExe
9 | SimpleLoader
10 | SimpleLoader
11 | v4.6.1
12 | 512
13 | true
14 |
15 |
16 | AnyCPU
17 | true
18 | full
19 | false
20 | bin\Debug\
21 | DEBUG;TRACE
22 | prompt
23 | 4
24 |
25 |
26 | AnyCPU
27 | pdbonly
28 | true
29 | bin\Release\
30 | TRACE
31 | prompt
32 | 4
33 |
34 |
35 | icon.ico
36 |
37 |
38 | app.manifest
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 | Form
56 |
57 |
58 | Form1.cs
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 | Form1.cs
70 |
71 |
72 | ResXFileCodeGenerator
73 | Resources.Designer.cs
74 | Designer
75 |
76 |
77 | True
78 | Resources.resx
79 | True
80 |
81 |
82 |
83 | SettingsSingleFileGenerator
84 | Settings.Designer.cs
85 |
86 |
87 | True
88 | Settings.settings
89 | True
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
--------------------------------------------------------------------------------
/GitHub SimpleLoader/Program.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 | using System.Threading.Tasks;
5 | using System.Windows.Forms;
6 |
7 | namespace WindowsFormsApp2
8 | {
9 | static class Program
10 | {
11 | ///
12 | /// The main entry point for the application.
13 | ///
14 | [STAThread]
15 | static void Main()
16 | {
17 | Application.EnableVisualStyles();
18 | Application.SetCompatibleTextRenderingDefault(false);
19 | Application.Run(new Form1());
20 | }
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/GitHub SimpleLoader/Properties/AssemblyInfo.cs:
--------------------------------------------------------------------------------
1 | using System.Reflection;
2 | using System.Runtime.CompilerServices;
3 | using System.Runtime.InteropServices;
4 |
5 | // General Information about an assembly is controlled through the following
6 | // set of attributes. Change these attribute values to modify the information
7 | // associated with an assembly.
8 | [assembly: AssemblyTitle("SimpleLoader")]
9 | [assembly: AssemblyDescription("")]
10 | [assembly: AssemblyConfiguration("")]
11 | [assembly: AssemblyCompany("")]
12 | [assembly: AssemblyProduct("SimpleLoader")]
13 | [assembly: AssemblyCopyright("Copyright © 2018")]
14 | [assembly: AssemblyTrademark("")]
15 | [assembly: AssemblyCulture("")]
16 |
17 | // Setting ComVisible to false makes the types in this assembly not visible
18 | // to COM components. If you need to access a type in this assembly from
19 | // COM, set the ComVisible attribute to true on that type.
20 | [assembly: ComVisible(false)]
21 |
22 | // The following GUID is for the ID of the typelib if this project is exposed to COM
23 | [assembly: Guid("33fcd856-2414-4a47-814a-07a50fb8d937")]
24 |
25 | // Version information for an assembly consists of the following four values:
26 | //
27 | // Major Version
28 | // Minor Version
29 | // Build Number
30 | // Revision
31 | //
32 | // You can specify all the values or you can default the Build and Revision Numbers
33 | // by using the '*' as shown below:
34 | // [assembly: AssemblyVersion("1.0.*")]
35 | [assembly: AssemblyVersion("1.0.0.0")]
36 | [assembly: AssemblyFileVersion("1.0.0.0")]
37 |
--------------------------------------------------------------------------------
/GitHub SimpleLoader/Properties/Resources.Designer.cs:
--------------------------------------------------------------------------------
1 | //------------------------------------------------------------------------------
2 | //
3 | // This code was generated by a tool.
4 | // Runtime Version:4.0.30319.42000
5 | //
6 | // Changes to this file may cause incorrect behavior and will be lost if
7 | // the code is regenerated.
8 | //
9 | //------------------------------------------------------------------------------
10 |
11 | namespace SimpleLoader.Properties {
12 | using System;
13 |
14 |
15 | ///
16 | /// A strongly-typed resource class, for looking up localized strings, etc.
17 | ///
18 | // This class was auto-generated by the StronglyTypedResourceBuilder
19 | // class via a tool like ResGen or Visual Studio.
20 | // To add or remove a member, edit your .ResX file then rerun ResGen
21 | // with the /str option, or rebuild your VS project.
22 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "15.0.0.0")]
23 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
24 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
25 | internal class Resources {
26 |
27 | private static global::System.Resources.ResourceManager resourceMan;
28 |
29 | private static global::System.Globalization.CultureInfo resourceCulture;
30 |
31 | [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
32 | internal Resources() {
33 | }
34 |
35 | ///
36 | /// Returns the cached ResourceManager instance used by this class.
37 | ///
38 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
39 | internal static global::System.Resources.ResourceManager ResourceManager {
40 | get {
41 | if (object.ReferenceEquals(resourceMan, null)) {
42 | global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("SimpleLoader.Properties.Resources", typeof(Resources).Assembly);
43 | resourceMan = temp;
44 | }
45 | return resourceMan;
46 | }
47 | }
48 |
49 | ///
50 | /// Overrides the current thread's CurrentUICulture property for all
51 | /// resource lookups using this strongly typed resource class.
52 | ///
53 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
54 | internal static global::System.Globalization.CultureInfo Culture {
55 | get {
56 | return resourceCulture;
57 | }
58 | set {
59 | resourceCulture = value;
60 | }
61 | }
62 | }
63 | }
64 |
--------------------------------------------------------------------------------
/GitHub SimpleLoader/Properties/Resources.resx:
--------------------------------------------------------------------------------
1 |
2 |
3 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
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 |
100 |
101 |
102 |
103 |
104 |
105 |
106 | text/microsoft-resx
107 |
108 |
109 | 2.0
110 |
111 |
112 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
113 |
114 |
115 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
116 |
117 |
--------------------------------------------------------------------------------
/GitHub SimpleLoader/Properties/Settings.Designer.cs:
--------------------------------------------------------------------------------
1 | //------------------------------------------------------------------------------
2 | //
3 | // This code was generated by a tool.
4 | // Runtime Version:4.0.30319.42000
5 | //
6 | // Changes to this file may cause incorrect behavior and will be lost if
7 | // the code is regenerated.
8 | //
9 | //------------------------------------------------------------------------------
10 |
11 | namespace SimpleLoader.Properties {
12 |
13 |
14 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
15 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "15.5.0.0")]
16 | internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
17 |
18 | private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
19 |
20 | public static Settings Default {
21 | get {
22 | return defaultInstance;
23 | }
24 | }
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/GitHub SimpleLoader/Properties/Settings.settings:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/GitHub SimpleLoader/app.manifest:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
52 |
59 |
60 |
61 |
75 |
76 |
77 |
--------------------------------------------------------------------------------
/GitHub SimpleLoader/icon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/WilsonPublic/SimpleLoader/8dcdd8e3ca15426179a4e67a69ad982f7086fb4f/GitHub SimpleLoader/icon.ico
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # SimpleLoader by Wilson
2 | This is a C# .NET Loader for beggining users to learn and adapt from.
3 |
4 | Note: This is crackable by even the worst reverse-engineerers :P
5 |
6 | I made this a year ago so don't expect it to be anywhere near perfect
7 |
--------------------------------------------------------------------------------