現在、セキュリティ監査で Windows パスワード ハッシュを抽出するプロセスを簡素化する作業を行っています。個人的には、監査を行うときに、復元されたユーザーとそのパスワードのリストを生成するプロセスを簡単にしたいと考えています。大量のデータを比較して生成しようとしている他の人にも役立つと思います。
要点は次のとおりです。
Windows システム ファイルからすべてのデータを抽出するときは、単純化して user:hash という形式にします。このハッシュは、「a87f3a357d73085c45f9416be5787e86」などの NTLM ハッシュです。
次に、oclHashcat を使用して、ハッシュのクラックを試みます。それが辞書であろうとブルート フォースであろうと、問題ではありません。復元されたすべてのハッシュの出力を生成しますが、Hashcat は hash:password の形式で生成します。
ここに私の問題と入力が必要なものがあります.2つの入力ファイルを指定して、出力を user:password として生成したいと考えています。何百ものハッシュを持つことができますが、復元されたパスワードは数個しかないことを考えると、リストを並べ替えようとしても意味がありません。
どのデータ構造が最もメリットがあるかわかりません。配列は、大きなテーブルには非効率的すぎました。私はシリアライゼーションを調べ、ハッシュ マップとハッシュ テーブルの使用を調査してきました。ハッシュのサイズを考えると、これらの方法のいずれかを実装する運がなかったか、実装が間違っています。
現在、私は次のようにプログラムを実行しています:
program [user:hash file] [hash:password file] -o [user:password output]
そして、私は効果的にプログラムを次のように実行しようとしています(簡単に):
Load Files
// user:hash file
For each line, split by ':' delimiter
before delimiter = table1.user
after delimiter = table1.hash
// hash:password file
For each line, split by ':' delimiter
before delimiter = table2.hash
after delimiter = table2.password
// generate user:password file
Check each entry of table1 vs table2
if table1.hash = table2.hash
table1.user = output.user
table2.password = output.password
print to output "output.user:output.password"
各行をトレースし、必要なデータを簡単にトレースできるデータ構造に抽出するための効率的な方法を見つけようとしているだけです。
何か明確にする必要がある場合は、お知らせください。どんな助けでも大歓迎です!