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