未知主列表.dat文件,发出检索信息

时间:2013-04-26 16:10:50

标签: file file-io

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

TLDR;我有一个旧的.csv文件(大约两年),它有很多信息,但它已经两年了。我有另一个名为ml.dat的文件(我假设是masterlist.dat),它与此旧版软件位于同一个文件夹中。我用记事本和excel打开它,并提供这样的信息:

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

在记事本或excel中识别上述文本块的次数要少得多。它是更多未被识别的方块。 但是,有些信息实际上是可读的。例如,我可以阅读偶尔的城镇名称或人名,但由于缺少很多信息,我无法获得所有信息。也许数据不是unicode或其他东西?我不知道。有什么建议?我最终试图将这些信息投入到quickbooks或outlook中。

请帮忙! 感谢

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

1 个答案:

答案 0 :(得分:0)

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

您的选择:

  1. 搜索某个实用程序以加载和转换该应用程序的dat文件。
  2. 设置一个合适的dos模拟器,以便您可以在另一个盒子上运行此应用程序,甚至可以在运行freedos或其他东西的虚拟机上运行。
  3. 找出文件格式,然后编写一个程序来翻译数据。
  4. 对于#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结构的内部能够读取文件。

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