多进程环境下程序自我防护病毒实现

多进程环境下程序自我防护病毒实现

ID:32634983

大小:55.54 KB

页数:5页

时间:2019-02-14

多进程环境下程序自我防护病毒实现_第1页
多进程环境下程序自我防护病毒实现_第2页
多进程环境下程序自我防护病毒实现_第3页
多进程环境下程序自我防护病毒实现_第4页
多进程环境下程序自我防护病毒实现_第5页
资源描述:

《多进程环境下程序自我防护病毒实现》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、多进程环境下程序自我防护病毒实现摘要:本文对进程及线程运行原理上的分析,通过模拟病毒的隐藏性和寄生性,运用进程通信、进程快照、多线程等技术基础,从实例分析角度来模拟病毒特征,介绍了如何利用多进程实现程序的自我防护,最终实现程序运行的可靠性和安全性。关键词:病毒;进程与线程;自我防护;程序中图分类号:G4引言一、计算机进程与线程进程是程序在计算机上的一次执行活动,在Windows下,进程又被细化为线程,也就是一个进程下有多个能独立运行的更小的单位。在同一个时间里,同一个计算机系统中如果允许两个或两个以上的进程处于运行状态,这便是多任务。现代的操作系统几乎都是多任务操作系统,能够同

2、时管理多个进程的运行。我们通常使用的计算机中只有一个CPU,也就是说只有一颗心,要让它一心多用,同时运行多个进程,就必须使用并发技术。实现并发技术相当复杂,最容易理解的是“时间片轮转进程调度算法”,它的思想简单介绍如下:在操作系统的管理下,所有正在运行的进程轮流使用CPU,每个进程允许占用CPU的时间非常短(比如10毫秒),这样用户根本感觉不出来CPU是在轮流为多个进程服务,就好象所有的进程都在不间断地运行一样。在Windows中,进行CPU分配是以线程为单位的,一个进程可能由多个线程组成,这时情况更加复杂,但简单地说,有如下关系:总线程数CPU数量:并发运行并行运行的效率显然

3、高于并发运行,所以在多CPU的计算机中,多任务的效率比较高。但是,如果在多CPU计算机中只运行一个进程(线程),就不能发挥多CPU的优势。这里涉及到多任务操作系统的问题,多任务操作系统(如Windows)的基本原理是:操作系统将CPU的时间片分配给多个线程,每个线程在操作系统指定的时间片内完成。操作系统不断的从一个线程的执行切换到另一个线程的执行,如此往复,宏观上看来,就好像是多个线程在一起执行。由于这多个线程分属于不同的进程,因此在我们看来。就好像是多个进程在同时执行,这样就实现了多任务。二、程序的设计与实现1、监督过程的实现监督是指利用进程枚举的方法,让所有程序在运行同时不

4、停地对进程列表进行快照,并检查目标进程是否存在的过程。在Windows环境下通过调用ToolHelpAPI函数来达到枚举系统进程的目的。ToolHelp32库函数在KERNEL32.dll中,它们都是标准的API函数。ToolHelp32库中有各种各样的函数可以用来枚举系统中的进程、线程,以及获取内存和模块信息。其中枚举进程只需用如下三个的函数:CreateToolhelp32Snapshot()、Process32First()和Process32Next()。使用ToolHelp32函数的第一步是用CreateToolhelp32Snapshot()函数创建系统信息“快照”

5、。这个函数可让你选择存储在快照中的信息类型。如果你只是对进程信息感兴趣,那么只要包含TH32CS_SNAPPR0CESS标志即可。CreateToolhelp32Snapshot()函数返回一个HANDLE,完成调用之后,必须将此HANDLE传给CloseHandle()。接下来是调用一次Process32First函数,从快照中获取进程列表,然后重复调用Process32Next,直到函数返回FALSE为止。这样将遍历快照中进程列表。这两个函数都带两个参数,它们分别是快照句柄和一个PR0CESSENTRY32结构。2、报警进程的实现一个程序中复制数据的时候,实际上是将这些数据

6、放入了内存,相反,在另一个程序中粘贴数据时实际上是从内存取出数据,这些都是通过使用剪贴板来实现的。使用剪贴板的主要函数有:打开剪贴板OpenClipboard(),不管是对剪贴板的读还是写,都要首先调用此函数,以判断是否可以对剪贴板进行操作。此函数是BOOL型的,如果调用成功就返回非零,否则返回零。清空剪贴板EmptyClipborad(),每次对剪贴板的写入操作之前,都应该调用此函数,这个函数的作用不仅是清空剪贴板,而且起到获得剪贴板的使用权的作用。同样,这个函数也是B00L型的,如果调用成功就返回非零,否则返回零。对剪贴板写入SetClipboardData(UINTuFo

7、rmat,HANDLEhMem),这个函数有两个参数,第一个参数用来表示写入剪贴板数据的格式,第二个参数接收一个句柄值,在这里它接收一个指向内存对象的句柄,这个内存对象中存放着准备写入剪贴板的数据内容。在调用SetClipboardData(UINTuFormat,HANDLEhMem)之前还需要调用GlobalAlloc(UINTuFlags,SIZE_TdwSytes)这样一个函数,它专门用来为将要写入的数据分配一块内存空间。这个函数接收两个参数,第一个参数表示如何来分配内存空间,这里我

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。