123   1  /  3  页   跳转

编了一个保护杀毒软件的程序

编了一个保护杀毒软件的程序

看了这几次什么威金、熊猫烧香等病毒肆虐后,心中比较郁闷,说实在说这些病毒水平的确不高呀,都是采用改写注册表(而且是个土得不能再土的键值,呵呵)来实现自启动的,感染PE文件的方式更是让人笑掉大牙(拜托先学习一下PE文件头、内存重定位、查找API地址后再编PE病毒吧),本来杀毒软件是可以发现并报警的,但问题是狡猾的病毒在运行时已经把杀毒软件Kill了,于是俺闲着没事编了个程序来保护一下杀毒软件不被杀,原理也很简单,就是HOOK了kernel32.dll中的TerminateProcess函数,抛砖引玉,高手莫笑哈!以下是源代码!masm32编译成一个DLL文件!自已编个文件调用也可,用Rundll32.exe dll.dll,InstallHook调动也可。俺的程序没法上传,打包成了zip文件传在另一处,呵呵。目前仅支持Xp,不支持9X哈。
附件地址:http://b.py99.net/zip/f?v=20072/28945164.zip
.586
.model flat,stdcall
option casemap:none
include \masm32\include\windows.inc
include \masm32\include\kernel32.inc
includelib \masm32\lib\kernel32.lib
include \masm32\include\user32.inc
includelib \masm32\lib\user32.lib

HOOKAPI struct
a  byte ?
PMyapi DWORD ? 
d BYTE ? 
e BYTE ?
HOOKAPI ends

WriteApi proto :DWORD ,:DWORD,:DWORD,:DWORD
MyAPI proto  :DWORD  ,:DWORD
GetApi proto  :DWORD,:DWORD

.data
hInstance dd 0
WProcess dd 0
hacker HOOKAPI <>
CommandLine LPSTR ?

Papi1 DWORD ?
Myapi1 DWORD ?
ApiBak1 db 10 dup(?)
DllName1  db "kernel32.dll",0     
ApiName1  db "TerminateProcess",0
mdb db "下面的程序妄图终止别的进程,要保持阻止吗?",0


.data?
hHook dd ?
hWnd dd ?

.code

DllEntry proc hInst:HINSTANCE, reason:DWORD, reserved1:DWORD
 
 
.if reason==DLL_PROCESS_ATTACH   
        push hInst
        pop hInstance

invoke GetCommandLine 
mov CommandLine,eax                                       



mov hacker.a,0B8h    ;mov eax,
;mov hacker.d PMyapi  ;0x000000
mov hacker.d,0FFh    ;jmp
mov hacker.e, 0E0h    ;eax


invoke  GetCurrentProcess                                  ;取进程伪句柄

mov WProcess ,eax
   
invoke GetApi,addr DllName1,addr ApiName1                    ;取API地址
 
mov Papi1,eax                                              ;保存API地址

invoke ReadProcessMemory,WProcess,Papi1,addr ApiBak1,8,NULL  ;备份原API的前8字节

mov hacker.PMyapi,offset MyAPI  ;0x0000,这里设置替代API的函数地址

invoke WriteApi,WProcess,Papi1, addr hacker ,size HOOKAPI    ;HOOK API

.endif

.if  reason==DLL_PROCESS_DETACH

invoke WriteApi,WProcess,Papi1, addr ApiBak1 ,8              ;还原API

.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 
    invoke SetWindowsHookEx,WH_GETMESSAGE,addr GetMsgProc,hInstance,NULL
    invoke WriteApi,WProcess,Papi1, addr hacker ,sizeof HOOKAPI
    mov hHook,eax 
    ret
InstallHook endp

UninstallHook proc
    invoke UnhookWindowsHookEx,hHook
  invoke WriteApi,WProcess,Papi1, addr ApiBak1 ,8
  ret
UninstallHook endp

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




WriteApi proc Process:DWORD ,Papi:DWORD,Ptype:DWORD,Psize:DWORD

LOCAL mbi:MEMORY_BASIC_INFORMATION
LOCAL msize:DWORD


;返回页面虚拟信息
invoke VirtualQueryEx,Process, Papi,addr mbi,SIZEOF MEMORY_BASIC_INFORMATION

;修改为可读写模式

invoke VirtualProtectEx,Process, mbi.BaseAddress,8h,PAGE_EXECUTE_READWRITE,addr mbi.Protect

;开始写内存

invoke  WriteProcessMemory,Process, Papi, Ptype,Psize ,NULL

PUSH eax

;改回只读模式

invoke VirtualProtectEx,Process,mbi.BaseAddress,8h,PAGE_EXECUTE_READ,addr mbi.Protect

pop eax

ret

WriteApi endp



;替代的API,参数要和原来一样

MyAPI proc  dwa:DWORD  , dwb:DWORD                     

invoke MessageBox, NULL,  CommandLine, addr mdb, MB_YESNO      ;弹出信息框选择是否阻止

.if eax==7                                                  ;如果选择否

invoke WriteApi,WProcess,Papi1, addr ApiBak1 ,8              ;先还原API

invoke TerminateProcess, dwa, dwb                          ;再调用API

invoke WriteApi,WProcess,Papi1, addr hacker ,sizeof HOOKAPI  ;调用完后再改回来
 
.endif

mov eax,TRUE
ret

MyAPI endp

End DllEntry
最后编辑2007-03-06 17:09:55
分享到:
gototop
 

不是用C编的,用的汇编,开发工具为MASM32。

程序先修改Kernel32.dll的TerminateProcess函数前八位字节,jmp到MyApi子程序,通过这个原理来HookApi函数的!
gototop
 

SSM是System Safety Monitor吧?

还可以,不过Hook了太多的Api,实在是很拖速度呀!

俺其实很少用杀毒软件,有Ghost这样的好东西不就够了么,呵呵。
gototop
 

为什么这个论坛不允许上传zip文件,怕俺们上传一个ASP木马的说?
gototop
 

不行的,很多合法程序都会调用RegOpenKeyEx,CreateFile等函数,如果全部HOOK了,用户会被不停出现的提示对话框烦死的!想想SSM、瑞星不停弹出的对话吧,呵呵。
gototop
 

俺倒认为远程注入CreateRemoteThread()函数除了病毒、木马会用一下,别的程序似乎都没有用过,真不知道是拿来做什么的?
gototop
 

退出后就不能保护了,要自动启动你放到启动组里不就可以了么?
俺总觉得改注册表不绿色呀,呵呵!
gototop
 

熊猫烧香会删除*.gho文件嘛,不过俺早就改了名了,呵呵。
而且那种把文件名第一个字节改为E5的简单删除方法对于俺来说根没有删除完全一样!
gototop
 

修改导入表HookApi的办法Jeffrey Richter在《Windows核心编程》中曾提到过,但感觉容易出错代码量也很大,俺很少使用!
gototop
 

俺知道有很多程序不是用TerminateProcess来结束进程的,所以丢个程序来抛砖引玉先!呵呵
SSDT貌似是NT的技术,Win9x下难道也是?
gototop
 
123   1  /  3  页   跳转
页面顶部
Powered by Discuz!NT