Wei Wang

23 papers A 1Journal 19Unranked 3
YearRankTypeTitle / Venue / Authors
2026 J jnl
Appl. Soft Comput.
Wei Wang, Yuchen Zhu, Ziyuan Wang
2026 J jnl
Pattern Recognit.
Wei Wang, Gaolin Yuan, Bin Sun, Dong Liu, Hongjun Zhang, Guangsheng Wu, Yun Zhou, Xianfang Wang
2025 J jnl
Expert Syst. Appl.
Yun Zhou, Wenbo Cai, Yiran Ma, Dong Liu, Wei Wang
2025 J jnl
IEEE Trans. Comput. Biol. Bioinform.
Yun Zhou, Haoyu Cui, Wenbo Cai, Dong Liu, Wei Wang
2025 J jnl
IEEE Trans. Comput. Biol. Bioinform.
Wei Wang, Shitong Wan, Hu Jin, Dong Liu, Hongjun Zhang, Yun Zhou, Xianfang Wang
2024 J jnl
Briefings Bioinform.
Wei Wang, Gaolin Yuan, Shitong Wan, Ziwei Zheng, Dong Liu, Hongjun Zhang, Juntao Li, Yun Zhou, Xianfang Wang
2024 J jnl
IEEE ACM Trans. Comput. Biol. Bioinform.
Wei Wang, Zhenxi Sun, Dong Liu, Hongjun Zhang, Juntao Li, Xian-Fang Wang, Yun Zhou
2024 J jnl
IEEE ACM Trans. Comput. Biol. Bioinform.
Wei Wang, MengXue Yu, Bin Sun, Juntao Li, Dong Liu, Hongjun Zhang, Xianfang Wang, Yun Zhou
2023 J jnl
IEEE ACM Trans. Comput. Biol. Bioinform.
Wei Wang, Bin Sun, MengXue Yu, Shiyu Wu, Dong Liu, Hongjun Zhang, Yun Zhou
2022 conf
BIBM
Wei Wang, Xiaolin Jiao, Bin Sun, Shihao Liang, Xianfang Wang, Yun Zhou
2022 A conf
CIKM
Siqi Han, Wanting Li, En Zhang, Jilin Shi, Wei Wang, Xuesong Lu
2021 conf
BIBM
Wei Wang, Bin Sun, Dong Liu, Xianfang Wang, Hongjun Zhang
2020 J jnl
Entropy
Shiguang Zhang, Ting Zhou, Lin Sun, Wei Wang, Baofang Chang
2020 J jnl
BMC Bioinform.
Wei Wang, Hehe Lv, Yuan Zhao
2020 J jnl
Entropy
Shiguang Zhang, Chao Liu, Wei Wang, Baofang Chang
2019 J jnl
IEEE Access
Wei Wang, Keliang Li, Hehe Lv, Hongjun Zhang, Shiguang Zhang, Yun Zhou, Junwei Huang
2019 J jnl
J. Intell. Fuzzy Syst.
Lin Sun, Wei Wang, Jiucheng Xu, Shiguang Zhang
2019 J jnl
IEEE Access
Wei Wang, Yuan Zhao, Hongjun Zhang, Shiguang Zhang, Keliang Li, Hehe Lv
2019 J jnl
Comput. Math. Methods Medicine
Wei Wang, Keliang Li, Hehe Lv, Hongjun Zhang, Shixun Wang, Junwei Huang
2019 J jnl
Entropy
Shiguang Zhang, Ting Zhou, Lin Sun, Wei Wang, Chuan Wang, Wentao Mao
2018 J jnl
Secur. Commun. Networks
Ming Li, Hua Ren, En Zhang, Wei Wang, Lin Sun, Di Xiao
2018 conf
ICPCSEE (2)
Wei Wang, Keliang Li, Hehe Lv, Lin Sun, Hongjun Zhang, Jinling Shi, Shiguang Zhang, Yun Zhou, Yuan Zhao, Jingjing Xv
2017 J jnl
BMC Bioinform.
Wei Wang, Lin Sun, Shiguang Zhang, Hongjun Zhang, Jinling Shi, Tianhe Xu, Keliang Li
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"