当前位置: 首页 > news >正文

什么是文件格式的幻数


文章目录

  • 一、幻数简介
  • 二、如何查看文件的幻数
      • 第一个工具是:==WinHex==
      • 第二个工具是:==file 命令==
  • 三、总结
  • 参考文献


一、幻数简介

幻数是一些文件格式规范所要求的特殊标签值,它表示文件符合这种规范。有时候,人们在选择幻数的时候添加了一些风趣的元素。例如,MS-DOS的可执行文件头中的MZ标签是MS-DOS架构师Mark Zbikowski姓名的首字母缩写。Java的.class文件的幻数为十六进制数0xcafebabe,以此为幻数,仅仅是为了好记。

二、如何查看文件的幻数

在遇到不熟悉的文件时,绝不要根据文件的拓展名来确定文件的类型。因为文件拓展名并无实际意义,文件的拓展名可进行更改,从而掩盖它真实的文件类型。那么该如何查看文件的幻数,从而知道该文件的格式。
这里推荐两个工具:

第一个工具是:WinHex

直接用WinHex打开文件即可看到文件的十六进制格式。
Windows PEfexecutable file

图1:MS-DOS的可执行文件的幻数(开头是MZ)

Jpeg image file

图2:Jpeg 文件的幻数


在这里插入图片描述

图3:Java .class文件的幻数

第二个工具是:file 命令

file命令能够识别大量的文件格式,包括书中ASCII文本文件、各种可执行文件和数据文件。

file命令语法格式为:
file [选项] <参数>
参数:要确定类型的文件列表,多个文件之间使用空格分开,可以使用shell通配符匹配多个文件。

选项说明
-b, --brief不输出文件名
-v, --version打印版本信息
-c常与 -m 使用,详细显示指令执行过程,便于排错或分析程序执行的情形
-z试图查看压缩文件内部信息
-help打印帮助信息

三、总结

file即类似的实用工具同样也会出错。如果一个文件碰巧包含了其他的文件格式的标记,file等工具很可能会错误地识别这个文件。大家可以尝试一下,使用Winhex工具去篡改某个文件的前4个字节,把它修改为CA FE BA BE,那么file会将这个新修改的文件错误地识别为已编译的Java类数据(.class文件)。在使用工程中,绝不要完全相信工具提供的结果,应该多个工具一起验证和手动分析。


参考文献

【1】Chris Eagle, 石华耀, 段桂菊. IDA Pro权威指南[M]. 人民邮电出版社.
【2】https://blog.csdn.net/liaowenxiong/article/details/115752543

相关文章:

  • 【数据结构】绪论
  • C++的4种管理数据内存的方式
  • 中秋节的月亮怎么拍?不用手机和相机,程序员照样能拍出大片的感觉
  • Windows性能监控工具ypeperf
  • Python基础语法(二)—— 条件语句(if)+循环语句(for+while)
  • webpack基础使用
  • 基于蜜蜂算法求解电力系统经济调度(Matlab代码实现)
  • 我的vue的学习之旅
  • 【新学期、新Flag】快来参与活动、获取丰厚的奖励吧
  • Selenium操作已经打开的Chrome(只怪自己尝试的太迟)
  • 都这麽大了还不了解防火墙?
  • Vue的入门学习
  • AI作画飞入平民百姓家——stable diffusion初体验
  • [基于瑞芯微RV1126调试RTL8818FU WIFI模组支持STA和AP模式]
  • 算法面试 | 40天刷完LeetCode 精选 TOP 面试题(2/40)
  • 【跃迁之路】【477天】刻意练习系列236(2018.05.28)
  • 2017 年终总结 —— 在路上
  • java B2B2C 源码多租户电子商城系统-Kafka基本使用介绍
  • Python学习之路16-使用API
  • Synchronized 关键字使用、底层原理、JDK1.6 之后的底层优化以及 和ReenTrantLock 的对比...
  • 表单中readonly的input等标签,禁止光标进入(focus)的几种方式
  • 前端每日实战 2018 年 7 月份项目汇总(共 29 个项目)
  • 区块链分支循环
  • 入门级的git使用指北
  • 数据科学 第 3 章 11 字符串处理
  • 新版博客前端前瞻
  • 用jquery写贪吃蛇
  • 原生js练习题---第五课
  • 在GitHub多个账号上使用不同的SSH的配置方法
  • #NOIP 2014# day.1 T3 飞扬的小鸟 bird
  • #pragma 指令
  • (C语言)深入理解指针2之野指针与传值与传址与assert断言
  • (阿里云万网)-域名注册购买实名流程
  • (二)什么是Vite——Vite 和 Webpack 区别(冷启动)
  • (附源码)springboot宠物管理系统 毕业设计 121654
  • (深入.Net平台的软件系统分层开发).第一章.上机练习.20170424
  • (四)汇编语言——简单程序
  • (完整代码)R语言中利用SVM-RFE机器学习算法筛选关键因子
  • .NET delegate 委托 、 Event 事件,接口回调
  • .考试倒计时43天!来提分啦!
  • @DataRedisTest测试redis从未如此丝滑
  • @DateTimeFormat 和 @JsonFormat 注解详解
  • @EventListener注解使用说明
  • @TableId注解详细介绍 mybaits 实体类主键注解
  • [ vulhub漏洞复现篇 ] ECShop 2.x / 3.x SQL注入/远程执行代码漏洞 xianzhi-2017-02-82239600
  • [AI]ChatGPT4 与 ChatGPT3.5 区别有多大
  • [Android Pro] Notification的使用
  • [C#]C# winform部署yolov8目标检测的openvino模型
  • [C#]OpenCvSharp使用帧差法或者三帧差法检测移动物体
  • [codevs] 1029 遍历问题
  • [CVPR2021]Birds of a Feather: Capturing Avian Shape Models from Images
  • [Err] 1055 - Expression #1 of ORDER BY clause is not in GROUP BY clause and contains nonaggregated c
  • [Intel Edison开发板] 05、Edison开发基于MRAA实现IO控制,特别是UART通信
  • [Jquery] 实现鼠标移到某个对象,在旁边显示层。
  • [loj6039]「雅礼集训 2017 Day5」珠宝 dp+决策单调性+分治