首页
社区
课程
招聘
[原创]HOOK API续之模拟覆盖法 实例 AntiDesktop
发表于: 2009-5-31 10:02 12412

[原创]HOOK API续之模拟覆盖法 实例 AntiDesktop

2009-5-31 10:02
12412

【文章标题】HOOK API续之模拟覆盖法 实例 AntiDesktop
【文章作者】nohacks(非安全,hacker0058)
【作者主页】blog.nohacks.net
【文章出处】看雪论坛(bbs.pediy.com)

    这个小软件的作用是禁止程序创建虚拟桌面,防止此类软件,如防锁专家,幽灵网吧辅助工具等躲避计费软件(注:HideProcess.dll 为隐藏进程模块,因为采用病毒技术,可能会被杀毒软件查杀,不过没有它也不影响正常使用,只不过进程不能隐藏。)

  软件的原理是勾住CreateDesktop这个API禁止创建虚拟桌面,小软件没啥技术含量,发表在这里只为做个备份,另外给大家参考参考,有什么错误或需要改正的地方请指出,谢谢!

  软件 分DLL和调用部分,先看DLL的主要代码:



;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>;
;	         Programmed by nohacks, nohacks@163.com                         ;
;	             Website: http://blog.nohacks.net                           ;
;            编(MASM):HOOK API续之模拟覆盖法 实例 AntiDesktop                   ;
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>;


.486
.model flat,stdcall 
option casemap:none 

include hooklib.inc
                
new_CreateDesktopA  proto  :DWORD, :DWORD , :DWORD, :DWORD , :DWORD, :DWORD 
new_CreateDesktopW  proto  :DWORD, :DWORD , :DWORD, :DWORD , :DWORD, :DWORD 

; you code

.data



 old_CreateDesktopA      db 090h,090h,090h,090h,090h,090h,090h,090h,\
                 090h,090h,090h,090h,090h,090h,090h,090h,\
                 0E9h,000h,000h,000h,000h
                 
addres_CreateDesktopA dd 0
 size_CreateDesktopA  dd 0

old_CreateDesktopW      db 090h,090h,090h,090h,090h,090h,090h,090h,\
                 090h,090h,090h,090h,090h,090h,090h,090h,\
                 0E9h,000h,000h,000h,000h
                 
 addres_CreateDesktopW dd 0
 size_CreateDesktopW  dd 0

;you code


;共用部分             
hInstance dd 0
bakapi dd 0

.data? 
hHook dd ? 
hWnd dd ?

.code

DllEntry proc hInst:HINSTANCE, reason:DWORD, reserved1:DWORD 
    
    .if reason==DLL_PROCESS_ATTACH     ;当DLL加载时产生此事件
     
     push hInst 
        pop hInstance 
             
      ;下面几行请根据实际API修改
                              
     ;CreateDesktopA部分
     
      invoke GetAddress,CTEXT("user32.dll"),CTEXT("CreateDesktopA")  
        mov addres_CreateDesktopA,eax
       invoke  Hookapi, addres_CreateDesktopA,addr new_CreateDesktopA,addr old_CreateDesktopA 
       mov size_CreateDesktopA,eax
     
                          
     ;CreateDesktopW部分
     invoke GetAddress,CTEXT("user32.dll"),CTEXT("CreateDesktopW")  
      mov addres_CreateDesktopW,eax
       invoke  Hookapi, addres_CreateDesktopW,addr new_CreateDesktopW,addr old_CreateDesktopW 
       mov size_CreateDesktopW,eax
     
     
      ;you code
     
  .elseif   reason==DLL_PROCESS_DETACH 
     
  invoke WriteApi,addres_CreateDesktopA,addr old_CreateDesktopA,size_CreateDesktopA
  invoke WriteApi,addres_CreateDesktopW,addr old_CreateDesktopW,size_CreateDesktopW
      
      
      ; you code
      
 
   .endif 
   
   
    mov  eax,TRUE 
    ret 
DllEntry Endp 


GetMsgProc proc nCode:DWORD,wParam:DWORD,lParam:DWORD 
    invoke CallNextHookEx,hHook,nCode,wParam,lParam 
     mov eax,TRUE
     
      ret 
GetMsgProc endp 

InstallHook proc Hwnd:dword

 		    
    invoke SetWindowsHookEx,WH_GETMESSAGE,addr GetMsgProc,hInstance,NULL 
    
    mov hHook,eax 
    ret 
InstallHook endp 

UninstallHook proc 
 invoke UnhookWindowsHookEx,hHook 
 
  ret 
UninstallHook endp 

new_CreateDesktopA proc   uses ebx edi esi,as:DWORD , bs:DWORD,cd:DWORD , ps:DWORD,ys:DWORD , hs:DWORD

mov eax,TRUE 
ret

new_CreateDesktopA endp

new_CreateDesktopW proc   uses ebx edi esi,as:DWORD , bs:DWORD,cd:DWORD , ps:DWORD,ys:DWORD , hs:DWORD

mov eax,TRUE 
ret

new_CreateDesktopW endp

   ; you code

End DllEntry



[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

上传的附件:
收藏
免费 7
支持
分享
最新回复 (22)
雪    币: 6092
活跃值: (734)
能力值: ( LV4,RANK:45 )
在线值:
发帖
回帖
粉丝
2
呵呵,很牛啊。谢谢分享。现在看代码有感觉了。。
2009-5-31 11:27
0
雪    币: 635
活跃值: (101)
能力值: ( LV12,RANK:420 )
在线值:
发帖
回帖
粉丝
3
人家可以开机就创建上,你就没效了

要拦截应该拦截switchdesktop
2009-5-31 12:58
0
雪    币: 220
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
LZ原来是黑客手册编辑部的某老编呀。。。
空行有点多..........
2009-5-31 13:23
0
雪    币: 750
活跃值: (228)
能力值: ( LV9,RANK:780 )
在线值:
发帖
回帖
粉丝
5
额,谢谢指教,明白了,不过,这个软件是网吧用的,非发程序应该不可能开机执行的,不过我会修改的,我喜欢完美
另外问下阁下 RING3有好 的 隐藏进程 的 方法吗?能否共享下,谢谢!
2009-5-31 15:52
0
雪    币: 750
活跃值: (228)
能力值: ( LV9,RANK:780 )
在线值:
发帖
回帖
粉丝
6
呵呵,我和黑客手册没一点关系的额 ,巧合而已
2009-5-31 15:58
0
雪    币: 66
活跃值: (960)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7


经测试无效
上传的附件:
2009-6-2 04:47
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
能否说的详细一些?
2009-6-2 05:46
0
雪    币: 66
活跃值: (960)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
也就是它不能免疫XX虚拟桌面,
2009-6-2 08:25
0
雪    币: 256
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
2009-6-2 16:22
0
雪    币: 635
活跃值: (101)
能力值: ( LV12,RANK:420 )
在线值:
发帖
回帖
粉丝
11
理论上,虚拟桌面是不能从RING3上拦截的

RING3进程只需要简单地通过int 0x2e来调用内核函数NtUserCreateDesktop就可以创建桌面

任何RING3 HOOK都钩不住
2009-6-2 17:20
0
雪    币: 750
活跃值: (228)
能力值: ( LV9,RANK:780 )
在线值:
发帖
回帖
粉丝
12
汗,貌似这个程序也是我写的
2009-6-2 22:51
0
雪    币: 1708
活跃值: (586)
能力值: ( LV15,RANK:670 )
在线值:
发帖
回帖
粉丝
13
神奇的MJ又发话了,再次受益了....
2009-6-2 23:10
0
雪    币: 750
活跃值: (228)
能力值: ( LV9,RANK:780 )
在线值:
发帖
回帖
粉丝
14
哦 ,这样啊 ,我 做系统 时直接 把 USER32.DLL 里的函数 SwitchDesktop 修改名称了,这样可以防止绝大多数虚拟桌面又不占资源的
2009-6-2 23:14
0
雪    币: 750
活跃值: (228)
能力值: ( LV9,RANK:780 )
在线值:
发帖
回帖
粉丝
15
呵呵,是啊,我还不会怎么调用 NtUserCreateDesktop
2009-6-2 23:24
0
雪    币: 66
活跃值: (960)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16


不太清楚的,也是在看雪里看到的。
2009-6-3 05:47
0
雪    币: 1450
活跃值: (35)
能力值: (RANK:680 )
在线值:
发帖
回帖
粉丝
17
强帖强回复,
mark 一下~~
2009-6-3 18:48
0
雪    币: 750
活跃值: (228)
能力值: ( LV9,RANK:780 )
在线值:
发帖
回帖
粉丝
18
。。。。。。
2009-6-3 23:58
0
雪    币: 129
活跃值: (31)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
你的HideProcess.dll这个貌似是易语言写的吧.隐进程没什么作用吧..
2009-6-4 10:19
0
雪    币: 750
活跃值: (228)
能力值: ( LV9,RANK:780 )
在线值:
发帖
回帖
粉丝
20
  VC 编译的,在XP环境中有效,2003和以上系统貌似无效。
2009-6-4 10:53
0
雪    币: 2307
活跃值: (1013)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
21
可我这个却不行哦!!!!
上传的附件:
2009-6-5 11:33
0
雪    币: 750
活跃值: (228)
能力值: ( LV9,RANK:780 )
在线值:
发帖
回帖
粉丝
22
恩 貌似是钩子的问题 ,其他窗口程序可以
2009-6-5 21:21
0
雪    币: 235
活跃值: (23)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
23
下了你的hooklib.inc 谢谢啦
2009-6-5 22:01
0
游客
登录 | 注册 方可回帖
返回
//