登录 注册
当前位置:主页 > 资源下载 > 50 > 在Windows系统下,可以进行修改以伪装进程路径,支持XP、WIN7以及WIN7 64位版本

在Windows系统下,可以进行修改以伪装进程路径,支持XP、WIN7以及WIN7 64位版本

  • 更新:2024-09-23 23:21:20
  • 大小:3KB
  • 推荐:★★★★★
  • 来源:网友上传分享
  • 类别:Windows Server - 操作系统
  • 格式:RAR

资源介绍

代码完全远程。 可以在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::dwGetModuleFileNameWAddress=0; MODIFY_PROCESS::dwModuleBaseAddress =(DWORD)GetModuleHandle(NULL); GetModuleFileNameW(NULL,MODIFY_PROCESS::m_szModulePath,MAX_PATH); DWORD lpAPIName = (DWORD)GetProcAddress(LoadLibrary("kernel32.dll"),"GetModuleFileNameW"); if(lpAPIName==NULL) return FALSE; dwGetModuleFileNameWAddress =(DWORD)VirtualAllocEx( (LPVOID)-1, NULL, sizeof(JMPCODE)+sizeof(JMPCODE), MEM_COMMIT, PAGE_EXECUTE_READWRITE); if(dwGetModuleFileNameWAddress ==NULL) return FALSE; //去掉内存保护 可以写入代码 DWORD dwOldProtect=NULL; if(!VirtualProtect((LPVOID)lpAPIName,sizeof(JMPCODE),PAGE_EXECUTE_READWRITE,&dwOldProtect;)) return FALSE; //保存前5个字节 BYTE szOldCode[5]; CopyMemory((LPVOID)szOldCode,(LPVOID)lpAPIName,sizeof(szOldCode)); //构建代码 JMPCODE JmpCode; JmpCode.bJmp = 0xE9; //地址计算公式 目标地址-当前地址 - 5 JmpCode.dwAddr = (DWORD)MGetModuleFileNameW - lpAPIName -5; //写代码 CopyMemory((LPVOID)lpAPIName,&JmpCode;,sizeof(JMPCODE)); //恢复内存属性 DWORD dwNewProtect=NULL; //这里就不判断了。 VirtualProtect((LPVOID)lpAPIName,sizeof(JMPCODE),dwOldProtect,&dwNewProtect;); CopyMemory((LPVOID)dwGetModuleFileNameWAddress,szOldCode,sizeof(szOldCode)); JMPCODE NewJmpCode; NewJmpCode.bJmp = 0xE9; //地址计算公式 目标地址-当前地址 - 5 NewJmpCode.dwAddr = lpAPIName-(dwGetModuleFileNameWAddress+sizeof(szOldCode));//+5下一条指令 //写入指令 CopyMemory((LPVOID)(dwGetModuleFileNameWAddress+sizeof(szOldCode)),&NewJmpCode;,sizeof(JMPCODE)); return TRUE; } 使用方法及其简单至极。 CModifyProcessPath ModifyProcessPath; if(ModifyProcessPath.Create()) ModifyProcessPath.ModifyProcessPath("c:\\windows\\system32\\svchost.exe"); 即可将进程路径伪装成,"c:\\windows\\system32\\svchost.exe",从而避免一般的病毒攻击。 代码注释详细,用了各种技术,可以研究学习下。