为什么不能注入explorer.exe和winlogon.exe等
#include<windows.h>
#include<stdio.h>
BOOL EnableDebugPrivilege()
{
HANDLE HToken = NULL;
LUID SaveDebugNameValue;
TOKEN_PRIVILEGES Token_Privilege;
if(0==OpenProcessToken(GetCurrentProcess(),TOKEN_ALL_ACCESS,&HToken))
{
return false;
}
if(0==LookupPrivilegeValue(NULL,SE_DEBUG_NAME,&SaveDebugNameValue))
{
CloseHandle(HToken);
return false;
}
Token_Privilege.PrivilegeCount = 1;
Token_Privilege.Privileges.Attributes = SE_PRIVILEGE_ENABLED;
Token_Privilege.Privileges.Luid = SaveDebugNameValue;
if(0==AdjustTokenPrivileges(HToken,false,&Token_Privilege,NULL,NULL,NULL))
{
CloseHandle(HToken);
return false;
}
CloseHandle(HToken);
return true;
}
int insert(DWORD pid)
{
HANDLE hThread=NULL;//远线程的句柄
HANDLE hProcess=NULL;//将注入的进程句柄
LPVOID lpDllRemotePath=NULL;//在进程申请得的空间
HMODULE hmodule=NULL;//模块句柄
FARPROC lfnAddr=NULL;//函数的地址
char szDllPathName[]="d:\\我的文档\\桌面\\myhook\\insertDll\\Debug\\insertDll.dll";
if(!EnableDebugPrivilege())
{
printf("提权失败!\n");
return 0;
}
hProcess=OpenProcess(PROCESS_ALL_ACCESS,false,pid);//打开目标进程
DWORD havewrite,id;
if(hProcess==NULL)
{
printf("OpenProcess error!\n");
return 0;
}
lpDllRemotePath=VirtualAllocEx(hProcess,NULL,strlen(szDllPathName)+1,MEM_COMMIT,PAGE_READWRITE);//向进程中申请空间
if(lpDllRemotePath==NULL)
{
printf("VirtualAllocEx error!\n");
return 0;
}
if(!WriteProcessMemory(hProcess,lpDllRemotePath,(LPVOID)szDllPathName,strlen(szDllPathName)+1,&havewrite))
{
printf("writeprocessmemory error!\n");
return 0;
}
hmodule=(HMODULE)GetModuleHandle("kernel32.dll");
lfnAddr=GetProcAddress(hmodule,"LoadLibraryA");
hThread=CreateRemoteThread(hProcess,NULL,0,(LPTHREAD_START_ROUTINE)lfnAddr,(LPVOID)lpDllRemotePath,0,&id);
if(hThread==NULL)
{
printf("CreateRemoteThread error!\n");
return 0;
}
return 1;
}
void main()
{
int id;
printf("输入进程ID:");
scanf("%d",&id);
if(!insert((DWORD)id))
{
printf("注入失败!\n");
}
else
{
printf("注入成功\n");
}
}
您是没注入成功?
建议以后遇到这种问题时,先调试下,找到是在哪一步出错,就能更快解决
我在这里测试了下,注入这两个进程都没问题。您如果是XP环境,建议看下有没有开启dep保护,并且检查下dll是否存在 漩涡鸣人 发表于 2015-6-14 22:15
您是没注入成功?
建议以后遇到这种问题时,先调试下,找到是在哪一步出错,就能更快解决
应该是权限问题了。
这个在一般需要以管理员权限运行才可以。
也可以在程序里手动提权。
页:
[1]