最近、アクセスが必要ないくつかのファイルを含むZipアーカイブを復元しましたが、パスワードを思い出せません。私が覚えているのは、パスワードが短く(約3〜4文字)、小文字しか含まれておらず、数字のみだった)ことです。ただし、リッパージョンには、この特定の状況に対応するインクリメンタルモードはありません。そこに最も近いのはlanmanです。これには、大文字を含めることで、可能なパスワードのセットが劇的に増加します。
たとえば、john.confファイルを編集して、特定のモードが4文字のみになるようにできますが、試行する文字セットをカスタマイズする方法がわかりません。どうすればこれを行うことができますか?
インクリメンタルには、実際には小文字+数値用の事前定義モードがあります。
[Incremental:LowerNum]
File = $JOHN/lowernum.chr
MinLen = 1
MaxLen = 13
CharCount = 36
ドキュメントから :
「小文字」(小文字と数字、合計36)
MinLen
とMaxLen
を調整するだけです。
カスタマイズされた文字セットを使用して独自のchr
ファイルを作成する場合は、次のようにします。
john --pot=YOUR.pot --make-charset=YOUR_NEW_FILE.chr --external=filter_lowernum
filter_lowernum
は、chr
ファイルに含める文字を決定するフィルターです。 john.conf
(下 [List.External:Filter_LowerNum]
)、そして 独自のフィルターを作成する もあります。 LowerNumのコードは次のようになります。
[List.External:Filter_LowerNum]
void filter()
{
int i, c;
i = 0;
while (c = Word[i++])
if (((c < 'a' || c > 'z') && (c < '0' || c > '9')) || i > 13) {
Word = 0; return;
}
}
次に、インクリメンタルフィルターを構成に追加します。
次のpythonコードを実行してこれを行うことができます
import zipfile,sys,time
import itertools
def extractFile(zFile, password):
try:
answer= zFile.extractall(pwd=password)
print 'Fount password : ', password
return True
except:
#print password + " was incorrect"
return False
def main(ifile):
zFile = zipfile.ZipFile(ifile)
pass_str = "abcdebcdefghijklmnopqrstuvwxyz0123456789"
for pass_len in range(1,5):
passwords = itertools.permutations(pass_str,pass_len)
for password in passwords:
#print password
#time.sleep(.01)
password = ''.join(password)
sys.stdout.write("\r checking .. %s" % password )
sys.stdout.flush()
if (extractFile(zFile, password)):
print "checked "+password+" ..."
sys.exit()
if __name__ == '__main__':
try:
ifile = sys.argv[1]
except:
print "please run like 'python python-file-name.py Zip-file-name.Zip'"
sys.exit()
main(ifile)
このプログラムは外部ライブラリを必要としません。その純粋なpython。 llkeを実行するだけ
python python-file-name.py Zip-file-name.Zip
John the Ripper(JtR)を使用すると、次のコマンドでZipファイルのパスワードを見つけることができます。
Zip2john.exe example.Zip > hash.txt
john.exe --incremental=LowerNum hash.txt