首页>文档>软件教程>R-Studio>R-Studio文件类型高级自定义

R-Studio文件类型高级自定义

本文档详细介绍 R-Studio 中自定义文件类型的高级 XML 语法,包括 Version 1 和 Version 2 的完整属性说明、签名组合规则、逻辑运算(AND/OR)以及多文件类型定义方法。掌握这些高级属性,可以精确控制原始恢复时对特定文件格式的识别行为。


为什么需要高级自定义属性

R-Studio 的标准自定义文件类型功能(Version 1)允许用户通过固定偏移的文件签名来识别文件。然而,某些复杂或变体的文件格式具有以下特点:

  • 文件签名可能出现在不同的偏移位置(可变偏移)
  • 文件需要多个签名同时匹配才能唯一识别(AND 逻辑)
  • 文件可能有多种签名变体,满足任意一种即可识别(OR 逻辑)
  • 需要同时检查文件开头和结尾的签名以提高准确性

为了应对这些需求,R-Studio 提供了 Version 2 的高级自定义属性,支持可变偏移范围、AND/OR 逻辑嵌套,以及 Begin/End 块定义。

R-Studio文件类型自定义

全面了解如何在 R-Studio 中自定义文件类型:通过图形界面或 XML 文件添加文件签名,配置偏移量、文件扩展名和分组,扩展原始恢复能力。

Version 1 与 Version 2 对比

特性Version 1Version 2
偏移量指定固定 offset支持 offset(固定)
或 from/to(范围)
签名组合逻辑多个签名之间为 AND 关系支持 AND 和 OR 任意嵌套
<Begin> / <End> 块不支持支持
(分别匹配文件开头和结尾)
适用场景简单、固定位置的文件签名复杂、
可变位置的签名

版本通过在 <FileTypeList> 标签中设置 version="2.0" 指定。


XML 文件基础结构

R-Studio Windows官方版

文件头与根元素

所有自定义文件类型定义文件以标准 XML 头开始:

<?xml version="1.0" encoding="utf-8"?>

根元素为 <FileTypeList>,需要闭合标签 </FileTypeList>

属性

属性必需说明
version1.0 或 2.0文件类型描述版本,
默认为 1.0

注释

使用 XML 标准注释格式:

<!-- 这是注释 -->

Version 1 属性详解(基础版)

<FileType> 元素

每个 <FileType> 描述一种文件签名。

属性

属性类型必需说明
idu32数字文件类型标识符,
每种文件类型必须唯一
groupstring出现在“查找文件类型”对话框中的分组。
可使用自定义组名,
或使用预定义组
(见下表)
descriptionstring简要文件描述,
默认为空
featuresstring文件类型的附加属性。
多个属性用空格分隔。
可选值:NO_SCANTXT_ANSITXT_UNICODE
extensionstring文件扩展名(如 arj),
默认为空

预定义文件类型组

group 值显示名称
archive档案文件
graphic图片/画面
internet互联网相关文件
multimedia多媒体文件
audio多媒体:音频文件
video多媒体:视频文件
registry注册表
files文件
doc_database文档:数据库
doc_sheet文档:电子表格
exe可执行文件/库/DLL
unknown其他文件类型(默认)

文件类型属性标志

标志说明
NO_SCAN不扫描该类型。
R-Studio 不会搜索该文件类型,
但在按扩展名排序时会显示
TXT_ANSI文件可作为 ANSI 文本查看,
预览时直接发送到文本/十六进制编辑器
TXT_UNICODE文件可作为 UNICODE 文本查看,
预览时直接发送到文本/十六进制编辑器

<Signature> 元素(Version 1)

一个 <FileType> 可以包含无限数量的 <Signature> 元素。如果包含多个签名,意味着所有这些签名必须同时存在于文件中。签名应具有不同的 offset 属性,且不应重叠。

属性

属性类型必需说明
offsetu16签名的十进制偏移量
(从文件开头计算),
默认为 0
countu16表示相同长度签名的数量。
当同一偏移位置可能存在多个签名时使用。
count * size 应等于元素中的字节数。
默认为 1
sizeu16签名中的字节数,
默认为元素中写入的字节数

签名内容格式

  • 由 ASCII 字符和 \xhh 格式的十六进制字节组成(hh 是十六进制字节码)
  • 如果 \x 后不是十六进制数,则 \x 被视为签名字符串的一部分

Version 1 完整示例

<?xml version="1.0" encoding="utf-8"?>
<FileTypeList>
    <FileType id="2" group="archive" description="ARJ Archive" extension="arj">
        <Signature offset="3" count="1">Abc\x5c\x00\x04</Signature>
        <Signature offset="9" count="2">\x23\x01\xf4</Signature>
    </FileType>
</FileTypeList>

Version 2 高级属性详解

根元素指定版本

<?xml version="1.0" encoding="utf-8"?>
<FileTypeList version="2.0">
    ...
</FileTypeList>

<Begin> 与 <End> 块

一个 <FileType> 可以包含 <Begin> 和/或 <End> 块,至少应包含其中一个。<Begin> 定义文件开头的签名条件,<End> 定义文件结尾的签名条件。

属性

属性必需说明
combineAND 或 OR指定块内直接子元素之间的逻辑关系,
默认为 AND

结构示例

<FileType id="2" group="archive" description="Example" extension="ex">
    <Begin combine="AND">
        <!-- 签名条件 -->
    </Begin>
    <End combine="OR">
        <!-- 签名条件 -->
    </End>
</FileType>

<AND> 与 <OR> 元素

用于嵌套组合复杂逻辑。这些元素可以包含:

  • 多个 <Signature> 元素
  • 一个或多个 <AND> 或 <OR> 子元素

Version 2 的 <Signature> 扩展属性

新增属性(与 offset 互斥):

属性类型必需说明
fromu16指定文件签名的最左可能偏移量。
如果指定了 offset
则忽略此属性
tou16指定文件签名的最右可能偏移量。
如果指定了 offset
则忽略此属性
sizeu16签名中的字节数,
默认为元素中写入的字节数

from / to 的语义:当使用 from 和 to 时,签名可以出现在该偏移范围内的任意位置。R-Studio 会在该范围内搜索匹配的签名。

关于 offset 的说明

  • 在 <Begin> 块中,offset 从文件开头计算
  • 在 <End> 块中,offset 从文件末尾向前计算。例如,offset="2" 表示从文件末尾倒数第 2 个字节开始匹配签名

Version 2 完整示例

<?xml version="1.0" encoding="utf-8"?>
<FileTypeList version="2.0">
    <FileType id="5626" group="_Test" description="Test file" extension="tst">
        <Begin combine="AND">
            <Signature from="0" to="20">ABC</Signature>
            <Signature offset="1">CDEFG</Signature>
            <AND>
                <Signature offset="0">DE</Signature>
                <Signature offset="0">RTD</Signature>
                <OR>
                    <Signature offset="12">CP</Signature>
                    <Signature offset="16">RTD</Signature>
                </OR>
            </AND>
        </Begin>
        <End combine="OR">
            <Signature from="3" to="20">ABC</Signature>
            <Signature offset="5">CDEFG</Signature>
            <AND>
                <Signature offset="2">DE</Signature>
                <Signature offset="3">RTD</Signature>
                <OR>
                    <Signature offset="12">CP</Signature>
                    <Signature offset="16">RTD</Signature>
                </OR>
            </AND>
        </End>
    </FileType>
</FileTypeList>

逻辑组合图解

<Begin combine="AND">
    ├── Signature A (条件1)
    ├── Signature B (条件2)
    └── <AND>                         ← 内部 AND
            ├── Signature C (条件3)
            └── <OR>                  ← 内部 OR
                    ├── Signature D (条件4)
                    └── Signature E (条件5)

匹配逻辑:条件1  条件2  (条件3  (条件4  条件5))


多文件类型定义

可以在同一个 XML 文件中定义多个文件类型,只需依次添加多个 <FileType> 块即可,无需使用特殊分隔符。

示例

<?xml version="1.0" encoding="utf-8"?>
<FileTypeList>
    <FileType id="2" group="archive" description="ARJ Archive" extension="arj">
        <Signature offset="3" count="1">Abc\x5c\x00\x04</Signature>
    </FileType>
    <FileType id="3" group="archive" description="Another Archive" extension="arc">
        <Signature offset="0" count="1">AnotherSig</Signature>
    </FileType>
    <FileType id="4" group="graphic" description="Custom Image" extension="cimg">
        <Signature offset="0" count="1">CIMG\x00\x01</Signature>
    </FileType>
</FileTypeList>

实际应用示例

R-Studio MacOS官方版

示例一:固定偏移单签名(Version 1)

定义一种自定义配置文件,文件头固定为 CFG\x00\x01\x02,偏移 0:

<FileType id="10001" group="files" description="Custom Config" extension="cfg">
    <Signature offset="0" count="1">CFG\x00\x01\x02</Signature>
</FileType>

示例二:可变偏移签名(Version 2)

某文件格式的签名可能出现在偏移 0 到 32 之间:

<FileType id="10002" group="graphic" description="Flexible Image" extension="fimg">
    <Begin combine="AND">
        <Signature from="0" to="32">FIMG\x00</Signature>
    </Begin>
</FileType>

示例三:多签名 OR 组合(Version 2)

文件可能有多种不同的文件头变体:

<FileType id="10003" group="archive" description="Multi-Signature Archive" extension="msa">
    <Begin combine="OR">
        <Signature offset="0">ARC1\x00\x01</Signature>
        <Signature offset="0">ARC2\x00\x02</Signature>
        <Signature offset="0">ARC3\x00\x03</Signature>
    </Begin>
</FileType>

示例四:同时检查文件头和文件尾(Version 2)

提高识别准确率:

<FileType id="10004" group="multimedia" description="Secure Audio" extension="sau">
    <Begin combine="AND">
        <Signature offset="0">SAUD\x00\x01</Signature>
    </Begin>
    <End combine="AND">
        <Signature offset="8">ENDSAUD</Signature>
    </End>
</FileType>

加载与使用

R-Studio Linux官方版

保存 XML 文件

将编写好的 XML 文件保存在 Settings → Main → User paths 指定的目录中。默认文件名通常为 user_file_types.xml

重新加载配置

在 R-Studio 中,进入 Settings → Known File Types,单击 Reload User's File Types 按钮,无需重启软件即可生效。

在扫描中使用

执行磁盘扫描时,必须勾选 Extra search for known file types(已知文件类型额外搜索),R-Studio 才会应用自定义文件签名。


常见问题解答

  • Q1:Version 2 的 from 和 to 与 offset 有什么区别?
  • A:offset 指定一个固定的偏移位置;from/to 指定一个偏移范围,R-Studio 会在该范围内搜索签名。offset 和 from/to 互斥,不能同时使用。
  • Q2:在 <End> 块中,offset 是如何计算的?
  • A:在 <End> 块中,offset 从文件末尾向前计算。例如 offset="2" 表示从文件最后一个字节往前 2 个字节的位置开始匹配签名。签名长度由 size 或实际字节数决定。
  • Q3:多个 <Signature> 元素之间的默认逻辑关系是什么?
  • A:在 Version 1 中,多个签名之间是 AND 关系(必须全部存在)。在 Version 2 中,可以通过 combine 属性和 <AND>/<OR> 元素自由组合。
  • Q4:如何调试自定义文件类型的匹配效果?
  • A:可以先在小范围样本文件上测试。将 XML 文件加载后,对包含样本文件的磁盘分区执行扫描(仅勾选已知文件类型扫描),查看是否成功识别出文件。
  • Q5:count 属性的使用场景是什么?
  • A:当同一偏移位置可能存在多个长度相同、起始相同的签名时,使用 count 表示签名数量。此时应顺序写入多个签名内容,count * size 应等于签名内容的总字节数。
  • Q6:自定义文件类型的 id 如何避免与内置类型冲突?
  • A:建议使用 50000 以上的数字。R-Studio 内置类型的 id 通常在 1–2000 范围内。
  • Q7:Version 2 的嵌套逻辑最多支持多少层?
  • A:没有明确限制,但建议保持结构清晰,避免过深嵌套影响解析性能。
  • Q8:自定义文件类型对碎片化文件有效吗?
  • A:原始恢复(基于文件签名)只能恢复非碎片化的文件。如果文件在磁盘上被分割成多个不连续的片段,即使签名匹配成功,也无法完整恢复。
  • Q9:为什么我定义的文件类型在扫描时没有被使用?
  • A:检查:
    • 扫描对话框中是否勾选了 Extra search for known file types
    • XML 文件是否已通过 Reload User's File Types 重新加载;
    • XML 语法是否正确(可使用 XML 验证工具)。
  • Q10:macOS 和 Linux 上使用高级自定义属性有区别吗?
  • A:XML 语法和功能完全一致。仅设置入口略有不同:macOS 为 R-Studio → Preferences → Known File Types;Linux 与 Windows 相同为 Tools → Settings → Known File Types

核心要点说明
Version 1固定偏移签名,
多签名默认为 AND 关系,
适用于简单文件格式
Version 2支持可变偏移范围(from/to),
支持 AND/OR 任意嵌套逻辑,
支持 Begin/End 块
关键属性id(唯一)、
group(分组)、
extension(扩展名)、
features(标志)
签名定义<Signature> 元素,
支持 offset(固定)或 from/to(范围)
逻辑组合combine="AND/OR" 控制子元素关系,
<AND> 和 <OR> 用于嵌套
文件位置<Begin> 匹配文件开头,
<End> 匹配文件结尾
(offset 从末尾计算)
多类型定义在同一 XML 文件中依次添加多个 <FileType> 块
加载方式图形界面(推荐)或直接编辑 XML,
通过 Reload 按钮加载

掌握 R-Studio 的高级自定义属性,可以精准定义复杂文件格式的识别规则,大幅提升原始恢复的准确性和覆盖率。

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索