Haiming Wang

22 papers A 1B 5Misc 1Journal 9Unranked 6
YearRankTypeTitle / Venue / Authors
2026 J jnl
IEEE Commun. Lett.
Yang Wang, Yin Xu, Cixiao Zhang, Zhiyong Chen, Mingzeng Dai, Haiming Wang, Bingchao Liu, Dazhi He, Meixia Tao
2026 J jnl
IEEE Trans. Wirel. Commun.
Zitong Wang, Cheng Zhang, Wen Wang, Mingzeng Dai, Haiming Wang, Yongming Huang
2025 A conf
WACV
Jianyi Zhang, Hao Yang, Ang Li, Xin Guo, Pu Wang, Haiming Wang, Yiran Chen, Hai Li
2025 J jnl
J. ICT Stand.
Congchi Zhang, Mingzeng Dai, Apostolis K. Salkintzis, Dimitrios Dimopoulos, Haiming Wang, Yin Xu
2025 J jnl
IEEE Wirel. Commun. Lett.
Yifan Wang, Cheng Zhang, Yuandong Zhuang, Mingzeng Dai, Haiming Wang, Yongming Huang
2024 J jnl
CoRR
Jianyi Zhang, Hao (Fran)k Yang, Ang Li, Xin Guo, Pu Wang, Haiming Wang, Yiran Chen, Hai Li
2023 J jnl
IEEE Trans. Cogn. Commun. Netw.
Haiming Hui, Xin Guo, Haiming Wang, Wei Chen
2022 Misc conf
SenSys
Jingwei Sun, Ang Li, Lin Duan, Samiul Alam, Xuliang Deng, Xin Guo, Haiming Wang, Maria Gorlatova, Mi Zhang, Hai Li, Yiran Chen
2022 B conf
WCNC
Tingnan Bao, Haiming Wang, Hong-Chuan Yang, Wen-Jing Wang, Mazen O. Hasna
2022 J jnl
IEEE Trans. Aerosp. Electron. Syst.
Tingnan Bao, Haiming Wang, Wen-Jing Wang, Hong-Chuan Yang, Mazen O. Hasna
2021 J jnl
IEEE J. Sel. Areas Commun.
Lintao Li, Longwei Yang, Xin Guo, Yuanming Shi, Haiming Wang, Wei Chen, Khaled B. Letaief
2021 conf
GLOBECOM (Workshops)
Tingnan Bao, Haiming Wang, Hong-Chuan Yang, Wen-Jing Wang, Mazen O. Hasna
2021 conf
ICC
Longwei Yang, Lintao Li, Xin Guo, Yuanming Shi, Haiming Wang, Wei Chen
2020 B conf
GLOBECOM
Longwei Yang, Xin Guo, Haiming Wang, Wei Chen
2020 B conf
GLOBECOM
Xianyang Zhang, Di Han, Zhanyuan Xie, Xin Guo, Haiming Wang, Zhu Han, Wei Chen
2020 conf
ICC
Yichen Guo, Chunjing Hu, Tao Peng, Haiming Wang, Xin Guo
2012 J jnl
KSII Trans. Internet Inf. Syst.
Shaoyi Xu, Haiming Wang, Tao Chen, Tao Peng, Kyung Sup Kwak
2010 conf
VTC Fall
Shaoyi Xu, Haiming Wang, Tao Chen, Qing Huang, Tao Peng
2010 conf
VTC Spring
Shaoyi Xu, Haiming Wang, Tao Peng, Qing Huang
2009 B conf
PIMRC
Qianxi Lu, Tao Peng, Haiming Wang, Shaoyi Xu, Wenbo Wang, Chao Hu
2009 conf
VTC Spring
Chen Guo, Tao Peng, Shaoyi Xu, Haiming Wang, Wenbo Wang
2009 B conf
PIMRC
Tao Peng, Qianxi Lu, Haiming Wang, Shaoyi Xu, Wenbo 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"