首页
论坛
课程
招聘
[原创]DuplicateHandle初级使用
2020-7-26 22:34 2049

[原创]DuplicateHandle初级使用

2020-7-26 22:34
2049

已知游戏A的PID

且进程B,能够获取A的句柄,读取内容

int main()
{
    printf("我是B,能够获取游戏A进程句柄\r\n");
    printf("B MyHandle= %d   \r\n", GetCurrentProcessId());

    //游戏A PID=8564
    HANDLE handle = OpenProcess(PROCESS_ALL_ACCESS, false, 8564);
    printf("游戏A handle= %d \r\n", handle);

    DWORD dwAddress = 0x00406DA8;
    DWORD dwOut = 0;
    ReadProcessMemory(handle, (LPVOID)dwAddress, (LPVOID)&dwOut, sizeof(dwOut), NULL);
    printf("游戏A 子弹数量= %d \r\n", dwOut);
    system("pause");
    return 0;
}

进程C,无法打开游戏A,就当游戏有保护吧,但可打开B进程

利用DuplicateHandle,实现跨进程访问

int main()
{
    printf("我是进程C,可以操作进程B,无法直接操作游戏A\r\n");
    //已知B获取A的句柄
    HANDLE  copyhandle = (HANDLE)76; 
    //C能够打开B,获取B的进程句柄
    HANDLE handle = OpenProcess(PROCESS_ALL_ACCESS, false, 3708);
    //存放拷贝出来的新句柄
    HANDLE newhandle; 
    //进程拷贝 
    DuplicateHandle(
        handle, //C打开B的进程句柄
        copyhandle, //A的进程句柄
        GetCurrentProcess(), //本身
        &newhandle, //拷贝新的句柄,属于A
        0, FALSE, DUPLICATE_SAME_ACCESS); //权限DUPLICATE_SAME_ACCESS

    printf("获取A newhandle= %d \r\n", handle);

    DWORD dwAddress = 0x00406DA8;
    DWORD dwOut = 0;
    //A的进程句柄newhandle
    ReadProcessMemory(newhandle, (LPVOID)dwAddress, (LPVOID)&dwOut, sizeof(dwOut), NULL);
    printf("游戏A 子弹数量= %d \r\n", dwOut);
    system("pause");
    return 0;
}

DuplicateHandle的详细使用,请参考MSDN!!!


[公告]《使用DCI技术进行全栈调试》训练营,硬件调试器你的,《软件调试》作者张银奎亲自授课!

收藏
点赞0
打赏
分享
最新回复 (1)
雪    币: 5812
活跃值: 活跃值 (467)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
黑洛 活跃值 1 2020-8-2 19:03
2
0
但是ac会扫句柄表的啊
游客
登录 | 注册 方可回帖
返回