标题: 如何对比系统文件,并替换.
[打印本页]
作者: babytv
时间: 2009-4-3 02:48
标题: 如何对比系统文件,并替换.
想作一个批处理..
让文件夹中的文件与%windir%\system32下的系统文件作对比.
如果系统文件被修改过,则自动替换.
用什么命令可以实现?
如:fc ctfmon.exe %windir%\system32\ctfmon.exe
--------
因为这个批处理针对的不仅仅只有一台电脑
所以用时间来对照是否有被修改过,这个方法不可行.
至于MD5,貌似可以..
另外FC对比文件时,是否会返回值呢?
如果可以,直接用FC对照后,如果两者有区别
则用当前文件替换system32目录中的文件.
[
Last edited by babytv on 2009-4-6 at 04:28 ]
作者: freezing2688
时间: 2009-4-3 06:06
先说清楚你的意思啊。- -!
以system32为例
你是想比较system32里面的文件增加还是减少了?
还是想比较system32里面的具体的某一个对象。像cmd.exe是否被修改这样的?
作者: netbenton
时间: 2009-4-3 07:50
我有个想法:
做个文件时间记录表,如果最后修改时间不同了,则说明被修改过了,然后替换。
作者: tireless
时间: 2009-4-3 08:50
http://dyersweb.com/projects/MD5/Usage: md5sum.exe [OPTIONS] <src1>[ src2...]
This utility is for displaying and verifying MD5 digests.
Using no arguments will allow you to input data directly into stdin
Argument Update v1.0.0+ RC: -v (little v) now outputs version, and -V toggles ve
rbose
OPTIONS:
-h, --help Display this help and quit.
-v, --version Output version and license info.
-p, --plain-text <"text"> Output digest for "text" and close.
Note: the next two options are just for compatibility with other md5sum utilitie
s
-t Default type: read files in text mode.
-b Output signifying that files should be read
in binary mode.
These options are for md5 checking only, -v cannot be used on its own.
-c, --check <md5file> Checks if digest matches file.*
-V, --verbose Must use with -c,--check: output in detail.
* = the md5 file should be in the same format (or of the format produced by the
Unix md5sum
tool)
EXAMPLES:
md5sum.exe archive.tar.gz archive2.tar.gz *.txt
md5sum.exe -cV digests.md5
md5sum.exe --plain-text "hello, world"
将 md5 值保存到文本:
md5sum %windir%\system32\*.exe>system32_md5.txt
之后可以直接检测:
md5sum -c system32_md5.txt
[
Last edited by tireless on 2009-4-3 at 08:57 ]
作者: ZJHJ
时间: 2009-4-3 09:48
在我编辑的 ’计算机系统维护‘ 里就有这个功能 ,主要是对‘exe、dll、inf 程序快照比较 (检查是否被病毒修改) 文件是按修改时间,文件路径,文件大小记录的。快照比较后直接得到对照结果。
http://www.cn-dos.net/forum/viewthread.php?tid=46354&fpage=1
作者: babytv
时间: 2009-4-6 04:30
Quote: |
Originally posted by freezing2688 at 2009-4-3 06:06:
先说清楚你的意思啊。- -!
以system32为例
你是想比较system32里面的文件增加还是减少了?
还是想比较system32里面的具体的某一个对象。像cmd.exe是否被修改这样的? |
|
针对某个文件.
作者: babytv
时间: 2009-4-6 04:31
Quote: |
Originally posted by ZJHJ at 2009-4-3 09:48:
在我编辑的 ’计算机系统维护‘ 里就有这个功能 ,主要是对‘exe、dll、inf 程序快照比较 (检查是否被病毒修改) 文件是按修改时间,文件路径,文件 ... |
|
你那个程序我之前也曾找到并下载测试过.
它是记录修改时间.
与我的想法不符.
作者: ZJHJ
时间: 2009-4-6 06:07
Quote: |
Originally posted by babytv at 2009-4-3 02:48:
想作一个批处理..
让文件夹中的文件与%windir%\system32下的系统文件作对比.
如果系统文件被修改过,则自动替换.
用什么命令可以实现?
如:fc ctfmon.exe ... |
|
这我就不明白了....你不是说了吗? (如果系统文件被修改过,则自动替换) 你不记录修改时间? 莫非要记录创建时间? 还是访问时间啊?.......
要检查文件是否被修改?只有记录修改时间,在你认为计算机程序正常的情况下,
按修改时间,路经,大小,程序名记录作为标准。一但你认为需要知道计算机程序是否被修改时,重新记录一次,就会自动比较出来。若文件内容被修改 1 修改时间会变. 2 文件大小也会变.
再说,文件记录下来会大于1GM. 如果被修改的程序很多,光用FC比较,或者用网络上找的简单代码来检查都不会达到满意的效果.(因为我做了这方面大量的研究)
如果你只用FC的返回值,当然就很简单.(那新装程序怎么办?)
[
Last edited by ZJHJ on 2009-4-6 at 06:57 ]
作者: slore
时间: 2009-4-6 06:56
@echo off&SETLOCAL ENABLEDELAYEDEXPANSION
Set S=D:\test
Set D=C:\test
Pushd %S%
For /f "delims=" %%i in ('dir /A-D /B %D%') Do (
FC.exe /B "%D%\%%i" "%S%\%%i" 1>nul 2>nul
if !errorlevel! EQU 0 (Echo %%i 没有差异) else (if !errorlevel! EQU 1 (Echo %%i 有所变化) else (Echo %S%\%%i 不存在))
)
Popd
Pause