数据文件结构分析方法.docx
- 文档编号:17746562
- 上传时间:2023-08-03
- 格式:DOCX
- 页数:86
- 大小:755.59KB
数据文件结构分析方法.docx
《数据文件结构分析方法.docx》由会员分享,可在线阅读,更多相关《数据文件结构分析方法.docx(86页珍藏版)》请在冰点文库上搜索。
数据文件结构分析方法
数据文件结构分析方法
2009年06月
前言
出于各种各样的目的,软件开发人员经常会面对结构未知的数据文件,这可能是原于受客户委托,对第三方开发的软件功能进行有限扩展或二次开发;也可能原于学习和提高的目的;但更多的时候可能纯粹出于好奇。
分析数据文件需要一些相关的知识和技能,包括对数据文件的基本结构和存储方式的理解。
数据文件结构分析方法的任务:
数据结构与数据表达内涵的分析。
本书不涉及通常意义上的数据加密、数据解密等相关问题。
基本数据类型。
在第一部分中,将给以简单的介绍。
对于分析复杂的数据文件,除了基本的知识和技能外,还需要强大的分析工具。
在第二、三、四部分,介绍了Fexplorer软件强大的数据分析功能和方便、灵活的操作。
在面对实际问题时,分析数据文件可能需要更多的知识和背景。
在第五部分通过实例演示了一个完整的数据文件的破解过程。
需要特别说明的是,尽管数据文件分析技术有可能被一些人用于非法目的,但本书的著者强烈要求读者,在理解和使用本书的过程中,严格遵守国际、国内软件保护、知识产权等相关的法律、法规,这也是著者编写本书的出发点。
述语与定义
数据
记录——
记录由连续的字节组成,被解释为基本的数据类型,记录包括地址、数据类型、数据长度、含义。
结构——
结构由一组相邻的记录组成,代表一个对象或数据模型。
格式刷——
格式刷是被选定的结构。
对读者的建议
尽管本书中的数据文件分析不涉及常规意义上的数据加密与解密,但与软件开发中的其它工作相比较,分析数据结构还是要耗费相对较大的劳动强度和时间。
在软件开发领域,尽管不缺乏野心勃勃的天才,但是如果浪费他人宝贵的时间和精力是万万不可的,为避免本书有可能在策略上误导读者而使人陷于歧途,在此特别提醒读者,在进行数据文件分析时,首先应该制定一个科学的分析方案,并在方案的指导下开展分析工作。
为此,提出如下建议:
第一,应尽可能收集与数据文件相关的资料,包括开发文档、源程序代码;收集与软件涉及的行业相关的标准。
第二,与软件的开发者取得联系,争取得到第一手资料或可能的帮助,有可能的话,请高人指导。
第三,通过查询,收集是否已经有人进行过相似的分析工作及分析结果。
如果从外部无法获得帮助,必须依靠自己完成分析工作的话,在着手分析之前,也应当做好充分的准备:
第四,对软件的功能和性能更多的了解,理解软件的设计思路。
第五,尽可能收集到两个以上的同类数据文件。
1基本知识
1.1数据文件
数据文件是整个软件的一部分,存储软件的输入、输出数据,通常以磁盘文件的形式保存在存储介质中。
有时软件并不需要数据文件,比如大家常用的WINDOWS提供的计算器。
但多数,特别是大型应用软件,都需要有数据文件。
如数据库管理软件、文字处理软件、绘图软件、股票分析软件等,都有自己的数据文件。
软件的文件包括程序文件和数据文件两类,程序文件主要包含软件的可执行代码,负责对用户输入的数据进行计算、分析,并将计算分析结果以数据文件的形式保存到数据文件中。
1.2数据文件类型
从功能上,数据文件可分为输入数据文件、输出数据文件和临时数据文件。
输入数据文件负责初始化软件的运行环境,存储被加工的数据原料。
输出数据文件存储经过软件分析、计算的结果。
临时数据文件存储软件计算过程中生成的临时数据或中间结果,这类数据在软件运行结束后一般由软件自动删除。
从存储格式上,数据文件可分为文本数据文件和二进制数据文件。
文本数据文件可由文本编辑器打开。
常见的文本数据文件有批处理文件(*.bat)、配置文件(*.ini或*.CFG)、DXF文件。
二进制数据文件不能被文本编辑器打开,只能通过WINDOWS提供的底层文件操作指令访问。
由于二进制数据文件的存储效率和访问效率较高,几乎所有规模较大的数据文件全为二进制数据文件。
由于文本数据文可直接用文本编辑器查看,所以数据文件分析中所设计的数据文件类型主要是二进制数据文件。
1.3数据类型
数据文件可以看成是一个由各种基本的数据类型构成的数据集合,基本的数据类型有整型数据、浮点型数据、字符型数据。
1.3.1整型数据
整型数据有单字节整数(8位)、双字节整数(16位)、四字长整数(32位)。
单字节整数只占1个byte,表示数据的范围从0-255或-125到125。
双字节整数占2个byte,表示数据的范围从0-65535或-32767到32767。
四字长整数占4个byte,表示数据的范围从0-4294967295或-2147483647到2147483647。
逻辑型数据也由单字节整数表示,占1个byte(8位),其中0表示“否”,0表示“是”。
随着计算机计算能力的提高,计算器处理数据的范围不断扩大,整型数据范围也在增加。
目前64位整数、128位整数在部分机器或系统中已经成为基本数据类型。
1.3.2浮点数据
浮点数有单精度浮点数、双精度浮点数两中基本类型。
单精度浮点数占4个byte(32位),表示数据的范围从0-255或-125到125。
双精度浮点数占8个byte(64位),表示数据的范围从0-255或-125到125。
1.3.3字符型数据
字符型数据分两类,字符和字符串。
字符型数据占1个byte(8位),表示“0”-“9”、“A”-“Z”、“a”-“z”、“!
”-“+”、“{”、“}”、“[”、“]”、“|”、“、”、“:
”、“;”、“’”、“<”、“>”、“,”、“。
”、“?
”、“/”等。
字符串数据由字符组成。
根据存储方式的差异,字符串分为静态字符串和动态字符串。
静态字符串存储时包含一个表示字符串长度的字节,称为长度字节,位于存储的第一个字节。
因此,静态字符串最大容纳255个字符。
动态字符串没有长度的字节,字符串是以“0#”结尾。
所以动态字符串又称为“零结尾字符串”(Null-terminatedString)。
动态字符串没有长度限制,但一般机器或系统中,动态字符串长度小于4GB。
1.3.4结构数据
结构数据(STRUCTURE),有时又称记录(RECORD),是由若干基本数据类型构成。
以下是两个简单的结构数据,分别表示二维空间点和三维空间点。
T2DPoint=Record
X,Y:
Real;
end;
T3DPoint=Record
X,Y,Z:
Real;
end;
结构可以变得很复杂,实际上每一个数据文件可以看作一个结构。
下面是一个表示文件头信息的结构数据,不仅包含大量的基本数据类型、也包括预定义的结构数据类型,既嵌套结构数据。
简单的嵌套结构数据只有两层,复杂的嵌套结构数据只有三层甚至更多。
HeaderType=Record
OBjNum:
Word;
XYOffset:
LongInt;
XYSize:
Longint;
IndexOffset:
LongInt;
IndexSize:
LongInt;
AttrOffset:
LongInt;
AttrSize:
LongInt;
Addr:
Longint;
XYAddrIndex:
ArrayofAddrIndexType;
AttrAddrIndex:
ArrayofAddrIndexType;
ISubGrInfo:
ISubGrInfoType;
IStrInfo:
IStrInfoType;
ILineInfo:
ILnInfoType;
Num1,Num2:
SmallInt;
XYRange:
RangeType;
ScreenType:
RecordScrWid,ScrHei:
single;end;
AttrIndexOffset,AttrIndexSize:
Longint;
RangeOffset,rangeSize:
LongInt;
end;
结构是数据文件最常见的数据类型,是构成数据文件的基本框架。
分析数据文件所花费的时间多数用在从大量的数据流中分离出一个个结构数据。
1.4数据的存放顺序
长度超过1个字节的数据,在存储数据时,有存放顺序的问题。
对于两字节整数,低位字节在前,高位字节在后,如整数5689,十六进制的存储格式为“$3916”。
四字节整数,最低位字节在前,高位字节在后,如整数20060520,十六进制的存储格式为“$68193201”。
静态字符串数据占n+1个字节,n为字符串的个数(不含结尾的0#)。
第一个字节为长度字节,数值为n以后按顺序为各字符。
动态字符串占n+1个字节,n为字符串的长度,第一个字符占第一位,以后按顺序占据位置,最后一位为结束标志0#。
1.5数据文件结构
数据文件一般包含文件头和数据两部分,部分数据文件可能还包含索引表。
因此分析数据文件的第一步是弄清数据文件的基本框架,然后按照文件头、索引表、数据三部分依次分析、破解。
1.5.1文件头
文件头一般在数据文件的开始。
通常包含文件类型标识、所有者、版本信息、创建时间、文件大小。
文件头中最重要的信息是文件的大小,它可以帮助程序员方便地访问整个数据文件。
通常文件的大小由四字节的一个长整数表示。
在分析数据文件时,由于文件的大小是可知的(通过WINDOWS的GetFileSize进程取得),因此可以从分析文件的大小入手。
[例]:
文件长度
1.5.2索引表
索引表存放组成数据文件各部分的偏移地址、大小等相关信息,利用索引表可以方便地对数据文件的各部分进行。
通常文件各部分的偏移地址和大小由四字节长整数表示。
有些情况下,索引表与文件头是一起的。
1.5.3数据部
数据部是数据文件的主题,通常在文件中占据大部分存储空间。
一般情况下,数据部由相对独立的数据块组成,每一个数据块表示不同的数据内容。
分析数据部的第一步是将数据部分为若干数据块。
数据块的内容和格式由数据块表达的内容决定,简单的数据块直接由最基本的数据类型构成,这种情况比较少见。
通常情况下,数据块比较复杂,不仅有简单的基本数据类型,更多的是由结构数据类型或嵌套结构数据类型构成。
例如表示空间离散点位置的数据通常是一组实数对,其中表示二维空间的实数对由两个实数X、Y构成、表示三维平面空间的实数对由三个实数X、Y、Z构成。
这种数据块可以用ArrayofT2Dpoint或ArrayofT3Dpoint表示。
表示一组色彩的数据块,根据颜色生成方式,可以有三种数据形式:
RGB三色、CMKY四色、长整数,其中RGB三色、CMKY四色分别由3字节和4字节组成,分别依次存放R、G、B和C、M、K、Y色谱数据,每个色谱数据占1个字节。
长整数直接代表一个颜色,WINDOWS系统采用此类颜色表示方法。
这种数据筷仍然属于简单数据块,它可以用类似ArrayofRGB或ArrayofCMKY或ArrayofLongInt表示。
下组结构数据是用来描述矢量图中线图元数据块的,属于三层嵌套结构数据。
LnInfoType=record
ID:
String[40];//ID编号
LinesNum,LType,AddedType,Color:
Integer;//线段数/线型/辅助线型/颜色
Wid:
Single;//线宽
AddedColor,Layer,Attr:
Integer;//辅助颜色/所在图层号/属性
Range:
RangeType;//范围
PointNum:
Integer;//总点数
Title:
String[128];//名称
end;
LDotsType=^LdLink;
LdLink=Record
Next,Pre:
LDotsType;
xy:
TRPoint;
End;
LineSegType=^LSegLink;
LSegLink=Record
Next:
LineSegType;
PHead,PEnd:
LDotsType;
End;
ArgLineType=^LLink;
LLink=Record
Next:
ArgLineType;
Info:
LnInfoType;
SHead,SEnd:
LineSegType;
End;
1.6数据文件基本分析方法
数据文件的基本分析方法包括基于数据流的分析方法、基于基本数据类型的分析方法和基于结构数据的分析方法。
1.6.1基于数据流的分析方法
基于数据流的分析方法也可以称为基于字节的数据分析方法。
基于数据流的分析方法的任务是将字节流组成基本数据类型。
在计算机硬件层次上,所有数据的存储格式都是二进制数码,形如000100001000010000100010的bit流。
对于软件工程师,通常不需要处理这样的数据,除非直接与硬件打交道。
一般情况下,软件工程师仅需要在字节层次或更高的层次上处理数据,也就是将二进制数据按照每8位一个单位进行处理,将上述bit流看成如下的byte流000100001000010000100010。
基于数据流的分析方法实际上是将数据文件按照字节的方式读出来,然后再由一个个字节组成基本数据类型。
如何由字节组成基本数据类型,没有固定的方法,需要多方面尝试。
但有些基本原则可以参考,第一是构成基本数据数值大小,第二是常用的数据类型。
利用字节构成基本数据的数值大小可以判定分析是否成功,例如,表示字符串长度的长度字节,其数值的大小应等于其后的字符串的长度。
表示文件大小的长整数,其数值应等于文件的大小或相近数值*。
表示空间位置坐标的实数,其大小应在实际表示的空间范围之内。
表示金额的实数,小数位不能超过两位。
利用常用的数据类型可以帮助确定哪些数据类型更有可能。
例如,表示文件大小、偏移地址、日期等一般是长整数,表示名称、注释的必须是字符型数据,表示空间位置坐标、费率的数据一般是实数。
表示逻辑关系、字符串长度的,一般是字节数据。
1.6.2基于基本数据类型的分析方法
基于基本数据类型的分析方法的任务是将基本数据类型组成结构数据类型,这是数据文件分析的重点,也是分析工作成功与否的关键。
Fexplorer软件主要是用来解决如何将基本数据类型组成复杂的结构数据类型的,为分析人员提供一个方便的分析手段。
但是,还应该意识到,仅凭Fexplorer软件是不能够解决一切问题的。
更重要的需要用户更宽广的知识面、软件开发经历等。
当然,有一定的数据文件分析的经历,毫无疑问增加分析的成功率。
从这一点将,多一些尝试、多一些积累,才是从事分析工作人员的最根本的分析法宝。
1.6.3基于结构数据的分析方法
基于结构数据类型的分析方法是利用上述分析工作得到的结构数据类型还原整个数据文件。
对于整个分析工作而言,在从事这部分工作时,应当有在迷茫探索和疲惫的拼搏之后承受丰收喜悦的感觉。
在Fexplorer软件的高级操作部分,将给读者展示基于结构数据类型分析方法的强大功能,以及由此带来的震撼。
2Fexplorer简介
2.1Fexplorer功能
2.1.1字节流解释功能
将字节流解释成基本数据类型。
Fexplorer支持单字节整数、双字节整数、十进制四字节长整数、十六进制四字节长整数、字符串、四字节单精度实数、六字节实数、八字节双精度实数、日期时间、颜色(RGB、CMYK、LongInt)等10种基本数据类型。
Fexplorer能自动将当前字节流解释成上述10种基本数据类型,用户可以根据各种解释结果,选定一种合适的数据类型。
2.1.2自定义数据结构功能
Fexplore支持自定义结构数据功能。
自定义结构数据由用户利用基本数据类型组织而成。
应用自定义结构数据,可以对数据块进行整块翻译,加速数据文件分析的速度。
通过自定义结构数据进行数据结构分析是Fexplore软件功能强大的原因所在。
2.1.3结构数据分析功能
在基本数据类型定义和结构数据定义的基础上,通过统计数据出现的频率和位置,帮助用户破解构成结构数据类型中的某数据项的含义,如确定数据是否代表图层编号、颜色编号等。
2.1.4空间数据分析功能
针对特殊的空间数据,利用GIS功能,展示分析的结果。
2.1.5数据读写程序自动生成功能
自动生成读写数据文件的程序代码(Delphi格式)。
2.1.6智能解释功能(尚未实现)
基本数据类型智能解释、基于字节流周期分析的自动分块功能。
2.2软件组成与结构
输入/输出模块、数据翻译模块、界面管理模块、数据结构分析模块、数据查找/自动翻译模块、空间数据分析模块。
2.2.1文件输入/输出模块
包括三类文件:
数据文件、记录文件和结构文件。
输入模块负责将数据文件、记录文件和结构文件读入内存。
其中记录文件记录用户破解的数据,结构文件包含用户自定义的结构数据。
输出模块负责将分析结果,即记录文件和结构文件保存为磁盘文件。
2.2.2数据翻译模块
数据翻译模块包括基本数据类型翻译和结构数据类型自动翻译。
基本数据类型翻译模块负责将字节流翻译成基本数据类型。
结构数据类型自动翻译
模块在数据查询模块中介绍。
2.2.3主界面管理模块
主界面管理模块包括数据流显示窗口管理、基本数据类型面板管理、数据类型显示窗口管理、翻译记录窗口管理、结构窗口管理、书签窗口管理6个模块组成。
主界面管理模块负责各模块的显示及模块间的联动操作。
(1)显示界面管理
数据流显示窗口管理模块负责将读入内存Buffer中的数据流,以字节方式显示。
同时显示字节的地址及对应的ASCII码。
基本数据类型面板管理模块负责显示当前字节流在作为基本数据类型时转换结果。
数据类型显示窗口管理根据基本数据类型转换数值,参考已往翻译经验,计算当前数据作为各基本数据类型的概率,用户据此选择合适的数据类型。
翻译记录窗口管理模块负责显示用户完成的分析数据的类型、地址、大小、内容等。
结构窗口管理模块显示用户定义的结构数据,包括结构数据名称、数据项类型、数据项大小等。
书签窗口管理模块负责显示用户定义的记录数据或结构数据的书签。
(2)模块联动管理
除了上述显示功能外,主管理模块还负责上述各模块间的联系和联动,主要包括以数据流显示窗口为主的联动、以翻译记录窗口为主的联动、以书签窗口为主的联动。
窗口联动的实质是各窗口当前位置对应的数据地址保持相同。
2.2.4结构数据分析模块
结构数据分析模块包括结构数据索引表、结构数据显示、结构数据项统计、结构数据项实例地址列表子模块。
结构数据索引子模块负责在窗口列出用户所定义的结构数据名称。
结构数据子模块负责在窗口显示应当前结构数据的所有数据项的类型、长度、最小及最大取值。
结构数据项统计子模块负责统计当前整型数据项所有取值在文件中出现的频次。
结构数据项实例地址列表子模块负责在窗口显示当前数据项当前取值各个实例的地址。
2.2.5数据查找/自动翻译模块
数据查找/自动翻译模块包括数据查找、空间查找和结构数据自动翻译三个子模块。
数据查找子模块实现字符串查找和整型数据查找。
空间查找根据目标位置和查找精度范围,搜索落在查找精度范围的所有空间目标,包括空间点目标和线目标。
结构数据自动翻译子模块根据用户选定的结构数据、开始地址和(或)结束地址,进行自动翻译。
2.2.6空间数据分析模块
对于空间数据文件,将解释的空间信息显示出来。
包括读入空间数据和显示空间数据两个子模块。
读入空间数据子模块负责从翻译的记录数据从将空间数据取出来,组成可被GIS系统处理的空间数据结构。
显示空间数据子模块负责将组织好的空间数据结构在窗口中显示出来。
显示空间数据子模块提供用户对显示窗口进行有限操作,如漫游、放大、缩小等。
2.3地址与指针
为了处理大型数据文件,设计了通过临时文件和缓冲区(Buffer)处理数据文件的文件访问方式,在这里临时文件和缓冲区(Buffer)在访问地址上具有一对一的关系。
数据文件、缓冲区、数据流窗口、记录窗口和数据记录之间的对应关系如下图所示。
建立各个窗口或数据流之间的关系依靠数据的地址(addr),并通过全局地址(Ftop+OPFPos)和缓冲区的局部地址(OPFPos),分别与数据流窗口(Rich)中的指针(Pos)、记录窗口(Grid)的指针(CurrRow)和数据记录指针(CurrRecord)通过一系列地址函数建立关系。
CartToOPFPos(Pos)建立了缓冲区局部地址(OPFPos)与数据流窗口的地址的对应关系。
SeekCurrRowByAddress(FTop+OPFPos,Grid,Data,False)建立了全局地址(Ftop+OPFPos)与记录窗口(Grid)的指针(CurrRow)的关系。
GetCurrRecordByAddress(addr,Data)建立了全局地址(Addr)与数据记录指针(CurrRecord)的关系。
3Fexplorer操作简介
3.1主操作界面简介
Fexplorer的主操作界面标题栏、主菜单、主控制面板、状态栏四部分,其中主菜单和主控制面板为用户提供互动操作。
3.1.1数据流翻译面板
数据流翻译面板显示当前数据(字节)流翻译分别翻译成基本数据类型,包括实数、字符串、整数、颜色、时间等。
(1)实数
分别将40个、30、20个字节转换为5个双精度实数、6字节实数和单精度实数。
(2)字符串
将定长字节流转换为字符串。
(3)整数
整数包括单字节、双字节(字)、长整数。
(4)颜色
颜色包括RGB、CMYK、长整数三种类型。
3.1.2数据类型显示/设置面板
数据类型显示/设置面板包括三列(类)信息:
第一列数据类型显示/选择按钮;第二列数据类型分析结果;第三列数据类型颜色显示/设置(参考3.1.3)。
当开启数据类型自动判断功能,Fexplorer能够根据历史数据对当前数据的可能类型进行分析和判断,并将判断结果显示在数据类型显示/设置面板上。
在进行数据翻译时,使用在数据类型显示/设置面板设置数据类型。
3.1.3Hex数据窗口
在Hex数据窗口中,显示数据的16进制数据。
显示内容包括三部分:
地址栏、16进制数据和ASCII码。
16进制数据数据显示的是字节流,当相邻的字节流被翻译成某种基本数据类型后,字节流将根据被翻译的数据类型,显示为不同的颜色(参考3.1.2)。
3.1.4记录/结构窗口
记录/结构窗口显示翻译的数据记录,为行列结构,每一行代表一个数据记录。
每个数据记录包括地址、类型、长度、数值、名称(或标记)、序列、编号等信息。
地址列为8位16进制数据,显示地址范围从$00000000~$FFFFFFFF(最大16Mb)
类型列显示记录的数据类型,包括基本数据类型和用户定义的数据类型(参考3.3)
长度列显示记录所占字节的个数
数值列显示基本数据类型的数值,或自定义数据类型的名称
名称列显示记录的标记(由用户编辑,便于记忆或提示)
序列列显示用户自定义数据类型索引号
编号列显示记录类型的序号
3.1.5书签窗口
显示用户定义的书签,显示内容包括地址、类型、长度、数值、名称等。
在记录/结构窗口显示用户自定义结构时,书签窗口显示的是用户定义的结构名称信息。
3.2主菜单操作
主菜单包括文件、编辑、查询、显示、格式、分析、窗口、工具、帮助等九个子菜单,分别用于数据文件存取、翻译数据编辑、查询和替换、改变显示状态、设置数据格式、数据结构分析、窗口切换等。
3.2.1文件菜单操作
文件菜单负责在开始时打开被分析的数据文件,同时调入完成的记录数据文件、自定义的结构数据文件;在结束时,将修改后的记录数据、结构数据保存到磁盘文件中。
3.2.2编辑菜单操作
编辑菜单负责修改数据文件(修改数据、插入数据、删除数据)、编辑记录或结构列表、检查并删除非法记录。
3.2.3查询菜
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据文件 结构 分析 方法