tightVNC远控源码分析v1.3

WinVNC模块:

一。WinMain函数

1.初始化VSocketSystem套接字,初始化化log为winvnc.log文件,转换命令行参数为小写,解析命令行参数。没有命令行参数则进入WinVNCAppMain。

在函数WinVNCAppMain中:设置进程为关机时最后关闭。创建全局锁,确定只有一个进程实例在运行。

2.vncServer初始化:初始化成员变量,清空密码。如果版本大于4.10,获取屏幕分辨率。

3.vncMenu初始化:获取当前登录账户名,注册窗口类,窗口过程为vncMenu::WndProc。此窗口为tray窗口,设置右键点击的菜单,初始化属性页,初始化CMatchWindow,

窗口的过程为CMatchWindow::WndProc。在vncProperties::Load内根据注册表键值或者配置文件设置socket,http,是否回环等设置,读取注册表

设置用户的偏好设置,密码等。调用vncProperties::ApplyUserPrefs设置vncServer的偏好设置。此函数内部调用vncServer::SockConnect初始化socket连接,创建99个socket,

绑定5900端口,开始监听,开启新线程进入vncSockConnectThread::run_undetached开始监听。开启界面消息循环。

 

二。当有客户连接时

1.进入函数vncSockConnectThread::run_undetached,这是一个死循环等待客户端连接。进入函数vncServer::AddClient等待连接。进入函数vncClient::Init,

创建线程进入vncClientThread::run处理。

2.在vncClientThread::run中认证:判断黑白客户端名单,向客户端发送RFB协议版本号校验,进行RFB认证安全类型。服务器发送16位随机数,客户端使用DES对验证进行加密,使用用户密码作为密钥,把加密后的16字节返回给服务器。服务器对安全认证进行确认,返回值为无符号32位整数,如果为0则表示成功,1表示失败。如果不成功,服务器直接关闭连接。

3.在vncClientThread::run中进行消息发送:客户端发送一个字节的初始化消息。服务器发送初始化消息,通过rfbServerInitMsg格式告知客户端服务器的帧缓存的高、宽、象素格式和桌面相关的名称。客户端发送设置像素格式,客户端发送设置编码格式,服务端发送确认编码格式。

4.在vncClientThread::run中死循环接收客户端发送的请求消息。

 

三。客户端发送的消息格式

进入函数VSocket::ReadExact等待客户端发送的消息。

1.rfbClientCutText代表客户端的剪切板里有内容,更新到服务端的剪切板。

2.rfbFramebufferUpdateRequest代表服务端有屏幕更新,

3.rfbKeyEvent客户端发送了按键事件,进入vncKeymap::keyEvent处理按键事件。进入函数keyEvent,调用函数keybd_event进行模拟按键。

 

VNCHooks模块:  负责VNC图像更新机制

一.SetHook:添加三种类型的hook。CallWindow Hook,GetMessage Hook,SYSMSGFILTER Hook(负责所有窗口的消息,包括非客户区).

   hook消息统一进入函数HookHandle函数处理。该函数向主窗口发送UpdateRectMessage消息,告知窗口,有屏幕更新。

二.SetKeyboardFilterHook。添加键盘hook。

三。SetMouseFilterHook。设置鼠标hook。

四。进入函数vncDesktopThread::run_undetached处理消息,该函数死循环等待屏幕,键盘,鼠标的更新消息。

1.如果是屏幕更新,创建一个矩形区域,设置位置,然后添加到m_changed_rgn成员变量中。

2.在函数vncDesktop::CheckUpdates中,不断检查更新,这个函数在vncDesktopThread::run_undetached中死循环一直调用。

如果是polling模式,进入vncDesktop::PerformPolling函数,依次进入函数CheckRects等处理

如果是采用全屏扫描方式,默认是hook方式获取屏幕变化,在PerformPolling函数中进入PollArea函数处理。

 

VNC的编码模块(Hextile, RRE):

---写于2015.10.9

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
tightvnc是一个开源的远程控制软件,其源代码可以用于进行分析。通过对tightvnc源码分析,我们可以了解它的工作原理和实现细节。 在tightvnc源码中,有一些关键的函数和步骤可以用于进行分析。其中包括vncSockConnectThread::run_undetached函数,该函数是一个死循环,用于等待客户端的连接。另外还有vncServer::AddClient函数,用于添加客户端并等待连接。在vncClient::Init函数中,进行了一些初始化操作,包括初始化VSocketSystem套接字、设置日志文件、解析命令行参数等。如果没有命令行参数,则会进入WinVNCAppMain函数进行处理。在vncProperties::ApplyUserPrefs函数中,设置了用户的偏好设置和密码等信息,并在内部调用vncServer::SockConnect函数初始化socket连接,并创建99个socket。 通过对tightvnc源码分析,我们可以深入了解其内部实现,包括连接管理、用户偏好设置、命令行参数解析等方面的内容。这有助于我们理解tightvnc的工作原理,并可以根据需求对其进行定制或改进。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [tightVNC远控源码分析v1.3](https://blog.csdn.net/feivirus/article/details/50526408)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值