1

私はあなたに完全に困惑しています。私は、古い DOS ベースのプログラムを使用してデータの入力と取得を行っている会社で副業をしています。これは従来のソフトウェアであり、住所または請求関連のすべてのニーズに合わせて、QuickBooks または Outlook に移行しました。ただし、いくつかの変更が加えられており、このデータベースでかなり定期的に機能します。このソフトウェアがインストールされているコンピュータは XP を実行しているため (オフィス内の他のコンピュータはそれを実行できません)、コンピュータが必然的に爆発した場合に備えて、このソフトウェアを段階的に廃止することを検討しています。

TLDR; 私は古い .csv ファイル (約 2 年分) を持っていますが、そこにはかなりの量の情報が含まれていますが、やはり 2 年前のものです。このレガシー ソフトウェアと同じフォルダにある ml.dat (masterlist.dat を想定しています) という別のファイルがあります。メモ帳とエクセルで開くと、次のような情報が表示されます。

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

上記のテキストのチャンクは、メモ帳や Excel ではあまり認識されません。それは認識されていない正方形の多くです。ただし、一部の情報は実際に読み取り可能です。たまに町名とか人名とかは読めますが、情報が足りないので全部はわかりません。おそらく、データはユニコードか何かではありませんか?何も思いつきません。助言がありますか?最終的には、この情報を取得して、クイックブックまたは Outlook に放り込もうとしています。

助けてください!ありがとう

編集: .dat は通常クリア テキストであるため、ファイルが暗号化されているのではないでしょうか? 何かご意見は?

4

1 に答える 1

0

.DAT ファイルは何でも構いませんが、通常は単なるアプリケーション データです。読み取り可能なテキストがあるため、このファイルが暗号化されている可能性はほとんどありません。代わりに、他のコンテンツのバイトの ASCII 表現が表示されます。 http://www.asciitable.com/ 1 バイトの値を想定すると、数値 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 に答える