C# Self Injector into non managed process
Hey all,
I'm gonna explain you how make a self injecting program in C#.
I hope you guys thinks its usefull and have a nice reading 
Requirements:
Visual Studio 20xx (I use Visual Studio 2010)
VInj (A nice library to inject managed dll's, its can be downloaded at the bottom.)
Simple Knowlege of C#
Getting Started
First we have to create a simple C# console project, in my case i call it SelfInjector.
Make sure the project framework is set to .NET Framework 2.0, else you'll get an error.
Then we have to copy the 2 DLL files from the VInj.rar into the solution and set the "Copy to Ouput" to Copy if Newer or Always.
Now that we have done this we add the VInjDn.dll as a reference to our project.
If everything goes as planned you'll get a project like this
Setting up the injector
Now were gonna start programming the injector.
What were gonna do is getting the process by name and then Inject our program into the target process with VInj.
First we define a string for the name of the target process. i use BlackOps as a example.
This part will be in the Main method.
string targetProcess = "BlackOps";
now we are going to get the process by name. which will be right under it.
Process remote_process = Process.GetProcessesByName(targetProcess)[0];
Ok, now we are getting to the part where we are going to inject our program into the process
this is done using the InjectableProcess from the VInj library.
The inject method returns a result which we can use if our program has been successfully injected.
InjectableProcess ip = InjectableProcess.Create(remote_process.Handle);
int result = ip.Inject(Application.ExecutablePath, Path.GetFileNameWithoutExtension(Application.ExecutablePath) + ".Main");
if (result == 0)
{
Console.WriteLine("Failed to inject.");
Console.ReadKey();
return;
}
We return directly after the failure message because it doesnt make any sense to go on :P
And this is it for the injector, after the IF you can also make something so you know if it is successfully injected or something.
Here a screenshot of how your code should look like.
Making the EntryPoint for the injection.
Now were gonna make the entrypoint, from here you can do whatever you like to do.
First we make a new class file and name it Main (including the Capital)
Now we remove the constructor because we dont need any, the entrypoint is called as an other method.
Ok i just fast forward this part because its small and i will just post a bare bone template for the Main.cs
public class Main : VInjDn.IInjectable
{
public int OnCommand(VInjDn.LiquidCommand command)
{ return ;
} public int OnLoad()
{
Thread t = new Thread(EntryThread);
t.Start();
return ;
} public int OnUnload()
{
return ;
} private void EntryThread()
{
MessageBox.Show("Injected!");
}
}
As you can see there are 4 methods in the Main.cs
The OnCommand can be used with the IPC of vinj to receive command given by the Program.cs through VInj.
The OnLoad is where the real entrypoint is, here we create a new thread so the game wont freeze when we inject our program.
The OnUnload, well do i really have to explain this?
The EntryThread is the method thats called my the thread thats created in the OnLoad, here you can do all your work while the game is running 
I just show a messagebox so you can see that the program is injected.
Well thats all for now!
The full project can be downloaded, link is at the bottom of this post, also some credits to the guys who made VInj, i dont really know who made it but those persons will know :P
I hope you enjoyed this tutorial and maybe more are coming!
Tutorial 2: Changing values without Read/WriteMemory
Tutorial 3: Hooking functions with EasyHook
Tutorial 4: Direct3D9 Hook with EasyHook and SlimDX!
C# Self Injector into non managed process的更多相关文章
- ebs R12.2启动报错"failed to start a managed process after the maximum retry limit"
启动日志: Error --> Process (index=1,uid=1739599208,pid=4479) failed to start a managed process after ...
- WCF学习系列一【WCF Interview Questions-Part 1 翻译系列】
http://www.topwcftutorials.net/2012/08/wcf-faqs-part1.html WCF Interview Questions – Part 1 This WCF ...
- EBS R12.2.0启动时报"httpd.pid: Permission denied"错误
启动应用服务: $ /app/oracle/apps/VIS/fs1/inst/apps/VIS_erptest/admin/scripts/adstrtal.sh apps/apps 报出如下错误: ...
- Learning WCF Chapter1 Creating a New Service from Scratch
You’re about to be introduced to the WCF service. This lab isn’t your typical “Hello World”—it’s “He ...
- Learing WCF Chapter1 Fundamental WCF Concepts
At its core,WCF is a development platform for service-oriented applications. As I mentioned earlier, ...
- 一步一个坑 - WinDbg调试.NET程序
引言 第一次用WinDbg来排查问题,花了很多时间踩坑,记录一下希望对后面的同学有些帮助. 客户现场软件出现偶发性的界面卡死现象一直找不出原因,就想着让客户用任务管理器生成了一个dump文件发给我,我 ...
- 轻量级DI框架Guice使用详解
背景 在日常写一些小工具或者小项目的时候,有依赖管理和依赖注入的需求,但是Spring(Boot)体系作为DI框架过于重量级,于是需要调研一款微型的DI框架.Guice是Google出品的一款轻量级的 ...
- Skywalking Swck Agent注入实现分析
项目地址: GitHub - apache/skywalking-swck: Apache SkyWalking Cloud on Kubernetes 项目简介: A bridge project ...
- Linux Process VS Thread VS LWP
Process program program==code+data; 一个进程可以对应多个程序,一个程序也可以变成多个进程.程序可以作为一种软件资源长期保存,以文件的形式存放在硬盘 process: ...
随机推荐
- 20190814 On Java8 第四章 运算符
第四章 运算符 优先级 程序员经常都会忘记其他优先级规则,所以应该用括号明确规定运算顺序. 赋值 基本类型的赋值都是直接的,而不像对象,赋予的只是其内存的引用.举个例子,a = b ,如果 b 是基本 ...
- 希希敬敬对Alpha阶段测试报告
已经完成的功能:1 GUI界面效果已经达到了设计要求,经过review代码完成度较好,GUI.PY代码可以使用,完成了“贴吧名字关键字与URL关联”. 2 能够实现"贴吧名字关键字与URL关 ...
- 数据库之Query Builder
Yii的查询构造器提供了一个用面向对象的方法来构造SQL语句.他让开发人员可以用类的方法,属性来作为SQL语句的一部分.然后把不同部分组装到一个正确的SQL语句中,调用DAO的方法来执行.下面的例子演 ...
- python 丰田经销商
import requests import json from dbutil.pgsql import PgsqlPipeline from datetime import date headers ...
- go 学习之fmt包
基本模式fmt 方法可以大致分为 print, scan两类, 根据基础方法可以构建特定方法. Print 将参数写入字符串或io.writer scan 从字符串或 io.Reader 读取指定数据 ...
- 分布式自增ID算法-Snowflake详解
1.Snowflake简介 互联网快速发展的今天,分布式应用系统已经见怪不怪,在分布式系统中,我们需要各种各样的ID,既然是ID那么必然是要保证全局唯一,除此之外,不同当业务还需要不同的特性,比如像并 ...
- axios 如何获取下载文件的进度条
exportFun(){ let _that = this const instance = this.axios.create({ onDownl ...
- PyInstaller库的使用
PyInstaller库的使用 PyInstaller库用于将已经写好的py程序,转换成可以跨平台的可执行文件 使用方式 发布主要借助cmd命令行来实现.在当前目录的powershell下,输入 py ...
- windows10安装docker[含百度网盘docker安装包]
在win10上安装 docker(比较简单) 安装步骤: 现在 Docker 有专门的 Win10 专业版系统的安装包,需要开启Hyper-V. 1.开启 Hyper-V 程序和功能 启用或关闭Win ...
- Codeforces Round #420 (Div. 2) - C
题目链接:http://codeforces.com/contest/821/problem/C 题意:起初有一个栈,给定2*n个命令,其中n个命令是往栈加入元素,另外n个命令是从栈中取出元素.你可以 ...