Xavier Dupuis

35 papers A 1C 19Misc 2Journal 10Unranked 3
YearRankTypeTitle / Venue / Authors
2024 C conf
IGARSS
Xavier De Milly, Hubert Cantalloube, Jean-François Nouvel, Nicolas Castet, Olivier Boisot, Xavier Dupuis
2024 A conf
AISTATS
Xavier Dupuis, Patrick Tardivel
2023 J jnl
Numerische Mathematik
Elisa Calzola, Elisabetta Carlini, Xavier Dupuis, Francisco J. Silva
2023 C conf
IGARSS
Steve Tyler, Xavier Dupuis, Régis Guinvarc'h, Laetitia Thirion-Lefevre
2023 C conf
IGARSS
Xavier De Milly, Jean-François Nouvel, Hubert Cantalloube, Nicolas Castet, Olivier Boisot, Xavier Dupuis
2023 C conf
IGARSS
Steve Tyler, Xavier Dupuis, Régis Guinvarc'h, Laetitia Thirion-Lefevre
2023 J jnl
SIAM J. Optim.
Xavier Dupuis, Samuel Vaiter
2022 C conf
IGARSS
Steve Tyler, Xavier Dupuis, Régis Guinvarc'h, Laetitia Thirion-Lefevre
2022 C conf
IGARSS
Frédéric Brigui, Sébastien Angélliaume, Nicolas Castet, Xavier Dupuis, Philippe Martineau
2021 J jnl
CoRR
Elisa Calzola, Elisabetta Carlini, Xavier Dupuis, Francisco J. Silva
2019 C conf
IGARSS
Xavier Dupuis, Valentine Wasik, Alexandre Alakian, Dominique Dubucq
2016 C conf
IGARSS
Irena Hajnsek, Matteo Pardini, Ralf Horn, Rolf Scheiber, Konstantinos Papathanassiou, Pascale Dubois-Fernandez, Rémi Baqué, Xavier Dupuis, Tania Casal
2014 J jnl
SIAM J. Control. Optim.
J. Frédéric Bonnans, Xavier Dupuis, Laurent Pfeiffer
2014 C conf
IGARSS
Xavier Dupuis, Philippe Martineau
2013 J jnl
J. Optim. Theory Appl.
J. Frédéric Bonnans, Constanza S. Fernández de la Vega, Xavier Dupuis
2013 J jnl
IEEE Geosci. Remote. Sens. Lett.
Nicolas N. Baghdadi, Pascale Dubois-Fernandez, Xavier Dupuis, Mehrez Zribi
2013 C conf
IGARSS
Jean-François Nouvel, Pascale Dubois-Fernandez, Xavier Dupuis
2012 C conf
IGARSS
Jean-François Nouvel, Bernard Vaizan, Olivier Ruault du Plessis, Xavier Dupuis
2011 C conf
IGARSS
Lars M. H. Ulander, Anders Gustavsson, Pascale Dubois-Fernandez, Xavier Dupuis, Johan E. S. Fransson, Johan Holmgren, Jörgen Wallerman, Leif E. B. Eriksson, Gustaf Sandberg, Maciej J. Soja
2009 J jnl
Proc. IEEE
Jérôme Morio, Philippe Réfrégier, François Goudail, Pascale Dubois-Fernandez, Xavier Dupuis
2008 J jnl
IEEE Trans. Geosci. Remote. Sens.
Jérôme Morio, Philippe Réfrégier, François Goudail, Pascale Dubois-Fernandez, Xavier Dupuis
2008 conf
IGARSS (4)
Philippe Dreuillet, Gregory Bonin, Olivier Ruault du Plessis, Sébastien Angélliaume, Hubert Cantalloube, Pascale Dubois-Fernandez, Xavier Dupuis, Colette Coulombeix
2008 conf
IGARSS (4)
Xavier Dupuis, Hélène Oriot, Sébastien Angélliaume
2007 J jnl
IEEE Trans. Geosci. Remote. Sens.
Jérôme Morio, François Goudail, Xavier Dupuis, Pascale Dubois-Fernandez, Philippe Réfrégier
2007 C conf
IGARSS
Xavier Dupuis, Sébastien Angélliaume, Hélène Oriot, Pascale Dubois-Fernandez, Hubert M. J. Cantalloube, Colette Coulombeix, Olivier Ruault du Plessis, Patrick Fromage, Gregory Bonin, Daniel Heuzé
2006 J jnl
IEEE Trans. Geosci. Remote. Sens.
Franck Garestier, Pascale Dubois-Fernandez, Xavier Dupuis, Philippe Paillou, Irena Hajnsek
2005 C conf
IGARSS
Franck Garestier, Isabelle Champion, Pascale Dubois-Fernandez, Philippe Paillou, Xavier Dupuis
2005 C conf
IGARSS
Franck Garestier, Pascale Dubois-Fernandez, Philippe Paillou, Xavier Dupuis
2005 C conf
IGARSS
Hubert Cantalloube, Pascale Dubois-Fernandez, Xavier Dupuis
2004 C conf
IGARSS
Pascale Dubois-Fernandez, Hubert Cantalloube, Xavier Dupuis
2003 C conf
IGARSS
Pascale Dubois-Fernandez, Xavier Dupuis, Franck Garestier, Philippe Paillou
2002 C conf
IGARSS
Pascale Dubois-Fernandez, Olivier Ruault du Plessis, D. le Coz, J. Dupas, Bernard Vaizan, Xavier Dupuis, Hubert Cantalloube, Colette Coulombeix, Cécile Titin-Schnaider, Philippe Dreuillet, J. M. Boutry, J. P. Canny, L. Kaisersmertz, J. Peyret, Philippe Martineau, M. Chanteclerc, Laurette Pastore, J. P. Bruyant
1999 Misc conf
ICASSP
Xavier Dupuis, Pierre Mathieu, Michel Barlaud
1998 conf
EUSIPCO
Xavier Dupuis, Pierre Mathieu, Michel Barlaud
1997 Misc conf
ICASSP
Pierre Mathieu, Laurent Dirat, Xavier Dupuis, Michel Barlaud
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)