VS2010 线程注入 CreateRemoteThread(),出错,返回5
我已经使用管理员身份运行,之前运行正确,只是一到CreateRemoteThread就出错
代码如下
代码如下
#include<iostream>
#include"windows.h"
#include"tlhelp32.h"
using namespace std;
BOOL Prompt()
{
HANDLE hToken;
if(!OpenProcessToken(::GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES,&hToken))
{
cout<<"OpenProcessToken error the code is :"<<GetLastError()<<endl;
return FALSE;
}
TOKEN_PRIVILEGES tkp;
tkp.PrivilegeCount =1;
if(!LookupPrivilegeValue(NULL,SE_DEBUG_NAME,&tkp.Privileges [0].Luid ))
{
cout<<"LookPrivilegeValue error the code is :"<<GetLastError()<<endl;
return FALSE;
}
if(!AdjustTokenPrivileges(hToken,false,&tkp,sizeof(tkp),NULL,0))
{
cout<<"AdjustPrivileges error the code is:"<<GetLastError()<<endl;
return FALSE;
}
return true;
}
int main()
{
//获得系统当前运行的程序,获得目标程序ID
DWORD ProcessId=0;
HANDLE hSnap=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
if(hSnap==NULL)
{
cout<<"CreateToolhelp32Snapshot error the code is :"<<GetLastError()<<endl;
return 0;
}
BOOL mark=false;
PROCESSENTRY32 pro_info;
pro_info.dwSize =sizeof(pro_info);
mark=Process32First(hSnap,&pro_info);
while(mark)
{
if(pro_info.szExeFile [0]=='c'&&pro_info.szExeFile [1]=='a'&&pro_info.szExeFile [2]=='l'&&pro_info.szExeFile [3]=='c')
{
MessageBoxA(NULL,"find it!","warning ",0);
ProcessId=pro_info.th32ProcessID ;
break;
}
mark=Process32Next(hSnap,&pro_info);
}
if(Prompt())
{
cout<<"提升权限成功。。。"<<endl;
}
else
return 0;
if(ProcessId==0)
{
MessageBoxA(NULL,"没有找到计算器进程",NULL,0);
return -1;
}
//打开目标程序
HANDLE hPro;
hPro=OpenProcess(PROCESS_ALL_ACCESS,FALSE,ProcessId);
if(hPro==NULL)
{
int num=GetLastError();
char warn[100];
sprintf(warn,"%s,%d","OpenProcess",num);
MessageBoxA(NULL,warn,"warning ",0);
return -1;
}
PVOID addr;
addr=VirtualAllocEx(hPro,NULL,1024*4,MEM_COMMIT,PAGE_EXECUTE_READWRITE);
if(addr==NULL)
{
int num=GetLastError();
char warn[100];
sprintf(warn,"%s,%d","VirtualAlloc 出错",num);
MessageBoxA(NULL,warn,"warning ",0);
return -1;
}
// 获得函数地址
PVOID Func_addr;
Func_addr=GetProcAddress(GetModuleHandle(TEXT("Kernel32")),"LoadLibraryA");
if(Func_addr==NULL)
{
int num=GetLastError();
char warn[100];
sprintf(warn,"%s,%d","GetProcAddress出错",num);
MessageBoxA(NULL,warn,"warning ",0);
return -1;
}
char DllName[]="en.dll";
if(!WriteProcessMemory(hPro,addr,DllName,strlen(DllName),0))
{
int num=GetLastError();
char warn[100];
sprintf(warn,"%s,%d","WriteProcessMemory出错",num);
MessageBoxA(NULL,warn,"warning ",0);
return -1;
}
//创建远程线程
DWORD ID;
HANDLE hThr;
hThr=CreateRemoteThread(hPro,NULL,0,(PTHREAD_START_ROUTINE)Func_addr,addr,0,&ID);
if(hThr==NULL)
{
int num=GetLastError();
char warn[100];
sprintf(warn,"%s,%d","远程进程创建失败",num);
MessageBoxA(NULL,warn,"warning ",0);
return 0;
}
else
{
MessageBoxA(NULL,"远程进程创建成功!","warning ",0);
int a;
cin>>a;
}
}
...全文
相关推荐
vs2010内存泄露检查工具
vs2010的c++内存泄露检查工具,可定位到出错代码行、开源免费工具。
vs 2010 安装问题net framework 4 安装出错解决方法
vs 2010 安装问题net framework 4 安装出错解决方法
基于vs2010做的tcp通信调试工具源码
基于vs2010做的tcp通信调试工具,可以将接收到的数据进行保存,多线程操作。接收 发送数据。是软件调试的好工具。 包含源码,大家可以自己修改。
Windows 线程池的VS2010 C++ 实现
Windows下貌似都没有一个比较好用的线程池,至少我没有找到,因此,我就利用函数模板,类模板实现了一个类似于boost的threadpool的一个类。具体,大家可以下载下来了解下,另外,这个事VS2010的工程,不过线程池的实现和vs版本无关,VS2005,2008等应该都是可以用的,VC6.0的话就不一定了,大家可以试试看看,另外,我还有一篇博客介绍了这一线程池的实现:http://blog.csdn.net/yuguanquan1990/article/details/40661583
C# 打开直接注入DLL.rar (vs2010源码)
小白修改的.程序打开直接注入指定的DLL到指定的进程 需安装net 2.0


