朋友们现在只对常读和星标的公众号才展示大图推送,建议大家把SecretTeam安全团队“设为星标”,否则可能就看不到了啦!
免责声明
"本文档所提供的信息旨在帮助网络安全专业人员更好地理解并维护他们负责的网站和服务器等系统。我们鼓励在获得适当授权的情况下使用这些信息。请注意,任何未经授权的使用或由此产生的直接或间接后果和损失,均由使用者自行承担。我们提供的资源和工具仅供学习和研究之用,我们不鼓励也不支持任何非法活动。"
"我们创建这个社区是为了促进技术交流和知识分享。我们希望每位成员都能在遵守法律法规的前提下参与讨论和学习。如果使用本文档中的信息导致任何直接或间接的后果和损失,我们提醒您,这将由您个人承担。我们不承担由此产生的任何责任。如果有任何内容侵犯了您的权益,请随时告知我们,我们将立即采取行动并表示诚挚的歉意。我们感谢您的理解和支持。"
1. 简介
在渗透中,我们为了分辨受害主机的工作内容,并分析他的重要性的时候,我们常常需要去对他进行一个桌面监控,以便我们获取到他的工作内容。下面我们就尝试使用C++编写一个桌面监控的程序。
2. Windows Api介绍
2.1 Winsock 网络编程相关
用法:
int WSAAPI WSAStartup(
[in] WORD wVersionRequested,
[out] LPWSADATA lpWSAData
);
1
-
SAStartup
功能:初始化 Winsock 库。
作用:在使用 Winsock API 之前,必须调用此函数来初始化 Winsock 库并准备网络功能。
-
socket
功能:创建一个套接字。
作用:用于建立网络通信的端点。
-
connect
功能:将套接字连接到指定的服务器。
作用:建立客户端与服务器之间的 TCP 连接。
-
send
功能:向套接字发送数据。
作用:将数据发送到已连接的服务器。
-
closesocket
功能:关闭套接字。
作用:释放与套接字相关的资源。
-
WSACleanup
功能:清理 Winsock 库。
作用:在程序结束时调用,释放 Winsock 资源。
调用 WSAStartup
成功后,应用程序才能继续进行网络编程。当应用程序完成所有网络操作后,应调用 WSACleanup
函数来释放资源并终止 Winsock
使用。
2.2 屏幕捕获相关
-
GetDC
功能:获取设备上下文(DC)的句柄。
作用:获取整个屏幕的设备上下文,用于屏幕捕获。
-
CreateCompatibleDC
功能:创建一个与指定设备上下文兼容的内存设备上下文。
作用:用于创建一个内存中的设备上下文,以便在其中绘制屏幕内容。
-
CreateDIBSection
功能:创建一个设备无关位图(DIB)。
作用:用于创建一个位图对象,存储屏幕捕获的数据。
-
SelectObject
功能:选择对象(如位图、字体等)到设备上下文中。
作用:将创建的位图对象选入内存设备上下文中。
-
BitBlt
功能:执行位块传输操作。
作用:将屏幕内容复制到内存设备上下文中,实现屏幕捕获。
-
DeleteObject
功能:删除图形对象。
作用:释放位图对象占用的资源。
-
DeleteDC
功能:删除设备上下文。
作用:释放内存设备上下文占用的资源。
-
ReleaseDC
功能:释放设备上下文。
作用:释放屏幕设备上下文。
2.3. 窗口和消息处理相关
-
GetDesktopWindow
功能:获取桌面窗口的句柄。
作用:用于获取整个桌面窗口的句柄,以便获取屏幕尺寸。
-
MonitorFromWindow
功能:获取与指定窗口关联的显示器句柄。
作用:用于确定当前窗口所在的显示器。
-
GetMonitorInfo
功能:获取显示器的信息。
作用:用于获取显示器的工作区域和分辨率等信息。
-
EnumDisplaySettings
功能:枚举显示设备的设置。
作用:用于获取显示器的当前分辨率等设置。
-
RegisterClass
功能:注册窗口类
作用:定义窗口的回调函数、实例句柄和其他属性,为创建窗口做准备。
-
CreateWindowEx
功能:创建窗口
作用:根据注册的窗口类创建一个窗口实例。
-
ShowWindow
功能:显示或隐藏窗口
作用:控制窗口的显示状态,例如显示窗口或最小化窗口。
-
PeekMessage
功能:检查消息队列
作用:检查消息队列,获取消息而不从队列中移除。
-
TranslateMessage
功能:转换消息
作用:将虚拟键消息转换为字符消息。
-
DispatchMessage
功能:派发消息
作用:将消息发送到窗口的回调函数进行处理。
-
DispatchMessage
功能:派发消息
作用:将消息发送到窗口的回调函数进行处理。
-
PostQuitMessage
功能:发送退出消息
作用:向消息队列发送退出消息,终止消息循环。
-
DefWindowProc
功能:默认窗口过程
作用:处理未明确处理的消息,提供默认行为。
2.4 系统和窗口信息相关
-
GetModuleHandle
功能:获取模块句柄
作用:获取当前模块的句柄,用于窗口类注册。
-
AdjustWindowRect
功能:调整窗口大小
作用:根据窗口的样式调整窗口的大小,确保客户区域符合指定大小。
-
Sleep
功能:使线程暂停指定的时间。
作用:用于控制屏幕捕获和数据发送的频率。
3. 参数传递
// 发送结构体
xy data;
data.x = 10;
data.y = 20;
send(clientSocket, (char *) & data, sizeof(data), 0);
//接受结构体
xy data;
recv(clientSocket, (char*) & data, sizeof(data), 0);
std::cout << "Received: x = " << data.x << ", y = " << data.y << std::endl;
4. 最终效果
将client上传至目标受害机器,运行,启动server端后如下:
5. 工具获取
公众号回复 DesktopMonitor 即可获取。
完整代码会公布在 "纷传圈子"中。
荐历史文章阅读
原文始发于微信公众号(SecretTeam安全团队):红队工具-C++编写远程桌面监控
原文始发于微信公众号(SecretTeam安全团队):红队工具-C++编写远程桌面监控
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论