Hairulnizam Mahdin

41 papers Misc 1Journal 17Unranked 22
YearRankTypeTitle / Venue / Authors
2026 J jnl
Int. J. Data Sci. Anal.
Yui Chee Xuan, Rosmamalmi Mat Nawi, Shahrul Azman Mohd Noah, Hairulnizam Mahdin
2025 J jnl
IEEE Access
Abdullah Almogahed, Hairulnizam Mahdin, Yeong Hyeon Gu, Mohammed A. Al-masni, Shehab Abdulhabib Alzaeemi, Mazni Omar, Abdulwadood Alawadhi, Samera Obaid Barraood, Abdul Rehman Gilal, Adnan Ameen Bakather
2024 conf
ICMLT
Vencent Kerun Sudin, Shazlyn Milleana Shaharudin, Nurul Ainina Filza Sulaiman, Nurul Hila Zainuddin, Saidatul Akmar Ismail, Hairulnizam Mahdin
2024 J jnl
BMC Bioinform.
Tay Xin Hui, Shahreen Kasim, Izzatdin Abdul Aziz, Mohd Farhan Md Fudzee, Nazleeni Samiha Haron, Tole Sutikno, Rohayanti Hassan, Hairulnizam Mahdin, Seah Choon Sen
2023 J jnl
IEEE Access
Abdullah Almogahed, Hairulnizam Mahdin, Mazni Omar, Nur Haryani Zakaria, Salama A. Mostafa, Salman A. AlQahtani, Pranavkumar Pathak, Shazlyn Milleana Shaharudin, Rahmat Hidayat
2023 J jnl
J. Ambient Intell. Humaniz. Comput.
Jamaluddin Mir, Shahreen Kasim, Hairulnizam Mahdin, Rd Rohmat Saedudin, Rohayanti Hassan, Rohaizan Ramlan
2023 J jnl
IEEE Access
Abdullah Almogahed, Hairulnizam Mahdin, Mazni Omar, Nur Haryani Zakaria, Ghulam Muhammad, Zulfiqar Ali
2022 J jnl
Symmetry
Maria Imdad, Sofia Najwa Ramli, Hairulnizam Mahdin
2022 J jnl
IEEE Access
Ahmed Salih Al-Obaidi, Mohammed Ahmed Jubair, Izzatdin Abdul Aziz, Mohd Riduan Ahmad, Salama A. Mostafa, Hairulnizam Mahdin, Abdullah Talaat Al-Tickriti, Mustafa Hamid Hassan
2022 conf
SCDM
Salama A. Mostafa, Z. A. M. S. Juman, Nazri Mohd Nawi, Hairulnizam Mahdin, Mazin Abed Mohammed
2021 J jnl
Evol. Intell.
Muhammad Aamir, Nazri Mohd Nawi, Fazli Wahid, Hairulnizam Mahdin
2021 J jnl
IEEE Access
Gohar Zaman, Hairulnizam Mahdin, Khalid Hussain, Atta-ur-Rahman, Jemal H. Abawajy, Salama A. Mostafa
2021 J jnl
IEEE Access
Akhilesh Kumar Sharma, Gaurav Aggarwal, Sachit Bhardwaj, Prasun Chakrabarti, Tulika Chakrabarti, Jemal H. Abawajy, Siddhartha Bhattacharyya, Richa Mishra, Anirban Das, Hairulnizam Mahdin
2021 conf
ACeS
Abdulkareem A. Hezam, Salama A. Mostafa, Azizul Azhar Ramli, Hairulnizam Mahdin, Bashar Ahmed Khalaf
2021 conf
ISAMSR
Bashar Ahmed Khalaf, Nafea Ali Majeed Alhammadi, Salama A. Mostafa, Azizul Azhar Ramli, Hairulnizam Mahdin, Shahreen Kasim, Nayef Abdulwahab Mohammed Alduais, Mohammed Saeed Jawad
2021 conf
ISAMSR
Mohammed Hlayel, Mohammed Saeed Jawad, Hairulnizam Mahdin, Salama A. Mostafa, Nayef Abdulwahab Mohammed Alduais, Mohd Helmy Abd Wahab
2021 conf
ISAMSR
Thoong Chun Onn, Nayef Abdulwahab Mohammed Alduais, Jiwa Abdullah, Abdul-Malik H. Y. Saad, Azizul Azhar Ramli, Hairulnizam Mahdin, Shahreen Kasim, Aida Mustapha, Salama A. Mostafa, Mohammed Saeed Jawad, Waheed Ali H. M. Ghanem, Antar S. H. Abdul-Qawy
2021 conf
ISAMSR
Mohammed Saeed Jawad, Hairulnizam Mahdin, Nayef Abdulwahab Mohammed Alduais, Mohammed Hlayel, Salama A. Mostafa, Mohd Helmy Abd Wahab
2021 J jnl
IEEE Access
Shafiza Ariffin Kashinath, Salama A. Mostafa, Aida Mustapha, Hairulnizam Mahdin, David Lim, Moamin A. Mahmoud, Mazin Abed Mohammed, Bander Ali Saleh Al-rimy, Mohd Farhan Md Fudzee, Tan Jhon Yang
2021 J jnl
IEEE Access
Rishi Gupta, Akhilesh Kumar Sharma, Oorja Garg, Krishna Modi, Shahreen Kasim, Zirawani Baharum, Hairulnizam Mahdin, Salama A. Mostafa
2020 conf
BODYNETS
Maria Imdad, Sofia Najwa Ramli, Hairulnizam Mahdin, Boppana Udaya Mouni, Shakira Sahar
2020 conf
SCDM
Asim Shahzad, Nazri Mohd Nawi, Hairulnizam Mahdin, Sundas Naqeeb Khan, Norhamreeza Abdul Hamid
2020 J jnl
Int. J. Fuzzy Log. Intell. Syst.
Muhammad Aamir, Nazri Mohd Nawi, Hairulnizam Mahdin, Rashid Naseem, Muhammad Zulqarnain
2020 conf
SCDM
Rabei Raad Ali, Salama A. Mostafa, Hairulnizam Mahdin, Aida Mustapha, Saraswathy Shamini Gunasekaran
2020 conf
SCDM
Noor Zuraidin Mohd Safar, David Ndzi, Hairulnizam Mahdin, Ku Muhammad Naim Ku Khalif
2019 J jnl
Symmetry
Mohammed Ahmed Jubair, Salama A. Mostafa, Ravie Chandren Muniyandi, Hairulnizam Mahdin, Aida Mustapha, Mustafa Hamid Hassan, Moamin A. Mahmoud, Yasir Amer Jawhar, Ahmed Salih Al-Khaleefa, Ahmed Jubair Mahmood
2019 ed.
DaEng
Jemal H. Abawajy, Mohamed Othman, Rozaida Ghazali, Mustafa Mat Deris, Hairulnizam Mahdin, Tutut Herawan
2018 conf
SCDM
Rd Rohmat Saedudin, Hairulnizam Mahdin, Shahreen Kasim, Edi Sutoyo, Iwan Tri Riyadi Yanto, Rohayanti Hassan
2018 conf
SCDM
Noryusliza Abdullah, Shahril Nazim Mohamed Salleh, Hairulnizam Mahdin, Rozanawati Darman, Basil David Daniel, Ely Salwana Mat Surin
2016 conf
SCDM
Mohd Farhan Md Fudzee, Mohamud Hassan, Hairulnizam Mahdin, Shahreen Kasim, Jemal H. Abawajy
2016 conf
SCDM
Harinda Fernando, Hairulnizam Mahdin
2016 conf
SCDM
Shahreen Kasim, Ummi Aznazirah Azahar, Noor Azah Samsudin, Mohd Farhan Md Fudzee, Hairulnizam Mahdin, Azizul Azhar Ramli, Suriawati Suparjoh
2016 Misc conf
SoftCOM
Zahra Pooranian, Nima Nikmehr, Sajad Najafi Ravadanegh, Hairulnizam Mahdin, Jemal H. Abawajy
2016 conf
SCDM
Masitah Ahmad, Norhayati Hussin, Syafiq Zulkarnain, Hairulnizam Mahdin, Mohd Farhan Md Fudzee
2016 J jnl
J. Sensors
Hazalila Kamaludin, Hairulnizam Mahdin, Jemal H. Abawajy
2016 conf
SCDM
Shahreen Kasim, Loh Yin Xia, Norfaradilla Wahid, Mohd Farhan Md Fudzee, Hairulnizam Mahdin, Azizul Azhar Ramli, Suriawati Suparjoh, Mohamad Aizi Salamat
2016 conf
SCDM
Rd Rohmat Saedudin, Shahreen Binti Kasim, Hairulnizam Mahdin, Muhammad Azani Hasibuan
2013 conf
DaEng
Hairulnizam Mahdin
2011 J jnl
Sensors
Hairulnizam Mahdin, Jemal H. Abawajy
2010 conf
FGIT-UNESST
Hairulnizam Mahdin, Jemal H. Abawajy
2009 conf
ISPAN
Hairulnizam Mahdin, Jemal H. Abawajy
tests/unit/test_decompile_utils.py
← Index tests/unit/test_decompile_utils.py python
"""Unit tests for decompiler utility modules:
- bninja/utils/hashes.py
- bninja/utils/json_encoder.py
- bninja/analysis/low_level_normalization.py
"""
import hashlib
import json
import pytest


# ============================================================================
# 1a. hashes.py
# ============================================================================

from redb.extractors.decompiler.bninja.utils.hashes import (
    calculate_md5,
    calculate_sha256,
    calculate_tlsh,
)


class TestCalculateMD5:
    def test_calculate_md5_known_value(self):
        expected = hashlib.md5(b"test").hexdigest()
        assert calculate_md5("test") == expected

    def test_calculate_md5_empty(self):
        expected = hashlib.md5(b"").hexdigest()
        assert calculate_md5("") == expected


class TestCalculateSHA256:
    def test_calculate_sha256_known_value(self):
        expected = hashlib.sha256(b"hello world").hexdigest()
        assert calculate_sha256("hello world") == expected

    def test_calculate_sha256_empty_string(self):
        result = calculate_sha256("")
        assert len(result) == 64
        assert all(c in "0123456789abcdef" for c in result)


class TestCalculateTLSH:
    def test_calculate_tlsh_long_data(self):
        # TLSH requires >= 50 bytes
        data = "A" * 100
        result = calculate_tlsh(data)
        assert result is not None
        assert isinstance(result, str)

    def test_calculate_tlsh_short_data(self):
        data = "A" * 10
        result = calculate_tlsh(data)
        assert result is None

    def test_calculate_tlsh_deterministic(self):
        data = "x" * 200
        assert calculate_tlsh(data) == calculate_tlsh(data)



# ============================================================================
# 1b. json_encoder.py
# ============================================================================

from redb.extractors.decompiler.bninja.utils.json_encoder import BinaryNinjaEncoder


class TestBinaryNinjaEncoder:
    def test_encode_value_confidence_object(self):
        obj = type("VC", (), {"value": 42, "confidence": 255})()
        result = json.dumps(obj, cls=BinaryNinjaEncoder)
        assert json.loads(result) == 42

    def test_encode_str_fallback(self):
        obj = type("Obj", (), {"__str__": lambda self: "custom_repr"})()
        result = json.dumps(obj, cls=BinaryNinjaEncoder)
        assert json.loads(result) == "custom_repr"

    def test_encode_normal_types(self):
        data = {"a": 1, "b": [2, 3], "c": "hello"}
        result = json.dumps(data, cls=BinaryNinjaEncoder)
        assert json.loads(result) == data

    def test_encode_set_via_str(self):
        # Python sets have __str__, so BinaryNinjaEncoder converts them
        # to their string repr instead of raising TypeError.
        result = json.dumps(set([1, 2, 3]), cls=BinaryNinjaEncoder)
        parsed = json.loads(result)
        assert isinstance(parsed, str)
        assert "1" in parsed


# ============================================================================
# 1c. low_level_normalization.py
# ============================================================================

from redb.extractors.decompiler.bninja.analysis.low_level_normalization import (
    LowLevelNormalization,
)


class MockIL:
    """Mock IL node for normalization tests."""
    def __init__(self, operation, operands=None):
        self.operation = operation
        self.operands = operands or []


class TestLowLevelNormalization:
    def setup_method(self):
        self.normalizer = LowLevelNormalization()

    def test_normalize_single_instruction(self):
        node = MockIL(operation=5)
        result = self.normalizer.normalize_instruction_all_levels(node)
        assert result == [5]

    def test_normalize_nested_operands(self):
        child1 = MockIL(operation=10)
        child2 = MockIL(operation=20)
        root = MockIL(operation=1, operands=[child1, child2])
        result = self.normalizer.normalize_instruction_all_levels(root)
        assert result == [1, 10, 20]

    def test_normalize_empty_operands(self):
        node = MockIL(operation=42, operands=[])
        result = self.normalizer.normalize_instruction_all_levels(node)
        assert result == [42]

    def test_normalize_list_operands(self):
        # Simulates phi-node style list operands
        inner = MockIL(operation=99)
        node = MockIL(operation=7, operands=[[inner]])
        result = self.normalizer.normalize_instruction_all_levels(node)
        assert result == [7, 99]

    def test_normalize_none_input(self):
        result = self.normalizer.normalize_instruction_all_levels(None)
        assert result == []