CoolFace
Apppublic

SSamson/malware_detection_Project

sourceHugging Facecc-by-nc-4.0updated 8mo agoView on Hugging Face
1likes
binary2image.py92 linesDownload Raw Back to root
1"""Binary to Image Converter."""2import os3from argparse import ArgumentParser4from PIL import Image5from tqdm import tqdm6 7 8def get_binary_data(filename):9    """Extract byte values from binary executable file and store them in list.10 11    :param file: executable file12    :return: byte value list13    """14    binary_values = []15    with open(filename, "rb") as file:16        while byte := file.read(1):17            binary_values.append(ord(byte))18 19    return binary_values20 21 22def get_size(data_length):23    """Obtain image size.24 25    Source: Malware images: visualization and automatic classification.26    :param data_length: Number of bytes in file27    :return: size as integer tuple28    """29    size = data_length30    kib = 2**1031 32    if size < 10 * kib:33        width = 3234    elif size < 30 * kib:35        width = 6436    elif size < 60 * kib:37        width = 12838    elif size < 100 * kib:39        width = 25640    elif size < 200 * kib:41        width = 38442    elif size < 500 * kib:43        width = 51244    elif size < 1000 * kib:45        width = 76846    else:47        width = 102448 49    height = size // width + 150 51    return (width, height)52 53 54def save_file(folder, filename, data, size):55    """Save PIL image to disk.56 57    :param folder: folder where images will be saved58    :param filename: binary filename59    :param data: grayscale image60    :param size: image size61    """62    image = Image.new("L", size)63    image.putdata(data)64 65    name, _ = os.path.splitext(filename)66    name = os.path.basename(name)67    imagename = os.path.join(folder, name + ".png")68 69    image.save(imagename)70 71 72if __name__ == "__main__":73 74    parser = ArgumentParser(75        description="Transform all files in a folder into PNG images"76    )77    parser.add_argument("input_folder", help="Folder with the original files")78    parser.add_argument(79        "output_folder", help="Folder where the images will be saved"80    )81    args = parser.parse_args()82 83    files = [84        os.path.join(args.input_folder, bin_file)85        for bin_file in os.listdir(args.input_folder)86    ]87    os.makedirs(args.output_folder, exist_ok=True)88    for bin_file in tqdm(files):89        greyscale_data = get_binary_data(bin_file)90        bin_size = get_size(len(greyscale_data))91        save_file(args.output_folder, bin_file, greyscale_data, bin_size)92