VS2010 线程注入 CreateRemoteThread(),出错,返回5

shijizhishang_1 2012-07-29 11:05:47
我已经使用管理员身份运行,之前运行正确,只是一到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;

}
}
...全文
439 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
nemo2011 2012-09-05
  • 打赏
  • 举报
回复
如何解决的,望贴答案。
nemo2011 2012-09-05
  • 打赏
  • 举报
回复
这么解决的?
Gloveing 2012-08-05
  • 打赏
  • 举报
回复
恭喜
shijizhishang_1 2012-08-05
  • 打赏
  • 举报
回复
问题已经解决了,是WIN7系统更新造成的,谢谢各位的回答
Gloveing 2012-07-30
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]
char DllName[]="en.dll";的路径改成绝对路径实时啊。
[/Quote]
char DllName[]="en.dll";
改成绝对路径,或者把这个DLL放到当前目录或者系统目录下?
shijizhishang_1 2012-07-30
  • 打赏
  • 举报
回复
没有啊,我的是裸机,什么都没装。。。
w2214149026 2012-07-30
  • 打赏
  • 举报
回复
char DllName[]="en.dll";的路径改成绝对路径实时啊。
rularys 2012-07-30
  • 打赏
  • 举报
回复
errlookup: 5 拒绝访问

电脑上有没有装杀毒软件或者HIPS
shijizhishang_1 2012-07-30
  • 打赏
  • 举报
回复
我不解的是,我曾经运行正确啊,现在一样的代码在我自己的机子上,怎么就这样了,有些不明白。。。。
shijizhishang_1 2012-07-30
  • 打赏
  • 举报
回复
我试过了,还是那样,返回值是5.。
shijizhishang_1 2012-07-29
  • 打赏
  • 举报
回复
在网上看到说关于32bit和64bit的问题,我的是32bit的,怎么也出这问题,而且之前曾经运行正确过,又重新装了次系统,就出这问题了,求大神指教

70,039

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧