Hailiang Xiong

49 papers A 1B 1C 2Misc 1Journal 36Unranked 8
YearRankTypeTitle / Venue / Authors
2026 A conf
FPGA
Cheng Chen, Gangqiang Yang, Hongchao Zhou, Hailiang Xiong, Zhiguo Wan
2026 J jnl
ACM Trans. Embed. Comput. Syst.
Xiaoyu Ji, Cheng Chen, Gangqiang Yang, Hongchao Zhou, Hailiang Xiong, Xianye Ben, Zhiguo Wan
2026 J jnl
IEEE Trans Autom. Sci. Eng.
Danyal Hussain Shah, Hailiang Xiong, Fen He, Wenli Li, Bo He, Gangqiang Yang
2025 J jnl
IEEE Trans. Veh. Technol.
Hao Liu, Hailiang Xiong, Fen He, Yaochang Nie, Wenli Li, Hongchao Zhou
2025 J jnl
ACM Trans. Embed. Comput. Syst.
Zhengyuan Shi, Cheng Chen, Gangqiang Yang, Hongchao Zhou, Hailiang Xiong, Zhiguo Wan
2025 J jnl
IACR Trans. Cryptogr. Hardw. Embed. Syst.
Cheng Chen, Gangqiang Yang, Hongchao Zhou, Hailiang Xiong, Xianye Ben, Zhiguo Wan
2025 J jnl
Knowl. Based Syst.
Fengqian Ding, Chen Xu, Han Liu, Chuandong Lyu, Gangqiang Yang, Hailiang Xiong, Hongchao Zhou
2025 J jnl
IEEE Trans. Aerosp. Electron. Syst.
Peng Sun, Hailiang Xiong, Danyal Hussain Shah, Yuncheng Liu, Bin Zhou
2024 J jnl
IEEE Trans. Intell. Veh.
Chuandong Lyu, Shengbang Guo, Bin Zhou, Hailiang Xiong, Hongchao Zhou
2024 J jnl
IEEE Trans. Veh. Technol.
Yudan Xu, Hailiang Xiong, Gangqiang Yang, Hongchao Zhou
2024 J jnl
IET Commun.
Bo He, Hongji Xu, Wei Ji, Yan Du, Hailiang Xiong, Jun Li
2024 J jnl
IEEE Trans. Instrum. Meas.
Wanfu Zhong, Hailiang Xiong, Yuan Hua, Danyal Hussain Shah, Zhiwei Liao, Yudan Xu
2023 conf
ASICON
Hao Chen, Shenhao Jiang, Shaowei Zhen, Yajuan He, Hailiang Xiong, Xin Chen, Hongyang Wu, Liang Huang, Yongsheng Du, Bo Zhang
2023 J jnl
ACM Trans. Reconfigurable Technol. Syst.
Zhengyuan Shi, Cheng Chen, Gangqiang Yang, Hailiang Xiong, Fudong Li, Honggang Hu, Zhiguo Wan
2023 J jnl
ACM Trans. Reconfigurable Technol. Syst.
Gangqiang Yang, Zhengyuan Shi, Cheng Chen, Hailiang Xiong, Fudong Li, Honggang Hu, Zhiguo Wan
2023 J jnl
IEEE Trans. Veh. Technol.
Zhenzhen Hu, Fanzi Zeng, Zhu Xiao, Bin Fu, Hongbo Jiang, Hailiang Xiong, Yongdong Zhu, Mamoun Alazab
2023 J jnl
CoRR
Kai Liu, Hailiang Xiong, Gangqiang Yang, Zhengfeng Du, Yewen Cao, Danyal Shah
2022 J jnl
Appl. Intell.
Shidi Fan, Hongji Xu, Hailiang Xiong, Min Chen, Qiang Liu, Qinghua Xing, Tiankuo Li
2022 Misc conf
CASES
Gangqiang Yang, Zhengyuan Shi, Cheng Chen, Hailiang Xiong, Honggang Hu, Zhiguo Wan, Keke Gai, Meikang Qiu
2021 conf
ASICON
Bingqing Zhao, Hailiang Xiong, Rui Yang, Zeya Xie, Shaowei Zhen, Dongmin Ding, Bo Zhang
2021 conf
ASICON
Hailiang Xiong, Bingqing Zhao, Rui Yang, Zeya Xie, Shaowei Zhen, Dongmin Ding, Bo Zhang
2021 J jnl
J. Ambient Intell. Humaniz. Comput.
Beibei Zhang, Hongji Xu, Hailiang Xiong, Xiaojie Sun, Leixin Shi, Shidi Fan, Juan Li
2021 J jnl
IEEE Trans. Commun.
Wengang Li, Wang Yang, Liuyan Yang, Hailiang Xiong, Yilong Hui
2021 J jnl
IACR Cryptol. ePrint Arch.
Zhengyuan Shi, Gangqiang Yang, Hailiang Xiong, Fudong Li, Honggang Hu
2021 J jnl
IET Commun.
Hailiang Xiong, Guangyuan Wang, Jian Ding, Weihong Zhu, Hongji Xu, Changwu Hu, Zhenzhen Mai, Ruochen Bian
2021 J jnl
IET Commun.
Zhenzhen Mai, Hailiang Xiong, Gangqiang Yang, Weihong Zhu, Fen He, Ruochen Bian, Yujun Li
2020 J jnl
Soft Comput.
Min Chen, Hongji Xu, Hailiang Xiong, Lingling Pan, Baozhen Du, Feifei Li
2020 J jnl
IEEE Syst. J.
Hailiang Xiong, Ruochen Bian, Yujun Li, Zhengfeng Du, Zhenzhen Mai
2020 J jnl
IEEE Access
Hailiang Xiong, Changwu Hu, Yujun Li, Guangyuan Wang, Hongchao Zhou
2019 conf
ICMAI
Feifei Li, Yujun Li, Baozhen Du, Hongji Xu, Hailiang Xiong, Min Chen
2019 J jnl
IEEE Access
Hailiang Xiong, Zhen Zhen Ma, Juan Tang, Fen He
2019 conf
ICC Workshops
Hailiang Xiong, Zhenzhen Mai, Juan Tang
2018 conf
NGCAS
Hua Fan, Chen Wang, Hailiang Xiong, Quanyuan Feng, Dagang Li, Kelin Zhang, Xiaopeng Diao, Lishuang Lin, Hadi Heidari
2018 J jnl
IET Commun.
Hailiang Xiong, Songhua Wang, Shu Gong, Meixuan Peng, Junyu Shi, Juan Tang
2018 J jnl
IET Commun.
Shu Gong, Hailiang Xiong, Meixuan Peng, Xuewen Ding, Huaibin Tang
2017 J jnl
Sensors
Hailiang Xiong, Wensheng Zhang, Hongji Xu, Zhengfeng Du, Huaibin Tang, Jing Li
2017 C conf
ICCC
Songhua Wang, Hailiang Xiong, Juan Tang, Yong Huang, Junyu Shi
2017 C conf
ICCC
Shaopeng Li, Kun Yan, Hailiang Xiong
2017 J jnl
Wirel. Pers. Commun.
Wensheng Zhang, Hailiang Xiong, Deqiang Wang, Di Chen
2017 J jnl
J. Commun.
Qing Wang, Hailiang Xiong, Shanshan Yu, Yuxi Liu
2016 J jnl
IET Commun.
Wensheng Zhang, Jian Sun, Hailiang Xiong, Di Chen
2016 conf
WPMC
Wensheng Zhang, Dongdong Xin, Hailiang Xiong, Weihong Zhu, Jin Qiu, Cheng-Xiang Wang
2016 J jnl
IEEE Trans. Veh. Technol.
Wensheng Zhang, Cheng-Xiang Wang, Di Chen, Hailiang Xiong
2016 J jnl
KSII Trans. Internet Inf. Syst.
Qing Wang, Ju Liu, Lina Zheng, Hailiang Xiong
2015 J jnl
Wirel. Pers. Commun.
Shaohua Qin, Wensheng Zhang, Hailiang Xiong, Dongyan Chen
2014 B conf
GLOBECOM
Hailiang Xiong, Julian Cheng
2013 J jnl
IEEE Trans. Wirel. Commun.
Hailiang Xiong, Wensheng Zhang, Zhengfeng Du, Bo He, Dongfeng Yuan
2013 conf
ICCT
Zhengfeng Du, Hailiang Xiong, Deqiang Wang, Jian Sun, Hongji Xu
2012 J jnl
IEICE Electron. Express
Zhengfeng Du, Dongfeng Yuan, Hailiang Xiong, Hongji Xu, Deqiang Wang
redb/extractors/apk_extractors/apk_permissions.py
← Index redb/extractors/apk_extractors/apk_permissions.py python
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 APKPermissions, APKPermission

# Known dangerous permissions (Android runtime permissions)
DANGEROUS_PERMISSIONS = {
    "android.permission.READ_CALENDAR",
    "android.permission.WRITE_CALENDAR",
    "android.permission.CAMERA",
    "android.permission.READ_CONTACTS",
    "android.permission.WRITE_CONTACTS",
    "android.permission.GET_ACCOUNTS",
    "android.permission.ACCESS_FINE_LOCATION",
    "android.permission.ACCESS_COARSE_LOCATION",
    "android.permission.ACCESS_BACKGROUND_LOCATION",
    "android.permission.RECORD_AUDIO",
    "android.permission.READ_PHONE_STATE",
    "android.permission.READ_PHONE_NUMBERS",
    "android.permission.CALL_PHONE",
    "android.permission.ANSWER_PHONE_CALLS",
    "android.permission.ADD_VOICEMAIL",
    "android.permission.USE_SIP",
    "android.permission.BODY_SENSORS",
    "android.permission.SEND_SMS",
    "android.permission.RECEIVE_SMS",
    "android.permission.READ_SMS",
    "android.permission.RECEIVE_WAP_PUSH",
    "android.permission.RECEIVE_MMS",
    "android.permission.READ_EXTERNAL_STORAGE",
    "android.permission.WRITE_EXTERNAL_STORAGE",
    "android.permission.READ_MEDIA_IMAGES",
    "android.permission.READ_MEDIA_VIDEO",
    "android.permission.READ_MEDIA_AUDIO",
    "android.permission.POST_NOTIFICATIONS",
    "android.permission.NEARBY_WIFI_DEVICES",
    "android.permission.ACTIVITY_RECOGNITION",
    "android.permission.BLUETOOTH_SCAN",
    "android.permission.BLUETOOTH_ADVERTISE",
    "android.permission.BLUETOOTH_CONNECT",
}


class APKPermissionsExtractor(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.permissions_data = None
        self.log.debug(inspect.currentframe().f_code.co_name)

    def tag(self):
        return Tag.APK_PERMISSIONS.value

    def _get_protection_level(self, perm_name):
        """Determine the protection level of a permission.

        Uses androguard's permission mappings first, falls back to the
        known dangerous list.
        """
        try:
            from androguard.core.api_specific_resources import load_permission_mappings
            target_sdk = self.apk.get_target_sdk_version()
            sdk = int(target_sdk) if target_sdk else 30
            permission_map = load_permission_mappings(sdk)
            if perm_name in permission_map:
                info = permission_map[perm_name]
                if isinstance(info, dict):
                    return info.get("protectionLevel", "unknown")
                return "unknown"
        except Exception:
            pass

        # Fallback to known dangerous set
        if perm_name in DANGEROUS_PERMISSIONS:
            return "dangerous"
        if perm_name.startswith("android.permission."):
            return "normal"
        return "unknown"

    def _compute_permhash(self):
        """Compute permhash using the permhash library."""
        try:
            from permhash.functions import permhash_apk
            return permhash_apk(self.filepath)
        except Exception as e:
            self.log.warning(f"Failed to compute permhash: {e}")
            return None

    def _safe_extract(self, field_name, func, default=None):
        """Extract a single field, logging and returning default on failure."""
        try:
            return func()
        except Exception as e:
            self.log.warning(
                f"Error extracting APK permissions field '{field_name}' for "
                f"{self.hash.sha256}: {e}"
            )
            return default

    def extract(self):
        if not self._is_valid_apk():
            self.log.error(f"Invalid APK for {self.hash.sha256}")
            return None

        requested_perms = self._safe_extract(
            "requested_permissions",
            lambda: list(self.apk.get_permissions() or []), []
        )
        custom_perms = self._safe_extract(
            "custom_permissions",
            lambda: list(self.apk.get_declared_permissions() or []), []
        )
        custom_perm_set = set(custom_perms)

        permission_details = []
        dangerous_permissions = []

        for perm in requested_perms:
            try:
                protection_level = self._get_protection_level(perm)
                is_custom = perm in custom_perm_set

                permission_details.append(APKPermission(
                    permission_name=perm,
                    protection_level=protection_level,
                    is_custom=is_custom,
                ))

                if protection_level == "dangerous":
                    dangerous_permissions.append(perm)
            except Exception as e:
                self.log.warning(
                    f"Error processing permission '{perm}' for "
                    f"{self.hash.sha256}: {e}"
                )
                permission_details.append(APKPermission(
                    permission_name=perm,
                    protection_level="unknown",
                    is_custom=perm in custom_perm_set,
                ))

        permhash_value = self._compute_permhash()

        self.permissions_data = APKPermissions(
            total_permission_count=len(requested_perms),
            dangerous_permission_count=len(dangerous_permissions),
            permissions=requested_perms,
            dangerous_permissions=dangerous_permissions,
            custom_permissions=custom_perms,
            permission_details=permission_details,
            permhash=permhash_value,
        )
        return self.permissions_data

    def prepare_export_data(self, exporter_type: str) -> Any:
        if exporter_type == "ClickHouseExporter":
            if not self.permissions_data:
                return None

            current_time = datetime.now(timezone.utc)

            # One row per permission
            data = []
            for detail in self.permissions_data.permission_details:
                data.append([
                    self.sha256,
                    detail.permission_name,
                    detail.protection_level,
                    int(detail.is_custom),
                    current_time,
                ])

            if not data:
                return None

            column_names = [
                'sha256', 'permission_name', 'protection_level',
                'is_custom', 'analysis_date',
            ]

            column_type_names = [
                'FixedString(64)', 'String', 'LowCardinality(String)',
                'UInt8', "DateTime64(3, 'UTC')",
            ]

            return (data, column_names, column_type_names)

    def get_clickhouse_table(self) -> str:
        return "redb_apk_permissions"