基于Linux系统的应用程序窗口水印添加方法和装置制造方法及图纸

技术编号:38357605 阅读:11 留言:0更新日期:2023-08-05 17:28
本发明专利技术提供一种基于Linux系统的应用程序窗口水印添加方法和装置,通过在目标进程对应的窗口之上创建位置和大小均与该窗口一致的水印窗口并一直保持该水印窗口在目标进程对应的窗口之上,可以将窗口水印添加操作与目标进程实现最大程度的脱钩、降低耦合度,不干扰原有程序的运行逻辑、不引入不确定因素,因此能够保证程序的完整运行性,从而兼顾应用程序信息的保护和应用程序运行安全性的保障。此外,窗口水印添加方式均建立在Linux的X11之上,基于X11函数获取窗口信息并对窗口进行控制,因此从代码实现上无需考虑目标进程的实现框架,具有通用性,扩大了该方法的适用范围和灵活性。灵活性。灵活性。

【技术实现步骤摘要】
基于Linux系统的应用程序窗口水印添加方法和装置


[0001]本专利技术涉及信息安全
,尤其涉及一种基于Linux系统的应用程序窗口水印添加方法和装置。

技术介绍

[0002]随着社会信息化程度的提高,信息安全的重要性愈发重要,其中窗口水印是一种有效的保护手段,通过在要保护的进程的窗口上显示一层包含文字、图片以及二维码中任意一种水印的图层对该窗口内显示的信息进行保护。
[0003]目前对用用程序窗口添加水印的方式通常是注入可执行文件到目标程序中,在系统启动目标应用程序后再基于窗口函数的Hook机制调用相应的窗口绘制函数,改变原有函数执行逻辑,增加自定义的水印绘制信息,进而到达窗口水印的效果。然而,由于在Linux下窗口界面开发的框架有很多种,诸如X11、Gtk、Electron、Qt、WxWidgets等等,不同框架实现的窗口函数有着不同的逻辑,针对窗口设置hook机制需要针对不同软件进行适配,该适配工作的工作量将是灾难性的。此外,函数注入的方式还需在目标进程窗口的函数执行过程中插入自定义的窗口水印绘制函数,但是每个UI框架的实现函数都不尽相同,因此诸如方式无法普遍的适用于所有应用程序。因此上述注入式方式添加窗口水印的灵活性和可适用范围均较差。
[0004]更重要的是,上述注入方式还存在着安全风险,原因在于该方案会把自定义的窗口水印绘制函数代码注入到目标进程中去运行,进程执行过程的安全性具备不确定性,一旦注入逻辑稍有差池则会导致目标进程出现显示异常、执行异常等异常状况,甚至导致目标进程崩溃。因此,上述注入方式会干扰目标进程的运行,可能降低目标进程执行的安全性。

技术实现思路

[0005]本专利技术提供一种基于Linux系统的应用程序窗口水印添加方法和装置,用以解决现有技术中窗口水印添加方式灵活性和可适用范围较差且存在安全风险的缺陷。
[0006]本专利技术提供一种基于Linux系统的应用程序窗口水印添加方法,包括:基于Linux X11函数实时获取当前桌面的所有窗口的id和进程识别号,并基于所有窗口的进程识别号确定待添加水印的目标进程是否启动;若目标进程已启动,则确定所述目标进程对应的窗口的id,并基于所述目标进程对应的窗口的id在所述目标进程对应的窗口上层创建所述目标进程对应的水印窗口,并设置所述水印窗口的透明属性和鼠标穿透属性;利用Linux X11函数实时获取所述目标进程对应的窗口的实时窗口坐标和/或实时大小信息,并基于所述目标进程对应的窗口的实时窗口坐标和/或实时大小信息设置所述水印窗口的位置和/或大小;获取当前桌面的活跃窗口信息,并基于所述活跃窗口信息确定所述目标进程对应
的窗口是否为当前桌面的活跃窗口;若所述目标进程对应的窗口为当前桌面的活跃窗口,则对所述水印窗口增加置顶属性。
[0007]根据本专利技术提供的一种基于Linux系统的应用程序窗口水印添加方法,所述利用Linux X11函数实时获取所述目标进程对应的窗口的实时窗口坐标和/或实时大小信息,具体包括:基于Linux X11的XselectInput函数和XnextEvent函数订阅StructureNotifyMask类型消息和PropertyChangeMask类型消息,捕获窗口移动事件和窗口大小调整事件;当捕获到窗口移动事件和/或窗口大小调整事件时,基于所述目标进程对应的窗口的id确定相应事件是否关联所述目标进程对应的窗口;若相应事件关联所述目标进程对应的窗口,则从相应事件的消息结构体中获取所述目标进程对应的窗口的实时窗口坐标和/或实时大小信息。
[0008]根据本专利技术提供的一种基于Linux系统的应用程序窗口水印添加方法,所述基于Linux X11的XselectInput函数和XnextEvent函数订阅StructureNotifyMask类型消息和PropertyChangeMask类型消息,捕获窗口移动事件和窗口大小调整事件,具体包括:基于所述XselectInput函数订阅StructureNotifyMask类型消息和PropertyChangeMask类型消息;基于所述XnextEvent函数阻塞获取Xevent事件,以捕获窗口移动事件和窗口大小调整事件,并在捕获到窗口移动事件和/或窗口大小调整事件时接收相应事件对应的StructureNotifyMask消息和/或PropertyChangeMask消息。
[0009]根据本专利技术提供的一种基于Linux系统的应用程序窗口水印添加方法,所述获取当前桌面的活跃窗口信息,并基于所述活跃窗口信息确定所述目标进程对应的窗口是否为当前桌面的活跃窗口;若所述目标进程对应的窗口为当前桌面的活跃窗口,则对所述水印窗口增加置顶属性,具体包括:在所述水印窗口内创建查询线程以实时查询当前桌面的活跃窗口信息,并基于所述活跃窗口信息确定所述目标进程对应的窗口是否为当前桌面的活跃窗口;若所述目标进程对应的窗口为当前桌面的活跃窗口,则基于所述水印窗口的setWindowFlags(Qt::FramelessWindowHint|Qt::WindowTransparentForInput|Qt::Tool|Qt::X11BypassWindowManagerHint|Qt::WindowStaysOnTopHint)函数对所述水印窗口增加置顶属性,使得所述水印窗口在当前桌面上置顶。
[0010]根据本专利技术提供的一种基于Linux系统的应用程序窗口水印添加方法,所述基于所述活跃窗口信息确定所述目标进程对应的窗口是否为当前桌面的活跃窗口,之后还包括:若所述目标进程对应的窗口不为当前桌面的活跃窗口,则基于所述水印窗口的setWindowFlags(Qt::FramelessWindowHint|Qt::WindowTransparentForInput|Qt::Tool)函数取消所述水印窗口的置顶属性。
[0011]根据本专利技术提供的一种基于Linux系统的应用程序窗口水印添加方法,所述基于Linux X11函数实时获取当前桌面的所有窗口的id和进程识别号,具体包括:基于Linux X11的XQueryTree函数获取当前桌面的所有窗口的Window值,作为相
应窗口的id;基于Linux X11的XGetWindowProperty函数获取各个窗口的 _NET_WM_识别号值,作为相应窗口的进程识别号。
[0012]根据本专利技术提供的一种基于Linux系统的应用程序窗口水印添加方法,还包括:基于Linux X11函数监控所述目标进程对应的窗口是否被最小化到任务栏;若所述目标进程对应的窗口被最小化到任务栏,则隐藏所述水印窗口。
[0013]根据本专利技术提供的一种基于Linux系统的应用程序窗口水印添加方法,所述基于Linux X11函数监控所述目标进程对应的窗口是否被最小化到任务栏;若所述目标进程对应的窗口被最小化到任务栏,则隐藏所述水印窗口,具体包括:基于Linux X11的XgetWindowProperty函数获取所述目标进程对应的窗口的_N本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种基于Linux系统的应用程序窗口水印添加方法,其特征在于,包括:基于Linux X11函数实时获取当前桌面的所有窗口的id和进程识别号,并基于所有窗口的进程识别号确定待添加水印的目标进程是否启动;若目标进程已启动,则确定所述目标进程对应的窗口的id,并基于所述目标进程对应的窗口的id在所述目标进程对应的窗口上层创建所述目标进程对应的水印窗口,并设置所述水印窗口的透明属性和鼠标穿透属性;利用Linux X11函数实时获取所述目标进程对应的窗口的实时窗口坐标和/或实时大小信息,并基于所述目标进程对应的窗口的实时窗口坐标和/或实时大小信息设置所述水印窗口的位置和/或大小;获取当前桌面的活跃窗口信息,并基于所述活跃窗口信息确定所述目标进程对应的窗口是否为当前桌面的活跃窗口;若所述目标进程对应的窗口为当前桌面的活跃窗口,则对所述水印窗口增加置顶属性。2.根据权利要求1所述的基于Linux系统的应用程序窗口水印添加方法,其特征在于,所述利用Linux X11函数实时获取所述目标进程对应的窗口的实时窗口坐标和/或实时大小信息,具体包括:基于Linux X11的XselectInput函数和XnextEvent函数订阅StructureNotifyMask类型消息和PropertyChangeMask类型消息,捕获窗口移动事件和窗口大小调整事件;当捕获到窗口移动事件和/或窗口大小调整事件时,基于所述目标进程对应的窗口的id确定相应事件是否关联所述目标进程对应的窗口;若相应事件关联所述目标进程对应的窗口,则从相应事件的消息结构体中获取所述目标进程对应的窗口的实时窗口坐标和/或实时大小信息。3.根据权利要求2所述的基于Linux系统的应用程序窗口水印添加方法,其特征在于,所述基于Linux X11的XselectInput函数和XnextEvent函数订阅StructureNotifyMask类型消息和PropertyChangeMask类型消息,捕获窗口移动事件和窗口大小调整事件,具体包括:基于所述XselectInput函数订阅StructureNotifyMask类型消息和PropertyChangeMask类型消息;基于所述XnextEvent函数阻塞获取Xevent事件,以捕获窗口移动事件和窗口大小调整事件,并在捕获到窗口移动事件和/或窗口大小调整事件时接收相应事件对应的StructureNotifyMask消息和/或PropertyChangeMask消息。4.根据权利要求1所述的基于Linux系统的应用程序窗口水印添加方法,其特征在于,所述获取当前桌面的活跃窗口信息,并基于所述活跃窗口信息确定所述目标进程对应的窗口是否为当前桌面的活跃窗口;若所述目标进程对应的窗口为当前桌面的活跃窗口,则对所述水印窗口增加置顶属性,具体包括:在所述水印窗口内创建查询线程以实时查询当前桌面的活跃窗口信息,并基于所述活跃窗口信息确定所述目标进程对应的窗口是否为当前桌面的活跃窗口;若所述目标进程对应的窗口为当前桌面的活跃窗口,则基于所述水印窗口的setWindowFlags(Qt::FramelessWindowHint|Qt::WindowTransparentForInput|Qt::Tool|Qt::X11BypassWindowManagerHint|Qt::WindowStaysOnTopHint...

【专利技术属性】
技术研发人员:张黎王程鹏
申请(专利权)人:闪捷信息科技有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1