Jaime Font

43 papers A 4B 7C 1Journal 20Unranked 9
YearRankTypeTitle / Venue / Authors
2026 J jnl
J. Syst. Softw.
Samuel Navarro, Jorge Chueca, Daniel Blasco, Carlos Cetina, Jaime Font
2024 conf
SPLC (A)
Jorge Chueca, Daniel Blasco, Carlos Cetina, Jaime Font
2024 J jnl
Softw. Pract. Exp.
Isis Roca, Jaime Font, Lorena Arcega, Carlos Cetina
2024 conf
SPLC (B)
Samuel Navarro, Antonio Iglesias, Francisca Pérez, Carlos Cetina, Jaime Font
2024 J jnl
Inf. Softw. Technol.
Jorge Chueca, Carlos Cetina, Oscar Pastor, Jaime Font
2024 J jnl
Inf. Softw. Technol.
Jorge Chueca, Javier Verón, Jaime Font, Francisca Pérez, Carlos Cetina
2023 J jnl
J. Syst. Softw.
Jorge Chueca, Jose Ignacio Trasobares, África Domingo, Lorena Arcega, Carlos Cetina, Jaime Font
2023 ch.
Handbook of Re-Engineering Software Intensive Systems into Software Product Lines
Lorena Arcega, Jaime Font, Øystein Haugen, Carlos Cetina
2023 J jnl
Multim. Tools Appl.
Daniel Blasco, Jaime Font, Francisca Pérez, Carlos Cetina
2023 ed.
CAiSE Research Projects Exhibition
Jaime Font, Lorena Arcega, José Fabián Reyes Román, Giovanni Giachetti
2022 J jnl
ACM Trans. Softw. Eng. Methodol.
Lorena Arcega, Jaime Font, Øystein Haugen, Carlos Cetina
2022 J jnl
IEEE Trans. Software Eng.
Francisca Pérez, Jaime Font, Lorena Arcega, Carlos Cetina
2021 J jnl
J. Syst. Softw.
Daniel Blasco, Jaime Font, Mar Zamorano, Carlos Cetina
2021 J jnl
J. Syst. Softw.
Jorge Echeverría, Jaime Font, Francisca Pérez, Carlos Cetina
2021 J jnl
Softw. Syst. Model.
Jaime Font, Lorena Arcega, Øystein Haugen, Carlos Cetina
2019 J jnl
Softw. Syst. Model.
Lorena Arcega, Jaime Font, Øystein Haugen, Carlos Cetina
2019 J jnl
Autom. Softw. Eng.
Francisca Pérez, Jaime Font, Lorena Arcega, Carlos Cetina
2018 J jnl
IEEE Trans. Evol. Comput.
Jaime Font, Lorena Arcega, Øystein Haugen, Carlos Cetina
2018 J jnl
Data Knowl. Eng.
Francisca Pérez, Jaime Font, Lorena Arcega, Carlos Cetina
2018 A conf
MoDELS
Lorena Arcega, Jaime Font, Carlos Cetina
2018 A conf
CAiSE
Raúl Lapeña, Jaime Font, Carlos Cetina, Oscar Pastor
2018 J jnl
Inf. Softw. Technol.
Francisca Pérez, Raúl Lapeña, Jaime Font, Carlos Cetina
2017 B conf
GPCE
Raúl Lapeña, Jaime Font, Oscar Pastor, Carlos Cetina
2017 J jnl
J. Syst. Softw.
Carlos Cetina, Jaime Font, Lorena Arcega, Francisca Pérez
2017 J jnl
Comput. Lang. Syst. Struct.
Jaime Font, Lorena Arcega, Øystein Haugen, Carlos Cetina
2017 conf
CAiSE-Forum-DC
Raúl Lapeña, Jaime Font, Carlos Cetina, Oscar Pastor
2017 B conf
ECMFA
Lorena Arcega, Jaime Font, Øystein Haugen, Carlos Cetina
2017 conf
ISD
Lorena Arcega, Jaime Font, Øystein Haugen, Carlos Cetina
2017 conf
SPLC (B)
Ana Cristina Marcén, Jaime Font, Oscar Pastor, Carlos Cetina
2016 A conf
SANER
Lorena Arcega, Jaime Font, Øystein Haugen, Carlos Cetina
2016 conf
Lorena Arcega, Jaime Font, Øystein Haugen, Carlos Cetina
2016 conf
SAM
Lorena Arcega, Jaime Font, Øystein Haugen, Carlos Cetina
2016 B conf
ICSR
Jaime Font, Lorena Arcega, Øystein Haugen, Carlos Cetina
2016 A conf
MoDELS
Jaime Font, Lorena Arcega, Øystein Haugen, Carlos Cetina
2016 B conf
SPLC
Raúl Lapeña, Jaime Font, Francisca Pérez, Carlos Cetina
2015 B conf
GPCE
Jaime Font, Lorena Arcega, Øystein Haugen, Carlos Cetina
2015 B conf
SPLC
Jaime Font, Manuel Ballarín, Øystein Haugen, Carlos Cetina
2015 B conf
SPLC
Jaime Font, Lorena Arcega, Øystein Haugen, Carlos Cetina
2015 conf
Lorena Arcega, Jaime Font, Øystein Haugen, Carlos Cetina
2015 conf
CAiSE Forum
Jorge Echeverría, Jaime Font, Carlos Cetina, Oscar Pastor
2015 J jnl
Complex Syst. Informatics Model. Q.
Jorge Echeverría, Jaime Font, Oscar Pastor, Carlos Cetina
2013 C conf
MobiQuitous
Lorena Arcega, Jaime Font, Carlos Cetina
2013 J jnl
Sensors
Lorena Arcega, Jaime Font, Carlos Cetina
redb/utils/sort_files_by_type.py
← Index redb/utils/sort_files_by_type.py python
import os
import sys
from collections import defaultdict
import tempfile
from magika import Magika
import py7zr
import pyzipper
import shutil

"""
This script is used to sort files by their type. 
It reads all the files in the provided directory and splits them into different 
directories based on their type. Mainly, it classifies the files into the following types:
- PE Binaries
- Mach-O Binaries
- ELF Binaries
- APK 
- Other Files

It outputs the count of files for each file extension and file type.

Command line example:
nohup python3 sort_files_by_type.py /mnt/samples/consilience/malware/vx-bazaar-expanded/Bazaar.2020.12 \
    /mnt/samples/consilience/malware/_sorted_samples/vx-bazaar/2020/ > \
    /mnt/samples/consilience/malware/ops-logs/20241014-SORT_FILES-bazaar_2020.12.output.log 2>&1 &
"""


def process_zip_file(filepath):
    print(f"[INFO] - Processing zip file: {filepath}")
    with tempfile.TemporaryDirectory() as temp_dir:
        try:
            with pyzipper.AESZipFile(filepath) as zf:
                zf.pwd = b"infected"
                filename = zf.namelist()[0]
                zf.extractall(temp_dir)
                extracted_zip_path = os.path.join(temp_dir, filename)
                return process_binary_file(extracted_zip_path)
        except Exception as e:
            print(f"[ERR] - Error processing zip file {filepath}: {str(e)}")
            return None


def process_7z_file(filepath):
    print(f"[INFO] - Processing 7z file: {filepath}")
    with tempfile.TemporaryDirectory() as temp_dir:
        try:
            with py7zr.SevenZipFile(filepath, mode="r", password="infected") as z:
                z.extractall(path=temp_dir)
                for root, _, files in os.walk(temp_dir):
                    for file in files:
                        extracted_file_path = os.path.join(root, file)
                        return process_binary_file(extracted_file_path)
        except Exception as e:
            print(f"[ERR] - Error processing 7z file {filepath}: {str(e)}")
            return None


def process_binary_file(filepath):
    print(f"[INFO] - Processing binary file: {filepath}")
    try:
        with open(filepath, "rb") as f:
            data = f.read(512 * 1024)  # 512KB
        return Magika().identify_bytes(data).output.ct_label
    except Exception as e:
        print(f"[ERR] - Error processing binary file {filepath}: {str(e)}")
        return "ERROR"


def count_file_extensions(path, dest_dir):
    # A defaultdict to store file extension counts
    extension_count = defaultdict(int)
    filetype_count = defaultdict(int)
    tot_files = 0

    # Walk through the directory
    for root, dirs, files in os.walk(path):
        for file in files:
            if file.startswith("."):
                continue

            tot_files += 1
            # Split the file extension from the file name
            _, ext = os.path.splitext(file)
            ext = ext.lower()

            # Count the extensions
            extension_count[ext] += 1
            filepath = os.path.join(root, file)
            filetype = ""

            if ext == ".7z":
                filetype = process_7z_file(filepath)
            elif ext == ".zip":
                filetype = process_zip_file(filepath)
            else:
                filetype = process_binary_file(filepath)

            filetype_count[filetype] += 1

            if filetype == "pebin":
                dest = os.path.join(dest_dir, "pebin")
                os.makedirs(dest, exist_ok=True)
                shutil.copy2(filepath, os.path.join(dest, file))
            elif filetype == "macho":
                dest = os.path.join(dest_dir, "macho")
                os.makedirs(dest, exist_ok=True)
                shutil.copy2(filepath, os.path.join(dest, file))
            elif filetype == "elf":
                dest = os.path.join(dest_dir, "elf")
                os.makedirs(dest, exist_ok=True)
                shutil.copy2(filepath, os.path.join(dest, file))
            elif filetype == "apk":
                dest = os.path.join(dest_dir, "apk")
                os.makedirs(dest, exist_ok=True)
                shutil.copy2(filepath, os.path.join(dest, file))
            else:
                dest = os.path.join(dest_dir, "other")
                os.makedirs(dest, exist_ok=True)
                shutil.copy2(filepath, os.path.join(dest, file))
            print(f"[STATUS] - Progres: {tot_files}/{len(files)} files processed")

    # Print the results
    # print("- File Extension Statistics:")
    # for ext, count in extension_count.items():
    #     if ext:  # To exclude files with no extension
    #         print(f"\t{ext}: {count} files")

    # if "" in extension_count:
    #     print(f'\t{extension_count[""]} files with no extension')

    print(f"- Total Number of Files: {tot_files}")
    print("\n- File Type Statistics:")
    for filetype, count in sorted(filetype_count.items()):
        print(f"\t{filetype:<15}{count:>8}")


if __name__ == "__main__":
    # Check if the path was passed as a command-line argument
    if len(sys.argv) != 3:
        print("Usage: python3 script.py <input_path> <dest_dir>")
        sys.exit(1)

    # Get the path from the command-line arguments
    input_path = sys.argv[1]
    dest_dir = sys.argv[2]

    # Check if the provided path is valid
    if not os.path.isdir(input_path):
        print(f"The path '{input_path}' is not a valid directory.")
        sys.exit(1)

    # Call the function to count file extensions
    count_file_extensions(input_path, dest_dir)