2016-05-25 4 views
0

私は、実行可能ファイルからすべてのMS-DOS実行可能ファイルを特定し、フィルタリングしようとしています。MS-DOS実行ファイルを識別する安全な方法はありますか?

私が知る限り、PEはMS-DOSにはないヘッダーでMS-DOSとは異なりますが、何らかの理由で私が持っているサンプルのいくつかはMS-DOSとしてTrIDによって認識されます彼らはPEです。

私は、件名に任意のドキュメントを見つけることができない、と私は多くのことを検索。

ありがとうございます!

+0

http://delphidabbler.com/articles?article=8 –

答えて

0

MS-DOSの実行ファイルを特定の問題は、技術的にはWindowsのPECOFF実行可能ファイルは、有効なMS-DOSの実行ファイルであるということです。 PECOFF実行ファイルには "MS-DOS Stub"という接頭辞が付いています。これは、ほとんどの実行可能ファイルで「このプログラムはDOSモードで実行できません」というメッセージを表示する完全なMS-DOSプログラムです。

がそうさ最初にすることは、MS-DOS実行ファイルヘッダを見て、それが有効かどうかどうかを確認することです。これは、(ラルフ・ブラウンの割り込み一覧から)次のようになります。

00h 2 BYTEs .EXE signature, either "MZ" or "ZM" (5A4Dh or 4D5Ah) 
     (see also #01593) 
02h WORD number of bytes in last 512-byte page of executable 
04h WORD total number of 512-byte pages in executable (includes any 
     partial last page) 
06h WORD number of relocation entries 
08h WORD header size in paragraphs 
0Ah WORD minimum paragraphs of memory required to allocate in addition 
     to executable's size 
0Ch WORD maximum paragraphs to allocate in addition to executable's size 
0Eh WORD initial SS relative to start of executable 
10h WORD initial SP 
12h WORD checksum (one's complement of sum of all words in executable) 
14h DWORD initial CS:IP relative to start of executable 
18h WORD offset within header of relocation table 
     40h or greater for new-format (NE,LE,LX,W3,PE,etc.) executable 
1Ah WORD overlay number (normally 0000h = main program) 

チェックするためのキー値は、オフセット00Hと18時間です。ファイルの先頭の2バイト、署名は "MZ"または54ADhでなければなりません。 "ZM"はMS-DOSプログラムでも動作しますが、WindowsではPECOFF実行ファイルでより一般的な "MZ"署名を使用する必要があります。次にチェックするのは、オフセット18hの16ビット値です。これがPECOFF実行可能ファイルであるためには、40h以上である必要があります。オフセット00Hと18時間チェックで値が出て、その後行うには、次のものがオフセット3CHで32ビットの値を読み取ることであれば

。これには、実際のP​​ECOFFヘッダーのオフセットが含まれます。次に、ヘッダーの星印 "PE¥0¥0"、つまり2つの文字 "P"と "E"と2つの0バイトを確認する必要があります。

16ビットのWindows実行ファイル、VxD、および32ビットOS/400用に使用された "NE"、 "LE"、 "LX"のように、オフセット3Chで指定された位置に、 2つの実行可能ファイル。これらの他の実行形式もMS-DOSスタブを持ち、同じ方法で実際のヘッダーを配置します。

関連する問題