科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网网络频道整蛊 QQ 截图

整蛊 QQ 截图

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

昨天看到有一个朋友自己实现了类似QQ截图的功能,于是把QQ截图的 DLL 翻出来,简单测试了一下,发现一些不常见的小功能也许对大家有用。这里使用 RTX(腾讯的另一个软件产品) 中自带的 camerawnd.dll, 和QQ的很相似。

作者:zdnet安全频道 来源:论坛整理 2008年7月25日

关键字: 腾讯 QQ

  • 评论
  • 分享微博
  • 分享邮件

  昨天看到有一个朋友自己实现了类似QQ截图的功能,于是把QQ截图的 DLL 翻出来,简单测试了一下,发现一些不常见的小功能也许对大家有用。这里使用 RTX(腾讯的另一个软件产品) 中自带的 camerawnd.dll, 和QQ的很相似。

  第一步:用 vc 自带的 DEPENDS.EXE 察看 DLL 的导出函数,有以下三个

CameraSubArea,CameraWndArea,CameraScreen

  从字面意思看,第一个是截取子范围的,第二个是截取窗口范围的,第三个是截屏的现在还不知道函数参数,写个测试程序先,函数暂时认为无返回值 无参数代码如下:

     typedef void (*FUN)();
  HMODULE hInst = LoadLibrary(_T("CameraWnd.dll"));
  if (hInst != NULL)
  {
    FUN pFunc = (FUN)GetProcAddress(hInst, "CameraSubArea");
    if (pFunc != NULL)
    {
      pFunc();
    }
  }
  结果测试通过,同样的代码换成 GetProcAddress(hModule, "CameraWndArea") 也能成立,并且出现窗口截图模式,估计还没有人见过, ^_^当换成 GetProcAddress(hModule, "CameraScreen")可以运行,函数返回的时候会出现异常,说明这个函数是有参数的或者我们的调用方式不对。

  第二步:vc调试模式,跟踪 CameraSubArea 方法可以看到:10001200 push 40800000h
10001205 push 1
10001207 push 1
10001209 call 100010E0

  跟踪 CameraWndArea 方法可以看到:

10001210 push 40800000h
10001215 push 0
10001217 push 2
10001219 call 100010E0

  跟踪 CameraScreen 方法可以看到:

100010E0 push ebp
100010E1 mov ebp,esp
100010E3 push 0FFh
100010E5 push 10007973h

  看来前两个函数都是调用第三个方法实现的,只不过输入参数不同,< CameraScreen 应该有3个参数,暂时认为是 int,int,int那么第一、第二个函数应该是使用如下方法调用第三个函数的,

void CameraSubArea()
{
  CameraScreen(1, 1, 0x40800000);
}
void CameraWndArea()
{
  CameraScreen(2, 0, 0x40800000);
}

  随后我又尝试修改每一个参数,除了最后一个参数不知道作用外,第一个应该是控制模式的,第二个参数控制是否显示放大镜是个bool类型第三个参数修改后会影响放大镜中显示的内容,估计是放大镜的参数。有兴趣大家可以尝试一下或者直接使用附带源代码测试运行 果。

  另:CameraScreen 应该是有返回值的,如果没有返回值调用者怎么知道用户截图是取消了还是截取了,不会自己去检查剪贴板吧。之前有人出现截图功能无法使用的问题,可能是某个其它程序打开剪贴板后没有关闭,导致程序打开剪贴板失败,这时候系统的截图键应该也不能用。

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章