メモです

バイナリとかを調べてみます

p.19 表層解析-ファイル形式の判別(「初めてのマルウェア解析」)

2.1ファイル形式の判別

  • ファイルシグネチャとは、一意性を持つバイト列のことでファイルのヘッダに書き込まれている。
  • PEファイルなら、ファイルの最初の2バイトにMZ(4D 5A)というファイルシグネチャが付く。
バイナリエディタ

https://mh-nexus.de/en/hxd/
HxDでHxDを開いてみると、

ファイルの先頭2バイトがMZ(4D 5A)となっていることがわかる。

UbuntuでxxdコマンドでHxDを開いてみると、

$ xxd -g 1 HxD.exe | less


こちらでも、ファイルの先頭2バイトがMZ(4D 5A)となっていることがわかる。

ファイル識別ツール
  • fileコマンド(Linux
# 32ビットの実行ファイル(PE32)
$ file hello86.exe 
hello86.exe: PE32 executable (console) Intel 80386, for MS Windows

# 64ビットの実行ファイル(PE32+)
$ file hello64.exe 
hello64.exe: PE32+ executable (console) x86-64, for MS Windows

# 64ビットの実行ファイル(PE32+)で、GUI
$ file HxD.exe 
HxD.exe: PE32+ executable (GUI) x86-64, for MS Windows

https://ntcore.com/files/CFF_Explorer.zip
ダウンロードしたzipを展開して、
"CFF Explorer.exe"
これを実行するだけ、
そして、Openで調べたいファイルを選択すると、

File type Portable Executable 64
File type Portable Executable 32
MD5 11BFE8942E084DF75524F56204454199
SHA1 8FE3F4827F21E331AAFA0FA2AA8B2FE562E65CD8

とか表示してくれる。
が、
ConsoleなのかGUIなのかは表示してくれない気がする。

Python

python-magicモジュールを使う。

>>> import magic
>>> magic.from_file(r'./hello86.exe')
'PE32 executable (console) Intel 80386, for MS Windows'

>>> magic.from_file(r'./hello64.exe')
'PE32+ executable (console) x86-64, for MS Windows'

>>> magic.from_file(r'./HxD.exe')
'PE32+ executable (GUI) x86-64, for MS Windows'