Valentina Ivanova

35 papers B 3Journal 5Unranked 20
YearRankTypeTitle / Venue / Authors
2020 ed.
VOILA@ISWC
Valentina Ivanova, Patrick Lambrix, Catia Pesquita, Vitalis Wiens
2019 J jnl
Knowl. Eng. Rev.
Huanyu Li, Zlatan Dragisic, Daniel Faria, Valentina Ivanova, Ernesto Jiménez-Ruiz, Patrick Lambrix, Catia Pesquita
2019 J jnl
J. Web Semant.
Valentina Ivanova, Patrick Lambrix, Steffen Lohmann, Catia Pesquita
2018 B conf
EKAW
Catia Pesquita, Valentina Ivanova, Steffen Lohmann, Patrick Lambrix
2018 ed.
VOILA@ISWC
Valentina Ivanova, Patrick Lambrix, Steffen Lohmann, Catia Pesquita
2018 conf
SSN@ISWC
Marjan Alirezaie, Karl Hammar, Eva Blomqvist, Mikael Nyström, Valentina Ivanova
2017 conf
ISWC (Posters, Demos & Industry Tracks)
Valentina Ivanova, Benjamin Bach, Emmanuel Pietriga, Patrick Lambrix
2017 conf
ISWC (1)
Valentina Ivanova, Benjamin Bach, Emmanuel Pietriga, Patrick Lambrix
2017 J jnl
J. Biomed. Semant.
Zlatan Dragisic, Valentina Ivanova, Huanyu Li, Patrick Lambrix
2017
Valentina Ivanova
2017 ed.
VOILA@ISWC
Valentina Ivanova, Patrick Lambrix, Steffen Lohmann, Catia Pesquita
2017 conf
OM@ISWC
Manel Achichi, Michelle Cheatham, Zlatan Dragisic, Jérôme Euzenat, Daniel Faria, Alfio Ferrara, Giorgos Flouris, Irini Fundulaki, Ian Harrow, Valentina Ivanova, Ernesto Jiménez-Ruiz, Kristian Kolthoff, Elena Kuss, Patrick Lambrix, Henrik Leopold, Huanyu Li, Christian Meilicke, Majid Mohammadi, Stefano Montanelli, Catia Pesquita, Tzanina Saveta, Pavel Shvaiko, Andrea Splendiani, Heiner Stuckenschmidt, Élodie Thiéblin, Konstantin Todorov, Cássia Trojahn, Ondrej Zamazal
2016 conf
DC@ISWC
Valentina Ivanova
2016 ed.
VOILA@ISWC
Valentina Ivanova, Patrick Lambrix, Steffen Lohmann, Catia Pesquita
2016 conf
OM@ISWC
Manel Achichi, Michelle Cheatham, Zlatan Dragisic, Jérôme Euzenat, Daniel Faria, Alfio Ferrara, Giorgos Flouris, Irini Fundulaki, Ian Harrow, Valentina Ivanova, Ernesto Jiménez-Ruiz, Elena Kuss, Patrick Lambrix, Henrik Leopold, Huanyu Li, Christian Meilicke, Stefano Montanelli, Catia Pesquita, Tzanina Saveta, Pavel Shvaiko, Andrea Splendiani, Heiner Stuckenschmidt, Konstantin Todorov, Cássia Trojahn dos Santos, Ondrej Zamazal
2016 conf
ISWC (1)
Zlatan Dragisic, Valentina Ivanova, Patrick Lambrix, Daniel Faria, Ernesto Jiménez-Ruiz, Catia Pesquita
2016 conf
VOILA@ISWC
Patrick Lambrix, Zlatan Dragisic, Valentina Ivanova, Craig Anslow
2016 conf
VOILA@ISWC
Valentina Ivanova, Patrick Lambrix, Steffen Lohmann, Catia Pesquita
2015 ed.
VOILA@ISWC
Valentina Ivanova, Patrick Lambrix, Steffen Lohmann, Catia Pesquita
2015 B conf
ESWC
Valentina Ivanova, Patrick Lambrix, Johan Åberg
2015 conf
OM
Michelle Cheatham, Zlatan Dragisic, Jérôme Euzenat, Daniel Faria, Alfio Ferrara, Giorgos Flouris, Irini Fundulaki, Roger Granada, Valentina Ivanova, Ernesto Jiménez-Ruiz, Patrick Lambrix, Stefano Montanelli, Catia Pesquita, Tzanina Saveta, Pavel Shvaiko, Alessandro Solimando, Cássia Trojahn dos Santos, Ondrej Zamazal
2014 conf
EKAW (Satellite Events)
Valentina Ivanova, Tomi Kauppinen, Steffen Lohmann, Suvodeep Mazumdar, Catia Pesquita, Kai Xu
2014 ed.
VISUAL@EKAW
Valentina Ivanova, Tomi Kauppinen, Steffen Lohmann, Suvodeep Mazumdar, Catia Pesquita, Kai Xu
2014 conf
OM
Zlatan Dragisic, Kai Eckert, Jérôme Euzenat, Daniel Faria, Alfio Ferrara, Roger Granada, Valentina Ivanova, Ernesto Jiménez-Ruiz, Andreas Oskar Kempf, Patrick Lambrix, Stefano Montanelli, Heiko Paulheim, Dominique Ritze, Pavel Shvaiko, Alessandro Solimando, Cássia Trojahn dos Santos, Ondrej Zamazal, Bernardo Cuenca Grau
2014 conf
VISUAL@EKAW
Valentina Ivanova, Patrick Lambrix
2013 conf
ESWC (Satellite Events)
Valentina Ivanova, Patrick Lambrix
2013 B conf
ESWC
Valentina Ivanova, Patrick Lambrix
2013 J jnl
J. Biomed. Semant.
Patrick Lambrix, Valentina Ivanova
2013 conf
WoDOOM
Patrick Lambrix, Fang Wei-Kleiner, Zlatan Dragisic, Valentina Ivanova
2013 conf
OM
Bernardo Cuenca Grau, Zlatan Dragisic, Kai Eckert, Jérôme Euzenat, Alfio Ferrara, Roger Granada, Valentina Ivanova, Ernesto Jiménez-Ruiz, Andreas Oskar Kempf, Patrick Lambrix, Andriy Nikolov, Heiko Paulheim, Dominique Ritze, François Scharffe, Pavel Shvaiko, Cássia Trojahn dos Santos, Ondrej Zamazal
2012 conf
WoDOOM@EKAW
Valentina Ivanova, Patrick Lambrix
2012 conf
WoDOOM@EKAW
Valentina Ivanova, Jonas Laurila Bergman, Ulf Hammerling, Patrick Lambrix
2012 conf
JIST
Patrick Lambrix, Zlatan Dragisic, Valentina Ivanova
2012 J jnl
CoRR
Patrick Lambrix, Zlatan Dragisic, Valentina Ivanova
2011 conf
eScience
Valentina Ivanova, Lena Strömbäck
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)