Rafael P. Torchelsen

26 papers C 1Journal 12Unranked 12
YearRankTypeTitle / Venue / Authors
2025 conf
SVR
Leonardo S. Guths, Matheus Dias Negrão, Carla M. D. S. Freitas, Anderson Maciel, Rafael P. Torchelsen, Luciana Nedel
2025 conf
SVR
Lucas Alviene Pereira, Matheus Dias Negrão, Anderson Maciel, Rafael P. Torchelsen, Luciana Nedel, Carla M. D. S. Freitas
2025 J jnl
Multim. Tools Appl.
Daniele Fernandes E. Silva, Rafael P. Torchelsen, Marilton S. de Aguiar
2024 conf
SIGGRAPH (Conference Paper Track)
Marcelo Gomes Martins, Lucas Zanusso Morais, Rafael P. Torchelsen, Luciana P. Nedel, Anderson Maciel
2023 J jnl
Comput. Graph.
Lucas Zanusso Morais, Victor Kunde Bergmann, Eduarda Abreu Carvalho, Raquel Zimmer, Marcelo Gomes Martins, Luciana Porcher Nedel, Anderson Maciel, Rafael P. Torchelsen
2023 conf
SVR
Jonas Monticelli, Jorge A. Wagner Filho, Anderson Maciel, Rafael P. Torchelsen, Carla Maria Dal Sasso Freitas, Luciana P. Nedel
2022 J jnl
Comput. Graph.
Aline Menin, Rafael P. Torchelsen, Luciana P. Nedel
2019 C conf
CGI
Jose Abel Ticona, Steeven Villa, Rafael P. Torchelsen, Anderson Maciel, Luciana P. Nedel
2018 J jnl
IEEE Computer Graphics and Applications
Aline Menin, Rafael P. Torchelsen, Luciana Porcher Nedel
2018 J jnl
Comput. Graph.
Steeven Villa, Abel Ticona, Rafael P. Torchelsen, Luciana Porcher Nedel, Anderson Maciel
2017 J jnl
IEEE Computer Graphics and Applications
Iago U. Berndt, Rafael P. Torchelsen, Anderson Maciel
2017 J jnl
Comput. Graph.
Rafael P. Torchelsen, Daniele Panozzo
2016 conf
SIBGRAPI
Daniele Fernandes E. Silva, Iago U. Berndt, Rafael P. Torchelsen, Anderson Maciel
2016 J jnl
Comput. Graph.
Guilherme N. Oliveira, Jose L. Sotomayor, Rafael P. Torchelsen, Cláudio T. Silva, João Luiz Dihl Comba
2015 conf
SIBGRAPI
Iago U. Berndt, Rafael P. Torchelsen, Anderson Maciel
2014 J jnl
Comput. Graph.
Marilena Maule, João Luiz Dihl Comba, Rafael P. Torchelsen, Rui Bastos
2013 conf
I3D
Marilena Maule, João Comba, Rafael P. Torchelsen, Rui Bastos
2013 conf
SIBGRAPI
Guilherme N. Oliveira, João Comba, Rafael P. Torchelsen, Maristela Padilha, Cláudio T. Silva
2012 conf
SIBGRAPI
Marilena Maule, João Luiz Dihl Comba, Rafael P. Torchelsen, Rui Bastos
2012 conf
SIBGRAPI Tutorials
Marilena Maule, João Luiz Dihl Comba, Rafael P. Torchelsen, Rui Bastos
2011 J jnl
Comput. Graph.
Marilena Maule, João Luiz Dihl Comba, Rafael P. Torchelsen, Rui Bastos
2011 J jnl
Vis. Comput.
Guilherme N. Oliveira, Rafael P. Torchelsen, João Luiz Dihl Comba, Marcelo Walter, Rui Bastos
2010 conf
SIBGRAPI
Guilherme N. Oliveira, Rafael P. Torchelsen, João Luiz Dihl Comba, Marcelo Walter, Rui Bastos
2010 conf
SI3D
Rafael P. Torchelsen, Luiz F. Scheidegger, Guilherme N. Oliveira, Rui Bastos, João Luiz Dihl Comba
2010
Rafael P. Torchelsen
2009 J jnl
Comput. Graph. Forum
Rafael P. Torchelsen, Francisco Pinto, Rui Bastos, João Luiz Dihl Comba
redb/extractors/apk_extractors/apk_native_libs.py
← Index redb/extractors/apk_extractors/apk_native_libs.py python
import fnmatch
import hashlib
import inspect
from datetime import datetime, timezone
from typing import Any

from redb.extractors.enum import Tag
from redb.extractors.apk_extractor import APKExtractor
from redb.models.dataclasses import APKNativeLib

# Known packer/protector native library names
KNOWN_PACKER_LIBS = {
    # Jiagu (360/Qihoo)
    "libjiagu.so", "libjiagu_a64.so", "libjiagu_x86.so", "libjiagu_x64.so",
    # Bangcle/SecNeo
    "libsecexe.so", "libsecmain.so", "libSecShell.so",
    # Baidu
    "libbaiduprotect.so",
    # Tencent (Legu)
    "libtxAppProtect.so", "libBugly.so",
    # iJiami
    "libexec.so", "libexecmain.so",
    # Alibaba
    "libmobisec.so", "libaliprotect.so",
    # APKProtect
    "libAPKProtect.so",
    # Pangxie (Pangolin)
    "libdexjni.so",
    # DexProtector
    "libdexprotector.so",
    # AppSolid
    "libAppSolid.so",
    # Kiwisec
    "libkwscmm.so",
    # DingXiang
    "libx3g.so",
    # NQ Shield
    "libnqshield.so",
    # Generic / other
    "libprotectClass.so",
    "libDexHelper.so",
    "libdexloader.so",
    "libfdog.so",
}

# Glob-style patterns for packer libs (e.g. libshella-*.so)
KNOWN_PACKER_PATTERNS = [
    "libshella-*.so",
    "libshell-super.*.so",
]


def is_known_packer_lib(filename):
    """Check if a native library filename matches known packer signatures."""
    if filename in KNOWN_PACKER_LIBS:
        return True
    for pattern in KNOWN_PACKER_PATTERNS:
        if fnmatch.fnmatch(filename, pattern):
            return True
    return False


class APKNativeLibExtractor(APKExtractor):

    def __init__(
        self, filepath, log, exporters=None, index_prefix=None,
        known_benign=False, known_malicious=False,
        apk=None,
    ):
        super().__init__(
            filepath, log, exporters, index_prefix,
            known_benign, known_malicious, apk,
        )
        self.native_libs = []
        self.abis = set()
        self.log.debug(inspect.currentframe().f_code.co_name)

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

    def extract(self):
        if not self._is_valid_apk():
            self.log.error(f"Invalid APK for {self.hash.sha256}")
            return None

        self.native_libs = []
        self.abis = set()

        zf = self._get_zip_file()
        if not zf:
            return None

        with zf:
            for info in zf.infolist():
                if not (info.filename.startswith("lib/") and info.filename.endswith(".so")):
                    continue
                parts = info.filename.split("/")
                if len(parts) < 3:
                    continue

                abi = parts[1]
                filename = parts[-1]
                self.abis.add(abi)

                try:
                    data = zf.read(info.filename)
                    lib_sha256 = hashlib.sha256(data).hexdigest()
                except Exception as e:
                    self.log.warning(f"Error reading native lib {info.filename}: {e}")
                    continue

                self.native_libs.append(APKNativeLib(
                    abi=abi,
                    filename=filename,
                    size=info.file_size,
                    sha256=lib_sha256,
                    is_known_packer=is_known_packer_lib(filename),
                ))

        if not self.native_libs:
            return None

        return {
            "native_lib_count": len(self.native_libs),
            "abis": sorted(self.abis),
            "native_libs": self.native_libs,
            "known_packer_libs": [
                lib for lib in self.native_libs if lib.is_known_packer
            ],
        }

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

            current_time = datetime.now(timezone.utc)
            data = []
            for lib in self.native_libs:
                data.append([
                    self.sha256,
                    lib.abi,
                    lib.filename,
                    lib.size,
                    lib.sha256,
                    int(lib.is_known_packer),
                    current_time,
                ])

            column_names = [
                'sha256', 'lib_abi', 'lib_filename', 'lib_size',
                'lib_sha256', 'lib_is_known_packer', 'analysis_date',
            ]

            column_type_names = [
                'FixedString(64)', 'LowCardinality(String)', 'String', 'UInt64',
                'FixedString(64)', 'UInt8', "DateTime64(3, 'UTC')",
            ]

            return (data, column_names, column_type_names)

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