Neesha Kodagoda

31 papers A* 1B 2Journal 6Unranked 22
YearRankTypeTitle / Venue / Authors
2021 J jnl
ACM Trans. Interact. Intell. Syst.
Sam Hepenstal, Leishi Zhang, Neesha Kodagoda, B. L. William Wong
2020 conf
IUI Companion
Sam Hepenstal, Leishi Zhang, Neesha Kodagoda, B. L. William Wong
2020 conf
ExSS-ATEC@IUI
Sam Hepenstal, Leishi Zhang, Neesha Kodagoda, B. L. William Wong
2019 conf
IUI Workshops
Sam Hepenstal, Neesha Kodagoda, Leishi Zhang, Pragya Paudyal, B. L. William Wong
2019 conf
ICCST
Simon Attfield, Nallini Selveraj, Neesha Kodagoda, Peter J. Passmore, Elke Dunke
2019 J jnl
Behav. Inf. Technol.
Johanna Doppler Haider, Bettina Gastecker, Margit Pohl, Patrick Seidler, Neesha Kodagoda, B. L. William Wong
2018 J jnl
Cogn. Technol. Work.
Celeste Groenewald, Simon Attfield, Peter J. Passmore, B. L. William Wong, Nadeem Qazi, Neesha Kodagoda
2017 conf
EISIC
Celeste Groenewald, B. L. William Wong, Simon Attfield, Peter J. Passmore, Neesha Kodagoda
2017 conf
EISIC
Pragya Paudyal, Chris Rooney, Neesha Kodagoda, B. L. William Wong, Penny Duquenoy, Nadeem Qazi
2016 B conf
SMC
Nadeem Qazi, B. L. William Wong, Neesha Kodagoda, Rick Adderley
2016 J jnl
Int. J. Hum. Comput. Stud.
Chris Baber, Simon Attfield, Gareth Conway, Chris Rooney, Neesha Kodagoda
2016 conf
EISIC
Patrick Seidler, Johanna Haider, Neesha Kodagoda, B. L. William Wong, Margit Pohl, Richard Adderley
2016 conf
EISIC
Matylda Gerber, B. L. William Wong, Neesha Kodagoda
2015 B conf
ITS
Craig Anslow, Chris Rooney, Neesha Kodagoda, B. L. William Wong
2015 conf
EISIC
Peter J. Passmore, Simon Attfield, Neesha Kodagoda, Celeste Groenewald, B. L. William Wong
2014 J jnl
Inf. Vis.
Neesha Kodagoda, Simon Attfield, Tinni Choudhury, Chris Rooney, Glenford E. Mapp, Phong Hai Nguyen, Louis Slabbert, B. L. William Wong, Mahdi Aiash, Yongjun Zheng, Kai Xu, Aboubaker Lasebae
2014 conf
JISIC
Neesha Kodagoda, Simon Attfield, Phong Hai Nguyen, Leishi Zhang, Kai Xu, B. L. William Wong, Adrian Wagstaff, Graham Phillips, James Bullock, John Marshall, Stewart Bertram
2014 conf
IEEE VAST
Simon Attfield, Peter J. Passmore, Neesha Kodagoda, Pragya Paudyal, David Neilson, George Pagiatakis, Brian Joyce, Robert Wells, B. L. William Wong, Adrian Wagstaff, James Bullock, Adam Malin, Dougie Holmes, Graham Phillips, John Marshall, Stewart Bertram
2013 conf
IUI Companion
Sheetal K. Agarwal, Nitendra Rajput, Neesha Kodagoda, B. L. William Wong, Sharon L. Oviatt
2013 J jnl
IEEE Trans. Vis. Comput. Graph.
Neesha Kodagoda, Simon Attfield, B. L. William Wong, Chris Rooney, Sharmin Choudhury
2012 A* conf
CHI
Neesha Kodagoda, B. L. William Wong, Chris Rooney, Nawaz Khan
2012 conf
IEEE VAST
Sharmin (Tinni) Choudhury, Neesha Kodagoda, Phong Hai Nguyen, Chris Rooney, Simon Attfield, Kai Xu, Yongjun Zheng, B. L. William Wong, Raymond Chen, Glenford E. Mapp, Louis Slabbert, Mahdi Aiash, Aboubaker Lasebae
2011 conf
CHI Extended Abstracts
B. L. William Wong, Raymond Chen, Neesha Kodagoda, Chris Rooney, Kai Xu
2010 conf
ECCE
Neesha Kodagoda, B. L. William Wong, Nawaz Khan
2010 conf
BCS HCI
Neesha Kodagoda, B. L. William Wong, Nawaz Khan
2009 conf
CHINZ
Neesha Kodagoda, B. L. William Wong, Nawaz Kahan
2009 conf
CHI Extended Abstracts
Nithya Sambasivan, Melissa R. Ho, Matthew Kam, Neesha Kodagoda, Susan M. Dray, John C. Thomas, Ann Light, Kentaro Toyama
2009 conf
INTERACT (1)
Neesha Kodagoda, B. L. William Wong, Nawaz Kahan
2009 conf
ECCE
Neesha Kodagoda, B. L. William Wong, Nawaz Khan
2008 conf
BCS HCI (2)
Caroline Jarrett, Katie Grant, B. L. William Wong, Neesha Kodagoda, Kathryn Summers
2008 conf
BCS HCI (1)
Neesha Kodagoda, B. L. William Wong
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)