首页
社区
课程
招聘
[求助]远程线程注入
发表于: 2014-3-16 13:15 4415

[求助]远程线程注入

2014-3-16 13:15
4415
下面这段代码为什么要写入的函数没有执行?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
#include "stdafx.h"
#include <stdio.h>
 
 
//要写入的函数
int KeyboardProc() 
        MessageBox(NULL,"  执行! ",NULL,NULL);
        return 0;
 
//远程创建线程函数
int InfusionFunc(DWORD dwProcId,LPVOID mFunc) 
{
    HANDLE hProcess;//远程句柄
    LPVOID mFuncAddr;//申请函数内存地址
    HANDLE hThread; //线程句柄
 
    //打开被注入的进程句柄
    hProcess = OpenProcess(PROCESS_ALL_ACCESS,FALSE,dwProcId);
    if(!hProcess)
    {
            MessageBox(NULL,"打开进程失败",NULL,NULL);
    }
    //申请内存
    mFuncAddr = VirtualAllocEx(hProcess,NULL,20000,MEM_COMMIT,PAGE_EXECUTE_READWRITE);
  
    //写内存
    WriteProcessMemory(hProcess,mFuncAddr,mFunc,20000, 0);
 
    //创建远程线程
    hThread = CreateRemoteThread(hProcess,NULL,0,(LPTHREAD_START_ROUTINE)mFuncAddr,0,0,0);
        if(!hThread)
    {
            MessageBox(NULL,"创建远程线程失败",NULL,NULL);
    }
    WaitForSingleObject(hThread, INFINITE); //等待线程结束
    //释放申请有内存
    VirtualFreeEx(hProcess,mFuncAddr,128,MEM_RELEASE);
 
    //释放远程句柄
    CloseHandle(hThread);
    CloseHandle(hProcess);
    return 0;
}
 
//主函数
int APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR     lpCmdLine,
                     int       nCmdShow)
{
 
    HWND hwnd=::FindWindow(NULL,"计算器");
    if(!hwnd)
    {
        MessageBox(NULL,"打开计算器失败",NULL,NULL);
        return 0;
    }
     
    DWORD Tid,Pid;
    Tid=GetWindowThreadProcessId(hwnd,&Pid);
 
    InfusionFunc(Pid,KeyboardProc);   //调用线程创建函数
 
    return 0;
}

[注意]看雪招聘,专注安全领域的专业人才平台!

收藏
免费
支持
分享
最新回复 (5)
雪    币: 185
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
因为你使用的静态链接。
2014-3-16 15:38
0
雪    币: 73
活跃值: (923)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
楼主,你只是把函数地址地址写到了计算器的内存,但是函数对应的代码仍然在你主进程的地址空间。你可以调试下,跳转到的地址及其以后的内存,要么是无效的,要么全部是00
2014-3-16 16:58
0
雪    币: 73
活跃值: (923)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
楼主想要msgbox弹出来,可以参考这里http://blog.163.com/lhc__721721/blog/static/639133252010622359175/

不过,你的函数里面肯定不止这个msgbox,万一有其他的代码怎么办?只能把整个函数拷贝过去哦!
2014-3-16 17:11
0
雪    币: 24
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
WriteProcessMemory这个函数不是把整个函数拷贝进去吗?
2014-3-17 15:29
0
雪    币: 73
活跃值: (923)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
拷贝的是函数的地址!
2014-3-18 18:02
0
游客
登录 | 注册 方可回帖
返回

账号登录
验证码登录

忘记密码?
没有账号?立即免费注册