首页
论坛
课程
招聘
[原创]HOOK API续之模拟覆盖法 实例 AntiDesktop
2009-5-31 10:02 10567

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

2009-5-31 10:02
10567
【文章标题】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




调用部分


.486 
.model flat,stdcall 
option casemap:none 

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;  Include 数据
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
include windows.inc 
include kernel32.inc 
includelib kernel32.lib 
include user32.inc 
includelib user32.lib 
include	 debug.inc


;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;  数据段
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

.data 


szMutex db "http://hi.baidu.com/nohacks",0


.data?

hInstance HINSTANCE ?  
CommandLine LPSTR ? 


;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;  代码段
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>


.code 


;************************************************************

GetApi proc DllNameAddress:DWORD,ApiNameAddress:DWORD

invoke  GetModuleHandle,DllNameAddress     ;取DLL模块句柄
  
 .if eax==NULL
 
 invoke LoadLibrary ,DllNameAddress    ;加载DLL
 
  .endif
 
invoke GetProcAddress,eax,ApiNameAddress  ;取API地址
  
mov eax,eax
 
ret

GetApi endp

whileStar PROC

LOCAL @stMsg:MSG

    .while  TRUE
      invoke  GetMessage,addr @stMsg,NULL,0,0
           
      .break  .if (!eax)
            
            invoke  TranslateMessage,addr @stMsg
      invoke  DispatchMessage,addr @stMsg
    .endw

    
ret


whileStar endp


;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;  程序开始
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>


start:
  invoke GetModuleHandle,NULL  
   mov  hInstance,eax
  
  invoke GetCommandLine   
  
   mov CommandLine,eax                                        
  
    invoke CreateMutex,NULL,FALSE,addr szMutex
    
        invoke GetLastError
             
        
       .IF eax == ERROR_ALREADY_EXISTS
        
                       
         invoke  ExitProcess,NULL
         
        .endif 
 
 invoke  GetApi,CTEXT("antidesktop.dll"),CTEXT("InstallHook")
    
    .if eax!=0
            call eax                              
    	
    .endif
 
  invoke  GetApi,CTEXT("HideProcess.dll"),CTEXT("HideProcess")
    
    .if eax!=0
    	
    	   call eax                              ;隐藏进程
    	
    .endif
       
invoke  whileStar  ;进入消息循环,直到收到退出消息
 
invoke  ExitProcess,NULL


;********************************************************************

end  start




编译环境: RADASM+MASM9.0

[培训] 优秀毕业生寄语:恭喜id咸鱼炒白菜拿到远超3W月薪的offer,《安卓高级研修班》火热招生!!!

上传的附件:
收藏
点赞0
打赏
分享
最新回复 (22)
雪    币: 60
活跃值: 活跃值 (479)
能力值: ( LV4,RANK:45 )
在线值:
发帖
回帖
粉丝
君君寒 活跃值 2009-5-31 11:27
2
0
呵呵,很牛啊。谢谢分享。现在看代码有感觉了。。
雪    币: 459
活跃值: 活跃值 (54)
能力值: ( LV12,RANK:420 )
在线值:
发帖
回帖
粉丝
qihoocom 活跃值 9 2009-5-31 12:58
3
0
人家可以开机就创建上,你就没效了

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


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

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

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


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