Weiguo Yi

18 papers Journal 13Unranked 5
YearRankTypeTitle / Venue / Authors
2025 J jnl
IEEE Access
Weiguo Yi, Jinwei Yang, Lingwei Yan
2024 J jnl
IEEE Internet Things J.
Lijuan Zhang, Jiabin Peng, Weiguo Yi, Hang Lin, Lei Lei, Xiaoqin Song
2024 J jnl
IEEE Trans. Ind. Informatics
Lijuan Zhang, Weiguo Yi, Hang Lin, Jiabin Peng, Pan Gao
2024 J jnl
IEEE Access
Weiguo Yi, Jinwei Yang, Lingwei Yan
2023 J jnl
J. Intell. Fuzzy Syst.
Xudong Song, Xiaohui Wan, Weiguo Yi, Yunxian Cui, Changxian Li
2023 J jnl
J. Intell. Fuzzy Syst.
Weiguo Yi, Bin Ma, Heng Zhang, Siwei Ma
2023 J jnl
IEEE Access
Weiguo Yi, Siwei Ma, Ronghua Li
2023 J jnl
IEEE Access
Weiguo Yi, Bo Wang
2012 J jnl
Int. J. Autom. Comput.
Weiguo Yi, Jing Duan, Mingyu Lu
2012 J jnl
J. Intell. Fuzzy Syst.
Weiguo Yi, Mingyu Lu, Zhi Liu
2011 J jnl
Int. J. Mach. Learn. Cybern.
Weiguo Yi, Mingyu Lu, Zhi Liu
2011 J jnl
Int. J. Autom. Comput.
Weiguo Yi, Mingyu Lu, Zhi Liu
2011 conf
SoCPaR
Weiguo Yi, Mingyu Lu, Jing Duan
2010 conf
AICI (1)
Jing Duan, Zheng-Kui Lin, Weiguo Yi, Mingyu Lu
2009 conf
BMEI
Zhi Liu, Mingyu Lu, Weiguo Yi, Hao Xu
2009 conf
BMEI
Weiguo Yi, Mingyu Lu, Zhi Liu, Hao Xu
2009 conf
SoCPaR
Zheng-Kui Lin, Weiguo Yi, Mingyu Lu, Zhi Liu, Hao Xu
2006 J jnl
Knowl. Based Syst.
Jinmao Wei, Weiguo Yi, Ming-Yang Wang
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"