Camelia Ignat

22 papers B 3C 1Misc 2Journal 13Unranked 2
YearRankTypeTitle / Venue / Authors
2020 conf
AI4Narratives@IJCAI
Vanni Zavarella, Jakub Piskorski, Camelia Ignat, Hristo Tanev, Martin Atkinson
2011 J jnl
Lang. Resour. Evaluation
Ralf Steinberger, Sylvia Ombuya, Mijail A. Kabadjov, Bruno Pouliquen, Leonida Della Rocca, Jenya Belyaeva, Monica de Paola, Camelia Ignat, Erik Van der Goot
2009
Camelia Ignat
2007 conf
NATO ASI Mining Massive Data Sets for Security
Ralf Steinberger, Bruno Pouliquen, Camelia Ignat
2006 J jnl
CoRR
Camelia Ignat, Bruno Pouliquen, Ralf Steinberger, Tomaz Erjavec
2006 J jnl
CoRR
Bruno Pouliquen, Ralf Steinberger, Camelia Ignat
2006 J jnl
CoRR
Bruno Pouliquen, Ralf Steinberger, Camelia Ignat
2006 J jnl
CoRR
Bruno Pouliquen, Ralf Steinberger, Camelia Ignat, Tamara Oellinger
2006 J jnl
CoRR
Ralf Steinberger, Bruno Pouliquen, Camelia Ignat
2006 J jnl
CoRR
Camelia Ignat, Bruno Pouliquen, António Ribeiro, Ralf Steinberger
2006 B conf
LREC
Bruno Pouliquen, Marco Kimler, Ralf Steinberger, Camelia Ignat, Tamara Oellinger, Ken Blackler, Flavio Fuart, Wajdi Zaghouani, Anna Widiger, Ann-Charlotte Forslund, Clive Best
2006 J jnl
CoRR
Bruno Pouliquen, Marco Kimler, Ralf Steinberger, Camelia Ignat, Tamara Oellinger, Ken Blackler, Flavio Fuart, Wajdi Zaghouani, Anna Widiger, Ann-Charlotte Forslund, Clive Best
2006 J jnl
CoRR
Bruno Pouliquen, Ralf Steinberger, Camelia Ignat, Irina P. Temnikova, Anna Widiger, Wajdi Zaghouani, Jan Zizka
2006 J jnl
CoRR
Ralf Steinberger, Bruno Pouliquen, Camelia Ignat
2006 B conf
LREC
Ralf Steinberger, Bruno Pouliquen, Anna Widiger, Camelia Ignat, Tomaz Erjavec, Dan Tufis, Dániel Varga
2006 J jnl
CoRR
Ralf Steinberger, Bruno Pouliquen, Anna Widiger, Camelia Ignat, Tomaz Erjavec, Dan Tufis, Dániel Varga
2006 C conf
ISI
Clive Best, Bruno Pouliquen, Ralf Steinberger, Erik Van der Goot, Ken Blackler, Flavio Fuart, Tamara Oellinger, Camelia Ignat
2005 J jnl
J. Comput. Inf. Technol.
Ralf Steinberger, Bruno Pouliquen, Camelia Ignat
2004 Misc conf
SAC
Bruno Pouliquen, Ralf Steinberger, Camelia Ignat, Tom De Groeve
2004 B conf
COLING
Bruno Pouliquen, Ralf Steinberger, Camelia Ignat, Emilia Käsper, Irina P. Temnikova
2004 J jnl
Informatica (Slovenia)
Ralf Steinberger, Bruno Pouliquen, Camelia Ignat
2003 Misc conf
RANLP
Bruno Pouliquen, Ralf Steinberger, Camelia Ignat
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