Haihua Chen

22 papers B 3Journal 12Unranked 7
YearRankTypeTitle / Venue / Authors
2025 J jnl
IEEE Internet Things J.
Jingyao Zhang, Haihua Chen, Feng Dai, Yancong Wang, Heyang Li, Yucheng Zhang
2025 J jnl
IEEE Internet Things J.
Guangyu Hou, Runxin Niu, Haihua Chen, Yancong Wang, Zhenqiang Zhu, Jingyao Zhang, Yike Ma, Tongbin Li
2024 J jnl
J. Circuits Syst. Comput.
Hongbo Wei, Xuerong Cui, Yucheng Zhang, Haihua Chen, Jingyao Zhang
2021 J jnl
Trans. Emerg. Telecommun. Technol.
Shibao Li, Mingyu Wang, Xiaoli Wang, Jianhang Liu, Xuerong Cui, Haihua Chen
2021 J jnl
Int. J. Distributed Sens. Networks
Xue-rong Cui, Shengjie Xue, Juan Li, Shibao Li, Jianhang Liu, Haihua Chen
2021 J jnl
Mob. Networks Appl.
Xue-rong Cui, Mengyan Wang, Juan Li, Meiqi Ji, Jin Yang, Jianhang Liu, Tingpei Huang, Haihua Chen
2020 J jnl
Wirel. Pers. Commun.
Shibao Li, Li Sun, Haihua Chen, Jianhang Liu, Tingpei Huang, Dayin Zhao
2019 J jnl
Int. J. Distributed Sens. Networks
Xue-rong Cui, Jingzhen Li, Juan Li, Jianhang Liu, Tingpei Huang, Haihua Chen
2018 conf
IIKI
Xue-rong Cui, Jingzhen Li, Juan Li, Jianhang Liu, Tingpei Huang, Haihua Chen
2016 J jnl
Sensors
Jianhang Liu, Wenbin Zhang, Qi Wang, Shibao Li, Haihua Chen, Xue-rong Cui, Yi Sun
2016 conf
ISCIT
Haihua Chen, Shibao Li, Jianhang Liu, Chen Gong, Fen Liu, Masakiyo Suzuki
2016 conf
ISCIT
Shibao Li, Wenli Ma, Jianhang Liu, Haihua Chen
2016 J jnl
Sensors
Haihua Chen, Shibao Li, Jianhang Liu, Fen Liu, Masakiyo Suzuki
2016 conf
ISCIT
Jianhang Liu, Haibin Zhai, Zhixuan Jia, Shibao Li, Haihua Chen, Xue-rong Cui
2016 conf
ISCIT
Hongyan Du, Yiqing Zhou, Haihua Chen, Lin Tian, Jinglin Shi
2015 J jnl
Int. J. Distributed Sens. Networks
Faming Gong, Haihua Chen, Shibao Li, Jianhang Liu, Zhaozhi Gu, Masakiyo Suzuki
2015 conf
ISCIT
Haihua Chen, Shibao Li, Jianhang Liu, Masakiyo Suzuki
2013 J jnl
IEEE J. Sel. Areas Commun.
Haihua Chen, Zhengang Pan, Lin Tian, Jinglin Shi, Guanghua Yang, Masakiyo Suzuki
2013 B conf
WCNC
Haihua Chen, Yiqing Zhou, Lin Tian, Jinglin Shi, Jinlong Hu, Masakiyo Suzuki
2013 B conf
WCNC
Hang Liu, Yiqing Zhou, Lin Tian, Haihua Chen, Xue Han, Jinglin Shi
2013 B conf
WCNC
Ling Liu, Haihua Chen, Yiqing Zhou, Hang Liu, Lin Tian, Jinglin Shi
2012 conf
CHINACOM
Hong-Liang Duan, Dengshan Huang, Liyang Zhou, Haihua Chen, Jinglin Shi
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"