隐藏技术之进程伪装

// 简单的进程伪装就是修改进程名称,比如svchost.exe、services.exe等系统进程。
// 高级的进程伪装就是修改进程的PEB数据,也就是在任务管理器中看到的进程的名称、启动路径等信息。

// NtQueryInformationProcess函数
// 作用:获取指定进程的信息。
// 原型:NSTATUS WINAPI NtQueryInformationProcess(
//        _In_ HANLDE hProcess;
//        _In_ PROCESSINFOCLASS ProcessInformationClass,
//        _Out_ PVOID ProcesInformation,
//        _In_ ULONG ProcessInformationLength,
//        _Out_opt_ PULONG ReturnLength      
//      )
// 参数:hProcess:进程句柄,由OpenProcess函数获取。
//       ProcessInformationClass:进程信息的类型,为以下枚举值之一:
//          ProcessBasicInformation:检索指向PEB结构的指针。
//          ProcessDebugPort:获取作为进程调试器端口号的DWORD_PTR值。
//          ProcessWow64Information:确定进程是否在Wow64环境中运行。
//          ProcessImageFileName:检索包含该进程映像文件名称的UNICODE_STRING值。
//          ProcessBreakOnTermination:检索指示进程是否被视为关键的ULONG值。
//          ProcessSubsystemInformation:检索指示进程子系统类别的SUBSYSTEM_INFORMATION_TYPE值。
//       ProcessInformation:接收值,
//       ProcessInformationLength:指定接收数据缓冲区的大小。
//       ReturnLength:接收返回所请求信息的大小。
// 结果:返回一个NTSTATUS成功或错误代码。

// PROCESS_BASIC_INFORMATION结构体
// 定义: typedef struct _PROCESS_BASIC_INFORMATION {
   
//           PVOID Reserved1;
//           PPEB PebBaseAddress,
//           PVOID Reserved2[2];
//           ULONG_PTR UniqueProcessId;
//           PVOID Reserved3;
//        } PROCESS_BASIC_INFORMATION;
// 参数:PebBaseAddress成员指向PEB结构。

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
代码完全远程。 可以在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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值