一个极其隐秘只有...吧 关注:2,376贴子:11,097
  • 15回复贴,共1

自绘桌面(动态桌面)

只看楼主收藏回复

先放上成果
原理是HOOK桌面的绘图函数然后自己绘图
注入DLL的方法有很多比如远线程调用LoadLibrary
这里就懒得编注入程序了,直接上百度找


自绘桌面.zip
大小:3.13MB下载:73次转存:6次
文件已失效
1楼2013-09-17 17:36回复
    用OD调试explorer.exe,对BeginPaint下断
    然后盯着桌面按F8

    执行这个call后桌面出现了图标所以推测是绘图函数
    根据前面调用的API推出参数I


    2楼2013-09-17 17:38
    收起回复
      所以HOOK函数声明像这样
      void OnDraw(HWND* hwnd, HDC hdc, RECT* rect)
      HOOK方法也有很多
      反正都要让目标进程调用自己的函数
      源码中Hook用的是在目标函数入口JMP,自己的函数执行完后再JMP回原函数
      不要用局部变量,或者要自己add esp来释放
      Hook2和Hook3用的是修改call目标地址,在自己的函数中调用原函数
      这样只有一个call会调用自己的函数,其他地方就不会
      但是对于这里可以用这种方法
      还有一种通用的方法
      在目标函数入口JMP,在自己的函数调用原函数前恢复HOOK,调用完后再HOOK
      因为不用JMP回原函数所以栈(esp)不会乱
      缺点是多线程会漏HOOK,还有每次都恢复HOOK太麻烦。。。I


      3楼2013-09-17 17:49
      回复
        关于绘图
        源码中Hook是自己绘图再跳回原函数继续绘图
        但是没有用双缓冲对于动态图会闪瞎狗眼
        Hook2中先绘制到自己的内存DC,再用AlphaBlend复制到hdc
        但是不知道为什么好像原图没有擦除一样,有些图标还有文字背景会不停叠加造成失真...
        Hook3是最完美的
        我突然想到hdc可能是伪透明,根本没有alpha通道,只是背景和壁纸一样
        所以可以用BitBlt直接复制到hdc,可以摆脱alpha混合
        事实证明果然是这样...
        所以先从hdc复制背景到内存DC,再绘制到内存DC,最后把内存DC用BitBlt复制到hdcI


        4楼2013-09-17 17:59
        回复
          这里偷懒用了BMP图片
          可以用GDI+支持JPG和PNG等图片
          但是GDI+效率比较渣所以还是尽量避免吧


          5楼2013-09-17 18:01
          回复
            查了一下WINAPI的作用
            http://blog.csdn.net/zjwoody/article/details/7887988
            WINAPI就是__stdcall,由函数清理堆栈
            默认的是__cdecl,由调用者清理
            所以会有add esp,导致栈被破坏
            历史是由胜利者书写的。——普莱斯
            I


            6楼2013-09-19 11:40
            回复
              完全看不懂- -


              7楼2013-10-21 13:04
              回复
                把win7版也做了,但是有点缺陷
                下载
                http://pan.baidu.com/s/1bn3TWtT
                win7自带双缓冲所以原函数画完后再画自己的图就行了
                但是画背景的函数没有传入窗口句柄所以不能判断绘制的是不是目标窗口
                还要注意地址是动态的所以用GetModuleHandle得到模块地址再算出指令地址
                其实win7自带视频桌面的隐藏功能。。。
                我想当正义的伙伴。——卫宫切嗣


                通过百度相册上传10楼2014-01-29 19:17
                收起回复
                  十级你怕了吗?(好像你是吧主TAT)


                  IP属地:江苏来自Android客户端11楼2014-07-14 06:51
                  回复