Haining Meng

29 papers A* 4A 2B 1C 1Journal 9Unranked 12
YearRankTypeTitle / Venue / Authors
2026 J jnl
J. Comput. Civ. Eng.
Xinyu Tong, Haining Meng, Xinhong Hei
2026 J jnl
J. Syst. Softw.
Haining Meng, Han Wu, Xiaoqing Li, Xinhong Hei
2025 A* conf
ACM Multimedia
Mingsong Yang, Xinhong Hei, Kehai Chen, Haining Meng, Haoyang Dong, Qin Zhao
2025 conf
Internetware
Haining Meng, Jie Lu, Yongheng Huang, Lian Li
2025 J jnl
Proc. ACM Softw. Eng.
Liqing Cao, Haofeng Li, Chenghang Shi, Jie Lu, Haining Meng, Lian Li, Jingling Xue
2024 J jnl
Eng. Appl. Artif. Intell.
Haining Meng, Jiawei Zhang
2024 B conf
ICECCS
Haining Meng, Haofeng Li, Jie Lu, Chenghang Shi, Liqing Cao, Lian Li, Lin Gao
2024 A conf
CGO
Haofeng Li, Jie Lu, Haining Meng, Liqing Cao, Lian Li, Lin Gao
2024 A* conf
CCS
Yongheng Huang, Chenghang Shi, Jie Lu, Haofeng Li, Haining Meng, Lian Li
2024 J jnl
IEEE Trans. Software Eng.
Haofeng Li, Tian Tan, Yue Li, Jie Lu, Haining Meng, Liqing Cao, Yongheng Huang, Lian Li, Lin Gao, Peng Di, Liang Lin, Chenxi Cui
2024 conf
ICKG
Qiang Chen, Haining Meng, Yihao Bao, Mingsong Yang, Xinyu Tong, Qin Zhao, Muhammad Bilal Khan, Xinhong Hei
2023 J jnl
Comput. Ind.
Mingsong Yang, Qin Zhao, Lei Zhu, Haining Meng, Kehai Chen, Zongjian Li, Xinhong Hei
2022 conf
ESEC/SIGSOFT FSE
Haofeng Li, Jie Lu, Haining Meng, Liqing Cao, Yongheng Huang, Lian Li, Lin Gao
2022 conf
NaNA
Haining Meng, Jiawei Zhang, Yi Zheng, Wenjiang Ji, Xinyu Tong, Xinhong Hei
2021 conf
BigDataSE
Xinyu Tong, Haining Meng, Kai Feng, Wenjiang Ji, Yi Zheng, Xinhong Hei
2021 C conf
EUC
Haining Meng, Wei Li, Wenjiang Ji, Yi Zheng, Xinyu Tong, Xinhong Hei
2021 A conf
CGO
Haofeng Li, Haining Meng, Hengjie Zheng, Liqing Cao, Jie Lu, Lian Li, Lin Gao
2020 conf
NaNA
Lei Zhu, Yaolin Liu, Xinhong Hei, Yichuan Wang, Haining Meng, Jiuyuan Jiao, Long Pan
2019 A* conf
ASE
Dongjie He, Haofeng Li, Lei Wang, Haining Meng, Hengjie Zheng, Jie Liu, Shuangwei Hu, Lian Li, Jingling Xue
2018 J jnl
IEEE Syst. J.
Xu Zhang, Ning Wang, Yue Cao, Linyu Peng, Haining Meng
2018 conf
ICIC (1)
Zhurong Wang, You Li, Xinhong Hei, Haining Meng
2018 conf
ICSAI
Zhurong Wang, Mingfang Du, Qindong Sun, Haining Meng
2018 conf
ICIC (1)
Zhurong Wang, Feng Wang, Xinhong Hei, Haining Meng
2018 A* conf
PerCom
Liqiong Chang, Xinyi Li, Ju Wang, Haining Meng, Xiaojiang Chen, Dingyi Fang, Zhanyong Tang, Zheng Wang
2016 conf
MobiSys (Companion Volume)
Liqiong Chang, Xiaojiang Chen, Haining Meng, Dingyi Fang
2016 J jnl
Qual. Reliab. Eng. Int.
Haining Meng, Xinhong Hei, Jiulong Zhang, Jianjun Liu, Liansheng Sui
2015 conf
TrustCom/BigDataSE/ISPA (1)
Haining Meng, Xinhong Hei, Yan Li, Yanning Du, Guo Xie
2015 J jnl
Reliab. Eng. Syst. Saf.
Haining Meng, Jianjun Liu, Xinhong Hei
2013 conf
CloudComp
Jianjun Liu, Haining Meng, Yinglan Huang, Shan Zhong
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"