病毒免疫控件 SelfAV V1.1 yygw呕血制作!(50分)

  • 主题发起人 主题发起人 yygw
  • 开始时间 开始时间
Y

yygw

Unregistered / Unconfirmed
GUEST, unregistred user!
应用程序病毒免疫及自修复的实现
控件 SelfAV V1.1 For Delphi 说明
有不少专业软件都带有校验保护功能,在自身被修改后能报警提示,有的软件
(特别是杀毒软件)还提供修复功能。
对一般的软件开发者而言,这种技术的实现是较为困难的,本人通过对一些带
有这种功能的软件进行分析,实现了应用程序的病毒免疫及自修复,并制作了一个
Delphi控件,希望更多的软件开发者能在制作的软件中加入免疫功能,让病毒无所
遁形。
首先,应用程序在运行时应该能够对自身作校验,一般采用和校验或CRC校验
等方式。
第一个问题是:原始校验和应该保存在哪?
途径不外两种:应用程序自身或应用程序外部。保存在外部虽然方便,却是不
安全的,我选择了前者。
随后而来的问题是:校验和怎样放入应用程序以及应用程序怎样找到它?
附加的问题是:校验和在放入应用程序后,文件发生了变化,怎样消除这种变
化带来的影响?
我采用了一种取巧的方法,在源码中定义一个常量记录,首先定义十六字节随
机数作数据标志,再在它们后面定义存放校验和的量,这样只需要在编译出的程序
中查找数据标志,标志后的内容就是校验和存放的地址。
实际编程中,我定义了一个位置量、两个CRC校验和量,前一个存放位置量前
面数据的校验和,后一个存放这个数据记录后面的校验和。这样,在应用程序中只
要直接引用常量记录中的数据位置值和校验和,分两次对自身作CRC校验就可以检
测自身的任何变化。
当然,在每次编译之后,都必须用专门的软件向应用程序中写入数据位置、校
验和等信息。事实上,在我写的第一版控件中,正是这样作的。不过,为了制作一
个傻瓜式的控件,在第二版中我用了一个新的方法,后面会说到。
在解决了文件校验的问题后,再考虑自修复功能。
一开始我总想找一种可以直接修改的方法,这当然是不可能的。有朋友提议用
批处理,但批处理存在的问题是运行时有个Dos窗口很讨厌,而且如果批处理运行的
时候应用程序还没完全退出,是无法进行恢复的。
于是,我写了一个小程序AVRestore.exe,专用来进行恢复。这个程序是用
Delphi写的,只有20K(Delphi也能写出这么小的程序??事实就是如此)。我把这
个程序放入资源文件,当应用程序在发现自身被修改后,自动把它保存到临时目录
中,并传递备份文件名和可执行文件名给它,然后运行AVRestore,退出系统,由它
进行修复工作,修复完成后再重新启动应用程序。
前面提到校验和自动写入的问题,我也是这样作的:写一个小程序AVWriter.exe,
用来向应用程序写入校验和,并放入资源文件。应用程序第一次运行时,内部校验
和是0,于是自动将AVWriter.exe从资源中写到临时目录,并执行它,退出系统,
处理完成后再重新启动应用程序。
SelfAV V1.1控件的工作流程如下:
(1)、控件初始后,检查临时目录中是否有AVRestore.exe和AVWriter.exe,如
有则删除。
(2)、如果数据位置和校验和为0,表示程序刚编译,于是将AVWriter.exe从资
源中写到临时目录,用应用程序名作参数运行AVWriter,并退出当前程序。
AVWriter运行后,先以只读方式打开程序文件,找到随机数据标志后,将文件分前、
后两部分作CRC校验,得出两个校验和。再以写方式打开文件,将数据写入应用程序,
最后重新启动应用程序。
(3)、如果数据位置和校验和不为0,则打开应用程序自身,用数据位置值将文
件分前、后两部分作CRC校验并与原始值比较。
(4)、若校验通过,证明文件未被修改。接着在当前目录中查找备份文件,如果
没有则产生一备份文件(隐藏文件),并在备份文件头中写入整个文件的CRC校验和,
然后退出检测。
(5)、若校验失败,则检查是否有备份文件及备份文件是否完好。如果设置了
AutoRepair,弹出一个对话框,告诉用户文件被非法修改。
A、如果备份文件完好且用户要求修复,则将AVRestore.exe从资源中写到临
时目录,用应用程序名和备份文件名作参数运行它,再退出应用程序。AVRestore运行
后,先检查备份文件是否完好(最严格的保障),再删除应用程序,从备份文件中进
行恢复。恢复成功,重新启动应用程序。
B、如果备份文件不存在或校验失败,触发OnCRCError事件,并将CanRepair
置False,由程序开发人员处理(不处理也可)。
(6)、如果程序开发人员不想使用控件自带的修复功能,把AutoRepair置False,
控件将直接触发OnCRCError事件,由开发人员自行处理(控件有一个Repair方法可进
行修复)。

对一般用户来说,你并不需要了解上面的东西,SelfAV V1.1是一个完全智能化
的控件,你要做的仅仅是下载一个控件,安装后把它往主窗体上一放就行了,其它的
就交给它自己处理好了。
如果你打算在免费软件中使用该控件,这一切(包括源码)都可以向控件的作
者索取,感兴趣的朋友请与我联系:yygw@yeah.net。
 
能不能放上来给大家下载呀?
 
有兴趣,呵呵,能发一份?
 
>>(1)、控件初始后,检查临时目录中是否有AVRestore.exe和AVWriter.exe,
真正厉害的病毒,在你控件初始化之前就已经取得了控制权,并且开始感染
别的文件了,你这不是自欺欺人吗?
 
况且,如果病毒感染了AVRestore.exe怎么版?再写一个AVRestore1.exe?
 
感兴趣!能否公开源代码?
 
总之,想通过控件级的代码实现病毒免疫是不可能的,因为你的控件级别太低了,
没等他校验CRC病毒就已经开始执行了。
 
关注,关注!
伸手要源码。
 
给个网址请!
 
同意小毛毛的说法。
如果病毒是专门针对你这种防毒方法的,他完全可以自带一个向应用程序写入校验和的
东东,和一个备份的西西。
<h1>总之,道高一尺,魔高一丈!</h1>
 
To小毛毛:
1、AVRestore.exe和AVWriter.exe不是用来杀毒的,前者用来把备份文件写回到应用程序,
只在程序发现被修改后,才从编译在应用程序的资源中写到临时目录运行。后者用来向刚
编译过第一次运行的应用程序中写入初始校验和。启动时将它们删除只是为了节省空间而
已。
2、这不是一个防毒、杀毒软件,只是一个被动式的控件,在应用程序被修改后报警并自修
复的控件。请问在已知的带自校验的软件,OICQ、ReadBook。。。有哪个不是这样处理的?
只不过他们是自已的代码,没有哪个病毒会专为它们设计一段代码罢了。
3、系统中是否有病毒,并不影响我的应用程序运行,只要应用程序有任何一个Bit被修改,
CRC校验和就会出错,如果有什么新的病毒针对我的代码作了处理,我感到荣兴。而且在下
一版中我会加入随机标志头功能,让病毒更难获得CRC值在文件中的位置,而对它作修改。
4、我写这个控件只是想让更多的人提高反毒意识,完全免费,公开所有源码,如果你看懂
了源码,完全可以改写它、完善它。
如果对它有兴趣,请到下面的地址去下:
http://go3.163.com/~dancewithmoon/
有什么问题请与我联系:yygw@yeah.net。大富翁的速度太慢了!!
 
发我一份吧!
 
多人接受答案了。
 
发给我一份吧
谢谢
 
兄弟给我一份啊.
呵呵来晚了.
ch_yahuu@163.com
先谢谢了.
 
我也要!newwhua@163.com
 
楼主辛苦了!
发给我一份吧,谢谢!
qsy@qzwin.com
 
最新版本在这里下载:
http://download.yygw.net/SelfAV1.23.zip
可对所有EXE文件加免疫头的工具及源码:
http://download.yygw.net/PECrc32_0.88.exe
http://download.yygw.net/PECrc32_Src_0.88.zip
我的主页:
http://www.yygw.net
 
后退
顶部