ToB企服应用市场:ToB评测及商务社交产业平台

标题: [远程Call]32位远程多参数带返回调用 [打印本页]

作者: 郭卫东    时间: 2023-9-1 10:55
标题: [远程Call]32位远程多参数带返回调用
[远程Call]32位远程多参数带返回调用

引子

在Windows上可以使用CreateRemoteThread实现远程Call,但是有不带返回值且只能传递一个参数的限制。
解决思路

将多个参数利用VirtualAllocEx和WriteProcessMemory写入目标程序,再通过此方法注入一段shellcode,通过shellcode完成多参数的调用。
核心shellcode
  1. push var_1
  2. ...
  3. push var_n
  4. mov eax,function_addr
  5. /*
  6. 如果为 cdcel则需要平栈
  7. add esp,count_param
  8. */
  9. call eax
复制代码
实现c++代码

[code]#include #include #include #include using namespace std;LPVOID RemoteNew(HANDLE hProcess, PUCHAR data,size_t size){    auto hMem=VirtualAllocEx(hProcess, NULL, size, MEM_COMMIT, PAGE_EXECUTE_READWRITE);    if (hMem == NULL)    {        return FALSE;    }    if (WriteProcessMemory(hProcess, hMem, data, size,NULL) == FALSE)    {        VirtualFreeEx(hProcess, hMem, 0, MEM_RELEASE);        return FALSE;    }    return hMem;}BOOL RemoteCall(    HANDLE hProcess,    LPVOID remoteFuncAddr,    vector param,    bool cdcelCall,    bool waitRemoteThread ){    if (remoteFuncAddr == NULL)        return FALSE;    vector shellcode;    //push 结构    for (int i = param.size() - 1; i >= 0; i--)//调用栈是个栈    {        if (((UINT)param)




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4