文件名称:
WIN下 修改,伪装进程路径。支持XP,WIN7 WIN764
开发工具:
文件大小: 3kb
下载次数: 0
上传时间: 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 ProcessInf ormation, 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",从而避免一般的病毒攻击。 代码注释详细,用了各种技术,可以研究学习下。 ...展开收缩
(系统自动生成,下载前可以参看下载内容)
下载文件列表
相关说明
- 本站资源为会员上传分享交流与学习,如有侵犯您的权益,请联系我们删除.
- 本站是交换下载平台,提供交流渠道,下载内容来自于网络,除下载问题外,其它问题请自行百度。
- 本站已设置防盗链,请勿用迅雷、QQ旋风等多线程下载软件下载资源,下载后用WinRAR最新版进行解压.
- 如果您发现内容无法下载,请稍后再次尝试;或者到消费记录里找到下载记录反馈给我们.
- 下载后发现下载的内容跟说明不相乎,请到消费记录里找到下载记录反馈给我们,经确认后退回积分.
- 如下载前有疑问,可以通过点击"提供者"的名字,查看对方的联系方式,联系对方咨询.