首页
社区
课程
招聘
[求助][求助]:eek:关于截屏保护的一些问题
发表于: 2014-12-17 11:17 7658

[求助][求助]:eek:关于截屏保护的一些问题

2014-12-17 11:17
7658
最近在学习shadow ssdt hook, 做一个截屏保护的小东西来结尾。查了很多资料之后磕磕碰碰的总算是把两个关键函数NtGdiBitBlt和NtGdiStretchBlt給hook掉了。。在我自己寫的替代函數中打印信息也能在DbgView中看到,断點也OK了,可是就是没有办法阻止它。
      我的测试环境是 wmware8 + xp sp2,在虚拟机中开启hook之后按下print Screen可以在NtGdiStretchBlt断点成功。原来不影响截屏的hook做法是返回原来的routine,我为了测试就把它注释了,直接返回,可是这个做法似乎不对啊。。无论是返回STATUS_SUCCESS还是STATUS_ACCESS_DENIED都搞不定。。实在搞不定是哪里出问题了。
      
      小菜一只,恳请各种牛指点!!!

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (13)
雪    币: 1392
活跃值: (5207)
能力值: ( LV13,RANK:240 )
在线值:
发帖
回帖
粉丝
2
是inline hook还是 表HOOK

表HOOK 对按键截屏无效
2014-12-17 11:49
0
雪    币: 16
活跃值: (430)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
If the function succeeds, the return value is nonzero.

If the function fails, the return value is zero.

不能注释原来的啊,先调用原来的BitBlt函数,然后直接返回0
2014-12-17 17:33
0
雪    币: 91
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
哥们,你这个英文的解释是从哪里看来的??
2014-12-17 22:18
0
雪    币: 91
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
纳尼。。我们老师给的就是介个题目,指定用表虎克哦。
2014-12-17 22:45
0
雪    币: 91
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
在虚拟机里试过了,先调用原来的Gdi函数再返回0。没有成功。STATUS_ACCESS_DENIED也是一样。

按键截屏仍然有效。
2014-12-17 23:15
0
雪    币: 478
活跃值: (50)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
buffer清零,我不懂乱说的哦
2014-12-17 23:27
0
雪    币: 91
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
那inline有效吗?
2014-12-17 23:53
0
雪    币: 1392
活跃值: (5207)
能力值: ( LV13,RANK:240 )
在线值:
发帖
回帖
粉丝
9
inline bitbit stretchblt 有效

按PrintScreen键以后 消息投递到处理列队,发现是printscreen,内核直接调用xxxsnapwindow 由于是同一个模块,所以是直接调用的内核bitblt 没有从表里面获取地址。因此无效。
上面一群瞎说的。也是服了 你inline HOOK bitblt或者stretch是有效的
2014-12-18 08:16
0
雪    币: 1392
活跃值: (5207)
能力值: ( LV13,RANK:240 )
在线值:
发帖
回帖
粉丝
10
只有三环调用的才从表里面过。按键截屏 内核直接调用 都是自己的东西为还要脱裤子放屁 从表里面取地址。

/***************************************************************************\
* xxxSnapWindow
*
* Effects: Snaps either the desktop hwnd or the active front most window. If
* any other window is specified, we will snap it but it will be clipped.
*
\***************************************************************************/

BOOL xxxSnapWindow(
    PWND pwnd)
{
   
    /*
     * Open the clipboard and empty it.
     *
     * pwndDesktop is made the owner of the clipboard, instead of the
     * currently active window; -- SANKAR -- 20th July, 1989 --
     */
   
    fSuccess = xxxOpenClipboard(pwndT, NULL);
 
    xxxEmptyClipboard(pwinsta);

 。。。。。。。。
。。。。。
    hdcScr = _GetWindowDC(pwnd);
    if (!hdcScr)
        goto MemoryError;

  
    hdcMem = GreCreateCompatibleDC(hdcScr);
  
    if (SYSMET(SAMEDISPLAYFORMAT)) {
        hbm = GreCreateCompatibleBitmap(hdcScr, rc.right, rc.bottom);
    } else {
        hbm = GreCreateBitmap(rc.right, rc.bottom, 1, gpDispInfo->BitCountMax, NULL);
    }

    if (!hbm) {
        hbm = GreCreateBitmap(rc.right, rc.bottom, 1, 1, NULL);
        if (!hbm)
            goto MemoryError;
    }

    hbmOld = GreSelectBitmap(hdcMem, hbm);

 
    fRet = GreBitBlt(hdcMem, 0, 0, rc.right, rc.bottom, hdcScr, rc.left, rc.top, SRCCOPY | CAPTUREBLT, 0);

    GreSelectBitmap(hdcMem, hbmOld);

    _SetClipboardData(CF_BITMAP, hbm, FALSE, TRUE);

   
    PlayEventSound(USER_SOUND_SNAPSHOT);

    fRet = TRUE;

SnapExit:
。。。。。。。。
    /*
     * Release the window/client DC.
     */
     if (hdcScr) {
         _ReleaseDC(hdcScr);
     }

    xxxCloseClipboard(pwinsta);
  
。。。。。。    
goto SnapExit;
}
2014-12-18 08:22
0
雪    币: 91
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
我懂得~~~~
2014-12-18 09:18
0
雪    币: 91
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
这么说我去hook按键呢?hook print screen 就可以拿到按键截屏了吧???
毕竟这是防人家截屏而已,如果只有按键的截不到,那么别人用call 环3 的方式截屏他就得过表了~
2014-12-18 09:32
0
雪    币: 1392
活跃值: (5207)
能力值: ( LV13,RANK:240 )
在线值:
发帖
回帖
粉丝
13
可以拦截按键,shadow表里面还要拦截ntuserprintwindow
2014-12-18 09:54
0
雪    币: 204
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
zxf
14
PRINTSCREEN截屏原理是什么,我发现它截什么都能截到,我想自己依照它来写个截屏的该怎么写,不是用KEYBOADR_EVENT模拟的那种,也不放在剪切板,就直接保存成文件
2014-12-19 16:33
0
游客
登录 | 注册 方可回帖
返回
//