Security Record

セキュリティ全般に関する情報を発信しています

FCrackZipによるZIPファイルのパスワードを解読する手順

事前準備

FCrackZipによるZIPファイルのパスワードを解読してみようと思います。
ZIPファイルのパスワード解読は他にもJohn the Ripperなどでも実施することが出来ます。

FCrackZipのインストール

FCrackZipは以前はKali Linuxには標準でインストールされていたようですが、現在は別途aptコマンドででインストールする必要があります。

下記コマンドを実行してインストールします。

┌──(root㉿kali)-[/home/kali/fcrack]
└─# apt install fcrackzip 
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています... 完了        
状態情報を読み取っています... 完了        
提案パッケージ:
  wordlist
以下のパッケージが新たにインストールされます:
  fcrackzip
アップグレード: 0 個、新規インストール: 1 個、削除: 0 個、保留: 0 個。
28.9 kB のアーカイブを取得する必要があります。
この操作後に追加で 82.9 kB のディスク容量が消費されます。
取得:1 http://ftp-srv2.kddilabs.jp/Linux/packages/kali/kali kali-rolling/main amd64 fcrackzip amd64 1.0-11 [28.9 kB]
28.9 kB を 1秒 で取得しました (34.6 kB/s)
以前に未選択のパッケージ fcrackzip を選択しています。
(データベースを読み込んでいます ... 現在 402824 個のファイルとディレクトリがインストールされています。)
.../fcrackzip_1.0-11_amd64.deb を展開する準備をしています ...
fcrackzip (1.0-11) を展開しています...
fcrackzip (1.0-11) を設定しています ...
man-db (2.11.2-2) のトリガを処理しています ...
kali-menu (2023.2.3) のトリガを処理しています ...

テスト用に適当なテキストファイルを作成する

FCrackZipのテスト用に適当なテキストファイルを作成します。

┌──(kali㉿kali)-[~/fcrack]
└─$ echo 1> fcrackzip_test.txt

zipコマンドの確認

zipコマンドを確認します-eオプションを付与することで暗号化されるようです。

┌──(root㉿kali)-[/home/kali/fcrack]
└─# zip -h
Copyright (c) 1990-2008 Info-ZIP - Type 'zip "-L"' for software license.
Zip 3.0 (July 5th 2008). Usage:
zip [-options] [-b path] [-t mmddyyyy] [-n suffixes] [zipfile list] [-xi list]
  The default action is to add or replace zipfile entries from list, which
  can include the special name - to compress standard input.
  If zipfile and list are omitted, zip compresses stdin to stdout.
  -f   freshen: only changed files  -u   update: only changed or new files
  -d   delete entries in zipfile    -m   move into zipfile (delete OS files)
  -r   recurse into directories     -j   junk (don't record) directory names
  -0   store only                   -l   convert LF to CR LF (-ll CR LF to LF)
  -1   compress faster              -9   compress better
  -q   quiet operation              -v   verbose operation/print version info
  -c   add one-line comments        -z   add zipfile comment
  -@   read names from stdin        -o   make zipfile as old as latest entry
  -x   exclude the following names  -i   include only the following names
  -F   fix zipfile (-FF try harder) -D   do not add directory entries
  -A   adjust self-extracting exe   -J   junk zipfile prefix (unzipsfx)
  -T   test zipfile integrity       -X   eXclude eXtra file attributes
  -y   store symbolic links as the link instead of the referenced file
  -e   encrypt                      -n   don't compress these suffixes
  -h2  show more help

zipコマンドを実行して圧縮する

-eオプションを付与してzipコマンドを実行します ここではpasswdというパスワードを指定しました。

┌──(root㉿kali)-[/home/kali/fcrack]
└─# zip -e fcrack.zip fcrackzip_test.txt 
Enter password: 
Verify password: 
  adding: fcrackzip_test.txt (stored 0%)

FCrackZipによるパスワード解析

fcrackzip コマンドの確認

FCrackZipを実行する前にどのようなオプションがあるか確認してみます。

┌──(root㉿kali)-[/home/kali/fcrack]
└─# fcrackzip -h             

fcrackzip version 1.0, a fast/free zip password cracker
written by Marc Lehmann <pcg@goof.com> You can find more info on
http://www.goof.com/pcg/marc/

USAGE: fcrackzip
          [-b|--brute-force]            use brute force algorithm
          [-D|--dictionary]             use a dictionary
          [-B|--benchmark]              execute a small benchmark
          [-c|--charset characterset]   use characters from charset
          [-h|--help]                   show this message
          [--version]                   show the version of this program
          [-V|--validate]               sanity-check the algorithm
          [-v|--verbose]                be more verbose
          [-p|--init-password string]   use string as initial password/file
          [-l|--length min-max]         check password with length min to max
          [-u|--use-unzip]              use unzip to weed out wrong passwords
          [-m|--method num]             use method number "num" (see below)
          [-2|--modulo r/m]             only calculcate 1/m of the password
          file...                    the zipfiles to crack

methods compiled in (* = default):

 0: cpmask
 1: zip1
*2: zip2, USE_MULT_TAB

fcrackzip コマンドの実行

パスワード解析を実行します

┌──(root㉿kali)-[/home/kali/fcrack]
└─# fcrackzip -u -v -l 6-10 fcrack.zip 
found file 'fcrackzip_test.txt', (size cp/uc     13/     1, flags 9, chk b5a8)


PASSWORD FOUND!!!!: pw == aaawsG

パスワードが見つかったようです。pw == passwdと表示される想定でしたが、全く違う文字列のパスワードが見つかったと表示されています。なんでだろう?

念のためunzipコマンドを実行してFCrackZipが見つけたパスワード「aaawsG」を入力してみようと思います。

┌──(root㉿kali)-[/home/kali/fcrack]
└─# unzip fcrack.zip 
Archive:  fcrack.zip
[fcrack.zip] fcrackzip_test.txt password: 
 extracting: fcrackzip_test.txt   

FCrackZipが見つけたパスワードで無事に解凍に成功するようです。

┌──(root㉿kali)-[/home/kali/fcrack]
└─# unzip fcrack.zip 
Archive:  fcrack.zip
[fcrack.zip] fcrackzip_test.txt password: 
password incorrect--reenter: 

ちなみにパスワードが間違っている場合は上記のように表示されます。

aaawsGというパスワードを設定した覚えがないので、自分で設定したpasswdで解凍できるか確認してみます。

┌──(root㉿kali)-[/home/kali/fcrack]
└─# unzip fcrack.zip
Archive:  fcrack.zip
[fcrack.zip] fcrackzip_test.txt password: 
replace fcrackzip_test.txt? [y]es, [n]o, [A]ll, [N]one, [r]ename: y
 extracting: fcrackzip_test.txt      

passwdでも解凍に成功したようです。 どうやら、passwdaaawsGどちらでも解凍出来るようです。

まとめ

zipファイルのパスワードを忘れた際など最終手段として使えるかもしれません。 今回の検証はちょっと謎な結果になりましたが、一旦以上とします。