分享

怎么提取QQ2008的截图功能!!

 360大测试 2016-12-07
老版本的QQ可以用《电脑迷》上面的一个方法,方法为:
QQ的截屏功能十分方便,也很实用,不过只能在打开QQ后才能使用,在没有打开QQ是想用该怎么办?其实没有QQ也可以使用它的截图功能,掌握下面这些小技巧问题也就解决了。
与QQ的截图功能有关的就是一个文件“CameraDll.dll”,用系统的文件“rundll32.exe”来调用它就可以激活截图功能了。CameraDll.dll文件位于QQ的安装目录下。将它复制到“C:\windows\system32”中然后再运行对话框中输入“rundll32.exe CameraDll.dll,CameraSubArea“,按回车后就可以看到熟悉的QQ截图界面了。
当然,如果每次都输入命令来启动,非常麻烦,为她建立一个快捷方式就好了。在桌面空白处点击鼠标右键,选择“新建/快捷方式”再探出的对话框中输入“rundll32.exe CameraDll.dll,CameraSubArea“,点击“下一步”。再为快捷方式命名为“截图”,点击完成即可。以后双击这个快捷方式就可以激活截图了。
可是现在当前版本的QQ不可以用了,因为新版本的QQ已经有可以独立呆存为图片的功能,而以前版本的刚没有,我看到网上已经有人提取了新版本的这个功能做成了小程序,所以我想应该是可以的,请问具体应该怎么做!谢谢!!!

回复讨论(解决方案)

那个程序很大吗?
刚才试了下,报错,找不到XXX.dll,我想可以把所有的DLL都复制到system32里面去碰碰运气,也有可能是QQ没有再提供截屏接口了,这样估计就只能自己写了
至于那个程序,用以前的QQ的DLL做出来不行么?
那运气我之前就碰过了没碰到啊!以前的版本可以,现在的新版本不可能了。
非要用它的吗?自已写一个不行吗?
真的没有人会吗?????高手快来啊!
下载了一个,试了一下,发现也是保存在剪贴板里的
你用2007的那个dll,直接在程序中调用 winexec('rundll32.exe CameraDll.dll,CameraSubArea', 
就可以了嘛
我是想要最新版本的,最新版本的可以直接进行保存只要对着截图区右击就可以有另存为选项了,而以前版本的只能先进剪贴板!
我觉得这个功能可以做一个独立的EXE。做到DLL虽然方便调用但必定额外多一个DLL文件,很不爽。
还能这么做呢? 学一下
还是没有人会吗?
去下载QQ中的一个截屏的DLL 我以前用过。
有仿QQ截屏的小程序,vc 的和delphi的都有  好像盒子上有
我这里只有程序,没有源码 搂住找找看吧
http://blog.csdn.net/xzhifei/archive/2007/07/17/1695258.aspx
我博客有仿QQ截图的源码
我开始就用过,他的仿QQ一点不像和QQ的差远了,我最想要的功能他没有,就是对着截图区右击可以有直接另存为!!!
起因:无聊在网上看文章。。。看到一篇关于用qq的CameraDll.dll截图的文章很有意思。我就马上拿出rundll来试了一下。结果令人失望rundll.exe CameraDll.dll CameraSubArea 会跳出一个运行错误的对话框。后来在网上查了一下,原来是新版的QQ的CameraDll.dll就无法达到那篇文章的效果。于是我在网上弄了一个旧版的dll文件,成功的执行了命令,而且截下了图片。本来事情就到此为止了的,但是网上似乎有人在乎这个问题,“为什么新版的不能提取截图呢?”(其实这个问题应该去问马化腾同学。。。^_^)。这就让我产生了Debug一把这个破Dll的想法,算是拿这个Dll支持珊瑚虫同学了。


既然要弄CameraDll.dll那就从头弄起。看看CameraSubArea这个函数。用Depends看了看这个函数的地址0x10B0。OK,去看看那,于是看到了这里的东西:

601311BB |. 8BC6          mov     eax, esi

601311BD |. 5E            pop     esi

601311BE |. 64:890D 00000>mov     dword ptr fs:[0], ecx

601311C5 |. C9            leave

601311C6 \. C2 0400       retn    4

好,看情况 DWORD CameraSubArea(DWORD) 这样就可以了。

于是我写了Demo:

#include 

#include 


typedef int (__stdcall *CAMERASUBAREA)(int a);


void main()

{

       Sleep(1000);

       HMODULE hHandle = LoadLibrary('CameraDll.dll');

       if (NULL == hHandle)

       {

              MessageBox(NULL,'error','LoadLibrary Failed',MB_OK);

              return;

       }

       CAMERASUBAREA pCameraSubArea = (CAMERASUBAREA)GetProcAddress(hHandle,'CameraSubArea');

       if (NULL == pCameraSubArea)

       {

              MessageBox(NULL,'error','LoadLibrary Failed',MB_OK);

              FreeLibrary(hHandle);

              return;

       }

       pCameraSubArea(0);

       FreeLibrary(hHandle);

}


     运行以后,系统提示需要QQBaseClassInDll.dll。好吧,在QQ里拷贝一份QQBaseClassInDll.dll进去。再运行,有提示需要QQHelperDll.dll和BasicCtrlDll.dll,继续加入他们。

可是,运行后还是出现问题。Debug一下发现[eax + 4D]这句,而eax的值为0。也就是说要取0x04D的值,而我们知道4GB的内存中0到0x1000都是空指针区,自然会出错。

于是NOP掉这个Call。运行程序后发现截图已经没问题了,但是截图中的工具栏却还是一个都不能用。即然这样,那就继续Debug一下。发现了QQHelperDll.dll中的问题。和前面的问题一样,都是访问了空指针,NOP。而后面还有两处这样的问题,用NOP和JMP的方法都成功的解决了。

再次调用程序,OK已经恢复正常了。其实程序一开始无法使用都是因为他调用了BasicCtrlDll.dll中的GetCurrentUserData这个函数,在传参数出了问题。
ASM高手啊。看到汇编去头就晕了

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多