我正在尝试直接从应用程序写入某种文件格式。虽然文件格式本身非常简单,但它包含一个32位校验和我不知道如何计算。
我可以访问一个 Win32 GUI 应用程序(很旧,用 Delphi 7 编码),它写入这些文件,包括校验和。我已经尝试过 Ollydbg 和 IDA Pro Free 来反汇编/调试,但我真的不知道如何开始。
有没有办法追踪数据?由于我知道输出文件,我知道校验和和输入,是否可以设置一个断点“每当值 0x12345678 出现在某处时”,然后我就可以退后一步找到算法?
任何想法我应该如何开始?这方面有什么好的教程吗?
编辑:感谢评论/答案,我能够找到一个设置校验和无效值的函数。我还能够找到两个调用 ReadFile 的函数。第一个似乎是读取文件头看文件是否正常,另一个是由在循环中设置校验和无效的函数调用,文件被分成小块读取然后处理。不幸的是,它没有直接调用函数,调用堆栈显示,从设置校验和无效的函数中,有 6 个函数被调用,直到 ReadFile 完成。是否有某种方法可以跟踪数据,例如每次访问包含文件内容的缓冲区时的断点?
编辑 2:自从第一个缓冲区被填满后,我开始遵循每个命令,但这太可怕了,我现在几个小时进入了大约 100 个函数,它只访问了前 6 个字节:有时它读取数据,计算一些东西,但是似乎没有使用该值,如果是 LF 或 CR,则比较单个字节……现在我知道为什么该程序在 Core i7 上加载 10KB 的文件需要几秒钟的时间。它似乎读取 128 字节的块并直接处理该数据,而不是先检查校验和。此外,似乎还涉及多线程。我试图设置一个内存断点,但随后程序崩溃了(OllyDbg 显示了可能发生这种情况的警告)。是否可以“离线”进行向后跟踪,我可以在它第一次读取文件时设置一个起点(我故意损坏了)并设置了一个终点,它设置了校验和不正确的变量。它记录了中间使用的所有寄存器/内存,我可以从它设置校验和不正确的地方退一步。任何的想法?