extractors/strelastealer/strela_stealer_payload_extractor.py (43 lines of code) (raw):
# coding: "utf-8"
import argparse
import pathlib
import traceback
from nightmare.malware.strelastealer import payload as ss
from nightmare import utils
def parse_arguments() -> argparse.Namespace:
"""
Parse command line arguments.
:return: Parsed command line arguments
"""
parser = argparse.ArgumentParser("StrelaStealer payload extractor")
group = parser.add_mutually_exclusive_group(required=True)
group.add_argument(
"-f", "--file", type=pathlib.Path, help="StrelaStealer file path"
)
group.add_argument(
"-d", "--directory", type=pathlib.Path, help="StrelaStealer directory"
)
parser.add_argument(
"-o",
"--outdir",
type=pathlib.Path,
help="StrelaStealer output directory",
required=True,
)
return parser.parse_args()
def unpack_and_write(file_path: pathlib.Path, output_dir: pathlib.Path) -> None:
try:
with open(file_path, "rb") as file:
content = ss.extract(file)
output_path = (output_dir / file_path.name).with_suffix(".bin")
utils.write_files(output_dir, {output_path: content})
print(f"[+] Successfully extracted to {output_path}")
except Exception as e:
print(f"Failed to extract from {file_path}")
traceback.print_exc()
print()
def main() -> None:
args = parse_arguments()
if args.file:
unpack_and_write(args.file, args.outdir)
elif args.directory:
utils.map_files_directory(
args.directory, lambda file_path: unpack_and_write(file_path, args.outdir)
)
if __name__ == "__main__":
main()