Hamzah Arof

25 papers Journal 21Unranked 4
YearRankTypeTitle / Venue / Authors
2025 J jnl
IEEE Access
Tri Wahyu Oktaviana Putri, Hamzah Arof, Noraisyah Mohamed Shah, Mohamad Izzuddin Anuar
2024 J jnl
IEEE Access
Nur Aini Syakimah Ahmad Shuyuti, Erfan Salami, Mahidzal Bin Dahari, Hamzah Arof, Harikrishnan Ramiah
2022 J jnl
IEEE Access
Sharifah Norsyahindah Syed Nor, Nur Syafiqah Rasanang, Salmah Bt. Karman, Wan Safwani Wan Kamarul Zaman, Sulaiman Wadi Harun, Hamzah Arof
2022 J jnl
J. Robotics Netw. Artif. Life
Suresh Gobee, Norrima Mokhtar, Hamzah Arof, Noraisyah Md. Shah, Heshalini Rajagopal, Wan Khairunizam
2021 J jnl
IET Signal Process.
Chong Yeh Sai, Norrima Mokhtar, Masahiro Iwahashi, Paul Cumming, Hamzah Arof
2020 J jnl
J. Intell. Fuzzy Syst.
Muhammad Marwan Anoor, Aisyah Hartini Jahidin, Hamzah Arof, Megat Syahirul Amin Megat Ali
2020 J jnl
IET Comput. Vis.
Roziana Ramli, Mohd Yamani Idna Bin Idris, Khairunnisa Hasikin, Noor Khairiah A. Karim, Ainuddin Wahid Abdul Wahab, Ismail Ahmedy, Fatimah Ahmedy, Hamzah Arof
2018 J jnl
IEEE J. Biomed. Health Informatics
Chong Yeh Sai, Norrima Mokhtar, Hamzah Arof, Paul Cumming, Masahiro Iwahashi
2015 J jnl
Sensors
Wisam Al-Faqheri, Fatimah Ibrahim, Tzer Hwai Gilbert Thio, Norulain Bahari, Hamzah Arof, Hussin A. Rothan, Rohana Yusof, Marc Madou
2015 J jnl
Microelectron. Reliab.
Mohd Faizul Mohd Sabri, Nor Ilyana Muhd Nordin, Suhana Mohd Said, Nur Aishah Aminah Mohd Amin, Hamzah Arof, Iswadi Jauhari, Roziana Ramli, Kirsten Weide-Zaage
2015 J jnl
Biomed. Signal Process. Control.
Shahriar Badsha, Hamzah Arof, Norrima Mokhtar, Yvonne Ai Lian Lim, Marizan Mubin, Mahazani Mohamad
2015 J jnl
Expert Syst. Appl.
Roziana Ramli, Hamzah Arof, Fatimah Ibrahim, Norrima Mokhtar, Mohd Yamani Idna Bin Idris
2014 J jnl
Sensors
Su Sin Chong, A. R. Abdul Aziz, Sulaiman Wadi Harun, Hamzah Arof
2013 J jnl
EURASIP J. Image Video Process.
Shahriar Badsha, Norrima Mokhtar, Hamzah Arof, Yvonne Ai Lim, Marizan Mubin, Zuwairie Ibrahim
2013 J jnl
J. Digit. Imaging
Salbiah Samsudin, Somaya Adwan, Hamzah Arof, Norrima Mokhtar, Fatimah Ibrahim
2013 J jnl
J. Vis. Commun. Image Represent.
Haniza Yazid, Hamzah Arof
2013 conf
EMBC
Wisam Al-Faqheri, Fatimah Ibrahim, Tzer Hwai Gilbert Thio, Hamzah Arof, Marc Madou
2013 J jnl
JOCN
Seyed E. Mirnia, Arman Zarei, Siamak Dawazdah Emami, Sulaiman Wadi Harun, Hamzah Arof, Harith Ahmad, Hossam M. H. Shalaby
2012 J jnl
Int. J. Imaging Syst. Technol.
Salbiah Samsudin, Somaya Adwan, Hamzah Arof, Z. S. Saleh, Fatimah Ibrahim
2012 J jnl
J. Medical Syst.
Haniza Yazid, Hamzah Arof, Hazlita Mohd Isa
2009 conf
IVIC
Somaya Majed, Hamzah Arof, Zafar Hashmi
2008 J jnl
Artif. Life Robotics
Hamzah Arof, Fauzan Ahmad, Noraisyah Mohamed Shah
2008 J jnl
Artif. Life Robotics
Norrima Mokhtar, Masanori Sugisaka, L. T. Lung, Hamzah Arof, Marizan Mubin, Noraisyah Md. Shah
2001 conf
SIP
Hamzah Arof, Tsuyoshi Kawaguchi, Mohamed Rizon
1997 conf
ICIP (3)
Hamzah Arof, Farzin Deravi
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)