[远程Call]32位远程多参数带返回调用

打印 上一主题 下一主题

主题 1062|帖子 1062|积分 3186

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
[远程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)
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

郭卫东

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表