3

ndkrempelのおかげで、ヘクスの日付部分が解読されました。時間はまだデコードされていません。ただし、このテーマに関するndkrempelの作業により、ファイルには通常0分または0秒のタイムスタンプが含まれているため、タイムスタンプ全体に以前は無視していた追加の7バイトが含まれていることに気付きました。正確な変換に必要な残りの時間データが含まれていると思われる「完全な」16進シーケンスを次に示します。

C00AE440555555555555D53F555555555555D53FABAAAAAAAAAAEA3F0CF712000000 = 17.05.1208.00.001024
C00AE440ABAAAAAAAAAAE23F555555555555D53FABAAAAAAAAAAEA3F0CF71200E0C4 = 17.05.1214.00.001024
C00AE440610BB6600BB6E23F555555555555D53FABAAAAAAAAAAEA3F0CF7120058C5 = 17.05.1214.02.001024
C00AE440176CC1166CC1E23F555555555555D53FABAAAAAAAAAAEA3F0CF71200D0C5 = 17.05.1214.04.001024
C00AE440CDCCCCCCCCCCE23F555555555555D53FABAAAAAAAAAAEA3F0CF7120048C6 = 17.05.1214.06.001024

さまざまな時間の追加の16進コード

C00AE440721CC7711CC7E93F555555555555D53FABAAAAAAAAAAEA3F0CF71200E00F01 = 17.05.1219.20.001024
C00AE440CDCCCCCCCCCCE93F555555555555D53FABAAAAAAAAAAEA3F0CF712001C1001 = 17.05.1219.21.001024
C00AE440287DD2277DD2E93F555555555555D53FABAAAAAAAAAAEA3F0CF71200581001 = 17.05.1219.22.001024
C00AE440DEDDDDDDDDDDE93F555555555555D53FABAAAAAAAAAAEA3F0CF71200D01001 = 17.05.1219.24.001024
C00AE440398EE3388EE3E93F555555555555D53FABAAAAAAAAAAEA3F0CF712000C1101 = 17.05.1219.25.001024
C00AE440943EE9933EE9E93F555555555555D53FABAAAAAAAAAAEA3F0CF71200481101 = 17.05.1219.26.001024
C00AE440EFEEEEEEEEEEE93F555555555555D53FABAAAAAAAAAAEA3F0CF71200841101 = 17.05.1219.27.001024
C00AE4404A9FF4499FF4E93F555555555555D53FABAAAAAAAAAAEA3F0CF71200C01101 = 17.05.1219.28.001024
C00AE440A54FFAA44FFAE93F555555555555D53FABAAAAAAAAAAEA3F0CF71200FC1101 = 17.05.1219.29.001024
C00AE440000000000000EA3F555555555555D53FABAAAAAAAAAAEA3F0CF71200381201 = 17.05.1219.30.001024


E00AE4404A9FF4499FF4EA3F555555555555D53FABAAAAAAAAAAEA3F0CF712004C1C01 = 18.05.1220.13.001024
E00AE440D8822DD8822DEB3F555555555555D53FABAAAAAAAAAAEA3F0CF71200A41E01 = 18.05.1220.23.001024
E00AE440666666666666EB3F555555555555D53FABAAAAAAAAAAEA3F0CF71200FC2001 = 18.05.1220.33.001024
E00AE440F5499FF4499FEB3F555555555555D53FABAAAAAAAAAAEA3F0CF71200542301 = 18.05.1220.43.001024
E00AE440832DD8822DD8EB3F555555555555D53FABAAAAAAAAAAEA3F0CF71200AC2501 = 18.05.1220.53.001024
E00AE440111111111111EC3F555555555555D53FABAAAAAAAAAAEA3F0CF71200042801 = 18.05.1221.03.001024
E00AE4409FF4499FF449EC3F555555555555D53FABAAAAAAAAAAEA3F0CF712005C2A01 = 18.05.1221.13.001024
E00AE4402ED8822DD882EC3F555555555555D53FABAAAAAAAAAAEA3F0CF71200B42C01 = 18.05.1221.23.001024
E00AE440BCBBBBBBBBBBEC3F555555555555D53FABAAAAAAAAAAEA3F0CF712000C2F01 = 18.05.1221.33.001024
E00AE440176CC1166CC1EC3F555555555555D53FABAAAAAAAAAAEA3F0CF71200482F01 = 18.05.1221.34.001024


E00AE440E42DCDC10BABDA3F555555555555D53FABAAAAAAAAAAEA3F0CF71200A28C00 = 18.05.1210.00.021024
E00AE4401DB1EFD86CABDA3F555555555555D53FABAAAAAAAAAAEA3F0CF71200A48C00 = 18.05.1210.00.041024
E00AE440563412F0CDABDA3F555555555555D53FABAAAAAAAAAAEA3F0CF71200A68C00 = 18.05.1210.00.061024
E00AE44090B734072FACDA3F555555555555D53FABAAAAAAAAAAEA3F0CF71200A88C00 = 18.05.1210.00.081024
E00AE440C93A571E90ACDA3F555555555555D53FABAAAAAAAAAAEA3F0CF71200AA8C00 = 18.05.1210.00.101024
E00AE44002BE7935F1ACDA3F555555555555D53FABAAAAAAAAAAEA3F0CF71200AC8C00 = 18.05.1210.00.121024
E00AE4403C419C4C52ADDA3F555555555555D53FABAAAAAAAAAAEA3F0CF71200AE8C00 = 18.05.1210.00.141024
E00AE44075C4BE63B3ADDA3F555555555555D53FABAAAAAAAAAAEA3F0CF71200B08C00 = 18.05.1210.00.161024
E00AE440AE47E17A14AEDA3F555555555555D53FABAAAAAAAAAAEA3F0CF71200B28C00 = 18.05.1210.00.181024
E00AE440E7CA039275AEDA3F555555555555D53FABAAAAAAAAAAEA3F0CF71200B48C00 = 18.05.1210.00.201024

序文:私は自分の能力を最大限にチェックしましたが、扱っている16進数が「標準」の16進数の日付/時刻形式(time_t、time_64、DATE、HexWorkshopで計算されたDOSの日付/時刻)に準拠していないようです。DCodeタイムデコーダアプリケーションによってチェックされるすべてのフォーマットとして)。

社内の文書化されていないソフトウェアによって生成された適切なファイル形式を処理するためのバッチ会話ユーティリティを作成しようとしています。私には、長い間忘れられていて、同様に文書化されていないユーティリティを使用してファイルを変換する機能がありますが、これは時間のかかる面倒なプロセスであり、自動化したいと思います。

16進エディタを使用するだけで、日付と時刻が元のファイルにエンコードされる方法を除いて、必要なものすべてを見つけることができました。編集して日付を変更し、別のファイルに挿入して日付を転送できるため、後のデータを表す27バイトの16進シーケンスを特定できたと確信しています。ただし、日付が不明なファイルを隠蔽できるように、実際にどのように生成されるのかを理解したいと思います。

以下は、16進シーケンスのサンプル(左)と、変換されたファイル(右の形式:DD.MM.YYHH.MM.SS)に生成されるタイムスタンプです。ソフトウェアによって生成されたファイルから直接取得されたものもあれば、日付がどのように変更されるかを確認するために手動で編集したシーケンスもあります。年が12を超えるものはすべて、私がそのヘクスを修正した結果でした。誰か提案はありますか?私はあまりプログラマーではなく、ここで頭を悩ませています。

80D8E340ABAAAAAAAAAAEE3F555555555555DD3FABAAAAAAAAAAEE = 11.04.1123.00.001024

E008E440555555555555D53F555555555555D53FABAAAAAAAAAAEA = 02.05.1208.00.001024

E001E440555555555555D53F555555555555D53FABAAAAAAAAAAEA = 07.03.1208.00.001024

600AE440000000000000D83FABAAAAAAAAAADA3FABAAAAAAAAAAEE = 14.05.1209.00.001024

610AE440000000000000D83FABAAAAAAAAAADA3FABAAAAAAAAAAEE = 14.05.1209.00.001024

6001E440000000000000D83FABAAAAAAAAAADA3FABAAAAAAAAAAEE = 03.03.1209.00.001024

0101E440555555555555D53F555555555555D53FABAAAAAAAAAAEA = 29.02.1208.00.001024

01010140555555555555D53F555555555555D53FABAAAAAAAAAAEA = 01.01.0008.00.001024

01010101555555555555D53F555555555555D53FABAAAAAAAAAAEA = 30.12.9908.00.001024

600AE440000000000000D83FABAAAAAAAAAADA3FABAAAAAAAAAAEE = 14.05.1209.00.001024

60FFE440000000000000D83FABAAAAAAAAAADA3FABAAAAAAAAAAEE = 25.09.1709.00.001024

60FFE440000000000000D83FABAAAAAAAAAADA3FABAAAAAAAAAAEA = 25.09.1709.00.001024

60FFE440000000000000D83FABAAAAAAAAAADA3FABFFFFFFFFFFEA = 25.09.1709.00.001024

60FFE440000000000000D83FAB0000000000DA3FAB0000000000EA = 25.09.1709.00.001024

01FFE440000000000000D83FAB0000000000DA3FAB0000000000EA = 22.09.1709.00.001024

02FFE440000000000000D83FAB0000000000DA3FAB0000000000EA = 22.09.1709.00.001024

10FFE440000000000000D83FAB0000000000DA3FAB0000000000EA = 22.09.1709.00.001024

20FFE440000000000000D83FAB0000000000DA3FAB0000000000EA = 23.09.1709.00.001024

30FFE440000000000000D83FAB0000000000DA3FAB0000000000EA = 23.09.1709.00.001024

40FFE440000000000000D83FAB0000000000DA3FAB0000000000EA = 24.09.1709.00.001024

50FFE440000000000000D83FAB0000000000DA3FAB0000000000EA = 24.09.1709.00.001024

60FFE440000000000000D83FAB0000000000DA3FAB0000000000EA = 25.09.1709.00.001024

600AE440000000000000D83FAB0000000000DA3FAB0000000000EA = 14.05.1209.00.001024

60FAE440000000000000D83FAB0000000000DA3FAB0000000000EA = 16.08.1709.00.001024

60FAE540000000000000D83FAB0000000000DA3FAB0000000000EA = 26.03.2309.00.001024

60FFE440FFFFFFFFFFFFD83FAB0000000000DA3FAB0000000000EA = 25.09.1709.22.301024

60FFE440010101010101D83FAB0000000000DA3FAB0000000000EA = 25.09.1709.00.051024

40DEE340ABAAAAAAAAAAE63FABAAAAAAAAAACA3FABAAAAAAAAAAE6 = 27.05.1117.00.001024

60DEE340ABAAAAAAAAAAE63FABAAAAAAAAAACA3FABAAAAAAAAAAE6 = 28.05.1117.00.001024

800AE440555555555555D53F555555555555D53FABAAAAAAAAAAEA = 15.05.1208.00.001024

また、最後の14バイトは特に重要ではないようです(元のファイルでは変更されていますが)。たとえば、次のシーケンスは、変換後に同じ出力になります。変換中にこれらの値が丸められているのか、単に削除されているのかはわかりません。とにかく、月、日、年、時、分、秒を判別できれば、その部分は重要ではありません。

E008E440555555555555D53F555555555555FFFFFFFFFFFFFFFFFF = 02.05.1208.00.001024

E008E440555555555555D53FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF = 02.05.1208.00.001024

E008E440555555555555D53F000000000000000000000000000000 = 02.05.1208.00.001024

以下は、ソースソフトウェアからのみ生成されたものであり、手動で変更されたものではありません。

40DEE340ABAAAAAAAAAAE63FABAAAAAAAAAACA3FABAAAAAAAAAAE6 = 27.05.1117.00.001024

60DEE340ABAAAAAAAAAAE63FABAAAAAAAAAACA3FABAAAAAAAAAAE6 = 28.05.1117.00.001024

80D8E340ABAAAAAAAAAAEE3F555555555555DD3FABAAAAAAAAAAEE = 11.04.1123.00.001024

E008E440555555555555D53F555555555555D53FABAAAAAAAAAAEA = 02.05.1208.00.001024

600AE440000000000000D83FABAAAAAAAAAADA3FABAAAAAAAAAAEE = 14.05.1209.00.001024

800AE440555555555555D53F555555555555D53FABAAAAAAAAAAEA = 15.05.1209.00.001024

以下は、さまざまな時間のファイルからの変更されていない16進配列です。

A0B7E340ABAAAAAAAAAAE63FABAAAAAAAAAACA3FABAAAAAAAAAAE6 = 22.07.1016.00.001024

C0B7E340777777777777E73FABAAAAAAAAAACA3FABAAAAAAAAAAE6 = 23.07.1017.36.001024

A0EFE340CDCCCCCCCCCCE63FABAAAAAAAAAACA3FABAAAAAAAAAAE6 = 13.10.1117.06.001024

80EFE340BCBBBBBBBBBBE63FABAAAAAAAAAACA3FABAAAAAAAAAAE6 = 12.10.1117.03.001024

C0EEE340ABAAAAAAAAAAE13FABAAAAAAAAAACA3FABAAAAAAAAAAE6 = 06.10.1113.15.001024

60D5E340ABAAAAAAAAAACA3FABAAAAAAAAAACA3FABAAAAAAAAAAE6 = 17.03.1105.00.001024

どんな助けや提案も大歓迎です。

4

1 に答える 1

3

日付/時刻形式のデコードをある程度進めました。具体的には、日付は読めますが、まだ時刻を読んでいません。

このフォーマットには、多くの無関係な、おそらくはゴミのデータが含まれていると思います。そして、ほんの数バイトだけが重要です。

日付はバイト0、1、および2のみ(最初の3バイト)でエンコードされます。

最初の4バイトをリトルエンディアンのダブルワード(4バイト)の量xとして解釈することで説明するのが最も簡単です。次に、1989-09-17からのオフセットとしての日数は、次の式で与えられます。

d =(x&0x000FFFFF)>> 5

つまり、下位20ビットのみを確認し、そのうち下位5ビットは無視します。これを要約すると、日番号はビット5〜19でエンコードされます(特に、15ビットの数量です)。

おそらく時間はデータの異なる位置で同様にエンコードされますが、異なる時間の例はそれほど多くなく、私も眠る必要があります!


さて、あなたが提供する既存のデータの多く(手動で生成したものではありません)は、時間値を改ざんしているようです(おそらく、関連するプログラムの1つによるローカルタイムゾーン変換の結果です)。しかし、あなたが生成したものを続けるだけで、時間は次のようにエンコードされているようです:

バイト9と10(つまり、10番目と11番目のバイト)を取り、それらをリトルエンディアンの単語xとして扱います。上位2ビットをマスクして、14ビットの量を残します。

t = x&0x3FFF

これは時刻を表します。これは、0が00:00:00に対応し、(1つ過ぎた)最大値16384が24:00:00に対応するような単位です。これにより、約5.3秒の解像度が得られます。

言い換えると、

s =t/16384。*24。*60。*60。

真夜中を過ぎた秒数として時間を示します。


さて、あなたが今提供した余分なバイトを見ると、バイト32と33(最後の2バイト)は代替のタイムスタンプのようです。再びリトルエンディアンの単語xとして扱い、真夜中からの秒数を直接エンコードします。0の場合、上記のタイムスタンプが代わりに使用されているようです。オーバーフローするまでの時間は18:22までしか記述できないようです。したがって、前のバイトから余分なビットを使用する可能性もありますか?これ以上言うには十分なデータがありません。


バイト34は上記の続きです。つまり、バイト32、33、および34をリトルエンディアンの3バイトの量として受け取り、少なくともゼロ以外の場合は、上記のように真夜中からの秒数を示します。

于 2012-05-16T03:48:37.517 に答える