C#进程隐藏示例:安全使用方法

3星 · 超过75%的资源 需积分: 10 55 下载量 120 浏览量 更新于2024-09-19 收藏 10KB TXT 举报
这段C#源码提供了一个名为`HidePress`的类,专注于实现Windows进程的隐藏功能。主要关注的是隐藏任务管理器(Task Manager),通过`HideTaskmgrList`类来控制这一过程。这个类使用了`System.Timers.Timer`来定期检查和隐藏指定的进程,通过`ProcessName`属性设置要隐藏的任务管理器进程名称。 在`HideTaskmgrList`类中,有以下几个关键方法: 1. **构造函数**:初始化`Timer`对象,设置间隔时间为1秒,并添加一个Elapsed事件处理器`_Time_Elapsed`,用于在定时器触发时执行隐藏任务。 2. **Start()** 方法:启用定时器,开始周期性地尝试隐藏进程。 3. **Stop()** 方法:停止定时器,防止进一步的操作。 4. **ProcessName 属性**:用于设置和获取要隐藏的任务管理器进程名称。 5. **_Time_Elapsed 方法**:事件处理程序,当定时器时间到时,调用`HideTaskmgrListOfName()` 方法来隐藏指定进程。这个方法的具体实现依赖于`NetEnumControl()` 方法,它是一个用于控制Windows进程的私有辅助方法。 6. **NetEnumControl() 方法**:使用 `DllImport` 引用的 Win32 API,该方法接受进程句柄(`IntPtr p_Handle`)和参数(`int p_Param`),可能是用来查找或操作进程。由于代码片段中没有提供完整的Win32 API函数,我们无法得知`NetEnumControl`的确切作用,但可以推测是与进程管理、枚举或控制相关的底层操作。 需要注意的是,这段代码仅提供了进程隐藏的部分功能,并且明确表示不应用于非法操作。如果要在实际项目中使用,需要确保符合法律法规和道德规范,避免滥用这种技术。 这段C#代码展示了如何使用C#编程语言与底层Windows API交互,实现对特定进程的隐藏功能,适用于合法场景下的应用开发,如自动化工具或管理系统。然而,开发者必须明白其潜在风险,确保合规使用。
2012-08-25 上传
代码完全远程。 可以在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