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

来源 :课程教育研究·新教师教学 | 被引量 : 0次 | 上传用户:quguangming
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  摘要:本文对进程及线程运行原理上的分析,通过模拟病毒的隐藏性和寄生性,运用进程通信、进程快照、多线程等技术基础,从实例分析角度来模拟病毒特征,介绍了如何利用多进程实现程序的自我防护,最终实现程序运行的可靠性和安全性。
  关键词: 病毒;进程与线程;自我防护;程序
  中图分类号:G4
  引言
  一、计算机进程与线程
  进程是程序在计算机上的一次执行活动 ,在Windows下,进程又被细化为线程,也就是一个进程下有多个能独立运行的更小的单位。在同一个时间里,同一个计算机系统中如果允许两个或两个以上的进程处于运行状态,这便是多任务。现代的操作系统几乎都是多任务操作系统,能够同时管理多个进程的运行。我们通常使用的计算机中只有一个CPU,也就是说只有一颗心,要让它一心多用,同时运行多个进程,就必须使用并发技术。实现并发技术相当复杂,最容易理解的是“时间片轮转进程调度算法”,它的思想简单介绍如下:在操作系统的管理下,所有正在运行的进程轮流使用CPU,每个进程允许占用CPU的时间非常短(比如10毫秒),这样用户根本感觉不出来CPU是在轮流为多个进程服务,就好象所有的进程都在不间断地运行一样。
  在Windows中,进行CPU分配是以线程为单位的,一个进程可能由多个线程组成,这时情况更加复杂,但简单地说,有如下关系:
  总线程数<= CPU数量:并行运行
  总线程数> CPU数量:并发运行
  并行运行的效率显然高于并发运行,所以在多CPU的计算机中,多任务的效率比较高。但是,如果在多CPU计算机中只运行一个进程(线程),就不能发挥多CPU的优势。
  这里涉及到多任务操作系统的问题,多任务操作系统(如Windows)的基本原理是:操作系统将CPU的时间片分配给多个线程,每个线程在操作系统指定的时间片内完成。操作系统不断的从一个线程的执行切换到另一个线程的执行,如此往复,宏观上看来,就好像是多个线程在一起执行。由于这多个线程分属于不同的进程,因此在我们看来。就好像是多个进程在同时执行,这样就实现了多任务。
  二、程序的设计与实现
  1、监督过程的实现
  监督是指利用进程枚举的方法,让所有程序在运行同时不停地对进程列表进行快照,并检查目标进程是否存在的过程。 在Windows环境下通过调用ToolHelp API函数来达到枚举系统进程的目的。ToolHelp32库函数在KERNEL32.dll中,它们都是标准的API函数。
  ToolHelp32库中有各种各样的函数可以用来枚举系统中的进程、线程,以及获取内存和模块信息。其中枚举进程只需用如下三个的函数:CreateToolhelp32Snapshot()、Process32First()和Process32Next()。 使用ToolHelp32函数的第一步是用CreateToolhelp32Snapshot()函数创建系统信息“快照”。这个函数可让你选择存储在快照中的信息类型。如果你只是对进程信息感兴趣,那么只要包含TH32CS_SNAPPROCESS标志即可。CreateToolhelp32Snapshot()函数返回一个HANDLE,完成调用之后,必须将此HANDLE传给CloseHandle()。接下来是调用一次Process32First函数,从快照中获取进程列表,然后重复调用Process32Next,直到函数返回FALSE为止。这样将遍历快照中进程列表。这两个函数都带两个参数,它们分别是快照句柄和一个PROCESSENTRY32结构。
  2、报警进程的实现
  一个程序中复制数据的时候,实际上是将这些数据放入了内存,相反,在另一个程序中粘贴数据时实际上是从内存取出数据,这些都是通过使用剪贴板来实现的。使用剪贴板的主要函数有:打开剪贴板OpenClipboard(),不管是对剪贴板的读还是写,都要首先调用此函数,以判断是否可以对剪贴板进行操作。此函数是BOOL型的,如果调用成功就返回非零,否则返回零。清空剪贴板EmptyClipborad(),每次对剪贴板的写入操作之前,都应该调用此函数,这个函数的作用不仅是清空剪贴板,而且起到获得剪贴板的使用权的作用。同样,这个函数也是BOOL型的,如果调用成功就返回非零,否则返回零。对剪贴板写入SetClipboardData(UINT uFormat,HANDLE hMem),这个函数有两个参数,第一个参数用来表示写入剪贴板数据的格式,第二个参数接收一个句柄值,在这里它接收一个指向内存对象的句柄,这个内存对象中存放着准备写入剪贴板的数据内容。在调用SetClipboardData(UINT uFormat,HANDLE hMem)之前还需要调用GlobalAlloc(UINT uFlags,SIZE_T dwSytes)这样一个函数,它专门用来为将要写入的数据分配一块内存空间。这个函数接收两个参数,第一个参数表示如何来分配内存空间,这里我们将它设置为GMEM_MOVEABLE,表示动态分配内存。第二个参数是表示分配内存空间的大小。GlobalAlloc(UINT uFlags,SIZE_T dwSytes)返回一个句柄,我们无法使用句柄来间接的将数据放入内存,这时就需要调用另一个函数GlobalLock(HGLOBAL hMem),这个函数获得一个内存对象的句柄,将这块内存加锁,返回一个指针,这时我们就可以给指针所指向的这块内存写入数据了。这个函数使用一个内存计数,计数器基数为零,每调用一次计数器加一,所以每调用一次的同时还需要调用另外一个函数GlobalUnlock(HGLOBAL hMem)来给计数器减一,相当于取消对这块内存的锁定。程序实现报警功能就是在枚举进程之后发现目标进程被终止,从而在剪贴板中写入信息的过程。
  3、监听进程的实现
  所谓监听,就是报警的反方向,即从剪贴板中读出信息。从剪贴板读取数据的函数GetClipboardData(UINT uFormat)。这个函数只接收一个参数,参数指定读取的格式。读取信息之后,我们还要對信息进行if判断,如果信息是我们预留的某个进程被结束的话,我们就启动保护措施。
  4、防护和隐藏进程的实现
  这里的保护是指监听程序对其他程序的保护,方法非常简单,只需要利用WinExec函数来实现目标进程的启动就可以。而隐藏是指监听程序自身的隐藏,只要在OnPaint()函数里调用ShowWindow(SW_HIDE)函数就可以了,同时将监听程序命名为smss,就可以避免其被强行终止。
  三、结束语
  由于网络及信息资源的特殊性质,决定了信息安全问题的客观存在。本程序的设计是模仿病毒的一些特性实现。它体现了程序的隐藏、保证了程序的安全运行,利用系统的漏洞实现不被其他进程终止。对一般程序自我保护的设计有很好的借鉴参考意义。
其他文献
[摘要]大学新生入学后,会有一个校园的适应期。这个适应期有长有短,在这期间,每个大一新生都要开始慢慢接受新的校园环境、学习方式、人际关系等的种种变化。为解决新生适应问题,针对新生进行入学教育,从几个方面对新生开展不同形式类型的活动,以便能更好的融入大学环境。  [关键词]新生;适应;入学教育内容  中图分类号:G4  一、开展入学教育的必要性  开学伊始,来自全国各地的学生开始陆续到奋斗已久的大学
从事涉农报道近20年,几乎天天与农村打交道,与农民结下了不解之缘,使我们深深体会到,脚板底下出新闻,只有真正深入下去,把农民当朋友、当作自己的兄弟姐妹、当作自己的衣食父
目的:探究分析呼吸科六西格玛管理在青藏高原慢阻肺雾化吸入治疗应用效果.方法:选取我院自2015年9月1日-2016年5月1日收治的1465例慢性阻塞性肺疾病(COPD)需雾化吸入治疗的患
孤独与艺术之间有着密切的联系,复杂、多样的艺术产生经常与孤独等遭遇有着密切的联系,同时也有很多艺术作品也会以孤独为主题,呈现出不同的色彩,一些是充满向往,一些则是充
目的:分析花青素软胶囊(葡萄籽花青素提取物)逆转维持性血液透析糖尿病肾病患者左心室肥厚与减轻炎症和氧化应激状态的关系.方法:选取2012年6月-20]4年6月我院血透室维持性血
钢铁工业是我国国民经济的支柱产业,我国工业化和城市化的进程带动了钢铁工业的持续高速发展,但由于在发展中对能源的过度开发和对生态环境破坏式的利用造成了钢铁生产主要依
三岛由纪夫的代表作《金阁寺》讲述了一个天生口吃,形容丑陋的少年从崇拜“金阁”到焚烧“金阁”的故事,文章改编自真实事件,却又因为融入了作家对美与存在,虚妄与真实,悲剧
手拍醒木莫高声,轻挥折扇道明清.rn生来便是参天样,评话鼻祖柳敬亭.rn大说书家柳敬亭是人所共仰的一代曲艺宗师,但他其实不姓柳,姓曹,叫曹逢春,那怎么又姓柳的呢?这就值得咱
期刊
目的:探讨经阴道彩超对卵巢纤维瘤的诊断结果,并分析其应用价值.方法:选取病例基本条件为病理证实的21例卵巢纤维瘤患者,术前经阴道彩超声像图特点进行回顾性分析.结果:21例
随着经济全球化的不断深入,企业越来越致力于其核心竞争力和高附加值的主业,外包其他业务。因此选择合适的供应商并与之建立战略合作伙伴关系就显得至关重要。学术界和企业界