主页 PC知识 网管技术 黑客帝国 安全技术 开放系统 程序设计 搜索 技术论坛

 

相关联接
 
RHU本级分类

病毒防治
漏洞公告
基础入门
Windows 系统安全
Linux 系统安全
防火墙
IDS/IPS
数据库及Web安全

 
RHU阅读排行
·在web上如何自动安装用户证书及根证书
·Web环境下SQL注入攻击的检测与防御
·对称、非对称和HASH加密的应用
·数据库防入侵探究
·专家谈补丁管理 不是毁掉而是拯救数据库
·十大绝招保护SQL Server数据库安全
·FreeBSD下构建安全的Web服务器
·数据库系统防黑客入侵技术综述
·保护(IIS)web服务器的15个技巧
·程序中生成证书请求的两种方法(源码)

 
 
RHU最新文章
·教你轻松掌握如何保护MySQL中的重要数据
·安全基础之IIS 6 的 PHP 最佳配置方法
·安全探讨之用Win32汇编写双进程守护
·数据安全之MySQL安全的二十三条军规
·SQL Server的内存不断增加问题探讨
·九大措施安全配置SQLServer2000数据库
·网站服务器通用和专用保护方法分析比较
·实战安全设置WEB专用服务器技巧
·WEB专用服务器的安全设置的实战技巧
·数据安全防护之打造安全.mdb数据库

 
 
RHU相关搜索









 
 
RHU广而告之

 
 
>您的位置:首页 -> 安全技术-> 数据库及Web安全
安全探讨之用Win32汇编写双进程守护

作者:RHU-TAC编辑员 来自:RHU网络采集 时间:2006-12-7 双击滚屏 收藏本页 字体:


点击 查看RHU2004全年文章


前段时间在看雪论坛逛的时候,有人问说怎么实现双进程守护,其中有人说他用VC++实现了,我就找他要了一份源码。我看了一下,觉得也挺简单的,所以就用win32汇编也写了一份,但还不是很完美。

为什么说不完美,因为我写完后在测试的过程中发现,如果利用鼠标给这个对话框发送WM_CLOSE消息的话,进程守护就很完美,对话框窗口是关不掉的。但是如果利用任务管理器来结束的话,那就很容易了,原因是因为获取的快照是相当于“历史”。而用任务管理器结束掉一个进程后,快照发生改变。就好比我们照像,照好的相片相当于第一次快照,当那个拍照的地方发生改变,我们还根据相片来辩认着拍照的地方。

下面就是相关的源码。

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;此程序应该命名为22222222.exe
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.386
.model flat, stdcall
option casemap:none
include windows.inc
include kernel32.inc
include user32.inc

includelib kernel32.lib
includelib user32.lib
DLG_MAIN   equ     1

.data
szFileName db '111111111.exe',0 ;定义要守护的进程名

.data?
Pid dd ?
hSnapShot dd ?
stProcess PROCESSENTRY32 <?>
stStartUp   STARTUPINFO     <?>
stProcInfo   PROCESS_INFORMATION   <?>
hInstance   dd     ?
.code
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;获取快照
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_Snapshot proc
@@:
invoke   RtlZeroMemory,addr stProcess,sizeof stProcess;有必要清空,不然进程会重复
mov   stProcess.dwSize,sizeof stProcess
invoke   CreateToolhelp32Snapshot,TH32CS_SNAPPROCESS,addr stProcess;开始获取快照
mov   hSnapShot,eax ;保存到句柄
invoke   Process32First,hSnapShot,addr stProcess;列举进程
  .while   eax
invoke   lstrcmp,addr szFileName,addr stProcess.szExeFile;对比是否有111111111.exe
    .if eax == NULL ;有则返回
ret
    .endif
    invoke   Process32Next,hSnapShot,addr stProcess ;继续列举
  .endw
call _Process ;如果没发现111111111.exe进程,就执行程序创建
loop @B
ret
_Snapshot endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_Process proc
    invoke   GetStartupInfo,addr stStartUp
    invoke   CreateProcess,addr szFileName,NULL,NULL,NULL,NULL,\
        NORMAL_PRIORITY_CLASS,NULL,NULL,addr stStartUp,addr stProcInfo
ret
_Process endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_ProcDlgMain   proc   uses ebx edi esi hWnd,wMsg,wParam,lParam

    mov   eax,wMsg
    .if   eax == WM_CLOSE ;关闭窗口的消息列队
        invoke   EndDialog,hWnd,NULL
    .elseif   eax == WM_INITDIALOG ;初始化各个消息
        invoke   SendMessage,hWnd,WM_SETICON,ICON_BIG,eax
        call _Snapshot
    .elseif   eax == WM_COMMAND
        mov   eax,wParam
    .else
        mov   eax,FALSE
        ret
    .endif
    mov   eax,TRUE
    ret
_ProcDlgMain   endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
start:
  @@:
    invoke   GetModuleHandle,NULL
    mov   hInstance,eax
    invoke   DialogBoxParam,hInstance,DLG_MAIN,NULL,offset _ProcDlgMain,NULL
  loop @B
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
end start 

[Copy to clipboard]




CODE:

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;此程序应该命名为111111111.exe
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.386
.model flat, stdcall
option casemap:none
include windows.inc
include kernel32.inc
include user32.inc

includelib kernel32.lib
includelib user32.lib
DLG_MAIN   equ     1

.data
szFileName db '22222222.exe',0

.data?
Pid dd ?
hSnapShot dd ?
stProcess PROCESSENTRY32 <?>
stStartUp   STARTUPINFO     <?>
stProcInfo   PROCESS_INFORMATION   <?>
hInstance   dd     ?
.code
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_Snapshot proc
@@:
invoke   RtlZeroMemory,addr stProcess,sizeof stProcess
mov   stProcess.dwSize,sizeof stProcess
invoke   CreateToolhelp32Snapshot,TH32CS_SNAPPROCESS,addr stProcess
mov   hSnapShot,eax
invoke   Process32First,hSnapShot,addr stProcess
  .while   eax
invoke   lstrcmp,addr szFileName,addr stProcess.szExeFile;对比是否有22222222.exe
    .if eax == NULL ;有则返回
    ret
    .endif
    invoke   Process32Next,hSnapShot,addr stProcess
  .endw
call _Process ;如果没有,就执行程序创建
loop @B
ret
_Snapshot endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_Process proc
    invoke   GetStartupInfo,addr stStartUp
    invoke   CreateProcess,addr szFileName,NULL,NULL,NULL,NULL,\
        NORMAL_PRIORITY_CLASS,NULL,NULL,addr stStartUp,addr stProcInfo
ret
_Process endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_ProcDlgMain   proc   uses ebx edi esi hWnd,wMsg,wParam,lParam

    mov   eax,wMsg
    .if   eax == WM_CLOSE
        invoke   EndDialog,hWnd,NULL
    .elseif   eax == WM_INITDIALOG
        invoke   SendMessage,hWnd,WM_SETICON,ICON_BIG,eax
        call _Snapshot
    .elseif   eax == WM_COMMAND
        mov   eax,wParam
    .else
        mov   eax,FALSE
        ret
    .endif
    mov   eax,TRUE
    ret

_ProcDlgMain   endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
start:
  @@:
    invoke   GetModuleHandle,NULL
    mov   hInstance,eax
    invoke   DialogBoxParam,hInstance,DLG_MAIN,NULL,offset _ProcDlgMain,NULL
    ret
  loop @B   
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
end start

OVER

[1] 页 RedHyphone.Union 投稿邮箱
[特别声明]:
本站文章大多搜索转载自网络中,如果侵犯了您的权利,请告之我们。本站将立即删除。
本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有。
查看评论】【向上滚屏】【关闭窗口】【 打印
-相关文章
  • 微软 DebugView Dbgv.sys内核模块本地权限升漏洞
  • 安全基础知识 最强0到33600端口详解
  • 病毒注入winlogon 使Windows文件保护失效
  • 微软11月安全更新程序 ISO 映像
  • 注册表编辑器+权限控制,彻底废掉Autorun
  • -文章评论 (关闭)
    ·还没有相关的评论!

    网上大名:
    红旋风网络技术联盟 RHUTech.Union
     
    Copyright © 2000-2007 RedHyphone.Union All Rights Reserved. 红旋风联盟版权所有.皖ICP备05011033号
    中国红旋风网络技术联盟 | www.RedHyphone.net
    Mailto:Redhyphone@gamil.com