Ovsei Gelman

21 papers B 1Journal 16
YearRankTypeTitle / Venue / Authors
2017 J jnl
Int. J. Inf. Technol. Decis. Mak.
Manuel Mora, Gloria E. Phillips-Wren, Fen Wang, Ovsei Gelman
2016 J jnl
Int. J. Inf. Manag.
Manuel Mora, Rory V. O'Connor, Mahesh Rainsinghani, Ovsei Gelman
2015 J jnl
Int. J. Inf. Technol. Syst. Approach
Manuel Mora, Jorge Marx Gómez, Rory V. O'Connor, Mahesh S. Raisinghani, Ovsei Gelman
2014 J jnl
Int. J. Inf. Technol. Syst. Approach
Manuel Mora Tavarez, Mahesh S. Raisinghani, Rory V. O'Connor, Jorge Marx Gómez, Ovsei Gelman
2014 J jnl
Intell. Decis. Technol.
Manuel Mora, Jorge Marx Gómez, Fen Wang, Ovsei Gelman
2014 ch.
Engineering and Management of IT-based Service Systems
Manuel Mora, Gloria E. Phillips-Wren, Francisco Cervantes-Pérez, Leonardo Garrido, Ovsei Gelman
2014 J jnl
Intell. Decis. Technol.
Manuel Mora, Gloria E. Phillips-Wren, Jorge Marx Gómez, Fen Wang, Ovsei Gelman
2013 J jnl
Inf. Technol. Dev.
Manuel Mora, Fen Wang, Ovsei Gelman
2013 J jnl
Int. J. Softw. Eng. Knowl. Eng.
Manuel Mora, Rory V. O'Connor, Mahesh S. Raisinghani, Ovsei Gelman
2011 J jnl
Int. J. Serv. Sci. Manag. Eng. Technol.
Manuel Mora, Rory O'Connor, Mahesh S. Raisinghani, Jorge Macías-Luévano, Ovsei Gelman
2011 J jnl
Int. J. Decis. Support Syst. Technol.
Manuel Mora, Fen Wang, Ovsei Gelman, Miroljub Kljajic
2011 ch.
The Science of Service Systems
Manuel Mora, Mahesh S. Raisinghani, Ovsei Gelman, Miguel-Ángel Sicilia
2009 J jnl
Int. J. Inf. Syst. Serv. Sect.
Manuel Mora, Mahesh S. Raisinghani, Rory O'Connor, Ovsei Gelman
2008 J jnl
Int. J. Inf. Technol. Syst. Approach
Manuel Mora, Ovsei Gelman, Rory O'Connor, Francisco Javier Álvarez Rodríguez, J. Macias-Levano
2008 J jnl
Int. J. Inf. Technol. Syst. Approach
Manuel Mora, Ovsei Gelman, Moti Frank, David B. Paradice, Francisco Cervantes-Pérez, Guisseppi A. Forgionne
2007 J jnl
Inf. Resour. Manag. J.
Manuel Mora, Ovsei Gelman, Guisseppi A. Forgionne, Doncho Petkov, Jeimy Cano
2005 ch.
Encyclopedia of Information Science and Technology (II)
Guisseppi A. Forgionne, Manuel Mora, Jatinder N. D. Gupta, Ovsei Gelman
2005 ch.
Encyclopedia of Information Science and Technology (III)
Ovsei Gelman, Manuel Mora T., Guisseppi A. Forgionne, Francisco Cervantes-Pérez
2005 J jnl
J. Decis. Syst.
Manuel Mora, Guisseppi A. Forgionne, Jatinder N. D. Gupta, Francisco Cervantes-Pérez, Ovsei Gelman
2005 J jnl
J. Decis. Syst.
Manuel Mora, Guisseppi A. Forgionne, Francisco Cervantes-Pérez, Leonardo Garrido, Jatinder N. D. Gupta, Ovsei Gelman
2003 B conf
KES
Manuel Mora T., Guisseppi A. Forgionne, Jatinder N. D. Gupta, Francisco Cervantes-Pérez, Ovsei Gelman
redb/extractor_registry.py
← Index redb/extractor_registry.py python
"""
Extractor registry with lazy loading by file type.

Groups extractors by file type (pe, elf, macho, apk) and only imports
the relevant group when that file type is first encountered. This avoids
loading heavy dependencies (pefile, lief, androguard, etc.) into workers
that don't need them.
"""
import importlib
import logging

logger = logging.getLogger(__name__)

# Registry: group name -> list of (module_path, class_names)
_REGISTRY = {
    "pe": [
        ("redb.extractors.pe_extractors", [
            "PEFeaturesExtractor",
            "PEImportExtractor",
            "PEResourceExtractor",
            "PEOverlayExtractor",
            "PESectionExtractor",
            "PESignatureExtractor",
            "PEExtraFindings",
            "PEInconstistencyTestsExtractor",
            "PEDotNetExtractor",
        ]),
    ],
    "elf": [
        ("redb.extractors.elf_extractors", [
            "ELFFeaturesExtractor",
            "ELFSegmentExtractor",
            "ELFSectionExtractor",
            "ELFDependencyExtractor",
            "ELFSymbolExtractor",
            "ELFImportExtractor",
            "ELFExportExtractor",
            "ELFRelocationExtractor",
            "ELFNotesExtractor",
        ]),
    ],
    "macho": [
        ("redb.extractors.macho_extractors", [
            "MachOFeaturesExtractor",
            "MachOSegmentExtractor",
            "MachOImportExtractor",
            "MachOExportExtractor",
            "MachODylibExtractor",
            "MachOSignatureExtractor",
        ]),
    ],
    "apk": [
        ("redb.extractors.apk_extractors", [
            "APKFeaturesExtractor",
            "APKManifestExtractor",
            "APKPermissionsExtractor",
            "APKSignatureExtractor",
            "APKDexExtractor",
            "APKResourceExtractor",
            "APKNativeLibExtractor",
            "APKInconsistencyTestsExtractor",
        ]),
        ("redb.extractors.decompiler.DecompileAPK", [
            "DecompileAPK",
        ]),
    ],
    "js": [
        ("redb.extractors.js_extractors", [
            "JSFeaturesExtractor",
            "JSSuspiciousAPIsExtractor",
            "JSStringsExtractor",
            "JSDeobfuscationExtractor",
            "JSContentExtractor",
        ]),
    ],
}

# Map filetype labels (from Magika) to registry group names
FILETYPE_TO_GROUP = {
    "pebin": "pe",
    "elf": "elf",
    "macho": "macho",
    "apk": "apk",
    "javascript": "js",
}

# Cache: group name -> {class_name: class}
_group_cache = {}


def _load_group(group_name):
    """Import all extractors for a group. Cached after first call."""
    if group_name in _group_cache:
        return _group_cache[group_name]

    logger.debug(f"Loading extractor group: {group_name}")

    # Suppress androguard logging before importing APK extractors
    if group_name == "apk":
        from loguru import logger as loguru_logger
        loguru_logger.disable("androguard")

    classes = {}
    for module_path, class_names in _REGISTRY[group_name]:
        mod = importlib.import_module(module_path)
        for name in class_names:
            classes[name] = getattr(mod, name)

    _group_cache[group_name] = classes
    return classes


def get_filetype_modules(filetype):
    """Get the list of format-specific extractor classes for a filetype.

    Returns only analysis extractors (excludes decompilers like DecompileAPK).
    """
    group = FILETYPE_TO_GROUP.get(filetype)
    if not group:
        return []
    classes = _load_group(group)
    return [cls for name, cls in classes.items() if not name.startswith("Decompile")]


def get_extractor_class(name):
    """Look up a single extractor class by name across all groups.

    Checks cached groups first, then loads groups on demand.
    """
    # Check already-loaded groups first
    for group_classes in _group_cache.values():
        if name in group_classes:
            return group_classes[name]

    # Search all groups (triggers lazy loading)
    for group_name in _REGISTRY:
        classes = _load_group(group_name)
        if name in classes:
            return classes[name]

    return None