详解PID到进程名的转换及伪装

隐藏技术之进程伪装 // 简单的进程伪装就是修改进程名称,比如svchost.exe、services.exe等系统进程。 // 高级的进程伪装就是修改进程的PEB数据,也就是在任务管理器中看到的进程的名称、启动路径等信息。 // NtQueryInformationProcess函数 // 作用:获取指定进程的信息。 // 原型:NSTATUS WINAPI NtQueryInformationProcess( // _In_ HANLDE hProcess; // _In_ PROCESSIN 阅读详情
很多时候我们都要用到从PID到进程名的转换。
先总结一下相关的一些常用函数。
GetCurrentProcessId
GetWindowProcessID
这是两个最常用的获得PID的函数。

再看看如何通过PID获得进程名
先用OpenProcess把进程打开,然后一般用下面的一些方法来获得
1.用快照函数CreateToolhelp32Snapshot,然后枚举进程,比较
        CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0)
        Process32First/Process32Next
2.用GetModuleFileNameEx(当前进程用GetModuleFileName,多一个进程句柄参数)
        DWORD GetModuleFileNameEx(
          HANDLE hProcess,
          HMODULE hModule,
          LPTSTR lpFilename,
          DWORD nSize
        );
        需要注意的是这个函数在PSAPI.dll里面
3.用GetProcessImageFileName(WinXP以后新加的一个函数,在psapi.dll中)
        DWORD GetProcessImageFileName(
          HANDLE hProcess,
          LPTSTR lpImageFileName,
          DWORD nSize
        );
        该函数仅在WinXP,Win2003以后支持

说到这里我们就该说说WinNT对进程名的存储和管理了
下面以WinXP SP2 5.1.2600.2180 中的ntkrnlpa.exe为例,涉及到绝对偏移的地方不同版本可能会有所不同,请大家执行研究。

第一个地方,在_EPROCESS中有个成员UCHAR ImageFileName[ 16 ];
       偏移174h的位置,这里存的是进程的短文件名,少数地方用,
       比如SoftIce的addr和proc命令,如果名称超过16个字符直接截断
第二个地方,PEB中的PPEB_LDR_DATA Ldr成员
       或者_RTL_USER_PROCESS_PARAMETERS* ProcessParameters。
       关于PEB的获取方法FS:30h,进程外用NtQueryInformationProcess传递
       PROCESS_BASIC_INFORMATION获取,具体参数自行参考MSDN
       ProcessParameters在PEB中偏移10h的位置,一般都是20000h这个值
       ProcessParameters中38h的位置是进程主模块,40h为进程命令行(注:Unicode)
       通过Ldr也是可以获得的,位置在PEB偏移0Ch的位置,LDR中0Ch的位置是

InLoadOrderModuleList(双链表),通过这个可以枚举到该进程所有的模块名
到这里我们已经可以轻松的欺骗用GetModuleFileName/GetModuleFileNameEx获得进程名的方式了

第三个地方,EPROCESS中有个成员SE_AUDIT_PROCESS_CREATION_INFO SeAuditProcessCreationInfo,该结构其实就是个UniCode指针,不过这个地方不是一直都有的。当执行过NtQueryInformationProcess (ProcHandle,ProcessImageFileName,....)后就有了。GetProcessImageFileName就是直接调用NtQueryInformationProcess来获得进程名的。

好了,大概明白了后我们来看看NtQueryInformationProcess的代码NtQueryInformationProcess中处理ProcessImageFileName的代码是这样的先用ObReferenceObjectByHandle把进程句柄转换成PEPROCESS,然后将PEPROCESS传递给SeLocateProcessImageName,SeLocateProcessImageName会判断SeAuditProcessCreationInfo成员是否已经初始化,没有则调用

PsReferenceProcessFilePointer(该函数其实就是取的EPROCESS结构中SectionObject对应的文件句柄)获得进程对应的文件句柄,并将文件句柄传递

SeInitializeProcessAuditName,SeInitializeProcessAuditName最后调用ObQueryNameString将文件句柄转换成文件名。

到这里后我们可以直接在驱动中调用一次NtQueryInformationProcess,然后去修改EPROCESS中的SeAuditProcessCreationInfo成员即可完成进程名的伪装了 
【渗透测试】初探进程伪装 前言 当我们获取到一台主机的权限过后,拿到了自己想要搜集的信息,这时候我们就会留一个后门进行权限维持,权限维持的学问其实很深,今天就主要介绍其中一种比较简单的权限维持的方法 – 进程伪装。 我们知道在windows里面有很多系统进程,如winlogon.exe、explorer.exe、services.exe等等,这些exe都是Windows必须具有的exe,当缺失某些exe的时候,windows就不能够正常运行,所以我们如果想到实现进程伪装,最好的选择就是伪装成系统必备的exe,当我们进行进程伪装之后, 阅读详情

相关推荐

易语言通过进程名获取进程句柄:API封装与遍历实现

在Windows系统编程中,进程句柄是对目标进程进行内存读写、远程线程创建等操作的必要访问凭证。然而,OpenProcess等API直接依赖动态变化的PID,导致开发者无法仅凭进程名稳定获取句柄。借助ToolHelp快照机制遍历系统进程,并通过Process32First/Process32Next逐一比对进程名,即可将可执行文件名映射为固定PID,进而调用OpenProcess完成句柄获取。这一技术路线不仅适用于易语言,也适用于C++、C#等语言,尤其在无窗口后台程序、多实例进程和守护工具等场景中,能有效

weixin_33906657的博客 382

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

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

weixin_44891742的博客 8281

【实战】修改贝锐向日葵控控A2(OrayKVM)固件,伪装成指定厂商的USB设备ID

通过逆向与固件修改,我们可以让 OrayKVM 更好地融入特定 IT 环境。技术无罪,善用为佳。祝你折腾愉快,白灯常亮!💡。

weixin_48947460的博客 1373

获得进程映像文件 (中)

NTSTATUSPsReferenceProcessFilePointer (    IN PEPROCESS Process,    OUT PVOID *OutFileObject    )/*++Routine Description:    This routine returns a referenced pointer to the FilePointer of Process.   

Tommy(凌飞)的专栏 1408

Rust实现Windows进程隐藏技术:Process Ghosting与Herpaderping详解

进程隐藏是系统安全与攻防对抗中的核心技术,它通过操纵操作系统底层的进程创建、内存管理和文件系统机制,使特定进程对监控工具“不可见”。其原理通常涉及利用操作系统内核对象状态转换的时间窗口或逻辑间隙,例如在进程创建流程中拦截并篡改其内存镜像,或利用文件系统延迟删除特性。这项技术的核心价值在于提升安全测试、威胁模拟和系统研究等场景中工具的隐蔽性与生存能力,尤其适用于红队演练、EDR绕过和Windows内部机制研究等高级应用。本文聚焦Process Ghosting与Herpaderping这两种前沿的进程隐藏技术

weixin_34117211的博客 402

进程伪装技术

本文相关的技术是在应用层实现的,且没有使用hook之类的技术,但实现了全局的伪装,也就是任意的进程调用相关API所得到的目标进程信息都是伪造的数据。

Think88666的博客 1428

yuzu Switch 模拟器使用指南:三步完成安装、启动与调优

yuzu 模拟器是一款采用 GPLv3 开源许可的任天堂 Switch 模拟器,用 C++ 在 Windows、Linux 和 Android 上重建了 Switch 的系统软件、GPU 与外设。本文按"能不能跑起来 → 能不能跑得顺 → 出问题时怎么办"三条主线展开,每步都以仓库源码为准,告诉你该检查什么、该改哪里,而不是一份功能清单的罗列。 ## 🎮 先弄清 yuzu 是怎么运作的,再谈配

gitblog_00208的博客 669

内核修改进程启动参数源码,可用于学习浏览器劫持

自己小改一下即可支持x64系统,zip里源码是支持x86的,实际测试很多浏览器都OK,

[Windows 驱动] 高效获取当前进程名的内核级实现

本文深入探讨了在Windows内核驱动开发中高效获取当前进程名的核心方法。通过对比分析直接读取EPROCESS结构、获取完整路径等多种技术方案,重点介绍了使用PsGetProcessImageFileName函数实现内核级进程名获取的高效实践,并提供了进程监控框架与避坑指南,为驱动开发者进行进程行为监控与安全检测提供了关键技术参考。

weixin_29197699的博客 315

修改、伪装进程路径。支持XP,WIN7 WIN764

windows下 修改,伪装进程路径。支持XP,WIN7 WIN764

WIN下 修改,伪装进程路径。支持XP,WIN7 WIN764

代码完全远程。 可以在XP WIN7 WIN764 WIN2003 等操作系统上成功实现修改进程路径。 已经封装成类,使用及其方便。 部分代码: 头文件: #ifndef ModifyProcessPath_h__ #define ModifyProcessPath_h__ // 结构定义 typedef struct _PROCESS_BASIC_INFORMATION { DWORD ExitStatus; ULONG PebBaseAddress; ULONG AffinityMask; LONG BasePriority; ULONG UniqueProcessId; ULONG InheritedFromUniqueProcessId; } PROCESS_BASIC_INFORMATION, *PPROCESS_BASIC_INFORMATION; // API声明 typedef LONG (__stdcall *PZWQUERYINFORMATIONPROCESS) ( HANDLE ProcessHandle, ULONG ProcessInformationClass, PVOID ProcessInformation, ULONG ProcessInformationLength, PULONG ReturnLength ); class CModifyProcessPath { public: CModifyProcessPath(); BOOL Create(); BOOL ModifyProcessPath(LPCTSTR szPath); BOOL CamouflageExplorerPath(); }; #endif // ModifyProcessPath_h__ CPP部分代码: #include "StdAfx.h" #include "ModifyProcessPath.h" namespace MODIFY_PROCESS { wchar_t m_szModulePath[MAX_PATH]; DWORD dwGetModuleFileNameWAddress; DWORD dwModuleBaseAddress; //E9 (目标地址-当前地址 - 5) #pragma pack(1) typedef struct _JMPCODE { BYTE bJmp; DWORD dwAddr; }JMPCODE,*LPJMPCODE; #pragma pack() DWORD WINAPI MGetModuleFileNameW(HMODULE hModule,wchar_t * lpFilename,DWORD nSize); }; using namespace MODIFY_PROCESS; // 为了不影响在进程内使用 GetModuleFileNameW ,故hook之,返回正确的路径。 DWORD WINAPI MODIFY_PROCESS::MGetModuleFileNameW(HMODULE hModule,wchar_t * lpFilename,DWORD nSize) { typedef DWORD(WINAPI *MGetModuleFileNameWT)(HMODULE,LPWCH,DWORD); MGetModuleFileNameWT pMGetModuleFileNameW; pMGetModuleFileNameW = (MGetModuleFileNameWT)dwGetModuleFileNameWAddress; if(hModule == NULL || hModule ==(HMODULE)MODIFY_PROCESS::dwModuleBaseAddress) { StringCbCopyW(lpFilename,nSize,m_szModulePath); return wcslen(m_szModulePath); } return pMGetModuleFileNameW(hModule,lpFilename,nSize); } CModifyProcessPath::CModifyProcessPath() { } BOOL CModifyProcessPath::Create() { ZeroMemory(MODIFY_PROCESS::m_szModulePath,sizeof(MODIFY_PROCESS::m_szModulePath)); MODIFY_PROCESS::dwGet

netstat命令详解

运维

qq_39203337的博客 1万+

Cadence17.2 > Allegro > 检查PCB Layout信号线组等长

Cadence17.2 > Allegro > 检查PCB Layout等长和配线

DL_62532的专栏 1万+

深度剖析伪装成.aliyun.sh的新型挖矿木马:从检测到防御的实战指南

在Linux服务器安全领域,恶意脚本与进程伪装是攻击者实现持久化入侵的常见手段。其核心原理在于通过混淆加密、进程重命名、文件隐藏等技术,将恶意负载伪装成系统可信进程或文件,以规避传统基于签名的检测。这类技术的危害在于能长期隐蔽地劫持服务器计算资源,用于加密货币挖矿,导致业务性能下降与云成本激增。典型的应用场景包括攻击者利用Web应用漏洞、SSH弱密码或配置错误入侵服务器后,投放此类木马。本文聚焦于一种伪装成“.aliyun.sh”的**新型挖矿木马**,深入拆解其**加密混淆**手法、行为特征与入侵路径,并

weixin_30617737的博客 381

从MATLAB到版图:手把手复现一篇16位1MSPS SAR ADC的完整设计流程(含Cadence与Verilog代码)

本文详细介绍了16位1MSPS SAR ADC的完整设计流程,从MATLAB行为级建模到Cadence电路实现,再到Verilog数字逻辑编码和版图生成。重点讲解了高精度逐次逼近型模数转换器的关键技术,包括电容阵列建模、校准算法实现、FFT性能验证以及混合信号仿真等,为工程师提供了实用的工业级设计指南。

weixin_28703507的博客 301

「点燃我,温暖你」用Python制作一个动态爱心效果

最近「点燃我,温暖你」这部剧非常火,讲述的是程序员的爱情故事。其中陈飞宇饰演的男主李峋,在剧中用程序做出的爱心跳动效果,非常炫。

Modeler_xiaoyu的博客 1万+

Linux/Windows系统进程管理与性能调优指南

系统进程是操作系统运行的基础单元,负责资源分配和任务执行。在Linux和Windows系统中,进程管理涉及内核调度、内存分配和权限控制等核心机制。通过理解进程的生命周期和资源占用特性,可以有效进行性能调优和故障排查。在服务器运维场景中,关键进程如systemd、sshd等的异常会导致服务中断,需要实时监控和自动恢复机制。现代云计算环境下的容器化部署,更引入了cgroup资源隔离等新技术要求。掌握进程监控工具如htop、strace的使用,以及OOM Killer等内核机制的原理,是保证系统稳定性的关键技能。

dixi7825的博客 474

3D医学影像分割实战:从数据预处理到模型训练全流程解析

本文详细解析了3D医学影像分割的全流程,从数据预处理到模型训练,重点介绍了nnUNet框架的应用技巧。通过实战案例,帮助开发者掌握如何处理复杂的.nii.gz文件格式、优化数据预处理流程以及高效训练3D分割模型,特别适合医学影像分析领域的从业者参考。

weixin_29098367的博客 222

深入解析操作系统进程管理与实践技巧

进程作为操作系统资源分配的基本单位,是计算机系统并发执行的核心机制。通过虚拟内存和CPU时间片轮转技术,操作系统实现了进程间的隔离与调度。理解进程生命周期(创建、就绪、运行、阻塞、终止)对系统性能优化至关重要,特别是在处理僵尸进程等常见问题时。现代系统通过进程监控工具(如top/htop)和IPC机制(管道、共享内存、套接字等)实现高效管理。随着容器技术的发展,进程管理在Docker和Kubernetes环境中呈现出新的特点,需要特别关注PID命名空间和优雅终止等问题。掌握这些知识不仅能提升系统稳定性,还能

weixin_30899023的博客 300

通信算法之264: DJI O2 协议物理层逆向工程解析

对于 DroneID,标志之间的间隙由循环前缀 (CP) 填充:每个标志末尾的副本附加在相应标志的开头。有了关于确切标志开始的信息,可以使用 FFT 将标志转移到频域 - 来自时域的 1024 个样本导致频域中的 1024 个子载波。使用比特流的解扰和涡轮解码,并将生成的数据映射到如上的DroneID 结构,通过逆向工程在无人机的固件中找到了它。注意到一些无人机(Mavic 2 和更早的 OcuSync 无人机)不发送第一个标志(标志 1),这导致更短的帧持续时间为 576 µs。//产品型号数字代号。

leegang12的专栏 3945

泛微表单添加自定义按钮

泛微表单添加自定义按钮

技术分享 2191

Linux进程溯源指南:从ps到witr,挖出陌生进程的“血缘关系”

在Linux运维与服务器管理场景中,理解进程的“血缘关系”是排查异常与故障定位的基础能力。每个进程都通过PID和PPID构成树形结构,但仅靠进程名判断来源容易被伪装、重名或孤儿进程误导。借助/proc文件系统读取exe、cmdline、environ等原始字段,配合pstree、lsof以及systemd的cgroup归属,可以交叉验证进程的真实来源与启动路径。当CPU飙高、服务反复重启或接手陌生服务器时,这种从快照转向全链路追踪的思路尤为有效。witr等进程溯源工具正是将分散在ps、/proc、syste

weixin_34094282的博客 282

产品路线图的三种模型(RICE/MoSCoW/Kano),教你如何对需求进行优先级排序

RICE/MoSCoW/Kano三种模型,教你如何对需求进行优先级排序。 也许你会让业务提供一份ROI,记得前不久参加过一场立项会评审,一位很有意思的小产品在会上讲不清楚ROI,评审们要求会后重新梳理,小产品表达不要为难业务方干一些他们不擅长的事了。这个看似笑话的经历,背后隐藏着价值判断已经流于形式。 也许你会要求业务方直接给出需求优先级列表,把任务分为P0到P5,这样的划分除了按需求本质的优先级还同时考虑了开发资源、开发难度等问题。毫不夸张地说,我曾经拿到一张全是P0级别的需求清单,如果一切任务都是高

wenyusuran的专栏 5542

深入解析操作系统进程:原理、管理与实践

进程是操作系统进行资源分配和调度的基本单位,作为程序执行的动态实例,每个进程都拥有独立的内存空间和系统资源。从技术原理来看,进程通过进程控制块(PCB)维护状态信息,其内存模型包含代码段、数据段、堆栈等关键区域。在并发编程中,进程间通信(IPC)机制如管道、共享内存和消息队列等发挥着重要作用,而进程调度算法如时间片轮转和多级反馈队列则直接影响系统性能。现代操作系统如Linux和Windows都提供了丰富的进程管理工具,同时容器技术也为进程隔离带来了新的解决方案。理解进程管理对于系统调优、安全防护和分布式系统

weixin_34212762的博客 354

【微服务】Java 对接飞书多维表格使用详解

Java 对接飞书多维表格使用详解

congge_study的博客 1万+

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

上一篇: 运行期修改可执行文件的路径和Command Line
下一篇: 逆向一个基于驱动的恶意程序
iiprogram
博客等级 码龄25年 1068粉丝 1515原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值