Kai Gu

35 papers A* 1A 1B 2Misc 1Journal 21Unranked 8
YearRankTypeTitle / Venue / Authors
2026 J jnl
CoRR
Kai Gu, Yingping Liang, Senliang Peng, Aotian Guo, Haizheng Zhong, Ying Fu
2026 J jnl
Quantum Inf. Process.
Kai Gu, Xingjing Zhang, Nengfa Wang, Zixin Liu
2026 J jnl
Comput. Electron. Agric.
Kai Gu, Jingwen Xue, Bin Bai, Xu Wang, Xiaoping Xin, Tudeng Qunpei, Sang Dan, Jinglong Wang, Dorjeeh Tondrob, Dawei Xu
2025 J jnl
CoRR
Kai Gu, Weishi Shi
2025 J jnl
CoRR
Tianyu Fu, Anyang Su, Chenxu Zhao, Hanning Wang, Minghui Wu, Zhe Yu, Fei Hu, Mingjia Shi, Wei Dong, Jiayao Wang, Yuyang Chen, Ruiyang Yu, Siran Peng, Menglin Li, Nan Huang, Haitian Wei, Jiawei Yu, Yi Xin, Xilin Zhao, Kai Gu, Ping Jiang, Sifan Zhou, Shuo Wang
2025
Kai Gu
2024 J jnl
CoRR
Kai Gu, Yingping Liang, Jiaming Su, Peihan Sun, Jia Peng, Naihua Miao, Zhimei Sun, Ying Fu, Haizheng Zhong, Jun Zhang
2024 conf
CVMP
Kai Gu, Thomas Maugey, Sebastian Knorr, Christine Guillemot
2023 conf
ICIRA (8)
Shengmin Zhang, Yisheng Zhang, Zhigang Wang, Hengwei Zhang, Kai Gu, Yanlong Peng, Ming Chen
2023 J jnl
CoRR
Kai Gu, Peng Fang, Zhiwei Sun, Rui Du
2023 A* conf
ISMAR
Kai Gu, Thomas Maugey, Sebastian Knorr, Christine Guillemot
2022 J jnl
Sensors
Jun-Cheng Yao, Bin Shi, Jie Liu, Meng-Ya Sun, Ke Fang, Jian Yao, Kai Gu, Wei Zhang, Ji-wen Zhang
2022 J jnl
Entropy
Huaqing Peng, Heng Li, Yu Zhang, Siyuan Wang, Kai Gu, Mifeng Ren
2022 A conf
ICME
Kai Gu, Thomas Maugey, Sebastian Knorr, Christine Guillemot
2022 J jnl
Sensors
Kai Gu, Ming Sun, Yang Zhang
2022 J jnl
Bioinform.
Shixiang Wang, Yi Xiong, Longfei Zhao, Kai Gu, Yin Li, Fei Zhao, Jianfeng Li, Mingjie Wang, Haitao Wang, Ziyu Tao, Tao Wu, Yichao Zheng, Xuejun Li, Xue-Song Liu
2022 J jnl
IEEE Trans. Veh. Technol.
Fengzhuo Zhang, Kai Gu, Yuan Shen
2021 J jnl
IEEE Trans. Signal Process.
Kai Gu, Yunlong Wang, Yuan Shen
2021 B conf
GLOBECOM
Kai Gu, Jian Wang, Yu Wang, Yuan Shen
2020 conf
GLOBECOM (Workshops)
Fengzhuo Zhang, Kai Gu, Yuan Shen
2020 J jnl
IEEE Trans. Signal Process.
Kai Gu, Yunlong Wang, Yuan Shen
2020 J jnl
IEEE Trans. Wirel. Commun.
Yunlong Wang, Kai Gu, Ying Wu, Wei Dai, Yuan Shen
2020 J jnl
Ann. Pure Appl. Log.
Longyun Ding, Kai Gu
2020 conf
UCET
Zhiying Xia, Bin Xu, Yang Zhang, Kai Gu, Xuefeng Liu, Jichuan Xiong
2019 Misc conf
ICASSP
Kai Gu, Yuan Shen
2019 B conf
GLOBECOM
Fengzhuo Zhang, Kai Gu, Yuan Shen
2019 J jnl
CoRR
Fengzhuo Zhang, Kai Gu, Yuan Shen
2019 conf
ICC Workshops
Yunlong Wang, Kai Gu, Ying Wu, Wei Dai, Yuan Shen
2019 conf
ICC
Kai Gu, Yunlong Wang, Jian Wang, Yuan Shen
2015 J jnl
Qual. Reliab. Eng. Int.
Kai Gu, Xinzhang Jia, Hongwei Liu, Hailong You
2014 J jnl
Qual. Reliab. Eng. Int.
Kai Gu, Xinzhang Jia, Hailong You, Shihong Zhang
2014 conf
ICIA
Kai Gu, Qixin Cao
2014 conf
ICIA
Pengfei Wang, Qixin Cao, Kai Gu
2013 J jnl
Environ. Model. Softw.
Hongju Zhang, Weiping Hu, Kai Gu, Qinqin Li, Daolin Zheng, Shuhua Zhai
2010 J jnl
J. Comput. Phys.
Kai Gu, Charles B. Watkins, Joel Koplik
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"