mirror of
https://github.com/hashcat/hashcat.git
synced 2025-07-23 06:58:31 +00:00
57 lines
1.8 KiB
Python
57 lines
1.8 KiB
Python
import os
|
|
import re
|
|
import glob
|
|
import argparse
|
|
|
|
def extract_hashes_from_pcl(file_path):
|
|
shiro_pattern = re.compile(br'\$shiro1\$SHA-512\$(\d+)\$[A-Za-z0-9+/=]+\$[A-Za-z0-9+/=]+')
|
|
|
|
try:
|
|
with open(file_path, 'rb') as f:
|
|
data = f.read()
|
|
|
|
matches = shiro_pattern.finditer(data)
|
|
extracted_hashes = []
|
|
|
|
for match in matches:
|
|
full_match = match.group(0).decode()
|
|
print(f'[+] Found Shiro 1 hash: {full_match}')
|
|
extracted_hashes.append(full_match)
|
|
|
|
if not extracted_hashes:
|
|
print(f"No Shiro 1 hashes found in {file_path}")
|
|
return None
|
|
|
|
return extracted_hashes
|
|
|
|
except Exception as e:
|
|
print(f"Failed to parse {file_path}: {e}")
|
|
return None
|
|
|
|
def main():
|
|
parser = argparse.ArgumentParser(description="Extract Apache Shiro 1 hashes from .pcl files for use with Hashcat.")
|
|
parser.add_argument("input_dir", help="Directory path containing the .pcl files")
|
|
parser.add_argument("output_file", help="Output file to save the hashes")
|
|
|
|
args = parser.parse_args()
|
|
|
|
pcl_files = glob.glob(os.path.join(args.input_dir, '*.pcl'))
|
|
all_hashes = []
|
|
|
|
for pcl_file in pcl_files:
|
|
print(f"Processing {pcl_file}")
|
|
hashes = extract_hashes_from_pcl(pcl_file)
|
|
if hashes:
|
|
all_hashes.extend(hashes)
|
|
|
|
if all_hashes:
|
|
with open(args.output_file, 'w') as f:
|
|
for hashcat_hash in all_hashes:
|
|
f.write(f"{hashcat_hash}\n")
|
|
print(f"Extracted hashes have been saved to {args.output_file}!\nTotal hashes: {len(all_hashes)}\nRun hashcat with mode 12150!")
|
|
else:
|
|
print("No hashes were extracted.")
|
|
|
|
if __name__ == '__main__':
|
|
main()
|