Infall Syafalni

72 papers B 1C 7Misc 1Journal 19Unranked 44
YearRankTypeTitle / Venue / Authors
2025 C conf
ISCAS
Muhammad Ogin Hasanuddin, Rafael Aditya Cahyo W, Infall Syafalni, Nana Sutisna, Hanho Lee, Trio Adiono
2025 J jnl
Integr.
Trio Adiono, Michael Jonathan, Erwin Setiawan, Syifaul Fuada, Nana Sutisna, Rahmat Mulyawan, Infall Syafalni
2025 conf
SOCC
Najmi Az-Zahra Feryputri, Infall Syafalni, Nana Sutisna, Nur Ahmadi, Rahmat Mulyawan, Trio Adiono
2025 J jnl
IEEE Access
Muhammad Rifat Abiwardani, Fariska Zakhralativa Ruskanda, Infall Syafalni, Rahmat Mulyawan, Akio Higo
2025 J jnl
IEEE Access
Yahwista Salomo, Infall Syafalni, Nana Sutisna, Trio Adiono
2025 J jnl
IEEE Access
A. Sumarudin, Nana Sutisna, Infall Syafalni, Bambang Riyanto Trilaksono, Trio Adiono
2025 J jnl
IEEE Trans. Circuits Syst. I Regul. Pap.
Trio Adiono, Erwin Setiawan, Michael Jonathan, Nana Sutisna, Rahmat Mulyawan, Infall Syafalni, Wasiu O. Popoola
2025 C conf
ISCAS
Infall Syafalni, Nicholas Teffandi, Fauzan Ibrahim, Indira Pramudita, Nana Sutisna, Trio Adiono
2025 conf
SOCC
Devi Noor Endrawati, Surya Dharma, Infall Syafalni, Nana Sutisna, Trio Adiono, Hiroaki Kunieda
2024 J jnl
IEEE Access
Infall Syafalni, Agape D'sky, Nana Sutisna, Trio Adiono
2024 conf
APSIPA
Trio Adiono, Erwin Setiawan, Michael Jonathan, Rahmat Mulyawan, Nana Sutisna, Infall Syafalni, Wasiu O. Popoola
2024 conf
APCCAS
Gotawa Aryo Prakoso, Infall Syafalni, Nana Sutisna, Rahmat Mulyawan, Nur Ahmadi, Trio Adiono, Fakhrul Zaman Rokhani
2024 J jnl
IEEE Access
Trio Adiono, Erwin Setiawan, Michael Jonathan, Rahmat Mulyawan, Nana Sutisna, Infall Syafalni, Wasiu O. Popoola
2024 conf
APSIPA
Anindhita Nayazirly Sukarno, Yahwista Salomo, Trio Adiono, Infall Syafalni, Nana Sutisna, Rahmat Mulyawan
2024 C conf
TENCON
Anisa Dwizarah, Jalu Reswara, Infall Syafalni, Nana Sutisna, Trio Adiono
2024 conf
ISPACS
Muhammad Zakie Shahab, Infall Syafalni, Nana Sutisna, Rahmat Mulyawan, Beni Rio Hermanto, Trio Adiono
2024 conf
SOCC
Infall Syafalni, Mohamad Imam Firdaus, Nana Sutisna, Trio Adiono, Tutun Juhana, Rahmat Mulyawan
2024 conf
APCCAS
Infall Syafalni, Muhammad Sulthan Mazaya, Muhammad Raihan Elfazri, Eko Mursito Budi, Nana Sutisna, Rahmat Mulyawan, Trio Adiono, Makoto Ikeda
2024 J jnl
IEEE Access
Infall Syafalni, Clarence Amadeus, Nana Sutisna, Trio Adiono
2024 conf
APSIPA
Infall Syafalni, Angelica Winasta Sinisuka, Dwi Kalam Amal Tauhid, Farrel Ahmad, Muhammad Alif Putra Yasa, Steven Alexander Wen, Erwin Setiawan, Nana Sutisna, Trio Adiono
2024 C conf
ISCAS
Trio Adiono, Erwin Setiawan, Michael Jonathan, Rahmat Mulyawan, Nana Sutisna, Infall Syafalni, Wasiu O. Popoola
2024 conf
ISPACS
Nana Sutisna, Erwin Setiawan, Ng Kyle, Bryan Bernigen, Maharani Ayu Putri, Dimas Shidqi Parikesit, Infall Syafalni, Trio Adiono
2024 conf
ISPACS
Trio Adiono, Felicia Sutandijo, Damianus Clairvoyance, Addin Nabilal Huda, Anggi Anggraini Nanik, Dimas Alfandi, Michael Jonathan, Nana Sutisna, Infall Syafalni
2024 conf
APSIPA
Nana Sutisna, Aditya Prawira Nugroho, Christopher Jeffrey, Patrick Amadeus Irawan, Rizky Ramadhana, Ronggur Mahendra, Michael Jonathan, Infall Syafalni, Trio Adiono
2024 C conf
ISCAS
Nana Sutisna, Elkhan J. Brillianshah, Infall Syafalni, Muhammad Ogin Hasanuddin, Trio Adiono, Tutun Juhana
2024 conf
APSIPA
A. Sumarudin, Nana Sutisna, Infall Syafalni, Bambang Riyanto Trilaksono, Trio Adiono
2024 conf
APCCAS
Muhammad Izzatul Fauzan Hasibuan, Raihan Fadhil Yanuarsyah, Muhammad Hanif Hibatullah, Radithya Arisaputra, Infall Syafalni, Nana Sutisna, Trio Adiono, Makoto Ikeda
2024 conf
COOL CHIPS
Muhammad Sulthan Mazaya, Eko Mursito Budi, Infall Syafalni, Nana Sutisna, Trio Adiono
2024 conf
APSIPA
Muhammad Sayyid Afif, Infall Syafalni, Nana Sutisna, Trio Adiono
2023 conf
ICEEI
Agape D'sky, Infall Syafalni, Nana Sutisna, Hadi Hariyanto, Trio Adiono, Eni Sumiarsih
2023 conf
APSIPA ASC
Trio Adiono, Michael Jonathan, Erwin Setiawan, Nana Sutisna, Rahmat Mulyawan, Infall Syafalni
2023 conf
ICEEI
Clarence Amadeus, Infall Syafalni, Nana Sutisna, Trio Adiono
2023 conf
ICEEI
Sandra, Infall Syafalni, Nana Sutisna, Trio Adiono
2023 conf
ICEEI
Rafi Raihansyah Munandar, Arjuna Marcelino, Haikal Lazuardi Fadil, Nur Ulfa Maulidevi, Infall Syafalni
2023 conf
APSIPA ASC
Jayandi Panggabean, Nana Sutisna, Infall Syafalni, Trio Adiono
2023 J jnl
IEEE Access
Ardianto Satriawan, Infall Syafalni, Rella Mareta, Isa Anshori, Wervyan Shalannanda, Aleams Barra
2023 conf
APSIPA ASC
A. Sumarudin, Nana Sutisna, Infall Syafalni, Bambang Riyanto Trilaksono, Trio Adiono
2023 conf
ICEEI
Sandra, Infall Syafalni, Nana Sutisna, Trio Adiono
2023 conf
ICEEI
Haikal Lazuardi Fadil, Arjuna Marcelino, Rafi Raihansyah Munandar, Nur Ulfa Maulidevi, Infall Syafalni
2023 J jnl
IEEE Access
Nana Sutisna, Andi M. Riyadhus Ilmy, Infall Syafalni, Rahmat Mulyawan, Trio Adiono
2023 J jnl
IEEE Trans. Very Large Scale Integr. Syst.
Trio Adiono, Rhesa Muhammad Ramadhan, Nana Sutisna, Infall Syafalni, Rahmat Mulyawan, Chang Hong Lin
2023 conf
ICEEI
Nicholas Teffandi, Najmi Az-Zahra Feryputri, Muhammad Ogin Hasanuddin, Infall Syafalni, Nana Sutisna
2023 conf
COOL CHIPS
Infall Syafalni, Mohamad Imam Firdaus, Andi M. Riyadhus Ilmy, Nana Sutisna, Trio Adiono
2023 conf
MWSCAS
Jalu Reswara, Nana Sutisna, Infall Syafalni, Trio Adiono
2023 J jnl
IEEE Access
Fariska Zakhralativa Ruskanda, Muhammad Rifat Abiwardani, Rahmat Mulyawan, Infall Syafalni, Harashta Tatimma Larasati
2023 conf
ICEEI
Muhammad Ulum Burhani, Jayandi Soriasi Panggabean, Trio Adiono, Infall Syafalni, Nana Sutisna
2023 conf
APSIPA ASC
Kendrik Emkel Ginting, Nana Sutisna, Infall Syafalni, Trio Adiono
2023 conf
ICEEI
Rafael Aditya Cahyo W, Handy Jonarta, Alika Cynthia Clarissa, Infall Syafalni, Nana Sutisna, Muhammad Ogin Hasanuddin
2023 J jnl
IEEE Access
Fariska Zakhralativa Ruskanda, Muhammad Rifat Abiwardani, Infall Syafalni, Harashta Tatimma Larasati, Rahmat Mulyawan
2023 conf
ICEEI
M. Abdi Haryadi H., Jose Galbraith Hasintongan, Helkia Yeremia, Muhammad Iqbal Sigid, Nana Sutisna, Infall Syafalni, Trio Adiono
2023 conf
APSIPA ASC
Devi Noor Endrawati, Infall Syafalni, Nana Sutisna, Trio Adiono
2023 conf
MWSCAS
Clarence Amadeus, Infall Syafalni, Nana Sutisna, Trio Adiono
2023 conf
MWSCAS
Muhammad Ulum Burhani, Jayandi Soriasi Panggabean, Trio Adiono, Infall Syafalni, Nana Sutisna
2022 J jnl
IEEE Access
Infall Syafalni, Gilbert Jonatan, Nana Sutisna, Rahmat Mulyawan, Trio Adiono
2022 Misc conf
QCE
Fariska Z. Ruskanda, Muhammad Rifat Abiwardani, Muhammad Akram Al Bari, Kinantan Arya Bagaspati, Rahmat Mulyawan, Infall Syafalni, Harashta Tatimma Larasati
2021 conf
ISPACS
Gabriella Hayley Tanudjaja, Muhammad Afif Ramadhan, Rahmat Mulyawan, Infall Syafalni, Nana Sutisna, Trio Adiono
2021 conf
ISPACS
Muhammad Afif Ramadhan, Gabriella Hayley Tanudjaja, Erwin Setiawan, Trio Adiono, Nana Sutisna, Rahmat Mulyawan, Infall Syafalni
2021 conf
ICEEI
Trio Adiono, Ryan Dharma Chandra, Hillary Christine, Erson Rasyadan, Rahmat Mulyawan, Infall Syafalni, Nana Sutisna
2021 conf
ICEIC
Rahmat Mulyawan, Reza Averly, Infall Syafalni, Nana Sutisna, Trio Adiono
2021 J jnl
IEEE Access
Trio Adiono, Adiwena Putra, Nana Sutisna, Infall Syafalni, Rahmat Mulyawan
2021 conf
ICEEI
Trio Adiono, Michael Jonathan, Erwin Setiawan, Nana Sutisna, Rahmat Mulyawan, Infall Syafalni
2018 J jnl
IEEE Trans. Comput. Aided Des. Integr. Circuits Syst.
Infall Syafalni, Tsutomu Sasao, Xiaoqing Wen
2016 C conf
ISCAS
Infall Syafalni, Nico Surantha, Duc Khai Lam, Nana Sutisna, Yuhei Nagao, Katsuhiko Wakasugi, Yang Tongxin, Hiroshi Ochi, Taadaki Tsuchiya
2016 conf
ISVLSI
Infall Syafalni, Tsutomu Sasao, Xiaoqing Wen
2015 B conf
ETS
Infall Syafalni, Tsutomu Sasao, Xiaoqing Wen, Stefan Holst, Kohei Miyase
2014 J jnl
IEICE Trans. Fundam. Electron. Commun. Comput. Sci.
Infall Syafalni, Tsutomu Sasao
2014 conf
APCCAS
Infall Syafalni, Tsutomu Sasao, Xiaoqing Wen, Stefan Holst, Kohei Miyase
2013 C conf
ICCD
Infall Syafalni, Tsutomu Sasao
2013 J jnl
Digit. Signal Process.
Infall Syafalni, M. F. M. Salleh
2013 J jnl
IEICE Trans. Inf. Syst.
Infall Syafalni, Tsutomu Sasao
2012 conf
ISVLSI
Infall Syafalni, Tsutomu Sasao
2010 conf
ICT
Infall Syafalni, M. F. M. Salleh
redb/extractors/extractor.py
← Index redb/extractors/extractor.py python
import hashlib
import inspect
from abc import ABCMeta, abstractmethod
from dataclasses import asdict
from functools import cached_property
from datetime import datetime, timezone
import math
from typing import Counter, List, Optional, Dict, Any, Tuple
from redb import settings
from redb.models.dataclasses import Hash
from .database_exporters import DatabaseExporter, ElasticsearchExporter, ClickHouseExporter, PrintExporter

class Extractor(metaclass=ABCMeta):
    def __init__(
        self,
        filepath: str,
        log: Any,
        exporters: Optional[List[DatabaseExporter]] = None,
        index_prefix: Optional[str] = None,
        source: Optional[str] = None,
        elastic_index: Optional[str] = None,
        known_benign: bool = False,
        known_malicious: bool = False,
        precomputed_hashes: Optional[Dict[str, str]] = None,
    ):
        self.log = log
        self.log.debug(f"Creating {self.__class__.__name__}")
        self.filepath = filepath
        self.source = source
        self.exporters = exporters or []
        self.index_prefix = index_prefix if index_prefix else settings.ELASTIC_BINARIES_COLLECTION
        self.elastic_index = self.index_prefix + (elastic_index if elastic_index else "")
        self.known_benign = known_benign
        self.known_malicious = known_malicious

        # Use precomputed hashes if provided (e.g., from machofile, pefile)
        # Otherwise compute them from binary
        if precomputed_hashes:
            self.md5 = precomputed_hashes.get('md5') or precomputed_hashes.get('MD5')
            self.sha1 = precomputed_hashes.get('sha1') or precomputed_hashes.get('SHA1')
            self.sha256 = precomputed_hashes.get('sha256') or precomputed_hashes.get('SHA256')
        else:
            self.md5 = hashlib.md5(self.binary).hexdigest()
            self.sha1 = hashlib.sha1(self.binary).hexdigest()
            self.sha256 = hashlib.sha256(self.binary).hexdigest()
        self.hash = Hash(self.md5, self.sha1, self.sha256)

    @cached_property
    def binary(self):
        with open(self.filepath, "rb") as f:
            data = f.read()
        return data

    @property
    @abstractmethod
    def tag(self):
        pass

    @abstractmethod
    def extract(self):
        """
        this method defines the extracted data
        """

    @staticmethod
    def process_binary_string(s):
        # Remove \x00 padding
        s = s.rstrip(b"\x00")

        # Check if there are any non-printable characters
        has_non_printable = any(byte < 32 or byte > 126 for byte in s)

        if not has_non_printable:
            # If all characters are printable, decode the string
            return s.decode()
        else:
            # If there are non-printable characters, represent them as \xDD
            return "".join(
                [
                    f"\\x{byte:02x}" if byte < 32 or byte > 126 else chr(byte)
                    for byte in s
                ]
            )

    @staticmethod
    def remove_non_utf8(binary_string):
        decoded = b""
        for i in range(len(binary_string)):
            try:
                # Try to decode each byte
                char = binary_string[i : i + 1].decode("utf-8")
                decoded += char.encode("utf-8")
            except UnicodeDecodeError:
                # Skip this byte if it can't be decoded
                continue
        return decoded

    def calculate_entropy(self, data):
        """Calculate the entropy of a chunk of data.
        Based on pefile.SectionStructure.entropy_H.
        """
        # self.log.debug(inspect.currentframe().f_code.co_name)
        if not data:
            return 0.0

        if type(data) == str:
            counts = Counter(data)
            frequencies = ((i / len(data)) for i in counts.values())
            return - sum(f * math.log(f, 2) for f in frequencies)
        else:
            occurences = Counter(bytearray(data))
            entropy = 0
            for x in occurences.values():
                p_x = float(x) / len(data)
                entropy -= p_x * math.log(p_x, 2)
            return entropy

    @abstractmethod
    def prepare_export_data(self, exporter_type: str) -> Tuple[List[Any], List[str], List[str]]:
        """
        Prepare data for specific export type
        Returns:
            Tuple containing:
            - data: List of values to insert
            - column_names: List of column names
            - column_type_names: List of column types
        """
        pass

    def export_data(self):
        """Export data to all configured exporters

        Returns:
            True: Export succeeded
            False: Export failed (actual error)
            None: No data to export (not an error, e.g., no overlay, no signature)
        """
        self.log.debug(inspect.currentframe().f_code.co_name)
        success = True
        extracted_data = self.extract()

        if extracted_data is None:
            self.log.debug("extract() returned None, skipping export")
            return None  # No data to export, not a failure
            
        for exporter in self.exporters:
            if isinstance(exporter, PrintExporter):
                # For PrintExporter, we pass the extracted data directly
                success &= exporter.export(extracted_data)
            else:
                # Get the data prepared for this specific exporter type
                export_data = self.prepare_export_data(exporter.__class__.__name__)
                
                if export_data is None:
                    self.log.debug(f"prepare_export_data returned None for {exporter.__class__.__name__}")
                    return False
                
                if isinstance(exporter, ElasticsearchExporter):
                    success &= exporter.export(
                        export_data,
                        index=self.elastic_index,
                        tag=self.tag(),
                        hashes=asdict(self.hash),
                        known_benign=self.known_benign,
                        known_malicious=self.known_malicious
                    )
                elif isinstance(exporter, ClickHouseExporter):
                    # For ClickHouse, we need to pass the table name and the prepared data
                    success &= exporter.export(
                        export_data,
                        table=self.get_clickhouse_table(),
                        # Add these parameters explicitly
                        column_names=export_data[1] if isinstance(export_data, tuple) else None,
                        column_type_names=export_data[2] if isinstance(export_data, tuple) else None
                    )
                
        return success

    @abstractmethod
    def get_clickhouse_table(self) -> str:
        """Return the appropriate ClickHouse table name"""
        pass
    # def export_to_elastic(self, list_of_dataclasses, tag=None):
    #     self.log.debug(inspect.currentframe().f_code.co_name)

    #     if not isinstance(list_of_dataclasses, list):
    #         self.log.error("Called export_to_elastic wrongly")

    #     now_t = datetime.now(timezone.utc).strftime("%Y-%m-%d %H:%M:%S")
    #     for dataclass_ in list_of_dataclasses:
    #         if not settings.ELASTIC_CLIENT.ping():
    #             self.log.error("[CONNECTION ERROR] ping to elastic failed")
            
    #         # Convert dataclass to dict and filter out None values
    #         document = {k: v for k, v in asdict(dataclass_).items() if v is not None}
            
    #         if tag:
    #             document["tag"] = [tag, self.tag()]
    #         else:
    #             document["tag"] = self.tag()
    #         hashes = asdict(self.hash)
    #         document |= hashes
    #         document["timestamp_utc"] = now_t
    #         # document["source"] = self.source
    #         document["known_benign"] = self.known_benign
    #         document["known_malicious"] = self.known_malicious

    #         if "_id" in document:
    #             tmp_id = document.pop("_id") + document["sha256"]
    #             _id = hashlib.sha256(tmp_id.encode()).hexdigest()
    #         else:
    #             _id = document["sha256"]

    #         # self.log.debug(f"[DEBUG] about to export {type(document)} {document}")
    #         try:
    #             doc_dump = json.dumps(document)
    #         except TypeError as e:
    #             self.log.error(
    #                 f"Failed export of document. " f"full document: {document}"
    #             )
    #             raise e

    #         # body={"doc": doc_dump,
    #         #       "doc_as_upsert": True  # Create the document if it doesn't exist
    #         # }

    #         # Check if the index exists, and create it if it doesn't
    #         # if not settings.ELASTIC_CLIENT.indices.exists(index=self.elastic_index):
    #         #     settings.ELASTIC_CLIENT.indices.create(index=self.elastic_index)
    #         # pprint(doc_dump) #DEBUG
    #         # print("[DEBUG] _id: " + _id)
    #         # print("[DEBUG] index: " + self.elastic_index)
    #         settings.ELASTIC_CLIENT.index(
    #             index=self.elastic_index, id=_id, document=doc_dump
    #         )