远程线程注入(简单样例以及原理)

news2024/9/22 23:17:52

远程线程注入(简单样例以及原理)

注入的目标是将我们的代码注入到目标进程的地址空间中

注入通常可以根据注入的内容分为两种类型:

  1. shellcode注入
    :这种注入是将我们的代码直接注入到目标内存中,这就要保证我们的代码在贴到其他地址上后仍然能够正常执行
    :这种方式优点是不容易检测,因为他的特征并不明确,缺点也很明显就是代码比较麻烦也不容易维护
  2. 模块注入
    :模块注入的原理是通过在目标进程中创建一个新的线程让他帮我们执行loadlibrary的方式去加载一个新的模块到地址空间中
    优点就是这种代码很好写,并且不需要我们自己做重定位等pe文件的加载动作,缺点则是特征比较明显

我们今天通过一个简单的测试代码来了解一下模块注入的大体流程

  1. 找到目标进程
  2. 获取目标进程的handle
  3. 在目标进程的地址空间中写入我们要加载的模块的文件名
  4. 为目标进程创建新的线程

下面来看一下我们要注入的模块代码
这个模块中主要是创建了一个静态线程对象,循环打印内容

// pch.cpp: 与预编译标头对应的源文件

#include "pch.h"
#include <stdio.h>

DWORD WINAPI threadProc(
	LPVOID lpThreadParameter
) {
	for (size_t i = 0; i < 10; i++)
	{
		printf("%d", i);
		Sleep(1000);
	}

	return 0;
}

class MyClass
{
public:
	MyClass();
	~MyClass();

private:
	HANDLE t = { 0 };
};

MyClass::MyClass()
{
	DWORD threadid;
	t = CreateThread(NULL, 0, threadProc, NULL, 0, &threadid);
}

MyClass::~MyClass()
{
	CloseHandle(t);
}

static MyClass c;

然后是我们要注入的目标进程的代码
这个代码也很简单,就是循环打印

#include <Windows.h>
#include <stdio.h>


int main() {
	
	//LoadLibrary(L"Dll1.dll");
	for (size_t i = 0; i < 1000; i++)
	{
		printf("-------%d-------\n", i);
		Sleep(1000);
	}
	return 0;
}

然后是存放我们的注入动作的代码

int main() {
	UINT PID = 10744;// 这边可以通过tlhelp32或者psapi.dll提供的函数来找到pid
	//这边暂时不做提权,正常的话应该通过processtoken提权一下,可以查msdn上有详细说明
	HANDLE h = OpenProcess(PROCESS_ALL_ACCESS, FALSE, PID);
	const WCHAR* dllName = L"Dll1.dll";
	LPVOID addr = VirtualAllocEx(h, NULL, 0x100, MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE);
	if (addr == NULL) return -1;
	DWORD realBytes = 0;
	WriteProcessMemory(h, addr, dllName, MAX_PATH + 1, &realBytes);
	DWORD threadId;
	// 这边简单说一下,能够直接将loadlibrary函数作为线程的起始地址有三个原因
	// 1:loadlibrary这个函数是kernel32.dll中的基本所有的win32进程都会存在这个dll
	// 2:因为kernel32.dll这类的win32dll都是提前做了地址绑定并且imagebase都是在比较高的位置基本上不会触发重定位,
	// 所以在每个进程内的函数地址都是一样的
	// 3:可以发现loadlibrary的函数的声明结构跟createthread所需的函数结构是一样的所以可以直接用
	HANDLE hThread = CreateRemoteThread(h, NULL, 0, (LPTHREAD_START_ROUTINE)LoadLibrary, addr, 0, &threadId);
	if (hThread == NULL) return -1;
	WaitForSingleObject(hThread, -1);
	VirtualFreeEx(h, addr, NULL, MEM_RELEASE);

	CloseHandle(h);
	CloseHandle(hThread);
	system("pause");
	return 0;
}

接下来我们来看一下注入的效果
首先是没有注入的时候就是一直在打印
在这里插入图片描述
这是注入后的进程控制台打印效果:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/901482.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

7-2 求矩阵各行元素之和

分数 15 全屏浏览题目 切换布局 作者 C课程组 单位 浙江大学 本题要求编写程序&#xff0c;求一个给定的mn矩阵各行元素之和。 输入格式&#xff1a; 输入第一行给出两个正整数m和n&#xff08;1≤m,n≤6&#xff09;。随后m行&#xff0c;每行给出n个整数&#xff0c;其间…

You don‘t have an extension for debugging html.

flutter在vscode点 菜单栏的run 下的 start debugging后出现下面的错误。 点到main.dart文件&#xff0c;再执行运行按钮。

linux安装mysql错误处理

linux下mysql的安装与使用 linux安装mysql可有三种方式&#xff1a; 1、yum安装 2、源码安装 3、glibc安装 安装wget yum install -y wget https://blog.csdn.net/darendu/article/details/89874564?utm_sourceapp Linux上error while loading shared libraries问题解决方法…

Linux忘记root密码解决方法

当我们忘记root密码进不去服务器怎么办&#xff1f;不要担心&#xff0c;可以进入到linux的救援模式修改root密码。 下面直接上干货&#xff0c;流程如下&#xff1a; 1.重启电脑&#xff0c;按上下键滑动&#xff0c;保证不进入开机流程&#xff0c;然后按e键 2.出现此页面…

GAN生成对抗模型根据minist数据集生成手写数字图片

文章目录 1.项目介绍2相关网站3具体的代码及结果导入工具包设置超参数定义优化器&#xff0c;以及损失函数训练时的迭代过程训练结果的展示 1.项目介绍 通过用minist数据集进行训练&#xff0c;得到一个GAN模型&#xff0c;可以生成与minist数据集类似的图片。 GAN是一种生成模…

MySQL数据类型篇

数值类型 类型有符号(SIGNED)取值范围无符号(UNSIGNED)取值范围大小描述TINYINT(-128&#xff0c;127)(0&#xff0c;255)1byte小整数值SMALLINT(-32768&#xff0c;32767)(0&#xff0c;65535)2bytes大整数值INT/INTEGER(-2147483648&#xff0c;2147483647)(0&#xff0c;429…

7-4 交换最小值和最大值

分数 15 全屏浏览题目 切换布局 作者 C课程组 单位 浙江大学 本题要求编写程序&#xff0c;先将输入的一系列整数中的最小值与第一个数交换&#xff0c;然后将最大值与最后一个数交换&#xff0c;最后输出交换后的序列。 注意&#xff1a;题目保证最大和最小值都是唯一的。…

通过建立符号链接为C盘省内存空间

前言 该方法仅针对Windows系统&#xff0c;最好配备类似SpaceSniffer这类磁盘内存分析工具。如果你的C盘剩余的内存空间不足&#xff0c;可以尝试通过这个方法来省出大量的内存空间&#xff0c;这个方法的本质就是通过Windows的符号链接功能&#xff0c;让C盘中指定文件或文件夹…

aardio窗体缩放自动匹配批量生成plus实例

import win.ui; /*DSG{{*/ var winform win.form(text"窗体缩放批量生成plus";right759;bottom469;bgcolor15780518) winform.add( custom{cls"custom";text"自定义控件";left3;top6;right753;bottom460;ah1;aw1;bgcolor15780518;z1} ) /*}}*//…

运行flutter doctor命令窗口直接闪退

在cmd中输入flutter doctor后闪退了。 使用高速摄像机可以看到报错信息。 报错信息的意思是git的文件夹不能删掉&#xff0c;请保留flutter中git文件。

树莓派和windows之间文件传输

方案一&#xff1a;FileZilla 在电脑上下载FileZilla软件并打开&#xff0c;输入配置信息&#xff0c;用户名/密码、树莓派的IP地址,点击“快速连接” 方案二&#xff1a;samba 树莓派安装 samba 软件 sudo apt-get install samba samba-common-bin 修改配置文件 / etc /samba…

微表情识别(Python编程,cnn模型)

1.数据集包括7种类别微表情 anger文件夹&#xff0c;3995张 disgust文件夹&#xff0c; 436张照片 fear文件夹&#xff0c;4097张照片 happy文件夹&#xff0c;7215张照片 neutral文件夹&#xff0c;4965张照片 sad文件夹&#xff0c;4830张照片 surprised文件夹&#xff0c; 3…

函数极限与连续性——张宇老师学习笔记

Latex 源代码以及成品PDF&#xff08;Debug版本&#xff09;&#xff1a;https://wwsk.lanzouc.com/itaDI15vddcb Latex编译Debug版本&#xff1a; $ xelatex 函数极限与连续性.texLatex编译Relese版本&#xff08;无例题、习题&#xff0c;只有概念定义&#xff09;&#xf…

循环结构 7-4 找出最小值

分数 20 全屏浏览题目 切换布局 作者 颜晖 单位 浙大城市学院 本题要求编写程序&#xff0c;找出给定一系列整数中的最小值。 输入格式&#xff1a; 输入在一行中首先给出一个正整数n&#xff0c;之后是n个整数&#xff0c;其间以空格分隔。 输出格式&#xff1a; 在一行…

[零刻]EQ12 N100 迷你主机:从开箱到安装ESXi+虚拟机

开箱先上图&#xff1a; 配置详情&#xff1a; EQ12采用了Intel最新推出的N100系列的处理&#xff0c;超低的功耗&#xff0c;以及出色的CPU性能用来做软路由或者是All in one 相当不错&#xff0c;CPU带有主动散热风扇&#xff0c;在长期运行下散热完全不用担心&#xff0c;性…

企业如何开展个人信息安全影响评估(PIA)二

基本概念 根据《信息安全 技术个人信息安全影响评估指南》&#xff08;GB/T 39335—2020&#xff1b;personal information security impact assessment&#xff0c;简称“PIA”&#xff09;&#xff0c;个人信息安全影响评估是指针对个人信息处理活动&#xff0c;检验其合法合…

【Redis】什么是缓存穿透,如何预防缓存穿透?

【Redis】什么是缓存穿透&#xff0c;如何预防缓存穿透&#xff1f; 缓存穿透是指查询一个一定不存在的数据&#xff0c;由于缓存中不存在&#xff0c;这时会去数据库查询查不到数据则不写入缓存&#xff0c;这将导致这个不存在的数据每次请求都要到数据库去查询&#xff0c;这…

数据可视化diff工具jsondiffpatch使用学习

1.jsondiffpatch 简介 jsondiffpatch 是一个用于比较和生成 JSON 数据差异的 JavaScript 库。它可以将两个 JSON 对象进行比较&#xff0c;并生成一个描述它们之间差异的 JSON 对象。这个差异对象可以用于多种用途&#xff0c;例如&#xff1a; 生成可视化的差异报告应用差异…

【系统架构设计专业技能 · 数据库设计(二)【系统架构设计师】

系列文章目录 系统架构设计专业技能 软件工程&#xff08;一&#xff09;【系统架构设计师】 系统架构设计高级技能 软件架构概念、架构风格、ABSD、架构复用、DSSA&#xff08;一&#xff09;【系统架构设计师】 系统架构设计高级技能 系统质量属性与架构评估&#xff08;…

小程序商品如何指定打印机

有些商家&#xff0c;可能有多个仓库。不同的仓库&#xff0c;存放不同的商品。当客户下单时&#xff0c;小程序如何自动按照仓库拆分订单&#xff0c;如何让打印机自动打印对应仓库的订单呢&#xff1f;下面就来介绍一下吧。 1. 设置订单分发模式。进入管理员后台&#xff0c…