`
chenhua_1984
  • 浏览: 1253864 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

一种文件完整性校验的方法

阅读更多

          通常,运维人员会在系统上安装杀毒软件,用来做病毒防护。其实病毒最基本的特征是对文件系统的部分或则全部做了改动,假如我们开发这样一个程序,定时对文件系统的改动进行计算,定期或不定期生成报告或发送告警信息,也一样可以实现防病毒功能,主要可以用来检测系统是否被改动过。

 

        这个功能类似Linux系统上一款比较著名的软件tripwire ,用来检测Linux的文件系统是否被改动过,还可以定期生成报告

 

      用Java来实现的话,首先想到的就是并行检测,那么肯定需要多个线程同时工作,提高检测效率,同时把完整的检测结果存档,加密,作为下一次的比对标准。存档的东西需要定期更新,而且要备份,这个要注意

 

    检测文件是否被改动,方法有很多,比较简单的是看文件的组后修改日期,还有就是计算文件的Hash值

 

   部分实现:

    

 

public class CheckTimerTask extends TimerTask {

	public static Logger	logger		= Logger.getLogger(CheckTimerTask.class.getName());
	private String			md5FilePath;
	private FileHandler		fileHandler	= new FileHandler();

	public CheckTimerTask(String md5FilePath) {
		this.md5FilePath = md5FilePath;
	}

	public void run() {
		boolean flag = false;
		PropertiesConfig p = new PropertiesConfig();
		// 配置文件的MD5
		String configFileMd5 = p.getMd5FileMd5();
		logger.info("configFileMd5:"+configFileMd5);
		String configMd5 = null;
		// 实际算出来的MD5
		configMd5 = GetMD5Value.getMd5ByFile(md5FilePath);
		if ("".equals(configMd5)) {
			logger.warn(configMd5 + " not exist!");
		}
		if (!configFileMd5.equals(configMd5)) {
			flag = true;
			DbHandler.saveAttack(md5FilePath, configFileMd5, configMd5, "appmd5文件MD5改变");
			logger.info(md5FilePath + " has changed!");
		}
		Map map = fileHandler.readMd5File(md5FilePath);
		String appFilePath = PropertiesConfig.userHome + "config" + File.separator + "appname";
		HashMap appMap = fileHandler.readEncoderAppFile(appFilePath);
		Iterator it = map.keySet().iterator();
		String fileName = null;
		String fileMd5 = null;
		String appMd5 = null;
		while (it.hasNext()) {
			fileName = (String) it.next();
			HashMap valueMap = (HashMap)appMap.get(fileName);
			fileMd5 = (String) map.get(fileName);
			File file = new File(fileName);
			StringBuffer sbFile = new StringBuffer();
			if (file.isDirectory()) {
				// 文件夹
				List list = new ArrayList();
				list = fileHandler.showAllFilesExclude(list, file, valueMap);
				Collections.sort(list);
				for (int j = 0; j < list.size(); j++) {
					sbFile.append(GetMD5Value.getMd5ByFile((String) list.get(j)));
				}
				try {
					appMd5 = GetMD5Value.getMd5ByString(sbFile.toString());
				} catch (Exception e) {
					e.printStackTrace();
				}
			} else if (file.isFile()) {
				// 文件
				appMd5 = GetMD5Value.getMd5ByFile(fileName);
			} else {
				appMd5 = GetMD5Value.getMd5ByFile(fileName);
			}
			if (!fileMd5.equals(appMd5)) {
				// 写入攻击事件,修改文件
				flag = true;
				DbHandler.saveAttack(fileName, fileMd5, appMd5, "应用程序MD5改变");
				logger.info(fileName + " has changed!");
			}
		}
		if (flag) {
			// MD5发生变更,重新生成
			fileHandler.encoderFile();
			configMd5 = GetMD5Value.getMd5ByFile(md5FilePath);
			if (configMd5 != null)
				PropertiesConfig.updateMd5(configMd5);
		}
	}

 

 

   在实现的过程中,可以排除一些指定目录(比如日志目录等),把监控到的异常记录到日志,经过报警系统发现报警信息,同时,周期性的生产报告,发送到管理员。

 

    这样的程序一般都需要有守护进程,用来监控该功能是否被恶意Kill掉,所以在实现的过程中,还需要实现一个Monitor进程。

  

 

分享到:
评论

相关推荐

    游戏文件完整性校验工具

    游戏文件完整性校验工具是一种用于确保游戏数据完整无损的应用程序。它主要通过对比游戏安装目录中的文件与预设的校验值(如MD5、SHA1或CRC32)来检测文件是否丢失、损坏或者被篡改。这对于解决游戏运行错误、性能...

    java完整性校验解决方案

    Java 数据完整性校验是保障软件安全的重要环节,尤其是在下载或传输文件时,确保数据未被篡改至关重要。这里我们将深入探讨 Java 中实现数据完整性验证的方法,主要关注MD5(Message-Digest Algorithm 5)哈希算法的...

    Linux文件完整性校验检查方案AIDE

    5. **安全强化**:除了常规的文件完整性检查,AIDE还可以作为系统加固的一部分,帮助确保系统符合最佳实践和安全策略。 安装AIDE: 在大多数Linux发行版中,AIDE可以通过包管理器轻松安装。例如,在Debian或Ubuntu...

    基于网格的LINUX文件完整性校验工具的原理.pdf

    当前,传统的文件完整性校验方法面临运算复杂度高的问题,这在处理大量文件时可能效率低下。基于网格的文件完整性校验工具正是为了解决这一问题而提出的。 网格技术是一种分布式计算模式,它将计算资源组织成一个...

    5_基于MD5的文件完整性检测程序_完整性_md5算法_

    MD5(Message-Digest Algorithm 5)是一种广泛用于文件完整性校验的哈希函数,由计算机科学家Ronald Rivest在1991年设计。它能够将任意长度的数据转化为一个固定长度的摘要,通常是一个128位的二进制数,以16进制...

    form表达数据完整性校验

    本篇将围绕“form表达数据完整性校验”这一主题,详细阐述相关知识点。 首先,我们来看“MD5加签”。MD5(Message-Digest Algorithm 5)是一种广泛使用的哈希函数,它能将任意长度的信息映射为固定长度的输出,通常...

    电信设备-一种生成文件校验信息的方法、文件校验方法及设备.zip

    "电信设备-一种生成文件校验信息的方法、文件校验方法及设备.zip"这个压缩包文件包含了相关主题的详细内容,主要涉及文件校验的原理、方法以及其在电信设备中的应用。 文件校验信息,通常指的是校验码或哈希值,如...

    ISO文件校验工具

    CRC32是另一种常用的校验方法,它基于循环冗余校验,用于检测数据传输中的错误。CRC32产生一个32位的二进制值,转换成十进制或十六进制后通常会显示为8个或4个十六进制数字。相比于MD5和SHA1,CRC32的计算速度更快,...

    基于Merkle树的移动平台文件完整性校验_张晓燕1

    总的来说,基于Merkle树的文件完整性校验方法是移动平台下载业务中保障数据完整性和用户安全的关键技术,它能够以较低的网络成本实现高效的安全验证,从而提升整体服务质量。在未来的移动通信发展中,这类技术的应用...

    完整性校验

    SHA1(Secure Hash Algorithm 1)是一种广泛使用的散列函数,属于完整性校验的一部分,它能够将任意长度的数据转换为一个固定长度的摘要,通常是一个160位的二进制数,以16进制表示就是40个字符。 SHA1算法的工作...

    文件校验工具.zip

    文件校验工具是IT行业中非常重要的一个组成部分,主要用于确保数据的完整性和安全性。在数字化的世界里,无论是下载软件、传输大型文件还是备份重要数据,都可能面临数据损坏或篡改的风险。文件校验工具通过计算文件...

    hex文件解析,校验码校验

    1. **CRC(Cyclic Redundancy Check)**:循环冗余校验是一种广泛使用的错误检测方法,通过计算数据的CRC值并与预期的CRC值比较,来判断数据是否正确无误。 2. ** Adler-32 或 MD5**:这些是哈希函数,生成一个固定...

    md5.rar_完整性校验

    总之,MD5是一种用于数据完整性校验的哈希算法,虽然存在安全性问题,但在非安全关键的应用中,它仍然是验证文件是否被篡改的有效工具。这个压缩包“md5.rar”就是为用户提供了一个验证文件完整性的工具,通过对比...

    文件Hash值校验工具

    文件Hash值校验工具是一款轻量级的应用程序,专门用于验证文件的完整性和一致性。它在IT领域中扮演着至关重要的角色,特别是在下载、传输或存储文件时,确保文件未被篡改或损坏。这款工具的大小不超过30KB,体现了其...

    文件传输与文件校验.pdf

    在网络传输文件时,确保文件完整性的校验是一项重要的工作。文件在网络传输过程中可能会遇到丢包的问题,这会导致文件在到达目的地后与原始文件不一致,因此需要一个有效的方法来检验文件是否完整无误地传输。在给定...

    论文研究-一种在去重备份系统中数据完整性校验算法.pdf

    在数据备份系统中,使用重复数据删除技术在消除重复数据提高系统存储的空间效率时,将必然会有多个逻辑映像共享去重后的数据实例,如果某个数据实例丢失或者数据...这种数据完整性校验算法提高了去重备份系统的可靠性。

    易语言MD5进度校验大文件

    易语言MD5进度校验大文件是一个用于验证大型文件完整性的工具,主要通过计算文件的MD5(Message-Digest Algorithm 5)哈希值来实现。MD5是一种广泛使用的加密散列函数,产生一个128位(16字节)的散列值,通常以32个...

    windows x64代码完整性校验分析文档

    总的来说,Windows x64代码完整性校验是一种强大的安全机制,它通过严格的签名验证和执行前检查,保护系统免受恶意代码的侵害。了解和掌握这一机制,对于系统管理员和安全专业人员来说至关重要,能够有效提升系统的...

    校验下载文件正确性的必备工具

    文件完整性校验的流程通常是这样的: 1. **获取校验值**:首先,你需要找到提供文件下载的官方网站或可靠来源,查找对应的MD5或SHA1校验值。这通常会以文本形式列出,例如:“MD5: ABCDEF1234567890”。 2. **下载...

    电信设备-一种串行通信数据校验方法.zip

    文件"一种串行通信数据校验方法.pdf"可能会详细阐述以上某一种或多种校验方法的实现细节,包括算法原理、计算过程、如何处理错误以及在实际电信设备中的应用案例。学习这部分知识有助于理解串行通信中的数据可靠性...

Global site tag (gtag.js) - Google Analytics