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