Vasundhara

29 papers C 2Misc 4Journal 16Unranked 7
YearRankTypeTitle / Venue / Authors
2025 Misc conf
ICASSP
Asutosh Kar, Gagandeep Singh, Pradeep K. Shill, Somanath Pradhan, Vasundhara, Mads Græsbøll Christensen
2025 J jnl
Circuits Syst. Signal Process.
Rajapantula Kranthi, Vasundhara
2025 J jnl
Circuits Syst. Signal Process.
Neetu Chikyal, Vasundhara, Chayan Bhar
2025 Misc conf
ICASSP
Vanitha Devi R, Vasundhara, Asutosh Kar, Mads Græsbøll Christensen
2025 J jnl
Circuits Syst. Signal Process.
Asutosh Kar, Srikanth Burra, S. Shoba, Vasundhara, Vladimir Mladenovic, Pankaj Goel, Sanjeev Kumar, Pitikhate Sooraksa
2025 J jnl
Circuits Syst. Signal Process.
Neetu Chikyal, Vasundhara, Chayan Bhar, Asutosh Kar, Mads Græsbøll Christensen
2025 J jnl
Signal Image Video Process.
Rajapantula Kranthi, Vasundhara
2025 Misc conf
ICASSP
Fareedha, Vasundhara, Asutosh Kar, Mads Græsbøll Christensen
2025 Misc conf
ICASSP
Neetu Chikyal, Vasundhara, Chayan Bhar, Asutosh Kar, Mads Græsbøll Christensen
2025 J jnl
IEEE Trans. Circuits Syst. I Regul. Pap.
Vanitha Devi R, Vasundhara
2024 J jnl
Circuits Syst. Signal Process.
Asutosh Kar, S. Shoba, Srikanth Burra, Pankaj Goel, Sanjeev Kumar, Vasundhara, Vladimir Mladenovic, Pitikhate Sooraksa
2024 J jnl
Circuits Syst. Signal Process.
Rajapantula Kranthi, Vasundhara, Asutosh Kar
2024 conf
NCC
Rajapantula Kranthi, Vasundhara
2024 J jnl
Digit. Signal Process.
Vanitha Devi R, Vasundhara
2023 C conf
LANMAN
Vasundhara, Abhilash Mandloi, Mehul Patel
2023 conf
ICCCNT
Aditi Das, Vasundhara, Vanitha Devi R
2023 C conf
ASRU
Vanitha Devi R, Vasundhara
2022 conf
iSES
Rajapantula Kranthi, Vasundhara
2022 J jnl
Digit. Signal Process.
Vasundhara
2022 conf
iSES
Vanitha Devi R, Vasundhara
2018 J jnl
Signal Image Video Process.
Vasundhara, Ganapati Panda, Niladri B. Puhan
2018 J jnl
IEEE Trans. Circuits Syst. I Regul. Pap.
Vasundhara, Niladri B. Puhan, Ganapati Panda
2018 J jnl
Circuits Syst. Signal Process.
Vasundhara, Basant Kumar Mohanty, Ganapati Panda, Niladri B. Puhan
2018 conf
SPCOM
Vasundhara, Niladri B. Puhan, Ganapati Panda
2016 J jnl
Digit. Signal Process.
Vasundhara, Ganapati Panda, Niladri B. Puhan
2015 conf
ISSPIT
Vasundhara, Ganapati Panda, Niladri B. Puhan
2015 conf
ISSPIT
Vasundhara, Ganapati Panda, Niladri B. Puhan
2014 J jnl
Nat. Comput.
Vasundhara, Durbadal Mandal, Rajib Kar, Sakti Prasad Ghoshal
2013 J jnl
Int. J. Comput. Intell. Syst.
Vasundhara, Durbadal Mandal, Sakti Prasad Ghoshal, Rajib Kar
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"