远程桌面 服务端全驱动(通信用NDIS HOOK,屏幕直接读显存)
来源:互联网 发布:网络彩票代理 编辑:程序博客网 时间:2024/06/06 12:25
监控端代码采用 汇编 + Winscok 源代码如下:
local nNetTimeout,wsa:WSADATA,hScrDC,hMemDC,hBitmap,ScrnBufPoint
PaketLen equ 1000
.data
bi dd 28h,0,0,200 dup (0)
Buffer db PaketLen + 20 dup (0)
.code
invoke WSAStartup,101h,addr wsa
invoke socket,AF_INET,SOCK_DGRAM,0
mov ScrnSocket,eax
invoke htons,65533
mov ScrnSin.sin_port,ax
mov ScrnSin.sin_family,AF_INET
invoke bind,ScrnSocket,addr ScrnSin,SinSize
mov nNetTimeout,100 ;以毫秒为单位设置recvfrom等待时限
invoke setsockopt,ScrnSocket,SOL_SOCKET,SO_RCVTIMEO,addr nNetTimeout,sizeof nNetTimeout
invoke sendto,ScrnSocket,addr Buffer,20,0,addr ScrnSin,SinSize ;把收到指令及参数回复对方
.while ScreenStop ;死循环处理数据程序
invoke RtlZeroMemory,addr Buffer,sizeof Buffer
invoke recvfrom,ScrnSocket,addr Buffer,sizeof Buffer,0,addr ScrnSin,addr SinSize
lea edi,Buffer
lea esi,bi
.if eax == SOCKET_ERROR
;invoke sendto,ScrnSocket,addr Buffer,20,0,addr ScrnSin,SinSize ;把收到指令及参数回复对方
.continue
.endif
.if byte ptr [edi] == 0 ;设置屏幕参数
invoke RtlMoveMemory,addr bi,addr Buffer+1,200
invoke GlobalAlloc,GMEM_ZEROINIT,[esi+20]
mov ScrnBufPoint,eax
invoke SetWindowPos,hScreen,0,0,0,[esi+04],[esi+08],SWP_SHOWWINDOW;根据大小显示窗口
invoke GetDC,hScreen
mov hScrDC,eax
invoke CreateCompatibleBitmap,hScrDC,[esi+04],[esi+08]
mov hBitmap,eax
invoke CreateCompatibleDC,hScrDC
mov hMemDC,eax
mov byte ptr [edi],1 ;改变指令为屏幕数据开始
.elseif byte ptr [edi] == 1 ;屏幕数据开始
mov byte ptr [edi],2 ;改变指令为屏幕屏幕数据收发
.elseif byte ptr [edi] == 2 ;屏幕数据收发
mov ebx,ScrnBufPoint ;本地缓冲区
add ebx,[edi+1] ;分段指针
invoke RtlMoveMemory,ebx,addr Buffer+10,PaketLen
add dword ptr[edi+1],PaketLen ;调整到下一个分段
.elseif byte ptr [edi] == 3 ;屏幕数据结束
mov ebx,ScrnBufPoint ;本地缓冲区
add ebx,[edi+1]
invoke RtlMoveMemory,ebx,addr Buffer+10,dword ptr [edi+5]
invoke SetDIBits,hScrDC,hBitmap,0,[esi+08],ScrnBufPoint,addr bi,0
invoke SelectObject,hMemDC,hBitmap
mov eax,[esi+08]
not eax ;旋转180度 因为直接读显存的数据时,显存的屏幕数据是倒过来的。
invoke StretchBlt, hScrDC, 0, [esi+08], [esi+04], eax, hMemDC, 0, 0, [esi+04], [esi+08], SRCCOPY
;invoke BitBlt,hScrDC,0,0,[esi+04],[esi+08],hMemDC,0,0,SRCCOPY
mov byte ptr [edi],1 ;改变指令为屏幕数据开始
.endif
invoke sendto,ScrnSocket,addr Buffer,20,0,addr ScrnSin,SinSize ;把收到指令及参数回复对方
.endw
- 远程桌面 服务端全驱动(通信用NDIS HOOK,屏幕直接读显存)
- xp下用驱动直接写显卡显存
- NDIS HOOK开发小记
- Hook NDIS.SYS入口
- NDIS Hook的框架代码
- NDIS HOOK开发简单日志
- NDIS Hook的框架代码
- NDIS HOOK 防火墙实现关键技术
- NDIS HOOK 防火墙实现关键技术
- NDIS HOOK 防火墙实现关键技术
- NDIS HOOK 防火墙实现关键技术
- NDIS HOOK及MINIPORT HOOK的实现
- NDIS 中间层驱动开发
- NDIS驱动学习笔记
- NDIS驱动学习笔记
- NDIS驱动结构
- ndis协议驱动开发
- 直接写显存显示字符串
- vlc编译与安装步骤
- ubuntu安装CCS
- samba总览
- 内核中各种出错函数的总结
- 下载代码
- 远程桌面 服务端全驱动(通信用NDIS HOOK,屏幕直接读显存)
- MyEclipse 错误 assertion failed: Path for IClasspathEntry must be absolute
- Makefile基本写法
- 2012年6月6日心中的日记
- 搞死人的x64下安装x86 plsqldev & instant client
- ndis_hook.c
- 一段垃圾程序引出的Java垃圾回收机制
- hdu1865
- 细谈VB中的function程序应用问题!