Narayanan C. Krishnan

56 papers A* 4A 2B 5C 1Misc 2Journal 28Unranked 14
YearRankTypeTitle / Venue / Authors
2026 J jnl
CoRR
Anagha Sabu, Vidhya S, Narayanan C. Krishnan
2026 J jnl
Comput. Vis. Image Underst.
Shreya Bansal, Anterpreet Kaur Bedi, Pratibha Kumari, Rishi Kumar Soni, Narayanan C. Krishnan, Mukesh Saini
2025 conf
ICDAR (4)
Aniket Gurav, Sukalpa Chanda, Narayanan C. Krishnan
2025 conf
ISBI
Aroof Aimen, Arsh Verma, Makarand Tapaswi, Narayanan C. Krishnan
2025 J jnl
CoRR
Suraj Kumar Sahoo, Narayanan C. Krishnan
2025 J jnl
Int. J. Document Anal. Recognit.
Vasanthan P. Vijayan, Sukalpa Chanda, David S. Doermann, Narayanan C. Krishnan
2025 J jnl
CoRR
Hrithik Suresh, Sahil Sidheekh, Vishnu Shreeram M. P, Sriraam Natarajan, Narayanan C. Krishnan
2024 J jnl
IEEE Trans. Artif. Intell.
Aroof Aimen, Sahil Sidheekh, Bharat Ladrecha, Hansin Ahuja, Narayanan C. Krishnan
2024 A conf
ECAI
Shivam Gupta, Shweta Jain, Narayanan C. Krishnan, Ganesh Ghalme, Nandyala Hemachandra
2024 conf
GCPR (2)
Joakim Jensen, Sukalpa Chanda, Narayanan C. Krishnan, David S. Doermann
2024 conf
IPTA
Aniket Gurav, Sukalpa Chanda, Narayanan C. Krishnan
2024 conf
MICCAI (10)
Abhishek Singh Sambyal, Usma Niyaz, Saksham Shrivastava, Narayanan C. Krishnan, Deepti R. Bathula
2024 conf
COMAD/CODS
Shivam Gupta, Shweta Jain, Narayanan C. Krishnan, Ganesh Ghalme, Nandyala Hemachandra
2024 conf
COMAD/CODS
Vidhya Kamakshi, Narayanan C. Krishnan
2024 conf
ICPR (19)
Aniket Gurav, Narayanan C. Krishnan, Sukalpa Chanda
2023 conf
COMAD/CODS
Manan Singh, Sai Srinivas Kancheti, Shivam Gupta, Ganesh Ghalme, Shweta Jain, Narayanan C. Krishnan
2023 J jnl
Data Min. Knowl. Discov.
Shivam Gupta, Ganesh Ghalme, Narayanan C. Krishnan, Shweta Jain
2023 J jnl
CoRR
Aroof Aimen, Arsh Verma, Makarand Tapaswi, Narayanan C. Krishnan
2023 A conf
AAMAS
Shivam Gupta, Ganesh Ghalme, Narayanan C. Krishnan, Shweta Jain
2023 J jnl
SN Comput. Sci.
Aroof Aimen, Bharat Ladrecha, Sahil Sidheekh, Narayanan C. Krishnan
2023 J jnl
Int. J. Document Anal. Recognit.
Ravi Bhatt, Anuj Rai, Sukalpa Chanda, Narayanan C. Krishnan
2023 Misc conf
IbPRIA
Aniket Gurav, Joakim Jensen, Narayanan C. Krishnan, Sukalpa Chanda
2023 J jnl
CoRR
Abhishek Singh Sambyal, Usma Niyaz, Narayanan C. Krishnan, Deepti R. Bathula
2023 J jnl
Comput. Methods Programs Biomed.
Abhishek Singh Sambyal, Usma Niyaz, Narayanan C. Krishnan, Deepti R. Bathula
2022 conf
ECML/PKDD (3)
Aroof Aimen, Bharat Ladrecha, Narayanan C. Krishnan
2022 B conf
IJCNN
Vidhya Kamakshi, Narayanan C. Krishnan
2022 conf
ISBI
Abhishek Singh Sambyal, Narayanan C. Krishnan, Deepti R. Bathula
2021 J jnl
CoRR
Sahil Sidheekh, Aroof Aimen, Narayanan C. Krishnan
2021 J jnl
CoRR
Sumit Kumar Varshney, Jeetu Kumar, Aditya Tiwari, Rishabh Singh, Venkata M. V. Gunturi, Narayanan C. Krishnan
2021 J jnl
CoRR
Shivam Gupta, Ganesh Ghalme, Narayanan C. Krishnan, Shweta Jain
2021 J jnl
CoRR
Sam Zabdiel Sunder Samuel, Vidhya Kamakshi, Namrata Lodhi, Narayanan C. Krishnan
2021 C conf
CD-MAKE
Rajat Sharma, Nikhil Reddy, Vidhya Kamakshi, Narayanan C. Krishnan, Shweta Jain
2021 A* conf
ICML
Sahil Sidheekh, Aroof Aimen, Narayanan C. Krishnan
2021 B conf
IJCNN
Sahil Sidheekh, Aroof Aimen, Vineet Madan, Narayanan C. Krishnan
2021 B conf
IJCNN
Vidhya Kamakshi, Uday Gupta, Narayanan C. Krishnan
2021 J jnl
CoRR
Vidhya Kamakshi, Uday Gupta, Narayanan C. Krishnan
2021 conf
ICDAR (1)
Anuj Rai, Narayanan C. Krishnan, Sukalpa Chanda
2021 J jnl
CoRR
Anuj Rai, Narayanan C. Krishnan, Sukalpa Chanda
2021 conf
MetaDL@AAAI
Aroof Aimen, Sahil Sidheekh, Vineet Madan, Narayanan C. Krishnan
2021 J jnl
CoRR
Aroof Aimen, Sahil Sidheekh, Vineet Madan, Narayanan C. Krishnan
2021 J jnl
CoRR
Aroof Aimen, Sahil Sidheekh, Narayanan C. Krishnan
2021 J jnl
CoRR
Abhishek Singh Sambyal, Narayanan C. Krishnan, Deepti R. Bathula
2020 B conf
IJCNN
Prateek Munjal, Akanksha Paul, Narayanan C. Krishnan
2020 J jnl
CoRR
Ashish Kumar, Karan Sehgal, Prerna Garg, Vidhya Kamakshi, Narayanan C. Krishnan
2020 J jnl
CoRR
Rajat Sharma, Nikhil Reddy, Vidhya Kamakshi, Narayanan C. Krishnan, Shweta Jain
2020 B conf
IJCNN
Sanatan Sukhija, Srenivas Varadarajan, Narayanan C. Krishnan, Sujit Rai
2020 J jnl
CoRR
Sahil Sidheekh, Aroof Aimen, Vineet Madan, Narayanan C. Krishnan
2020 J jnl
CoRR
Sagarika Sharma, Sujit Rai, Narayanan C. Krishnan
2019 J jnl
CoRR
Prateek Munjal, Akanksha Paul, Narayanan C. Krishnan
2019 A* conf
CVPR
Akanksha Paul, Narayanan C. Krishnan, Prateek Munjal
2019 J jnl
CoRR
Akanksha Paul, Narayanan C. Krishnan, Prateek Munjal
2018 A* conf
ACM Multimedia
Jatin Garg, Skand Vishwanath Peri, Himanshu Tolani, Narayanan C. Krishnan
2018 J jnl
CoRR
Jatin Garg, Skand Vishwanath Peri, Himanshu Tolani, Narayanan C. Krishnan
2018 A* conf
AAAI
Shailesh M. Pandey, Tushar Agarwal, Narayanan C. Krishnan
2016 Misc conf
UbiComp
Gaurav Mittal, Kaushal B. Yagnik, Mohit Garg, Narayanan C. Krishnan
2016 conf
ICVGIP
Apoorva Sikka, Gaurav Mittal, Deepti R. Bathula, Narayanan C. Krishnan
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)