1

我来找你完全难倒。我为一家使用旧的基于 DOS 的程序输入和检索数据的公司做一些副业。这是一个遗留软件,他们已经转移到 QuickBooks 或 Outlook 来满足他们所有的地址或计费相关需求。但是,已经进行了一些更改,并且他们相当定期地使用该数据库。由于该软件所在的计算机正在运行 XP(并且办公室中的其他计算机都无法运行它),因此他们希望在计算机不可避免地爆炸时逐步淘汰该软件。

TLDR;我有一个旧的 .csv 文件(大约两年),其中包含大量信息,但它又是两年前的。我有另一个名为 ml.dat 的文件(我假设是 masterlist.dat),它与这个旧版软件位于同一文件夹中。我用记事本和 excel 打开它,并显示如下信息:

S;Û).;PÃS;*p(â'a,µ,

上面的文本块在记事本或 Excel 中的识别率要低得多。这是更多无法识别的方块。然而,有些信息实际上是可读的。例如,我可以偶尔阅读城镇名称或人名,但由于缺少很多信息,我无法获得所有信息。也许数据不是Unicode或什么的?我不知道。有什么建议么?我最终会尝试将这些信息放入快速手册或前景中。

请帮忙!谢谢

编辑:我猜该文件可能是加密的,因为 .dat 通常是明文?有什么想法吗?

4

1 回答 1

0

.DAT 文件可以是任何东西,它们通常只是应用程序数据。由于存在可读文本,因此该文件不太可能被加密。相反,您看到的是其他内容字节的 ASCII 表示。 http://www.asciitable.com/ 假设单字节值,数字 77 可能会在文件中某处显示为 M。

您的选择:

  1. 搜索一些实用程序来加载和翻译该应用程序的 dat 文件。
  2. 设置一个合适的dos模拟器,这样你就可以在另一个机器上运行这个应用程序,甚至可以在运行freedos的虚拟机上运行。
  3. 找出文件格式,然后编写一个程序来翻译数据。

对于 #3,您可以将调试器附加到应用程序以跟踪文件的读取和写入方式。或者,您可以尝试找出记录边界(如果所有记录的大小都相同,那么事情会容易一些。)然后您可以使用已知值来尝试找到字段边界。如果您可以找到(或反向编译)源代码,那么这也可以让您深入了解文件格式。

1 是您最好的选择,而 #2 将为您争取一些时间,这样您就不再需要那台原装机器了。#3 可能需要外包。


如果您可以找到源或文件格式,那么您只需重新创建转储到文件中的任何数据结构并将文件读入其中。

要查找打开它的 exe,您可以执行以下操作:

for %f in (*.exe) do find "ml.dat" %f -c

假设原始应用程序是用 C 编写的,那么将有类似这样的代码来从文件中读取第一条记录:

struct SecretData
{
    int first;
    double money;
    char city[10];
};

FILE* input;

struct SecretData secretdata;
input = fopen("ml.dat", "rb");
fread(&data, sizeof(data), 1, input);
fclose(input);

(该文件将使用 fwrite 写入。)基本上,您需要弄清楚 SecretData 结构的内部结构才能读取该文件。

在大多数语言中,可能没有用于制作文件的单独实用程序,转储数据并从文件中读取数据相对容易。

于 2013-04-26T16:37:44.137 回答