在数据防泄漏软件,通常会禁止 PrintScreen 键,防止通过截屏来将数据保存为图片而导致泄密。

这类软件如果想要实现是比较简单的,但是想要将功能做的强大些,还是需要下功夫的。以前使用过一款数据防泄漏的软件,其中就有这个功能,它不但能禁止掉 PrintScreen 键,还能禁止其他的专业截屏软件。同样,禁止截屏软件的方法难点在于兼容性,就是不要影响正常的软件的运行。

​       这里介绍一些如何禁止 PrintScreen 键。其实很简单,只要安装低级键盘钩子(WH_KEYBOARD_LL)就可以搞定,普通的键盘钩子(WH_KEYBOARD)是无法过滤一些系统按键的。在低级键盘钩子的回调函数中,判断是否为 PrintScreen 键,如果是则直接返回 TRUE,如果不是则传递给钩子链的下一处。

看代码吧!!!

 extern "C" __declspec(dllexport) BOOL SetHookOn()
{
    if ( g_hHook != NULL )
    {
        return FALSE;
    }
    g_hHook = SetWindowsHookEx(WH_KEYBOARD_LL, LowLevelKeyboardProc, g_hIns, NULL);
    if ( NULL == g_hHook )
    {
        MessageBox(NULL, "安装钩子出错 !", "error", MB_ICONSTOP);
        return FALSE;
    }     return TRUE;
} extern "C" __declspec(dllexport) BOOL SetHookOff()
{    
    if ( g_hHook == NULL )
    {
        return FALSE;
    }
    UnhookWindowsHookEx(g_hHook);
    g_hHook = NULL;
    return TRUE;
} LRESULT CALLBACK LowLevelKeyboardProc(
            int nCode, WPARAM wParam, LPARAM lParam)
{
    KBDLLHOOKSTRUCT *Key_Info = (KBDLLHOOKSTRUCT*)lParam;     if ( HC_ACTION == nCode )
    {
        if ( WM_KEYDOWN == wParam || WM_SYSKEYDOWN == wParam )
        {
            if ( Key_Info->vkCode == VK_SNAPSHOT )
            {
                return TRUE;
            }
        }
    }     return CallNextHookEx(g_hHook, nCode, wParam, lParam);
}

代码量非常的短,是的……就是这短短的代码阻止了数据的泄漏。当然了,这样的保护对于一个攻击者,这个代码就无法保护数据了。对于一个攻击者,这种保护也就很脆弱了。任何的保护都有突破的办法,攻击无处不在,攻击者会尝试任何手段突破所有的保护。


我的微信公众号:“码农UP2U”

数据防泄漏 | 禁止PrintScreen键的更多相关文章

  1. PDF数据防扩散系统方案

    在企业信息化过程中.大量的企业重要图纸和资料都是以电子文件的方式存在.为了避免内部关键数据的外泄,採取了多种方式:设计部门的门禁管制.防火墙.禁止计算机的USB接口等等. 可是泄密问题还是时有发生,原 ...

  2. 【转】网页禁止后退键BackSpace的JavaScript实现(兼容IE、Chrome、Firefox、Opera)

    var forbidBackSpace = function (e) { // 获取event对象 var ev = e || window.event; // 获取事件源 var obj = ev. ...

  3. 输入框状态禁止enter键提交表单

    1:页面中如果存在input输入框和submit提交按钮时,默认按enter键会提交表单,如果我现在在做查询操作,一不小心按了enter键就会有提交表单的操作,这样显然是不合理的,所以我们要禁止按en ...

  4. JS禁止后退键(backspace)使浏览器后退

    背景说明: 今天项目测试中,同事发现一个Bug,当键盘敲下后退键(Backspace)后,浏览器自动后退,不符合需求,故建议禁止浏览器后退键. 提出需求: 当键盘敲下后退键(Backspace)后 1 ...

  5. js 禁止后退键

    function doKey(e) { var ev = e || window.event; //获取event对象 var obj = ev.target || ev.srcElement; // ...

  6. 基于Volley,Gson封装支持JWT无状态安全验证和数据防篡改的GsonRequest网络请求类

    这段时间做新的Android项目的client和和REST API通讯框架架构设计.使用了非常多新技术,终于的方案也相当简洁优雅.client仅仅须要传Java对象,server端返回json字符串, ...

  7. Sqlite清空表数据以及重新设置主键操作

    Sqlite清空表数据以及重新设置主键操作 delete from 表名; //清空数据 update sqlite_sequence SET seq = 0 where name ='表名';//自 ...

  8. 数据防泄密(DLP)

    数据防泄密(DLP)近几年已经成为国内非常热门的关键词. 目前市场上DLP产品主要可以分为三大类,各类产品都来源于不同的技术体系,防护效果也各有优缺点. 第一类,以监控审计为主,对进出的数据进行过滤, ...

  9. 处理键盘事件 禁止后退键(Backspace)密码或单行、多行文本框除外

    //处理键盘事件 禁止后退键(Backspace)密码或单行.多行文本框除外 function forbidBackSpace(e) { var ev = e || window.event; //获 ...

随机推荐

  1. 第二篇:C++画圆

    安装GUI开发工具easyX #include <graphics.h>#include <Windows.h> int main(void) { initgraph(640, ...

  2. 【oracle】PLS-00103: 出现符号 "end-of-file"

    begin xxxxx end; 修改xxxxx为xxxxx:就好了

  3. 基于appium的fixture应用之代码重构

    一.痛点分析 在appium自动化中,会话启动参数较多,我们使用了yaml配置文件来进行管理,并使用了PyYaml模块进行yaml文件内容的读取,我们知道,在测试场景中,不可能只会用到一种启动类型的参 ...

  4. kaldi使用thchs30数据进行训练并执行识别操作

    操作系统 : Ubutu18.04_x64 gcc版本 :7.4.0 数据准备及训练 数据地址: http://www.openslr.org/18/ 在 egs/thchs30/s5 建立 thch ...

  5. AES 对称加密

    package com.skynet.rimp.common.utils.string; import java.io.UnsupportedEncodingException; import jav ...

  6. 深入理解 Java 数组

  7. 痞子衡嵌入式:飞思卡尔i.MX RTyyyy系列MCU特性那些事(1)- 概览

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是飞思卡尔i.MX RTyyyy系列MCU的基本特性. ARM Cortex-M微控制器芯片厂商向来竞争激烈,具体可参看我的另一篇文章&l ...

  8. 初识VEH链(用户异常派发的进一步探究)

    Windows内核分析索引目录:https://www.cnblogs.com/onetrainee/p/11675224.html 初识VEH链(用户异常派发的进一步探究)  VEH链是进程处理异常 ...

  9. C/C++ 中 `printf` 格式化

    作为强类型静态语言,类型不仅规定了可以对数据进行的操作,还决定了应该怎样在 printf 中输出. printf 的签名是: int printf ( const char * format, ... ...

  10. 怎样使用element-starter快速搭建ElementUI项目

    场景 为了能快速搭建起一个ElementUI项目,我们可以使用element-starter这个模板进行快速搭建. element-starter的Github https://github.com/ ...