zoukankan      html  css  js  c++  java
  • 从零构建自己的远控•用匿名管道执行powershell&cmd(9)

    #include <stdio.h>
    #include <windows.h>
    
    //读缓冲区
    HANDLE  m_hReadPipeHandle = NULL;
    //写缓冲区
    HANDLE m_hWritePipeHandle = NULL;
    HANDLE  m_hReadPipeShell = NULL;
    HANDLE m_hWritePipeShell = NULL;
    
    DWORD WINAPI ReadPipeThread(LPVOID lparam)
    {
        unsigned long   BytesRead = 0;
        char    ReadBuff[1024];
        DWORD    TotalBytesAvail;
        while (1)
        {
            Sleep(100);
            //检查管道是否有数据
            while (PeekNamedPipe(m_hReadPipeHandle, ReadBuff, sizeof(ReadBuff), &BytesRead, &TotalBytesAvail, NULL))
            {
                if (BytesRead <= 0)
                    break;
                memset(ReadBuff, 0, sizeof(ReadBuff));
                LPBYTE lpBuffer = (LPBYTE)LocalAlloc(LPTR, TotalBytesAvail);
                //读取管道数据
                ReadFile(m_hReadPipeHandle, lpBuffer, TotalBytesAvail, &BytesRead, NULL);
                //把读到的数据发送当前窗口
                puts((char *)lpBuffer);
                LocalFree(lpBuffer);
                //主控端的处理函数
            }
        }
        return 0;
    }
    
    void main()
    {
        SECURITY_ATTRIBUTES  sa = { 0 };
        STARTUPINFO          si = { 0 };
        PROCESS_INFORMATION  pi = { 0 };
        char  strShellPath[MAX_PATH] = { 0 };
    
    
        sa.nLength = sizeof(sa);
        sa.lpSecurityDescriptor = NULL;
        sa.bInheritHandle = TRUE;
    
        //创建管道
        if (!CreatePipe(&m_hReadPipeHandle, &m_hWritePipeShell, &sa, 0))
        {
            if (m_hReadPipeHandle != NULL)    CloseHandle(m_hReadPipeHandle);
            if (m_hWritePipeShell != NULL)    CloseHandle(m_hWritePipeShell);
            return;
        }
    
        if (!CreatePipe(&m_hReadPipeShell, &m_hWritePipeHandle, &sa, 0))
        {
            if (m_hWritePipeHandle != NULL)    CloseHandle(m_hWritePipeHandle);
            if (m_hReadPipeShell != NULL)    CloseHandle(m_hReadPipeShell);
            return;
        }
    
        memset((void*)&si, 0, sizeof(si));
        memset((void*)&pi, 0, sizeof(pi));
    
        GetStartupInfo(&si);
        si.cb = sizeof(STARTUPINFO);
        //标志wShowWindow,hStdInput,hStdOutput成员
        si.dwFlags = STARTF_USESTDHANDLES | STARTF_USESHOWWINDOW;
        si.wShowWindow = SW_HIDE;//隐藏
        si.hStdInput = m_hReadPipeShell;//写入
        si.hStdOutput = si.hStdError = m_hWritePipeShell; //写出
    
        GetSystemDirectory(strShellPath, MAX_PATH);
        //strcat(strShellPath, "\cmd.exe");//cmd 命令执行
        strcat(strShellPath, "\WindowsPowerShell\v1.0\powershell.exe");
        //创建cmd 进入 并指定管道  继承父进程
        if (!CreateProcess(strShellPath, NULL, NULL, NULL, TRUE,
            NORMAL_PRIORITY_CLASS, NULL, NULL, &si, &pi))
        {
            CloseHandle(m_hReadPipeHandle);
            CloseHandle(m_hWritePipeHandle);
            CloseHandle(m_hReadPipeShell);
            CloseHandle(m_hWritePipeShell);
            return;
        }
        HANDLE m_hProcessHandle = pi.hProcess;
        HANDLE m_hThreadHandle = pi.hThread;
    
        //接收消息
        HANDLE m_hThreadRead = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)ReadPipeThread, NULL, 0, NULL);
       
        while (true)
        {
            DWORD    TotalBytesAvail;
            char  buffer[1024];
            unsigned long    ByteWrite;
            scanf_s("%s", buffer, 1024);
            int szlen = strlen(buffer);
            buffer[szlen] = '
    ';
            buffer[szlen + 1] = '';
            WriteFile(m_hWritePipeHandle, (LPCVOID)buffer, strlen(buffer), &ByteWrite, NULL);
        }
        return ;
    }

    从此山高路远,纵马扬鞭。愿往后旅途,三冬暖,春不寒,天黑有灯,下雨有伞。此生尽兴,不负勇往。
  • 相关阅读:
    python基础5之装饰器
    python基础4之递归、lambda、深浅copy
    python基础3之文件操作、字符编码解码、函数介绍
    python基础1之python介绍、安装、变量和字符编码、数据类型、输入输出、数据运算、循环
    python基础2之字符串、列表、字典、集合
    Mysql主从复制的实现
    LNMP一键安装脚本
    LNMP搭建(CentOS 6.3+Nginx 1.2.0+PHP 5.3.15(fpm)+ MySQL 5.5.35)
    整合apache+tomcat+keepalived实现高可用tomcat集群
    浅谈CSRF
  • 原文地址:https://www.cnblogs.com/feizianquan/p/15219765.html
Copyright © 2011-2022 走看看