红队专题-从零开始VC++远程控制软件RAT-C/S-[2]界面编写及上线
红队专题
- 招募六边形战士队员
- 1.课前回顾
- unicode编码 字符串
- 2.界面编程(下)
- 对话框
- 重载消息函数
- 更改对话框同步更改
- 3.服务端上线,下线,以及客户端的资源销毁(上)
- 添加socket 变量
- 添加 socket 消息
- 填补config信息
- 创建线程函数 并运行
- 添加Addhost
- 添加 getItemData
- 创建列表节点类
- ItemData编写
- 构造函数
- 类成员监听线程
- 运行函数
- 监听线程
招募六边形战士队员
一起学习 代码审计、安全开发、web攻防、逆向等。。。
私信联系

1.课前回顾
#pragma comment(lib,“ws2_32.lib”)
unicode编码 字符串
_T 宏
多字节编码 ----字符集 知识点
项目属性


2.界面编程(下)
对话框
对话框资源
头文件 添加
private:CToolBar m_toolbar;CImageList m_imagelist;CStatusBar m_statusbar;CBitmap m_subbmp[6];CImageList m_mainicon;void UpdateMain(int port);UINT m_port;UINT m_max;UINT m_Sound;CRect m_rect; // 矩形变量


重载消息函数
查看声明

Dlgcpp里// 当客户端大小发生改变 计算差值 客户端内部控件 同步改变
void CExecN0vvDlg::OnSize(UINT nType, int cx, int cy)
{// 基类 对对话框改变CDialog::OnSize(nType, cx, cy);
// 类型等于最小化的 宏if(nType == SIZE_MINIMIZED){return;}// TODO: 在此处添加消息处理程序代码CWnd *pWnd; // 窗口类指针pWnd = GetDlgItem(IDC_LIST1); //获取控件句柄 条目id// 控件大小操作if(pWnd)//判断是否为空,因为对话框创建时会调用此函数,而当时控件还未创建{CRect rect,rect_l; //获取控件变化前大小 eg 50x50GetClientRect(&rect_l); // 客户区 控件大小pWnd->GetWindowRect(&rect);ScreenToClient(&rect);rect.right = cx; // 把控件大小变换//rect_l 变化前 rect.bottom= rect.bottom + (rect_l.bottom - m_rect.bottom);pWnd->MoveWindow(rect);//设置控件大小// 重设状态栏 置底RepositionBars(AFX_IDW_CONTROLBAR_FIRST,AFX_IDW_CONTROLBAR_LAST,0);}/*else{delete pWnd;}*/GetClientRect(&m_rect);// 还是记录初始值}

更改对话框同步更改

初始化时候调用了 updatemain
初始化程序界面
获取客户端程序客户区 界面大小
存放在 m_rect
3.服务端上线,下线,以及客户端的资源销毁(上)
列表控件

常规对应 socket指针
我们对应一个类指针
启动监听线程
不会发生阻塞状态
添加socket 变量

添加 socket 消息
头文件定义 InitSocket

Dlgcpp 加入 bool C你的Dlg::InitSocket() //初始化SOCKET
{WSADATA WSAData; // 初始化WSAStartup(MAKEWORD(2,2), &WSAData);SOCKADDR_IN saddr; // 声明结构体// 结构体操作 初始化 s=::socket(AF_INET,SOCK_STREAM,0);if(s==SOCKET_ERROR){MessageBox(_T("创建连接失败"),_T("提示"),MB_OK|MB_ICONWARNING);return false;}// 结构体赋值saddr.sin_family=AF_INET;saddr.sin_addr.S_un.S_addr=INADDR_ANY;saddr.sin_port=htons(m_port);int nRet;nRet=::bind(s,(SOCKADDR *)&saddr,sizeof(saddr));if(nRet == SOCKET_ERROR){MessageBox(_T("绑定端口失败"),_T("提示"),MB_OK|MB_ICONWARNING);return false;}// 最大上线主机数量 m_max Wint类型nRet=listen(s,m_max);if(nRet == SOCKET_ERROR){MessageBox(_T("监听端口失败"),_T("提示"),MB_OK|MB_ICONWARNING);return false;}while(1){SOCKET SerSock;SOCKADDR_IN Seraddr; // 结构体int Seraddrsize=sizeof(Seraddr);// 接受连接SerSock = accept(s,(sockaddr *)&Seraddr,&Seraddrsize);if (SerSock == INVALID_SOCKET){continue;}// 添加主机AddHost(SerSock,Seraddr);}return true;
}
syc系列 winSocket I/O模型
填补config信息

创建线程函数 并运行
为了适配多线程
防止上面的循环死锁 堵塞
所以把初始化操作封装到一个函数内
Dlgcpp // 空指针 传递了一个 当前类的 this指针
DWORD WINAPI C你的Dlg::OninitSocket(LPVOID self) //初始化Socket线程
{// 强制转换C你的Dlg* t = (C你的Dlg*)self;t->InitSocket();return 0;
}头文件静态声明static DWORD WINAPI OninitSocket(LPVOID self);

关闭句柄
添加Addhost
void C你的Dlg::AddHost(SOCKET sock,SOCKADDR_IN addr) //添加主机函数
{GetNewItemData(sock,addr);// 每一个主机节点都是一个类的指针 新申请一个类指针return;
}头文件声明
void AddHost(SOCKET sock,SOCKADDR_IN addr);
添加 getItemData
void C你的Dlg::GetNewItemData(SOCKET sock,SOCKADDR_IN addr) //获取新的条目数据
{// 条目信息类 指针 并判断 id是否重复CItemData *item;int id; //声明新的idint Count = m_list.GetItemCount();if(Count == 0){id = 0;}else{id = 0;for(int i=0;i<Count;i++){item = (CItemData*)m_list.GetItemData(i);if(item->m_id == id) // 判断是否为这个 id{i = 0;id = id + 1;continue;}}}item = NULL;item = new CItemData(id,sock,&addr,this->m_hWnd);// 声明一个 条目类item->Run();// 最后调用了 run这个函数
}头文件声明
void GetNewItemData(SOCKET sock,SOCKADDR_IN addr);
创建列表节点类


头文件中调用这个类

ItemData编写
构造函数
cpp 方法 条目信息CItemData::CItemData(UINT id,SOCKET sock,SOCKADDR_IN *addr,HWND m_hWnd)
{this->m_id = id; // 上线主机id号 删除操作this->m_sock = sock; // 消息传递 SOCKADDR_IN *addr 对方ip获取操作this->m_hWnd = m_hWnd; // 获取父类指针char *csIP = inet_ntoa(addr->sin_addr); // inet_ntoa 获取ip addr结构体m_IP.Format(_T("%s"),_T("127.0.0.1"));m_Address.Format(_T("未知"));if(m_Address.IsEmpty()) // 地理位置信息{m_Address.Format(_T("未知"));}
}头文件#pragma onceclass CItemData
{
public:CItemData(UINT id,SOCKET sock,SOCKADDR_IN *addr,HWND m_hWnd);~CItemData(void);UINT m_id;void Run();SOCKET GetSocket();CString m_IP;CString m_Address;CString m_OS;CString m_Ver; // 操作系统版本bool Cam; // 摄像头private: SOCKET m_sock; HWND m_hWnd;static DWORD WINAPI OnListen(LPVOID lp);void OnBeginListen();
};
类成员监听线程
DWORD WINAPI CItemData::OnListen(LPVOID lp)
{CItemData* t = (CItemData*)lp;t->OnBeginListen(); // 调用监听线程return 0;
}
运行函数
用多线程手法来运行 监听线程
void CItemData::Run()
{::CloseHandle(CreateThread(0,0,OnListen,(LPVOID)this,0,0));
}
监听线程
监听远程主机信息 操作
发送信息等等
void CItemData::OnBeginListen() //等待完善
{
}

相关文章:
红队专题-从零开始VC++远程控制软件RAT-C/S-[2]界面编写及上线
红队专题 招募六边形战士队员1.课前回顾unicode编码 字符串 2.界面编程(下)对话框重载消息函数更改对话框同步更改 3.服务端上线,下线,以及客户端的资源销毁(上)添加socket 变量添加 socket 消息填补config信息创建线程函数 并运行添加Addhost添加 getIt…...
磁盘满了对日志打印(Logback)的影响
背景 我们生产环境有一个服务半夜报警:磁盘剩余空间不足10%,请及时处理。排查后发现是新上线的一个功能,日志打太多导致的,解决方法有很多,就不赘述了。领导担心报警不及时、或者报警遗漏,担心磁盘满了对线…...
【算法与数据结构】--算法基础--数据结构概述
一、什么是数据结构 数据结构是一种组织和存储数据的方式,它定义了数据之间的关系、操作和存储方式,以便有效地访问和修改数据。数据结构是计算机科学中的一个重要概念,它为处理和管理数据提供了基本框架。数据结构通常包括以下几个重要方面…...
QECon大会亮相产品,全栈测试平台推荐:RunnerGo
最近在gitee上看见一款获得GVP(最有价值开源项目)的测试平台RunnerGo,看他们官网介绍包含了接口测试、性能测试、自动化测试。知道他们有saas版可以试用,果断使用了一下,对其中场景管理和性能测试印象深刻,…...
前端小案例-图片存放在远端服务器
前端小案例-图片存放在远端服务器 项目背景: 一个智能产业园的小程序由于可以控制很多种设备,可能有灯、空调、窗帘等智能设备。 现在面临以下问题: 需要存放很多设备的图标。设备的图标可能会进行修改。 为了解决上面的问题,…...
【鼠标右键菜单添加用VSCode打开文件或文件夹】
鼠标右键菜单添加用VSCode打开文件或文件夹 演示效果如下: 右击文件 或右击文件夹 或在文件夹内空白处右击 方法一:重装软件 重装软件,安装时勾选如图所示方框(如果登录的有账号保存有配置信息可以选择重装软件,…...
【jvm--堆】
文章目录 1. 堆(Heap)的核心概述2. 图解对象分配过程2.1 Minor GC,MajorGC、Full GC2.1 堆空间分代思想2.3 内存分配策略2.4 TLAB(Thread Local Allocation Buffer)2.5 堆空间的参数设置2.6 逃逸分析2.7 逃逸分析&…...
【数据库——MySQL(实战项目1)】(1)图书借阅系统
目录 1. 简述2. 功能3. 数据库结构设计3.1 绘制 E-R 图3.2 创建数据库3.3 创建表3.4 插入表数据 1. 简述 经过前期的学习,我们已经掌握数据库基础操作,因此是时候来做一个实战项目了——图书借阅系统。对于图书借阅系统,相信大家不难想到至少…...
[GXYCTF 2019]Ping Ping Ping题目解析
本题考察的内容是rce绕过,本事过滤的东西不算多也算是比较好绕过 基础看到这种先ping一下试试看 输入127.0.0.1看看有啥东西 有回显说明可以接着往下做 借用RCE漏洞详解及绕过总结(全面)-CSDN博客这个大佬整理的rce绕过 ;A;B无论真假,A与B都执行&…...
HTTP协议的请求协议和响应协议的组成,HTTP常见的状态信息
HTTP协议 什么是协议 协议实际上是某些人或组织提前制定好的一套规范,大家只要都按照这个规范来就可以做到沟通无障碍 HTTP协议是W3C(万维网联盟组织)制定的一种超文本传输通信协议(发送消息的模板和数据的格式),除了传送字符串,还有声音、视频、图片等流媒体等超文本信息 …...
【LeetCode】剑指 Offer Ⅱ 第6章:栈(6道题) -- Java Version
题库链接:https://leetcode.cn/problem-list/e8X3pBZi/ 类型题目解决方案栈的应用剑指 Offer II 036. 后缀表达式模拟 栈 ⭐剑指 Offer II 037. 小行星碰撞分类讨论 栈 ⭐单调栈剑指 Offer II 038. 每日温度单调栈 ⭐剑指 Offer II 039. 直方图最大矩形面积单调栈…...
vue3的element-plus的el-dialog的样式修改无效问题
问题描述 想要修改element-plus的对话框el-dialog中的样式,发现在页面style的scoped属性下,使用:deep深入选择器进行修改是无效的。(vue2下深度选择器是有效的) //无效 :deep(.el-dialog){background-color: transparent; }解决…...
归纳所猜半结论推出完整结论:CF1592F1
https://www.luogu.com.cn/problem/CF1592F1 场上猜了个结论,感觉只会操作1。然后被样例1hack了。然后就猜如果 ( n , m ) (n,m) (n,m) 为1则翻转4操作,被#14hack了。然后就猜4操作只会进行一次,然后就不知道怎么做下去了。 上面猜的结论都…...
WPFdatagrid结合comboBox
在WPF的DataGrid中希望结合使用ComboBox下拉框,达到下拉选择绑定的效果,在实现的过程中,遇到了一些奇怪的问题,因此记录下来。 网上能够查询到的解决方案: 总共有三种ItemSource常见绑定实现方式: 1.ItemS…...
Markdown类图之继承、实现、关联、依赖、组合、聚合总结(十五)
简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 人生格言: 人生…...
@MultipartConfig注解
前言: 在学习Javaweb的Servlet文件上传和下载的过程中,我们会遇到一个特殊的注解---MultipartConfig。 MultipartConfig的适用情况: 1.文件上传: 当您的应用程序需要接收用户上传的文件时,可以在相应的 Servlet 上使用 Multipart…...
Python并发编程简介
1、Python对并发编程的支持 多线程: threading, 利用CPU和IO可以同时执行的原理,让CPU不会干巴巴等待IO完成多进程: multiprocessing, 利用多核CPU的能力,真正的并行执行任务异步IO: asyncio,在单线程利用CPU和IO同时执行的原理,实现函数异步执行使用Lo…...
WebSocket介绍及部署
WebSocket是一种在单个TCP连接上进行全双工通信的协议,其设计的目的是在Web浏览器和Web服务器之间进行实时通信(实时Web)。 WebSocket协议的优点包括: 1. 更高效的网络利用率:与HTTP相比,WebSocket的握手…...
自动求导,计算图示意图及pytorch实现
pytorch实现 x1 torch.tensor(3.0, requires_gradTrue) y1 torch.tensor(2.0, requires_gradTrue) a x1 ** 2 b 3 * a c b * y1 c.backward() print(x1.grad) print(y1.grad) print(x1.grad 6 * x1 * y1) print(y1.grad 3 * (x1 ** 2))输出为: tensor(36.) …...
睿伴科创上线了
Robotutor睿伴,一个专业的青少儿编程科创教育品牌和科创服务平台。 Robotutor睿伴拥有一个超过5年的青少儿编程科创教育团队,积累了丰富的课程研发,教学服务和赛事辅导经验。并和上海多所知名高校、上海市计算机学会、上海青少年科学社等开展…...
KubeSphere 容器平台高可用:环境搭建与可视化操作指南
Linux_k8s篇 欢迎来到Linux的世界,看笔记好好学多敲多打,每个人都是大神! 题目:KubeSphere 容器平台高可用:环境搭建与可视化操作指南 版本号: 1.0,0 作者: 老王要学习 日期: 2025.06.05 适用环境: Ubuntu22 文档说…...
React hook之useRef
React useRef 详解 useRef 是 React 提供的一个 Hook,用于在函数组件中创建可变的引用对象。它在 React 开发中有多种重要用途,下面我将全面详细地介绍它的特性和用法。 基本概念 1. 创建 ref const refContainer useRef(initialValue);initialValu…...
如何在看板中体现优先级变化
在看板中有效体现优先级变化的关键措施包括:采用颜色或标签标识优先级、设置任务排序规则、使用独立的优先级列或泳道、结合自动化规则同步优先级变化、建立定期的优先级审查流程。其中,设置任务排序规则尤其重要,因为它让看板视觉上直观地体…...
UE5 学习系列(三)创建和移动物体
这篇博客是该系列的第三篇,是在之前两篇博客的基础上展开,主要介绍如何在操作界面中创建和拖动物体,这篇博客跟随的视频链接如下: B 站视频:s03-创建和移动物体 如果你不打算开之前的博客并且对UE5 比较熟的话按照以…...
苍穹外卖--缓存菜品
1.问题说明 用户端小程序展示的菜品数据都是通过查询数据库获得,如果用户端访问量比较大,数据库访问压力随之增大 2.实现思路 通过Redis来缓存菜品数据,减少数据库查询操作。 缓存逻辑分析: ①每个分类下的菜品保持一份缓存数据…...
OPenCV CUDA模块图像处理-----对图像执行 均值漂移滤波(Mean Shift Filtering)函数meanShiftFiltering()
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 在 GPU 上对图像执行 均值漂移滤波(Mean Shift Filtering),用于图像分割或平滑处理。 该函数将输入图像中的…...
Mobile ALOHA全身模仿学习
一、题目 Mobile ALOHA:通过低成本全身远程操作学习双手移动操作 传统模仿学习(Imitation Learning)缺点:聚焦与桌面操作,缺乏通用任务所需的移动性和灵活性 本论文优点:(1)在ALOHA…...
Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信
文章目录 Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信前言一、网络通信基础概念二、服务端与客户端的完整流程图解三、每一步的详细讲解和代码示例1. 创建Socket(服务端和客户端都要)2. 绑定本地地址和端口&#x…...
C/C++ 中附加包含目录、附加库目录与附加依赖项详解
在 C/C 编程的编译和链接过程中,附加包含目录、附加库目录和附加依赖项是三个至关重要的设置,它们相互配合,确保程序能够正确引用外部资源并顺利构建。虽然在学习过程中,这些概念容易让人混淆,但深入理解它们的作用和联…...
并发编程 - go版
1.并发编程基础概念 进程和线程 A. 进程是程序在操作系统中的一次执行过程,系统进行资源分配和调度的一个独立单位。B. 线程是进程的一个执行实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。C.一个进程可以创建和撤销多个线程;同一个进程中…...
