Nadezhda Kunicina

25 papers C 6Misc 1Journal 1Unranked 16
YearRankTypeTitle / Venue / Authors
2024 Misc conf
FRUCT
Nadezhda Kunicina, Rasa Bruzgiene, Lina Narbutaite, Anton Rassõlkin, Mahmoud Ibrahim, Sergey Balandin
2022 conf
ICL (2)
Anatolijs Zabasta, Aleksandra Petrovic, Aphrodite Ktena, Nadezhda Kunicina, Nebojsa Arsic, Amela Ajanovic
2022 conf
ICL (2)
Anatolijs Zabasta, Joan Peuteman, Nadezhda Kunicina, Volodymyr Kazymyr, Andrii Hnatov, Volodymyr Sistuk, Martins Bisenieks
2021 conf
MECO
Anatolijs Zabasta, Nadezhda Kunicina, Jasmin Kevric, Aphrodite Ktena, Anastasija Zhiraveeka, Dejan Jokic
2021 conf
EUROCON
Björn M. Siemers, Shadi Attarha, Jirapa Kamsamrong, Michael Brand, Maria Valliou, Ruta Pirta-Dreimane, Janis Grabis, Nadezhda Kunicina, Mike Mekkanen, Tero Vartiainen, Sebastian Lehnhoff
2020 conf
APPIS
Anatolijs Zabasta, Nadezhda Kunicina, Kaspars Kondratjevs, Leonids Ribickis
2020 conf
MECO
Anatolijs Zabasta, Nadezhda Kunicina, Uldis Grunde, Janis Judvaitis, Ilga Sematovica
2020 ch.
Guide to Disaster-Resilient Communication Networks
Rasa Bruzgiene, Lina Narbutaite, Tomas Adomkus, Peter Pocta, Peter Brida, Juraj Machaj, Erich Leitgeb, Pirmin Pezzei, Hristo Ivanov, Nadezhda Kunicina, Anatolijs Zabasta, Jelena Caiko, Antons Patlins
2020 J jnl
EAI Endorsed Trans. Energy Web
D. Shymuk, Andrii Hnatov, Shchasiana Arhun, Svitlana Ponikarovska, Vasiliy Mygal, Nadezhda Kunicina
2019 C conf
EDUCON
Anatolijs Zabasta, Anastasija Zhiravecka, Nadezhda Kunicina, Jelena Caiko, Leonids Ribickis
2019 C conf
EDUCON
Nadezhda Kunicina, Anatolijs Zabasta, Rasa Bruzgiene, Neringa Dubauskiene, Antons Patlins, Leonids Ribickis
2019 conf
MECO
Anatolijs Zabasta, Anastasia Zhiravetska, Nadezhda Kunicina, Kaspars Kondratjevs
2018 C conf
EDUCON
Nadezhda Kunicina, Anatolijs Zabasta, Anastasija Zhiravecka, Elina Gaile-Sarkane, Leonids Ribickis
2017 C conf
EDUCON
Anatolijs Zabasta, Paulo Carreira, Oksana Nikiforova, Vasco Amaral, Nadezhda Kunicina, Miguel Goulão, Uldis Sukovskis, Leonids Ribickis
2017 C conf
EDUCON
Nadezhda Kunicina, Anatolijs Zabasta, Antons Patlins, Leonids Ribickis
2015 conf
IDAACS
Anastasia Zhiravetska, Nadezhda Kunicina, Kristina Berzina, Antons Patlins
2015 conf
IDAACS
Antons Patlins, Nadezhda Kunicina
2014 conf
ISIE
Kaspars Kondratjevs, Anatolijs Zabasta, Nadezhda Kunicina, Leonids Ribickis
2013 conf
MED
Anatolijs Zabasta, Nadezhda Kunicina, Anastasija Zhiravecka, Antons Patlins, Leonids Ribickis
2013 C conf
EDUCON
Nadezhda Kunicina, Anatolijs Zabasta, Yelena Chaiko, Leonids Ribickis
2012 conf
TST
Antons Patlins, Nadezhda Kunicina
2012 conf
ICISTM
Nadezhda Kunicina, Anastasija Zhiravecka, Antons Patlins, Yelena Chaiko, Leonids Ribickis
2011 conf
IDAACS (1)
Jelena Caiko, Nadezhda Kunicina, Antons Patlins, A. Galkina
2011 conf
EUROCON
Anatolijs Zabasta, Nadezhda Kunicina, Yelena Chaiko, Leonids Ribickis
2011 conf
IDAACS (2)
Antons Patlins, Nadezhda Kunicina, Leonids Ribickis
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)