Celso de Almeida

35 papers B 6Journal 17Unranked 12
YearRankTypeTitle / Venue / Authors
2020 J jnl
IEEE Access
Henry Ramiro Carvajal Mora, Nathaly Verónica Orozco Garzón, Daniel Altamirano, Celso de Almeida
2020 J jnl
Future Internet
Gonzalo F. Olmedo, Román A. Lara-Cueva, Diego Martínez, Celso de Almeida
2019 J jnl
IEEE Access
Carlos Daniel Altamirano, Juan Minango, Henry Ramiro Carvajal Mora, Celso de Almeida
2019 J jnl
IEEE Access
Henry Ramiro Carvajal Mora, Nathaly Veronica Orozco Garzon, Paulo Chiliguano, Celso de Almeida
2019 J jnl
Wirel. Networks
Juan Minango, Celso de Almeida
2019 J jnl
IEEE Access
Nathaly Veronica Orozco Garzon, Henry Ramiro Carvajal Mora, Celso de Almeida
2019 J jnl
IET Commun.
Henry W. Merino, Carlos E. Câmara, Celso de Almeida
2018 conf
VTC Spring
Juan Minango, Celso de Almeida
2018 J jnl
Phys. Commun.
Juan Minango, Celso de Almeida
2018 J jnl
Phys. Commun.
Henry W. Merino, Carlos E. Câmara, Celso de Almeida
2018 J jnl
IEEE Trans. Veh. Technol.
Juan Minango, Celso de Almeida
2018 J jnl
IEEE Commun. Lett.
Henry Ramiro Carvajal Mora, Nathaly Veronica Orozco Garzon, Celso de Almeida
2017 B conf
WiMob
Nathaly Veronica Orozco Garzon, Henry Ramiro Carvajal Mora, Celso de Almeida
2017 B conf
WiMob
Henry Ramiro Carvajal Mora, Nathaly Veronica Orozco Garzon, Celso de Almeida
2017 conf
LATINCOM
Juan Minango, Celso de Almeida
2017 conf
LATINCOM
Juan Minango, Celso de Almeida
2017 B conf
PIMRC
Juan Minango, Celso de Almeida, Carlos Daniel Altamirano
2017 J jnl
IEEE Trans. Veh. Technol.
Henry Ramiro Carvajal Mora, Nathaly Veronica Orozco Garzon, Celso de Almeida
2017 J jnl
Wirel. Pers. Commun.
Henry Ramiro Carvajal Mora, Nathaly Veronica Orozco Garzon, Celso de Almeida
2016 B conf
MASS
Henry W. Merino, Carlos E. Câmara, Celso de Almeida
2016 conf
LATINCOM
Carlos Daniel Altamirano, Celso de Almeida
2016 B conf
MASS
Henry W. Merino, Carlos E. Câmara, Celso de Almeida
2016 conf
VTC Fall
Henry Ramiro Carvajal Mora, Nathaly Veronica Orozco Garzon, Celso de Almeida
2016 conf
VTC Fall
Nathaly Veronica Orozco Garzon, Henry Ramiro Carvajal Mora, Celso de Almeida
2015 J jnl
Wirel. Pers. Commun.
Luís Otávio Mataveli, Celso de Almeida
2015 J jnl
Wirel. Pers. Commun.
Rodolpho Gianini, Celso de Almeida
2015 conf
GIIS
Henry Merino A., Celso de Almeida, Carlos E. Câmara
2014 conf
LATINCOM
Lailson F. dos Santos, Jaime Portugheis, Celso de Almeida
2012 J jnl
Wirel. Pers. Commun.
Luís Otávio Mataveli, Celso de Almeida
2012 conf
LATINCOM
Daniel Altamirano, Celso de Almeida
2007 J jnl
IEEE Trans. Veh. Technol.
Renato F. Baldini Filho, Celso de Almeida, Gustavo Fraidenraich
2004 conf
ICT
José Santo G. Panaro, Celso de Almeida
2004 conf
VTC Fall (2)
Roger Pierre Fabris Hoefel, Celso de Almeida
2002 conf
VTC Spring
Roger Pierre Fabris Hoefel, Celso de Almeida
1995 B conf
PIMRC
Celso de Almeida, Reginaldo Palazzo Júnior
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"