clamav/unit_tests/input/xor_testfile.py
Alexander Sulfrian c5c3b7558e CMake: Fix race condition with parallel builds
If running multiple parallel processes of "xor_testfile.py" there was a
race condition between checking for the existence of the directory and
creating it. Now this is handled as a dependency in CMake.
2021-09-27 13:03:24 -07:00

69 lines
1.9 KiB
Python
Executable file

#!/usr/bin/env python3
"""
Decrypt (or encrypt) a file with a hardcoded xor key (below).
This feature is to prevent other malware detection engines from alerting on our
suspicious-looking-but-benign test files, such as the packed executables.
The test files are xor'ed so our source and source tarball aren't quarantined.
"""
import argparse
import os
from pathlib import Path
import sys
xor_key = b'\
bhcftqarohcdiayfohalohkgmoefxrrg\
fnczssgybajvkzjaahpfrlqsratkhhfv\
pxytculmwgmtyzujlbjlgrhtwxhzpjaz\
libbwepffyjyfkjwzyofgpopoueurinp\
dujkphxwhnaxfkaiwrpzdqsnwughtejr\
'
def main():
parser = argparse.ArgumentParser()
parser.add_argument("--in_file", help="Input file", required=True)
parser.add_argument("--out_file", help="Output file (will over-write!)", required=True)
args = parser.parse_args()
in_file = Path(args.in_file)
if not in_file.exists():
print("Error: Input file to be XOR'd does not exist: {}".format(in_file))
sys.exit(1)
out_file = Path(args.out_file)
if out_file.exists():
print("Warning: Replacing existing file: {}".format(out_file))
os.remove(str(out_file))
in_file_bytes = in_file.read_bytes()
out_file_bytes = bytearray()
# XOR the source file with the XOR key
i = 0
while i < len(in_file_bytes):
for j in range(0, len(xor_key)):
if i + j == len(in_file_bytes):
break
out_file_bytes.append(in_file_bytes[i + j] ^ xor_key[j])
i += len(xor_key)
# Write out the result to the destination file.
try:
with out_file.open('w+b') as out_file_fd:
out_file_fd.write(out_file_bytes)
print("Created: '{}'".format(out_file))
except Exception as exc:
print("Failed to create file: {}. Exception: {}".format(out_file, exc))
sys.exit(1)
sys.exit(0)
if __name__ == "__main__":
main()