Naraig Manjikian

37 papers A* 2A 2B 5Misc 2Journal 7Unranked 19
YearRankTypeTitle / Venue / Authors
2018 J jnl
IET Commun.
Shervin Vakili, J. M. Pierre Langlois, Yvon Savaria, Naraig Manjikian
2017 conf
CCECE
Naraig Manjikian
2016 conf
CCECE
Naraig Manjikian
2015 conf
CCECE
Naraig Manjikian
2014 conf
NEWCAS
Tayler Sokalski, Naraig Manjikian
2013 conf
CCECE
Naraig Manjikian, Alexander Ferdynus, Laszlo Katona
2013 conf
CCECE
Tayler Sokalski, Naraig Manjikian
2013 conf
CCECE
Naraig Manjikian, Laszlo Katona, Alexander Ferdynus, Simon V. Chamlian, Pavel Katkov
2012 conf
SoCC
Edin Kadric, Naraig Manjikian, Zeljko Zilic
2012 conf
CCECE
Ahmad Khayyat, Naraig Manjikian
2011 conf
CCECE
Bo Fan, Naraig Manjikian
2011 conf
CCECE
Ahmad Khayyat, Naraig Manjikian
2010 A conf
DATE
Assem A. M. Bsoul, Naraig Manjikian, Li Shang
2009 conf
CCECE
Jonathan Roth, Naraig Manjikian, Subramania Sudharsanan
2006 A conf
ICME
Mohanarajah Sinnathamby, Subramania Sudharsanan, Naraig Manjikian
2006 conf
CCECE
Naraig Manjikian, Cindy Mark, Mohanarajah Sinnathamby, James Reed, Huang Jin
2004 B conf
ICPP
Naraig Manjikian, Huang Jin, James Reed, Nathan Cordeiro
2002 J jnl
Simul.
Peter M. Ewert, Naraig Manjikian
2001 J jnl
IEEE Trans. Parallel Distributed Syst.
Naraig Manjikian, Tarek S. Abdelrahman
2001 J jnl
Comput. Commun.
Peter M. Ewert, Naraig Manjikian
2001 J jnl
SIGARCH Comput. Archit. News
Naraig Manjikian
2001 J jnl
SIGARCH Comput. Archit. News
Naraig Manjikian
2001 B conf
ISPASS
Naraig Manjikian
2000 conf
ASAP
Naraig Manjikian
2000 Misc conf
WCAE
Naraig Manjikian
2000 Misc conf
WCAE
Naraig Manjikian
2000 conf
Workshop on Software and Performance
Peter M. Ewert, Naraig Manjikian
2000 B conf
ICPP
R. Grindley, Tarek S. Abdelrahman, Stephen Brown, S. Caranci, D. DeVries, Benjamin Gamsa, A. Grbic, M. Gusat, R. Ho, Orran Krieger, Guy G. Lemieux, K. Loveless, Naraig Manjikian, P. McHardy, Sinisa Srbljic, Michael Stumm, Zvonko G. Vranesic, Zeljko Zilic
1998 A* conf
DAC
A. Grbic, Stephen Brown, S. Caranci, R. Grindley, M. Gusat, Guy G. Lemieux, K. Loveless, Naraig Manjikian, Sinisa Srbljic, Michael Stumm, Zvonko G. Vranesic, Zeljko Zilic
1998 conf
LCR
Tarek S. Abdelrahman, Naraig Manjikian, Gary Liu, Sudarsan Tandri
1997 B conf
ICPP
Naraig Manjikian
1997 J jnl
IEEE Trans. Parallel Distributed Syst.
Naraig Manjikian, Tarek S. Abdelrahman
1996 A* conf
DAC
Stephen Brown, Naraig Manjikian, Zvonko G. Vranesic, S. Caranci, A. Grbic, R. Grindley, M. Gusat, K. Loveless, Zeljko Zilic, Sinisa Srbljic
1996 conf
ICPP, Vol. 3
Naraig Manjikian, Tarek S. Abdelrahman
1995 conf
ICPP (2)
Naraig Manjikian, Tarek S. Abdelrahman
1993 B conf
PADS
Naraig Manjikian, Wayne M. Loucks
1992 conf
Annual Simulation Symposium
Naraig Manjikian, Wayne M. Loucks
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"