c/c++ windows 远程线程注入

Windows下DLL注入 - 线程注入及对抗方案 // Demo.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。 // #include <iostream> #include <string> #include <thread> #include <mutex> #include "windows.h" #include "tlhelp32.h" wchar_t* char2wchar(const char* cchar); char* wchar2char(const wc. 阅读详情

常用的注入手段有两种:一种是远程的dll的注入,另一种是远程代码的注入;

远程线程注入——其主要核心在于一个Windows API函数CreateRemoteThread,通过它可以在另外一个进程中注入一个线程并执行。

被注入进程A, 注入 进程B  

HMODULE WINAPI LoadLibrary( _In_ LPCTSTR lpFileName);  以它为远程线程的回调;

它的参数是我们B进程的, 但是真正执行的是在A进程,怎么样才能把B进程的字符串地址放到A进程中呢?

if(!EnablePrivilege(GetCurrentProcess()))//提升进程权限
{
    return;
}
HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS,NULL,dwPID);
void *pRemoteAdrr = VirtualAllocEx(hProcess,NULL,strlen(pDllPathBuf)+1,MEM_COMMIT,PAGE_READWRITE);
WriteProcessMemory(hProcess,pRemoteAdrr,pDllPathBuf,strlen(pDllPathBuf)+1,NULL);

注入线程并执行

HANDLE WINAPI CreateRemoteThread(
  __in          HANDLE hProcess,
  __in          LPSECURITY_ATTRIBUTES lpThreadAttributes,
  __in          SIZE_T dwStackSize,
  __in          LPTHREAD_START_ROUTINE lpStartAddress,
  __in          LPVOID lpParameter,
  __in          DWORD dwCreationFlags,
  __out         LPDWORD lpThreadId
);

最关心的两个参数是lpStartAddress和lpParameter,它们分别代表线程函数的入口和参数,其他参数一般设置为0即可。

DWORD dwTID = 0;
HANDLE hThread = CreateRemoteThread(hProcess,NULL,0,(LPTHREAD_START_ROUTINE)GetProcAddress(LoadLibrary("Kernel32.dll"),"LoadLibraryA"),\
                                        pRemoteAdrr,\ //线程参数, 即loadlibraryA的参数
                                        0,&dwTID);
WaitForSingleObject(hThread,INFINITE);
GetExitCodeThread(hThread,(LPDWORD)&g_dwhMod); //线程退出码,即为g_dwhMod,它也是loadlibraryA的返回值, 模块句柄;
//此时我们的dll已经执行在进程A中了

释放掉我们在A进程中申请的内存, 并关闭线程句柄

VirtualFreeEx(hProcess,pRemoteAdrr,strlen(pDllPathBuf)+1,MEM_DECOMMIT);
CloseHandle(hProcess);

/////////////////////////////////////////////////////////////////////////////////////////////以上是线程注入部分(load之后也应有free嘛),卸载部分

HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS,NULL,dwPID);
	DWORD dwTID = 0;
	HANDLE hThread = CreateRemoteThread(hProcess,NULL,0,(LPTHREAD_START_ROUTINE)GetProcAddress(LoadLibrary("Kernel32.dll"),"FreeLibrary"),\
                                        g_dwhMod,\
                                        0,&dwTID);
    WaitForSingleObject(hThread,INFINITE);
    CloseHandle(hProcess);

到此完事

附加:


//提升进程权限
BOOL EnablePrivilege(HANDLE hProcess)
{
	HANDLE hToken = NULL;
	if (!OpenProcessToken(hProcess, TOKEN_ADJUST_PRIVILEGES, &hToken))
	{
		//printf("LINE: %u  Error_Code: %u\n", __LINE__,GetLastError());
		return FALSE;
	}
	LUID luid = { 0 };
	if (!LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &luid))
	{
		//printf("LINE: %u  Error_Code: %u\n", __LINE__, GetLastError());
		return FALSE;
	};
	TOKEN_PRIVILEGES token_privelege = { 1 };
	token_privelege.Privileges[0].Luid = luid;
	token_privelege.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
	if (!AdjustTokenPrivileges(hToken, FALSE, &token_privelege, sizeof(TOKEN_PRIVILEGES), NULL, NULL))
	{
		//printf("AdjustTokenPrivileges LINE: %u  Error_Code: %u\n", __LINE__, GetLastError());
		return FALSE;
	};
	CloseHandle(hToken);
	return TRUE;
}

 

远程线程注入--DLL注入(C++) 远程线程注入(Remote Thread Injection)是指通过创建远程线程的方式将代码注入到另一个进程的地址空间中。下面是一个简单的 C++ 示例,展示如何通过远程线程注入一个 DLL 到目标进程中。 阅读详情

相关推荐

Windows黑客编程——远程线程注入(2)

本篇采用的技术与前一篇无异,唯一的区别是调用了更底层的API——ZwCreateThreadEx,与CreateRemoteThread相比,该API除了能注入普通进程外,还能注入系统服务进程,实际上CreateRemoteThread底层也是通过ZwCreateThreadEx来实现了,不过该API是微软未公布的,所以不同版本操作系统或编写32位与64位程序,该函数的原型不一定相同。 废话不多说,参考第一篇博文,直接上代码: //定义32位函数指针 typedef DWORD(WINAPI *typ

Think88666的博客 1818

[c++]远程线程注入

网上例子很多,但对细枝末节的处理少,某些情况下这些细节决定了注入的成功与否。使用方法,生成exe,假设名称为RemoteThreadDll.exe。花了一点时间,自己写了个通用的标准远程线程注入。注入器exe dll文件路径 被注入的目标程序。exe同目录下创建一个bat文件,内容如下。运行run.bat效果。

undefined 748

C/C++ 实现Windows R3无模块内存注入技术 [x86/x64] 项目实战

在现代Windows操作系统中,进程间通信与代码注入技术是安全研究、逆向工程以及恶意软件分析领域的重要课题。其中,内存注入作为一种典型的用户态(Ring 3)代码劫持手段,广泛应用于调试、功能扩展乃至攻击行为中。本章将深入剖析Windows平台下进程内存注入的基本原理与应用场景,重点聚焦于无模块注入这一高级技术路径。不同于传统的DLL注入依赖外部动态链接库文件,无模块注入通过直接在目标进程中分配内存、写入原始机器码(Shellcode),并创建远程线程执行,实现完全脱离PE文件结构的隐蔽式代码植入。

weixin_35516624的博客 1527

C++远程线程注入

在一个进程中,调用CreateThread或CreateRemoteThreadEx函数,在另一个进程内创建一个线程(因为不在同一个进程中,所以叫做远程线程)。创建的线程一般为Windows API函数LoadLibrary,来加载一个动态链接库(DLL),从而达到在另一个进程中运行自己所希望运行的代码的目的。6、CreateRemoteThread函数开启远程线程执行我们刚刚向目标进程写入的代码。1、远程线程线程注入第一步首先要获取目标注入进程的PID(可以在任务管理器中查看)

qq_29317353的博客 709

注入 - 代码注入之远程线程篇 - C_C++_Python_Java - 博客园.pdf

注入 - 代码注入之远程线程篇 - C_C++_Python_Java - 博客园.pdf

InjectDLL代码 实现远程注入线程.zip

InjectDLL代码 实现远程线程注入.zip

C/C++ DLL反射式注入内存手动映射

首先计算得到基地址的偏移量,也就是实际的 DLL 加载地址减去 DLL 的推荐加载地址(保存在 NT可选头的 ImageBase 中,实际 DLL 加载地址是我们调用 VirtualAlloc()的返回值。首先使用 _ReturnAddress() 获取当前函数的返回地址,因为调用这个函数是在 ReflectiveLoader 的内部,因此从这个地址向上遍历,找 0x4d ,0x5a 就可以定位到 DLL 的 PE 文件头所在的虚拟地址 (o゚v゚)ノ。将 DLL 的 PE文件头和各个节复制到对应的位置。

微软技术分享 9803

Win10右键新建菜单丢了记事本?别慌!5分钟教你用注册表找回来(附权限设置避坑指南)

本文详细指导如何通过注册表编辑器恢复Win10右键新建菜单中丢失的记事本选项,包括重建键值结构、配置ShellNew项及设置权限等关键步骤。特别提供权限避坑指南,确保修改持久有效,帮助用户快速解决这一常见但困扰的问题。

weixin_31714129的博客 856

Blackbone:Windows平台C++与.NET混合编程的底层注入方案

在Windows平台软件开发中,进程间通信与代码注入是系统级编程的核心技术。其原理是通过操作系统提供的API,控制目标进程的内存空间和执行流程,实现跨进程的功能扩展或调试。这项技术的工程价值在于能够在不修改原有程序源码的情况下,为其添加新功能或进行深度集成,尤其适用于插件系统开发、自动化测试和遗留系统改造等场景。Blackbone作为一个开源的C++库,正是基于这一技术理念,专注于实现C++原生代码与.NET托管代码的高效互操作。它通过直接操作进程内存和CLR运行时,绕过了传统C++/CLI的编译限制,为开

weixin_34296641的博客 570

Springboot信息泄露以及heapdump的利用

努力是为了不平庸~安全有些时候是枯燥的,这一次,让我们先人一步,趣学渗透!

LiBai'S BLOG 3万+

AI全景之第八章第三节:时间序列分析与预测技术

摘要 时间序列分析与预测技术从传统统计模型发展到深度学习方法。传统方法包括ARIMA模型(处理趋势和季节性)、指数平滑(加权平均预测)和状态空间模型(概率框架分解)。机器学习方法通过特征工程和树模型提升非线性建模能力。深度学习方法中,RNN/LSTM处理序列依赖,TCN利用因果卷积,Transformer通过注意力机制捕获长程依赖。当前研究趋势结合神经符号方法和生成模型,以提高预测精度和可解释性。不同方法各具优势,需根据数据特性和预测需求选择。

技术引领业务创新 991

APC注入DLL(一)

提供一点APC注入的实例: 条件:取到进程句柄 DWORD APCInject(HANDLE hProcess,DWORD tid){ const char szInjectModName[] = "c:\\testdll.dll"; DWORD dwLen = strlen(szInjectModName); PVOID param = VirtualAllocEx(hPr...

weixin_30740581的博客 92

美亚杯2023参赛全攻略:从检材下载到Veracrypt挂载的保姆级教程

本文提供美亚杯2023电子数据取证竞赛的完整参赛指南,重点解析从检材下载、Veracrypt挂载到实战取证的保姆级流程。针对新手常见误区,详细说明两套密码(ZIP解压密码与Veracrypt挂载密码)的区别与正确使用方法,并分享赛前环境搭建、赛中高效分析及赛后报告撰写的核心技巧,帮助参赛者系统备赛,规避基础错误。

y9z0a1b的博客 1079

用远线程实现文件自删除(代码)

#include &lt;windows.h&gt;#include &lt;tchar.h&gt;#include &lt;TLHELP32.H&gt;#include &lt;stddef.h&gt; /*push dwTimecall Sleep mov  eax, [esp + 4]push eaxcall DeleteFileAret  4*/ #pragma pack(push,...

weixin_34408624的博客 128

Xilinx FPGA资源解析与使用系列——Transceiver(六)关键时钟梳理之TXOUTCLK和RXOUTCLK

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 Xilinx FPGA资源解析与使用系列——Transceiver(六)transceiver内部关键时钟梳理之TXOUTCLK和RXOUTCLK前言TXOUTCLKRXOUTCLK 前言 前面我们已经研读了 transceiver的参考时钟 和复位的相关内容。 但是随着内容的深入,越来越多的信号出现在我的面前。 例如 TXOUTCLK、TXUSERCLK、TXUSERCLK2 RXOUTCLK、RXUSERCLK、RXUSERCLK2

gzy0506的博客 8089

学Simulink——基于Simulink的PMSM矢量控制(FOC)从零搭建

《Simulink下PMSM矢量控制(FOC)全流程开发指南》 本教程系统讲解了基于Simulink的永磁同步电机(PMSM)磁场定向控制(FOC)实现方法。主要内容包括:FOC控制原理与双闭环架构设计、Simulink建模全流程(含PMSM本体建模、坐标变换、PI控制器设计等)、关键调试技巧以及工程扩展方向。教程以48V伺服电机为例,详细演示了从Clarke/Park变换到SVPWM生成的完整实现过程,并提供了参数配置建议和常见问题解决方案。通过本教程,读者可掌握FOC系统的核心实现技术,为开发高性能电机

xiaoheshang_123的博客 273

Windows核心编程 远程线程注入

Windows核心编程 C运行库/C++STL线程,远程线程注入,DLL卸载与调试

qq_61553520的博客 1773

【unity实战】Cinemachine虚拟相机实战,使用InputSystem+Cinemachine+CharacterController复刻各种主流游戏的相机控制

这里主要是探讨如何使用InputSystem+Cinemachine+CharacterController复刻各种主流游戏的相机控制,我们主要专注Cinemachine实战效果,所以并不会深入讨论Cinemachine和CharacterController比较细节的参数介绍。注意:前面为了测试方便,我还是先用的旧的输入系统代替InputSystem【推荐100个unity插件之10】Unity最全的最详细的Cinemachine(虚拟相机系统)介绍,详细案例讲解,快速上手。

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 3751

C/C++ 远程DLL线程注入

DLL远程线程注入是一种技术,常用于在一个进程的地址空间中加载并执行动态链接库(DLL)。这种注入方式通常涉及到两个进程:目标进程和注入进程。

微软技术分享 8480

YOLOv13改进策略【小目标改进】| Shape-NWD:融合改进,结合Shape-IoU和NWD 更好地适应小目标特性

Bw−wgt2h−hgt2weight2Bweight2w−wgt​2h−hgt​2​其中weight2weight = 2weight2。

Limiiiing的博客 587

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

C++ DLL远程线程注入实战:从原理到代码实现

动态链接库(DLL)是Windows系统中实现代码复用和模块化的重要机制,其核心原理在于允许程序在运行时加载外部代码模块。通过系统API如LoadLibrary,进程可以动态引入功能,这构成了软件扩展和插件系统的基础。在软件调试、安全研究和功能扩展等应用场景中,有时需要主动将DLL载入目标进程,这就引出了进程注入技术。其中,远程线程注入是一种经典方法,它利用CreateRemoteThread等API,在目标进程内开辟线程执行LoadLibrary,从而加载指定DLL。本文聚焦于C++实现,深入解析了该技术

weixin_34006468的博客 847

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

C/C++ 远程线程注入

DLL文件如果不被进程加载就无效了 方法是强制让某进程加载DLL文件,强制手段通过创建远程线程将DLL注入到某个指定的进程中 使用CreateRemoteThread()函数创建远程线程 HANDLE CreateRemoteThread( HANDLE hProcess,       // handle to process LPSECURITY_ATTRIBUTES lpThreadAttributes, // SD DWORD dwStackSize,      // ..

Y_sl_itachi的博客 566

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

c++ windows DLL远程注入

这次使用远程线程来进行DLL注入,它提供了最高的灵活性。从根本上说DLL注入要求目标进程中的一个线程使用LoadLibrary来载入我们的DLL。 由于我们不能随意的控制别的线程,因此我们需要在目标进程创建一个新的线程,远程创建线程可以使用 CreateRemoteThread 来进行创建,下面是函数原型。 HANDLE CreateRemoteThread( [in] HANDLE hProcess, [in] LPSECURITY_ATTRIBUTES lpThreadAttr

weixin_42603425的博客 2740

9.9 Windows驱动开发:内核远程线程实现DLL注入

在笔者上一篇文章`《内核RIP劫持实现DLL注入》`介绍了通过劫持RIP指针控制程序执行流实现插入DLL的目的,本章将继续探索全新的注入方式,通过`NtCreateThreadEx`这个内核函数实现注入DLL的目的,需要注意的是该函数在微软系统中未被导出使用时需要首先得到该函数的入口地址,`NtCreateThreadEx`函数最终会调用`ZwCreateThread`,本章在寻找函数的方式上有所不同,前一章通过内存定位的方法得到所需地址,本章则是通过解析导出表实现。

微软技术分享 1万+

Windows程序设计学习笔记——线程(三)线程注入

本文先介绍了C中的线程创建操作,再介绍了C++标准库的多线程操作,最后着重介绍了远程线程注入技术,远程线程注入就是在其他进程中创建我们的线程,我们的线程会把我们的dll载入到注入进程中,这便是远程线程注入技术,接着介绍了相关api,最后介绍了线程注入的相应步骤...

weixin_48088263的博客 1480

远程线程注入

远程线程注入 远程线程注入是最基础的一种注入方式,因为其调用了CreateRemoteThread()函数而得名。但是因为其是最基础的注入方式,调用了windows API而特征明显,所以非常容易被检测出来。 这次的实验对象是notepad.exe #include <Windows.h> #include <stdio.h> #include <TlHelp32.h> #include <iostream> using namespace std; BOO

qq_40710190的博客 780
上一篇: C/C++ 二级指针与一级指针 (作用在参数传递时 VC)
下一篇: Qt Creator中常用快捷键和小技巧
__网瘾少年
博客等级 码龄11年 122粉丝 103原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值