首页
社区
课程
招聘
[求助]VS2008 CTRL+F5和直接执行的结果不一样,高手指点下
发表于: 2010-7-18 11:04 6388

[求助]VS2008 CTRL+F5和直接执行的结果不一样,高手指点下

2010-7-18 11:04
6388
BOOL CGameMainDlg::InjectModuleToProcess(void)
{
        //获取DLL路径
        char szDllPath[1024] = {0};
        GetCurrentDirectory(1024,szDllPath);       
        strcat(szDllPath,"\\GameDLL.dll");
        MessageBox(szDllPath);

        //获取窗口句柄
        HWND hGame = ::FindWindow(NULL,"计算器");
        if (hGame == NULL)
                return FALSE;

        //获取进程ID
        DWORD dwProcessId;
        GetWindowThreadProcessId(hGame,&dwProcessId);
        if (dwProcessId == 0)
                return FALSE;

        //打开远程进程
        HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS,FALSE,dwProcessId);
        if (hProcess == NULL)
                return FALSE;

        //申请空间
        UINT nLen = (UINT)strlen(szDllPath)+1;
        LPVOID lpRemoteDLLName = VirtualAllocEx(hProcess,NULL,nLen,MEM_COMMIT,PAGE_READWRITE);
        if (lpRemoteDLLName == NULL)
                return FALSE;

        //把DLL名写入申请的内存空间
        if (WriteProcessMemory(hProcess,lpRemoteDLLName,szDllPath,nLen,NULL) == 0 )
                return FALSE;

        //获取动态链接库函数地址
        HMODULE hModule = GetModuleHandle ( "kernel32.dll" ) ;
        LPTHREAD_START_ROUTINE fnStartAddr = ( LPTHREAD_START_ROUTINE )GetProcAddress(hModule,"LoadLibraryA") ;
        if ( (DWORD)fnStartAddr == 0 )
                return FALSE;

        //创建远程线程
        HANDLE hRemoteThread = CreateRemoteThread ( hProcess, NULL, 0,fnStartAddr, lpRemoteDLLName, 0, NULL ) ;
        if ( hRemoteThread == NULL )
                return FALSE;

        return TRUE;
}

我看书上的这个,CTRL+F5就能注入,直接执行生成的文件就注入不了,高手指点条明路!

[课程]Linux pwn 探索篇!

收藏
免费 0
支持
分享
最新回复 (2)
雪    币: 2105
活跃值: (424)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
2
PROCESS_ALL_ACCESS   进程DEBUG权限?
2010-7-19 08:53
0
雪    币: 142
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
debug模式运行的时候你有debug权限,而直接运行没有,需要自己提权
2010-7-29 21:21
0
游客
登录 | 注册 方可回帖
返回
//