CreateProcess插入DLL的方法 (EXE篇

Windows进程注入实战:从DLL注入到线程劫持的五种创新技术 进程注入是Windows系统安全与软件开发中的一项核心技术,其本质是通过突破进程内存空间隔离,使目标进程执行外部代码。从原理层面看,它利用虚拟内存机制和系统API(如OpenProcess、VirtualAllocEx)实现跨进程内存操作。这项技术的工程价值在于,它不仅是恶意软件常用的隐蔽手段,更是安全研究、软件调试和功能扩展的重要工具。在应用场景上,进程注入广泛用于游戏修改、安全监控、软件插件加载等领域。本文聚焦五种创新注入技术,包括反射式DLL注入和APC注入,深入解析其实现逻辑与实战要点,为开发者与安 阅读详情
 

#include <windows.h>

#include <stdio.h>

#pragma comment(lib, "ImageHlp.lib")

#pragma pack (push ,1)
typedef struct
{
BYTE int_PUSHAD;
BYTE int_PUSH;
DWORD push_Value;
BYTE int_MOVEAX;
DWORD eax_Value;
WORD call_eax;
BYTE jmp_MOVEAX;    
DWORD jmp_Value;
WORD jmp_eax;
char szDLL[MAX_PATH];
}INJECT_LOADLIBRARY_CODE, *LPINJECT_CODE, INJECT_CODE;
#pragma pack (pop , 1)

typedef struct
{
LPBYTE lpEntryPoint;     // 目标进程的入口地址
BYTE   oldcode[sizeof(INJECT_CODE)];// 目标进程的代码保存
}SPY_MEM_SHARE, * LPSPY_MEM_SHARE;

typedef struct
{
DWORD lpEntryPoint;
DWORD OldAddr;
DWORD OldCode[4];
}JMP_CODE, *LPJMP_CODE;
static JMP_CODE _lpCode;

//查找进程入口点
LPBYTE GetExeEntryPoint(char *filename)
{
PIMAGE_NT_HEADERS pNTHeader;
DWORD     pEntryPoint;
PLOADED_IMAGE   pImage;
pImage = ImageLoad(filename, NULL);
if(pImage == NULL)
   return NULL;
pNTHeader = pImage->FileHeader;
pEntryPoint = pNTHeader->OptionalHeader.AddressOfEntryPoint + pNTHeader->OptionalHeader.ImageBase;
ImageUnload(pImage);

return (LPBYTE)pEntryPoint;
}

void jet(LPSTR szRunFile, LPSTR szMyDll)
{
STARTUPINFO stInfo = {sizeof(stInfo)};
PROCESS_INFORMATION m_proInfo = {0};
LPBYTE pEntryPoint;
HANDLE hMap;
SIZE_T cBytesMoved;
LPSPY_MEM_SHARE lpMap;
INJECT_CODE newCode;

CreateProcessA( 0,
      szRunFile,
      0,
      0,
      FALSE,
      CREATE_SUSPENDED,
      0,
      NULL,
      &stInfo,
      &m_proInfo);

pEntryPoint = GetExeEntryPoint(szRunFile);
hMap = CreateFileMapping((HANDLE)0xFFFFFFFF,
         NULL,
         PAGE_READWRITE,
         0,
         sizeof(SPY_MEM_SHARE),
         "MyDllMapView");

lpMap = (LPSPY_MEM_SHARE)MapViewOfFile(hMap, FILE_MAP_ALL_ACCESS, 0, 0, 0);
ReadProcessMemory(m_proInfo.hProcess,
       pEntryPoint,
       &lpMap->oldcode,
       sizeof(INJECT_CODE),
       &cBytesMoved);
lpMap->lpEntryPoint = pEntryPoint;

lstrcpy(newCode.szDLL, szMyDll);
newCode.int_PUSHAD = 0x60;   
newCode.int_PUSH = 0x68;
newCode.int_MOVEAX = 0xB8;
newCode.call_eax = 0xD0FF;
newCode.jmp_MOVEAX = 0xB8;
newCode.jmp_eax = 0xE0FF;
newCode.eax_Value = (DWORD)&LoadLibrary;
newCode.push_Value = (DWORD)(pEntryPoint + offsetof(INJECT_CODE, szDLL));

DWORD dwNewFlg, dwOldFlg;
dwNewFlg = PAGE_READWRITE;
VirtualProtectEx(m_proInfo.hProcess,
      (LPVOID)pEntryPoint,
      sizeof(DWORD),
      dwNewFlg,
      &dwOldFlg);
WriteProcessMemory(m_proInfo.hProcess,
       pEntryPoint,
       &newCode,
       sizeof(newCode),
       NULL);//&dwWrited);
VirtualProtectEx(m_proInfo.hProcess,
      (LPVOID)pEntryPoint,
      sizeof(DWORD),
      dwOldFlg,
      &dwNewFlg);

//释放FileMaping 注意,不是Closehandle(hMap)
UnmapViewOfFile(lpMap);

//继续目标进程的运行
ResumeThread(m_proInfo.hThread);
}


//////////////////////////////////////////////////////////
int APIENTRY _tWinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPTSTR    lpCmdLine,
                     int       nCmdShow)
{
   jet("Ikeeper.mpc", "inet.dll");

Sleep(6000);
return 0;
}

windows使用detours实现进程拦截实操 Detours是微软开发的一个函数库,可用于捕获系统API。可以从github下载源码并编译。Detours通过更改被拦截的API函数的跳转地址为用户自定义的函数地址来实现拦截。比如我们知道要拦截API函数A,我们需要自定义一个函数B,在实现拦截之前,此时函数A所在的线程正常调用A。开始拦截的时候,Detours库函数将A的入口地址修改为B的函数指针。此前线程对函数A的调用将会被替换为被函数B的调用,当然前提是函数A和函数B的函数签名完全一致。在将函数A的入口地址修改函数B的地址时已经保留了函数A的原始地址 阅读详情

相关推荐

PowerShell进程注入完全指南:从Start-Hollow到Stage-RemoteDll实战解析

进程注入是Windows安全领域的核心技术概念,它允许一个进程在另一个进程的地址空间中执行代码,其原理基于操作系统提供的进程间内存操作API。这项技术的核心价值在于实现代码的隐蔽执行和权限提升,在红蓝对抗、恶意软件分析和EDR绕过等应用场景中至关重要。通过调用VirtualAllocEx、WriteProcessMemory和CreateRemoteThread等关键API,攻击者能够实现内存写入和远程线程创建,而防御者则依赖这些行为特征进行检测。本文聚焦于PowerShell环境下的高级注入技术,系统讲解

weixin_33851604的博客 328

Delphi调用CreateProcess创建进程

var  si:STARTUPINFO;  pi:PROCESS_INFORMATION;begin  try    FillChar(si,SizeOf(si),0);    FillChar(pi,SizeOf(pi),0);    si.cb:=SizeOf(si);    Result:=CreateProcess(PChar(ExeFilePath),nil,nil,nil,False,...

weixin_33712881的博客 2439

Delphi(XE2)+Win10实现系统服务使用CreateProcessAsUser调用外部exe

众所周知,使用Delphi创建的Service Application系统服务,在XP系统中与桌面交互十分流畅,可以随意打开自己程序的窗口,不过自Vista系统开始后台服务不再允许与桌面系统直接交互了。本例子实现了使用CreateProcessAsUser打开第三方带界面的应用(如notepad.exe)

VC6.0下创建进程

#include #include using namespace std; int main() { STARTUPINFO si; //FILETIME f1,f2,f3,f4; int n=1; memset(&si,0,sizeof(STARTUPINFO)); si.cb=sizeof(STARTUPINFO); si.dwFla

XQQ524148626的专栏 2156

SAP Ariba Procurement_Catalogs

SAP Ariba Procurement_Catalogs Search Functionality PunchOut Catalogs Spot Buy catalog

CZxx1的博客 1013

从电商平台到微信私域:构建合规跳转链路的技术实现

在互联网营销与用户增长领域,链接跳转是连接不同平台、引导用户流量的基础技术。其核心原理是通过服务器端路由与参数解析,实现用户请求的接收、处理与重定向。这项技术的价值在于能够突破平台间的生态壁垒,实现流量的合规、可控迁移,尤其适用于跨平台营销、私域沉淀等场景。在实际应用中,常需处理微信环境限制、参数传递与动态内容生成等挑战。本文聚焦于电商平台(如淘宝)到微信生态的跳转需求,详细阐述了如何利用Node.js、Express框架及二维码生成技术,构建一个包含环境检测、参数传递与动态落地页的完整跳转系统,以解决微信

weixin_33889665的博客 323

CreateProcess创建一个隐藏进程

delphi中使用CreateProcess创建一个隐藏进程 FillChar(StartUpInfo, SizeOf(StartUpInfo), 00); StartUpInfo.dwFlags := STARTF_USESHOWWINDOW; StartUpInfo.w

haiou327’blog 9846

LangFuse部署与实践

LangFuse的原理主要是基于可观察性和分析技术来监控和优化低延迟消息(LLM)应用。它提供了一套完整的解决方案,通过收集、处理和分析LLM应用在运行过程中产生的各种数据,来生成实时的、深入的、可操作的见解。通过提供实时的、深入的见解和可视化的跟踪功能,LangFuse使得识别和解决应用性能问题变得更加简单和高效。总的来说,LangFuse的原理是通过综合运用可观察性和分析技术,来提供对LLM应用的全面监控和优化能力。这使得开发者和运维团队能够更加高效地管理和维护他们的应用,从而提升用户体验和业务效益。

pumpkin84514的博客 7943

c++ 在内存中加载 exe/dll (不使用CreateProcess、LoadLibrary 等 API)

背景 在网上搜索了很多病毒木马的分析报告,看了一段时间后,发现还是有很多病毒木马都能够模拟PE加载器,把DLL或者是EXE等PE文件,直接从内存中直接加载到自己的内存中执行,不需要通过API函数去操作,以此躲过一些杀软的...

墨鱼菜鸡 1201

Cadence virtuos安装教程

本文详细介绍了在Ubuntu 18.04系统上安装Cadence Virtuoso IC617及MMSIM的完整流程。主要内容包括:1)系统环境准备(安装JDK及相关依赖包);2)通过创建软链接和修改系统文件实现RedHat环境兼容;3)共享目录文件操作与分卷压缩包合并解压技巧;4)使用InstallScape工具的安装步骤详解,包括权限处理和配置选项。特别提醒需注意系统兼容性处理(如创建redhat-release文件)和分卷压缩包的特殊解压方法(cat合并)。整个安装过程涉及大量Linux命令操作,需特

wangjie36的博客 298

【置顶】TEE从入门到精通-[目录]

此专栏讲解包含不限于optee、商用TEE、常规的安全业务设计。但主要基于optee最新代码,深度讲解和剖析各项原理和机制...

baron-周贺贺-代码改变世界ctw 6427

Detours学习之六:32位和64位进程路由

32位和64位进程 Detours最常见的使用场景是通过路由绕过现有应用程序中的功能,而不修改原始应用程序二进制文件。在这些场景中,用户提供的DetourCreateProcessWithDll函数被打包在DLL中,DLL在启动时使用DetourCreateProcessWithDll API加载到应用程序中。从父进程调用DetourCreateProcessWithDll API;它通过为detour DLL插入导入表项来更改应用程序的内存副本。这个新的导入表条目导致OS加载程序在应用程序...

jyl_sh的专栏 1475

华为OD新系统真题-最小极差分组(C/C++/Py/Java/Js/Go)

华为OD机试 新系统真题【最小极差分组】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD机试真题【最小极差分组】多语言题解。

qq_45776114的博客 588

CreateProcess插入DLL的方法 (EXE篇)

#include #include #pragma comment(lib, "ImageHlp.lib")#pragma pack (push ,1)typedef struct{ BYTE int_PUSHAD; BYTE int_PUSH; DWORD push_Value; BYTE int_MOVEAX; DWORD eax_Value; WORD call_eax; BYTE jmp_

ClassFree(自由魔方)的Blog 1894

红火蚁巢穴AI智能识别,提供方案与思路!

🏆本文收录于 《全栈 Bug 调优(实战版)》 专栏。专栏聚焦真实项目中的各类疑难 Bug,从成因剖析 → 排查路径 → 解决方案 → 预防优化全链路拆解,形成一套可复用、可沉淀的实战知识体系。无论你是初入职场的开发者,还是负责复杂项目的资深工程师,都可以在这里构建一套属于自己的「问题诊断与性能调优」方法论,助你稳步进阶、放大技术价值 。

**My Coding Family** 1042

【MicroPython编程-ESP32篇:设备驱动】-BNO08X系列传感器驱动

BNO08X 系列(BNO085/BNO086)是一款系统级封装 (SiP),集成了三轴加速度计、三轴陀螺仪、磁力计以及运行 CEVA SH-2 固件的 32 位 ARM® Cortex™-M0+ 微控制器。SH-2 包含 MotionEngine™ 软件,该软件提供复杂的信号处理算法来处理传感器数据,并提供精确的实时 3D 姿态、航向、校准加速度和校准角速度,以及更高级的上下文输出。BNO08X 集成在一个 28 引脚 LGA 封装中,尺寸为 3.8mm x 5.2mm x 1.1mm。它兼容 Andro

视觉与物联智能 695

CreateProcess启动游戏注入DLL

先来段简单的,亲测成功!!! // test2.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include #include #include using namespace std; int _tmain(int argc, _TCHAR* argv[]) { TCHAR szDll[] = TEXT("d:\\zlib1.dll");

liujiayu2的专栏 4499

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

DLL注入技术

目录(?)[+] 一DLL注入技术的用途二实现DLL注入的另一种方法 转载自: http://hi.baidu.com/xwind85/blog/item/ae5332ad04bb7f034a36d662.html 一、DLL注入技术的用途 DLL注入技术的用途是很广泛的,这主要体现在: 1、假如你要操纵的对象涉及的数据不在进程内; 2、你想对目标进程中的函数进行拦截(

guomeiran的专栏 880

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

DLL Inject Porcess Code

实现dll注入到explorer进程 #include #include  // 声明快照函数的头文件 #include "stdio.h" #include "tchar.h"    // _tcsrchr // 插入dll目标进程 LPTSTR Target="iexplore.exe"; DWORD FindProcess(LPTSTR lpszProNam

多媒体编程、网络编程、系统编程、网络安全编程、驱动编程 658

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

病毒木马查杀实战第020篇:Ring3层主动防御之基本原理

前言       如果说我们的计算机中安装有杀毒软件,那么当我们有意或无意地下载了一个恶意程序后,杀软一般都会弹出一个对话框提示我们,下载的程序很可能是恶意程序,建议删除之类的,或者杀软就不提示,直接删除了;或者当我们运行了某一个程序,包含有可疑操作,比如创建开机启动项,那么杀软一般也会对此进行提醒;或者当我们在计算机中插入U盘,杀软往往也会第一时间对U盘进行扫描,确认没有问题后,再打开U盘……上

Gleam的专栏 1万+

APC注入APCInject(DLL)

https://github.com/haidragon/win10_UserApcInjectAPC注入的原理是利用当线程被唤醒时APC中的注册函数会被执行的机制,并以此去执行我们的DLL加载代码,进而完成DLL注入的目的,其具体流程如下:1)当EXE里某个线程执行到SleepEx()或者WaitForSingleObjectEx()时,系统就会产生一个软中断(或者是Messagebox弹窗的时...

weixin_34259559的博客 431

深入解析svchost.exe进程的Shellcode注入技术原理与防御实践

进程注入是Windows系统安全中一项经典的对抗技术,其核心原理在于通过操作系统提供的API,将恶意代码写入并运行于目标进程的内存空间,从而实现权限提升或规避检测。这项技术的价值在于它揭示了合法系统进程可能被滥用的风险,是理解“无文件攻击”和“白利用”等高级威胁的基础。在实际应用场景中,攻击者常将高权限、高信任的系统进程(如svchost.exe)作为目标,通过创建挂起进程、分配内存、写入Shellcode并修改内存属性为可执行等一系列操作,最终借助CreateRemoteThread或QueueUserA

weixin_30254435的博客 370

一个API拦截的例子

闲来无事,做一个API拦截的简单程序,目标是拦截exploer.exe的CreateProcess.当打开桌面程序时,执行自定义的代码。 首先需要确认的是,explorer.exe创建进程是用了什么函数,创建进程自然想到用CreateProcess(CreateProcessA,CreateProcessW). 这里我拦截的是CreateProcessW。 执行以下命令: dumpbin

sylar的个人主页 874

EXE捆绑与免杀技术实战:从PE结构到行为伪装的攻防博弈

在软件安全领域,可执行文件(EXE)的静态与动态分析是安全防护的基础。理解PE文件结构有助于分析程序加载与执行流程,而代码混淆、加壳等技术则能有效对抗特征码检测。这些技术的核心价值在于提升软件在对抗环境中的生存能力,广泛应用于渗透测试、红队评估等安全研究场景。本文聚焦于EXE捆绑与免杀技术,通过剖析PE文件结构、引导代码机制,并结合代码混淆与行为伪装等热词,详细阐述了如何通过手工与自动化方法实现载荷的隐蔽投递与执行,为安全研究人员提供一套从原理到实践的完整攻防视角。

weixin_30315905的博客 391

Windows渗透测试载荷加载技术:进程注入与反射式DLL绕过防御

在网络安全领域,进程注入是一种关键的代码执行技术,它允许将外部代码加载到另一个进程的内存空间中运行。其核心原理是通过操作系统的API(如OpenProcess、VirtualAllocEx、CreateRemoteThread)在目标进程中分配内存、写入载荷并创建远程线程。这项技术的价值在于能够绕过传统安全软件的检测,实现隐蔽的恶意代码执行,广泛应用于渗透测试、红队演练等安全评估场景。通过结合反射式DLL注入和AMSI绕过等热词技术,可以进一步提升攻击的隐蔽性和成功率,有效检验终端防护体系的检测能力。

weixin_34355559的博客 376
上一篇: CreateProcess插入DLL的方法
下一篇: 自定义函数过启发杀毒或者用于其它目的
iiprogram
博客等级 码龄25年 1068粉丝 1515原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值