M. Ronnier Luo

101 papers B 2Unranked 99
YearRankTypeTitle / Venue / Authors
2020 conf
LIM
Qiang Xu, M. Ronnier Luo, Dragan Sekulovski
2020 conf
CIC
Rafal K. Mantiuk, Minjung Kim, Maliha Ashraf, Qiang Xu, M. Ronnier Luo, Jasna Martinovic, Sophie M. Wuerger
2017 conf
CIC
Muhammad Safdar, M. Ronnier Luo, Guihua Cui, Youn Jin Kim
2016 conf
CIC
Shining Ma, J. Liang, Minchen Wei, M. Ronnier Luo
2016 conf
CIC
Muhammad Safdar, M. Ronnier Luo, Guihua Cui
2016 conf
CIC
Qiyan Zhai, M. Ronnier Luo, Peter Hanselaer, Kevin A. G. Smet
2016 conf
CIC
Yuteng Zhu, M. Ronnier Luo, Sebastian Fischer, Péter Bodrogi, Tran Quoc Khanh
2016 conf
CIC
M. Wei, Shining Ma, M. Ronnier Luo
2015 conf
CIC
Yuteng Zhu, M. Ronnier Luo, Lihao Xu, Xiaoyu Liu, Guihua Cui, Sebastian Fischer, Péter Bodrogi, Tran Quoc Khanh
2015 conf
CIC
Muhammad Safdar, M. Ronnier Luo, Xiaoyu Liu
2014 conf
CIC
Muhammad Safdar, M. Ronnier Luo, Xiaoyu Liu
2013 conf
CIC
M. Ronnier Luo, Guihua Cui, Yoon Ji Cho
2012 conf
CIC
M. Ronnier Luo
2012 conf
CGIV
Changjun Li, M. Ronnier Luo, Pei-Li Sun
2012 conf
CIC
Changjun Li, M. Ronnier Luo, Manuel Melgosa-Latorre
2012 conf
CGIV
Guo-Feng Wei, M. Ronnier Luo, Peter A. Rhodes
2012 conf
CGIV
Chrysiida Kitsara, M. Ronnier Luo, Peter A. Rhodes, Vien Cheung
2012 conf
CIC
Yoon Ji Cho, Li-Chen Ou, M. Ronnier Luo
2012 conf
CGIV
Yi-Fan Chou, Vien Cheung, Changjun Li, M. Ronnier Luo, San-Liang Lee
2012 conf
CIC
Yi-Fan Chou, Vien Cheung, M. Ronnier Luo, San-Liang Lee
2011 conf
CIC
Yoon Ji Cho, Li-Chen Ou, M. Ronnier Luo
2011 conf
CIC
Yinqiu Yuan, Li-Chen Ou, M. Ronnier Luo
2011 conf
CIC
Huanzhao Zeng, M. Ronnier Luo
2011 conf
CIC
Yi-Fan Chou, M. Ronnier Luo, János Schanda, Péter Csuti, Ferenc Szabó, G. Sárvári
2010 conf
CIC
Huanzhao Zeng, M. Ronnier Luo
2010 conf
CIC
Joohee Jun, Li-Chen Ou, Boris Oicherman, Shuo-Ting Wei, M. Ronnier Luo, Hila Nachlieli, Carl Staelin
2010 conf
CIC
Min Huang, Hao-Xue Liu, M. Ronnier Luo, Guihua Cui
2010 conf
CGIV/MCS
Guo-Feng Wei, M. Ronnier Luo, Peter A. Rhodes
2009 conf
CIC
Yi-Fan Chou, Changjun Li, M. Ronnier Luo
2009 conf
Color Imaging: Displaying, Processing, Hardcopy, and Applications
Jangjin Yoo, Guihua Cui, M. Ronnier Luo
2009 conf
CIC
Changjun Li, Elisabet Chorro-Calderon, M. Ronnier Luo, Michael R. Pointer
2008 conf
CGIV/MCS
Jin-Seo Kim, Maeng-Sub Cho, Bon-Ki Koo, M. Ronnier Luo, Stephen Westland
2008 conf
CGIV/MCS
YungKyung Park, Changjun Li, M. Ronnier Luo, Youngshin Kwak, Du-Sik Park, Changyeong Kim
2008 conf
CGIV/MCS
Don Gyou Lee, M. Ronnier Luo, Guihua Cui, Byung-Chul Ahn
2008 conf
CGIV/MCS
Han Wang, Guihua Cui, M. Ronnier Luo, Haisong Xu
2008 conf
CGIV/MCS
Zhaohui Wang, M. Ronnier Luo
2008 conf
CIC
Changjun Li, M. Ronnier Luo
2008 conf
CGIV/MCS
Shuo-Ting Wei, Li-Chen Ou, M. Ronnier Luo
2008 conf
CGIV/MCS
Seo Young Choi, M. Ronnier Luo, Michael R. Pointer
2008 conf
CGIV/MCS
Chenyang Fu, M. Ronnier Luo
2008 conf
CIC
Seo Young Choi, M. Ronnier Luo, Michael R. Pointer, Peter A. Rhodes
2008 conf
CIC
Seo Young Choi, M. Ronnier Luo, Michael R. Pointer, Guihua Cui
2008 conf
CIC
YungKyung Park, Changjun Li, M. Ronnier Luo, Youngshin Kwak, Du-Sik Park, Changyeong Kim
2008 conf
CGIV/MCS
Thorsten Steder, M. Ronnier Luo, Changjun Li
2007 conf
CIC
Changjun Li, Cheng Li, M. Ronnier Luo, Michael R. Pointer
2007 conf
CIC
X. Li, Changjun Li, M. Ronnier Luo, Michael R. Pointer, M. Cho, J. Kim
2007 conf
CIC
YungKyung Park, Changjun Li, M. Ronnier Luo, Youngshin Kwak, Du-Sik Park, Changyeong Kim
2007 conf
CIC
Jin-Seo Kim, Maeng-Sub Cho, Bon-Ki Koo, M. Ronnier Luo, Stephen Westland
2007 conf
CIC
Chenyang Fu, Changjun Li, M. Ronnier Luo, Robert W. G. Hunt, Michael R. Pointer
2007 conf
CIC
Seo Young Choi, M. Ronnier Luo, Michael R. Pointer
2006 conf
CIC
Chenyang Fu, M. Ronnier Luo
2006 conf
CGIV
Youn Jin Kim, M. Ronnier Luo, Peter A. Rhodes, Wonhee Choe, Seong-Deok Lee, Changyeong Kim
2006 conf
CGIV
Zhaohui Wang, M. Ronnier Luo, Byoung-Ho Kang, Heui-Keun Choh, Chang-Yeong Kim
2006 conf
CIC
Saori Kitaguchi, M. Ronnier Luo, Stephen Westland, Eric J. J. Kirchner, Geert-Jan van den Kieboom
2006 conf
CIC
YungKyung Park, Changjun Li, M. Ronnier Luo, Wonhee Choe, Seong-Deok Lee, Changyeong Kim
2006 conf
CIC
Changjun Li, M. Ronnier Luo
2006 conf
CGIV
Saori Kitaguchi, M. Ronnier Luo, Eric J. J. Kirchner, Geert-Jan van den Kieboom
2006 conf
CIC
Changjun Li, M. Ronnier Luo
2006 conf
CIC
Youn Jin Kim, Jangjin Yoo, M. Ronnier Luo, Peter A. Rhodes, Vien Cheung, Stephen Westland, Wonhee Choe, Seong-Deok Lee, Changyeong Kim
2006 conf
CIC
Boris Oicherman, M. Ronnier Luo, Alan R. Robertson
2005 conf
CIC
Changjun Li, M. Ronnier Luo
2005 conf
CIC
Chenyang Fu, M. Ronnier Luo
2005 conf
CIC
Boris Oicherman, M. Ronnier Luo, Arthur Tarrant, Alan R. Robertson
2004 conf
CGIV
Wei Ji, M. Ronnier Luo, Cai Li, Guihua Cui, Michael R. Pointer
2004 conf
CGIV
M. Ronnier Luo, Guihua Cui, Bryan Rigg, John Dakin
2004 conf
CGIV
Kaida Xiao, Changjun Li, M. Ronnier Luo, C. Taylor
2004 conf
CGIV
Changjun Li, M. Ronnier Luo
2004 conf
CGIV
Bing Han, Guowei Hong, Guihua Cui, M. Ronnier Luo
2004 conf
Color Imaging: Processing, Hardcopy, and Applications
Phil J. Green, M. Ronnier Luo
2004 conf
CGIV
Phil J. Green, M. Ronnier Luo
2003 conf
CIC
Youngshin Kwak, Lindsay W. MacDonald, M. Ronnier Luo
2003 conf
CIC
Chikako Sano, Tao Song, M. Ronnier Luo
2003 conf
CIC
Changjun Li, M. Ronnier Luo, Guihua Cui
2003 conf
Human Vision and Electronic Imaging
Youngshin Kwak, Lindsay W. MacDonald, M. Ronnier Luo
2003 conf
CIC
Youngshin Kwak, Lindsay W. MacDonald, M. Ronnier Luo
2003 conf
CIC
Kaida Xiao, M. Ronnier Luo, Changjun Li, Peter A. Rhodes, C. Taylor
2002 conf
CIC
Kai Man Raymond Ho, Guihua Cui, M. Ronnier Luo, Bryan Rigg
2002 conf
CGIV
Changjun Li, M. Ronnier Luo, Bryan Rigg
2002 conf
CGIV
Youngshin Kwak, Lindsay W. MacDonald, M. Ronnier Luo
2002 conf
CIC
S. Y. Zhu, M. Ronnier Luo, Guihua Cui, Bryan Rigg
2002 conf
CGIV
Kai Man Raymond Ho, Guihua Cui, M. Ronnier Luo, Bryan Rigg
2002 conf
CIC
S. Y. Zhu, Guihua Cui, M. Ronnier Luo
2002 conf
CIC
Nathan Moroney, Mark D. Fairchild, Robert W. G. Hunt, Changjun Li, M. Ronnier Luo, Todd Newman
2002 conf
CIC
Changjun Li, M. Ronnier Luo, Robert W. G. Hunt, Nathan Moroney, Mark D. Fairchild, Todd Newman
2001 conf
CIC
Tao Song, M. Ronnier Luo
2001 conf
CIC
Byoung-Ho Kang, Maeng-Sub Cho, Ján Morovic, M. Ronnier Luo
2001 conf
CIC
Suchitra Sueeprasan, M. Ronnier Luo
2001 conf
CIC
Changjun Li, M. Ronnier Luo
2000 B conf
ICIP
Guowei Hong, Bing Han, M. Ronnier Luo
2000 conf
CIC
Byoung-Ho Kang, Maeng-Sub Cho, Ján Morovic, M. Ronnier Luo
2000 conf
CIC
Changjun Li, M. Ronnier Luo, Bryan Rigg
2000 conf
CIC
Tao Song, M. Ronnier Luo
1999 conf
CIC
Shao Ying Zhu, M. Ronnier Luo
1999 conf
CIC
Byoung-Ho Kang, Maeng-Sub Cho, Ján Morovic, M. Ronnier Luo
1999 conf
CIC
Changjun Li, M. Ronnier Luo, Robert W. G. Hunt
1998 conf
CIC
Mark S. Drew, Graham D. Finlayson, M. Ronnier Luo, Ján Morovic
1998 conf
CIC
Ján Morovic, M. Ronnier Luo
1997 conf
CIC
Ján Morovic, M. Ronnier Luo
1996 conf
CIC
Ján Morovic, M. Ronnier Luo
1995 conf
ICNN
Maeng-Sub Cho, Byoung-Ho Kang, M. Ronnier Luo
1990 B conf
INTERACT
Peter A. Rhodes, M. Ronnier Luo, Stephen A. R. Scrivener
redb/extractors/macho_extractors/macho_dylibs.py
← Index redb/extractors/macho_extractors/macho_dylibs.py python
import hashlib
import inspect
from datetime import datetime, timezone
from typing import Any

from redb.extractors.enum import Tag
from redb.extractors.macho_extractor import MachOExtractor
from redb.models.dataclasses import MachODylib


class MachODylibExtractor(MachOExtractor):

    def __init__(
        self,
        filepath,
        log,
        exporters=None,
        index_prefix=None,
        elastic_index=None,
        known_benign=False,
        known_malicious=False,
        macho=None,
    ):
        super().__init__(
            filepath,
            log,
            exporters,
            index_prefix,
            elastic_index,
            known_benign,
            known_malicious,
            macho,
        )
        self.elastic_index = self.index_prefix + "-macho_dylibs"
        self.log.debug(inspect.currentframe().f_code.co_name)

    def tag(self):
        return Tag.MACHO_DYLIB.value

    def _extract_dylibs(self):
        """Extract dynamic library information from all architectures in the MachO binary."""
        self.log.debug(inspect.currentframe().f_code.co_name)
        dylibs = []

        if not self.macho:
            return dylibs

        try:
            # Get architectures using new API (already parsed in base class)
            architectures = self.macho.get_architectures()
            if not architectures:
                return dylibs

            # Process each architecture
            for arch_name in architectures:
                # Get dylib commands using new API with architecture parameter
                dylib_commands = self.macho.get_dylib_commands(arch=arch_name)
                if not dylib_commands:
                    continue

                # Extract dylib commands for this architecture
                for dylib_cmd in dylib_commands:
                    try:
                        dylib_name = dylib_cmd.get('dylib_name', 'Unknown')
                        if isinstance(dylib_name, bytes):
                            dylib_name = dylib_name.decode('utf-8', errors='replace')

                        # Create dylib dataclass with architecture info
                        macho_dylib = MachODylib(
                            dylib_name=dylib_name,
                            dylib_timestamp=dylib_cmd.get('dylib_timestamp', 0),
                            dylib_current_version=dylib_cmd.get('dylib_current_version', 0),
                            dylib_compat_version=dylib_cmd.get('dylib_compat_version', 0),
                        )
                        # Add architecture info to the dylib
                        macho_dylib.architecture = arch_name
                        dylibs.append(macho_dylib)

                    except Exception as e:
                        self.log.warning(
                            f'Unable to process dylib "{dylib_cmd.get("dylib_name", "Unknown")}" for architecture {arch_name} in {self.hash.sha256}: {e}'
                        )
                        continue

            return dylibs

        except Exception as e:
            self.log.error(f"Error extracting MachO dylibs: {e}")
            return dylibs

    def extract(self):
        self.log.debug(inspect.currentframe().f_code.co_name)
        try:
            dylibs = self._extract_dylibs()
            return dylibs
        except Exception as e:
            self.log.error(f"Error extracting MachO dylibs: {e}")
            return None

    def prepare_export_data(self, exporter_type: str) -> Any:
        if exporter_type == "ElasticsearchExporter":
            return self.extract()
        elif exporter_type == "ClickHouseExporter":
            if not self.macho:
                return None

            # Get architectures (macho is already parsed in base class)
            try:
                architectures = self.macho.get_architectures()
                is_fat = len(architectures) > 1
            except Exception as e:
                self.log.error(f"Could not get architectures: {e}")
                return None

            data = []
            current_time = datetime.now(timezone.utc)

            # Loop through each architecture (1 for single, multiple for FAT)
            for arch_name in architectures:
                # Get architecture-specific sha256
                try:
                    arch_general_info = self.macho.get_general_info(arch=arch_name)
                    arch_header_raw = self.macho.get_macho_header(arch=arch_name)
                    arch_sha256 = arch_general_info.get('SHA256', self.sha256)
                    arch_cputype_raw = arch_header_raw.get('cputype', 0) if arch_header_raw else 0
                except Exception as e:
                    self.log.warning(f"Could not get arch-specific data for {arch_name}: {e}")
                    arch_sha256 = self.sha256
                    arch_cputype_raw = 0

                # Get dylib commands for this architecture
                dylib_commands = self.macho.get_dylib_commands(arch=arch_name)
                if not dylib_commands:
                    continue

                # Process each dylib for this architecture
                for dylib_cmd in dylib_commands:
                    try:
                        dylib_name = dylib_cmd.get('dylib_name', 'Unknown')
                        if isinstance(dylib_name, bytes):
                            dylib_name = dylib_name.decode('utf-8', errors='replace')

                        data.append([
                            arch_sha256,                          # sha256 (architecture-specific)
                            dylib_name,                           # dylib_name
                            dylib_cmd.get('dylib_timestamp', 0), # dylib_timestamp
                            dylib_cmd.get('dylib_current_version', 0), # dylib_current_version
                            dylib_cmd.get('dylib_compat_version', 0),  # dylib_compat_version
                            current_time,                         # analysis_date
                        ])
                    except Exception as e:
                        self.log.warning(
                            f'Unable to process dylib "{dylib_cmd.get("dylib_name", "Unknown")}" for architecture {arch_name}: {e}'
                        )
                        continue

            column_names = [
                'sha256',
                'dylib_name', 'dylib_timestamp', 'dylib_current_version',
                'dylib_compat_version', 'analysis_date'
            ]

            if not data:
                return None

            column_type_names = [
                'FixedString(64)',
                'String', 'UInt32', 'UInt32',
                'UInt32', 'DateTime64(3, \'UTC\')'
            ]

            return (data, column_names, column_type_names)

        return None

    def get_clickhouse_table(self) -> str:
        return "redb_macho_dylibs"