fcrackzipを使ってみた

ZIPファイルのパスワードを解析するためのツール「fcrackzip」は、Ubuntuならapt-getでインストールすることができる。

$ sudo apt-get install fcrackzip

zipファイルをパスワードつきで作る。パスワードは「test」で。

$ zip -j -D -P test log.zip sources/*.log
  adding: ddnsupdate_20120408.log (deflated 96%)
  adding: ddnsupdate_20120409.log (deflated 94%)
  adding: ddnsupdate_20120410.log (deflated 94%)
  adding: ddnsupdate_20120411.log (deflated 94%)
  adding: ddnsupdate_20120412.log (deflated 94%)
  adding: ddnsupdate_20120413.log (deflated 94%)
  adding: ddnsupdate_20120414.log (deflated 94%)
  adding: ddnsupdate_20120415.log (deflated 94%)
  adding: ddnsupdate_20120416.log (deflated 94%)
  adding: ddnsupdate_20120417.log (deflated 94%)
  adding: ddnsupdate_20120418.log (deflated 94%)
  adding: ddnsupdate_20120419.log (deflated 94%)
  adding: ddnsupdate_20120420.log (deflated 94%)
  adding: ddnsupdate_20120421.log (deflated 94%)
  adding: ddnsupdate_20120422.log (deflated 89%)

「-l 4」でパスワードの文字列長「4」を指定して解析をかける。

$ fcrackzip -l 4 log.zip 
possible pw found: test ()

文字列長を指定しないと、6文字で解析を始めるようだ。「-l 4-6」と指定すると最小4・最大6で解析させられる。
mkpasswd.plと組み合わせて、パスワードの文字列長と解析時の文字列長の組合せでどのくらい時間がかかるのか調べてみようと思ったが、時間かかりそうなので中断した。mkpasswd.plで指定できる最小サイズは7なんだけど、これだけでもブルートフォースで調べていくと壮大な試行回数がいるんだよね……。

for i in `seq ${LEN_MIN} ${LEN_MAX}`
do
	# パスワードを生成する
	zippasswd=`mkpasswd.pl -l $i`
	# ZIPファイルを作成する
	zippath=${ARCHIVE_DIR}/length_${i}.zip
	zip -P ${zippasswd} ${zippath} ${SOURCEFILES}

	# パスワードの長さがわかっている
	check_length=$i
	# パスワードの最大長がわかっている
	#check_length=$LEN_MAX
	# パスワードの最小長と最大長がわかっている
	#check_length=${LEN_MIN}-${LEN_MAX}

	# 解析する
	time fcrackzip -l $check_length $zippath
done

mkpasswd.plもapt-getでインストールできる

$ sudo apt-get install libstring-mkpasswd-perl

Perlかな?「.pl」がつかないmkpasswdもあって、使い方と機能が少し違う模様。

$ mkpasswd --help
使い方: mkpasswd [OPTIONS]... [PASSWORD [SALT]]
PASSWORD を crypt(3) で暗号化

      -m, --method=TYPE     select method TYPE
      -5                    like --method=md5
      -S, --salt=SALT       use the specified SALT
      -R, --rounds=NUMBER   use the specified NUMBER of rounds
      -P, --password-fd=NUM read the password from file descriptor NUM
                            instead of /dev/tty
      -s, --stdin           like --password-fd=0
      -h, --help            display this help and exit
      -V, --version         output version information and exit

If PASSWORD is missing then it is asked interactively.
If no SALT is specified, a random one is generated.
If TYPE is 'help', available methods are printed.

Report bugs to <md+whois@linux.it>.

$ mkpasswd .pl --help
Usage: mkpasswd.pl [-options]
    -l # | --length=#   length of password (default = 9)
    -d # | --digits=#   min # of digits (default = 2)
    -c # | --lower=#    min # of lowercase chars (default = 2)
    -C # | --upper=#    min # of uppercase chars (default = 2)
    -s # | --special=#  min # of special chars (default = 1)
    -2 | --distribute   alternate hands
	--nodigits          alias for --digits=0
	--nolower           alias for --lower=0
	--noupper           alias for --upper=0
	--nospecial         alias for --special=0