找出程序如何读取文件

逆向工程 反编译 文件格式 编码
2021-07-06 09:53:21

我想手动“拉出”特定文件格式的文件信息。不用说,它们是以某种形式编码的——我无法访问它们的“明文”版本。但是,与该文件关联的程序显然能够读取它们 - 我想知道我是否可以以某种方式对该程序进行逆向工程,从而找出它们的编码方式,以便自己阅读内容。

这是一个广泛的问题 - 但我不知道从哪里开始。

3个回答

鉴于信息非常有限,我会这样做:

  1. 首先在十六进制编辑器(如 HxD 或 010 Editor)中检查文件。记下任何“常数”。例如,所有 Windows exe 文件都以字节 4D 5A 或“MZ”开头。这些文件是否以一致的字节签名开头?在十六进制编辑器中向下滚动并找出您可以找到的其他模式。
  2. 使用 Detect It Easy 或 PortEx Analyzer 等工具来测量文件字节的熵和/或将它们映射出来。熵是否非常高,以至于该工具表明文件已打包,还是较低?这可以为您提供有关是否已编码甚至可能使用什么类型的编码的线索。

我会利用收集到的上述信息并在 Internet 上搜索我在文件中找到的任何常量或模式。看看您是否可以找到其他人讨论这些文件或使用它们的任何程序。如果您可以找到使用这些文件的其他程序,请尝试在 GitHub 上找到源代码或其他内容。

正如你所说,这是开放式的,除了评论之外,这里没有太多讨论的余地,但这就是我开始这个过程的方式。您知道哪个程序正在对文件进行编码吗?如果是这样,获取程序的可执行文件并使用类似 PEiD KANAL 和/或 signrch 之类的工具来搜索常见的编码算法,然后获取这些算法的地址并在反汇编程序中打开程序可执行文件并检查内存地址。最后但并非最不重要的是,您可以使用的另一个技巧是,如果您可以确定文件中可能包含哪种类型的信息(例如 URL),您可以使用名为 XORSearch 的 Didier Stevens 工具并搜索“http”,程序将为该模式尝试一堆不同的 XOR 密钥,如果它能够在某处破解 http,您也许可以通过这种方式找出编码。

我建议您通过使用诸如英特尔 PIN 工具(我假设您正在处理 x86 程序集)之类的工具对其进行跟踪来对软件进行动态分析

使用此工具,您可以跟踪软件执行的每条指令(请参阅有关 PIN 的本教程)。

然后,你的观点是找到系统调用打开正确的文件(系统调用的参数将是文件路径之一,所以你应该能够用一个简单的找到它grep)。

一旦你找到打开文件的指令,我建议你从这一点开始反汇编(使用诸如IDA proRadare2,甚至 gdb/Ollydbg 之类的软件都可以做到)。

试着看看stracesyscall 监控程序喜欢。
使用这些工具,它将为您提供更多信息和详细信息。

中国有句俗话:“工欲善其事,必先利其器”。