Weian Guo

65 papers B 3Journal 47Unranked 15
YearRankTypeTitle / Venue / Authors
2026 J jnl
Expert Syst. Appl.
Yifan Xu, Wei Huang, Junhua Xiao, Jie Shan, Mengbo Liu, Weian Guo, Yushan Zhu, Jing Zhang, Yu Yan
2026 J jnl
Expert Syst. Appl.
Shi Cheng, Minzhe Zhang, Sicheng Hou, Yifei Sun, Hui Lu, Weian Guo
2026 J jnl
IEEE Trans. Veh. Technol.
Weian Guo, Ruizhi Sha, Li Li, Lun Zhang, Dongyang Li, Hui Lu, Marcin Hinz
2026 J jnl
CoRR
Weian Guo, Shixin Deng, Wuzhao Li, Li Li
2026 J jnl
Expert Syst. Appl.
Weian Guo, Wuzhao Li, Li Li, Lun Zhang, Dongyang Li, Marcin Hinz
2026 J jnl
Swarm Evol. Comput.
Weian Guo, Yao Xiao, Shi Cheng, Hui Lu
2026 J jnl
Expert Syst. Appl.
Weian Guo, Yao Xiao, Shi Cheng, Hui Lu
2025 J jnl
Int. J. Swarm Intell. Res.
Zian Liu, Zhiyu Gan, Shuolei Zhou, Youren Gao, Shuhong Zheng, Weian Guo, Dongyang Li, Christoph Rohmann
2025 J jnl
Appl. Soft Comput.
Weian Guo, Li Li, Minchong Chen, Wenke Ni, Lei Wang, Dongyang Li
2025 J jnl
CoRR
Zhiou Zhang, Weian Guo, Qin Zhang, Haibin Li, Dongyang Li
2025 J jnl
Signal Image Video Process.
Qin Zhang, Weian Guo, Meibin Lin
2025 J jnl
IEEE Trans. Veh. Technol.
Weian Guo, Zecheng Kang, Dongyang Li, Lun Zhang, Li Li
2024 J jnl
IEEE Trans. Cybern.
Dongyang Li, Lei Wang, Li Li, Weian Guo, Qidi Wu, Alexander Lerch
2024 J jnl
CoRR
Weian Guo, Ruizhi Sha, Li Li, Lun Zhang, Dongyang Li
2024 conf
NCAA (1)
Wenke Ni, Weian Guo, Dongyang Li
2024 J jnl
CoRR
Zhiou Zhang, Weian Guo, Li Li, Dongyang Li
2024 J jnl
CoRR
Weian Guo, Wuzhao Li, Li Li, Lun Zhang, Dongyang Li
2024 conf
NCAA (1)
Yushan Zhu, Weian Guo, Zhenyao Hua, Lun Zhang, Dongyang Li, Wuzhao Li
2024 J jnl
CoRR
Weian Guo, Zecheng Kang, Dongyang Li, Lun Zhang, Li Li
2024 J jnl
CoRR
Weian Guo, Wuzhao Li, Zhiou Zhang, Lun Zhang, Li Li, Dongyang Li
2023 J jnl
Appl. Soft Comput.
Dongyang Li, Lei Wang, Weian Guo, Maoqing Zhang, Bo Hu, Qidi Wu
2023 conf
NCAA (1)
Minchong Chen, Xuejing Hou, Qi Yu, Dongyang Li, Weian Guo
2023 conf
NCAA (2)
Baiming Zeng, Yanfen Mao, Dongyang Li, Weian Guo
2022 J jnl
Neural Comput. Appl.
Weian Guo, Zhenyao Hua, Zecheng Kang, Dongyang Li, Lei Wang, Qidi Wu, Alexander Lerch
2022 conf
DMBD (2)
Zecheng Kang, Dongyang Li, Weian Guo, Zhenyao Hua, Guangcao Liu, Yanfen Mao
2021 conf
NCAA
Zhenyao Hua, Dongyang Li, Weian Guo
2021 B conf
CEC
Dongyang Li, Weian Guo, Lei Wang, Qidi Wu
2021 J jnl
Swarm Evol. Comput.
Dongyang Li, Weian Guo, Alexander Lerch, Yongmei Li, Lei Wang, Qidi Wu
2021 conf
BIC-TA (2)
Chongyu Chen, Teng Li, Shugui Wang, Zhenyao Hua, Zecheng Kang, Dongyang Li, Weian Guo
2021 J jnl
Appl. Soft Comput.
Maoqing Zhang, Lei Wang, Weian Guo, Wuzhao Li, Junwei Pang, Jun Min, Hanwei Liu, Qidi Wu
2021 J jnl
Inf. Sci.
Maoqing Zhang, Lei Wang, Weian Guo, Wuzhao Li, Dongyang Li, Bo Hu, Qidi Wu
2021 J jnl
Comput. Ind. Eng.
Maoqing Zhang, Weian Guo, Lei Wang, Dongyang Li, Bo Hu, Qidi Wu
2021 J jnl
Concurr. Comput. Pract. Exp.
Wuzhao Li, Weian Guo, Yongmei Li, Lei Wang, Qidi Wu
2020 J jnl
Appl. Soft Comput.
Anqi Pan, Lei Wang, Weian Guo
2020 J jnl
Neural Comput. Appl.
Anqi Pan, Lei Wang, Weian Guo, Hongliang Ren, Qidi Wu
2020 J jnl
Nat. Comput.
Weian Guo, Ping Xu, Zhen Zhao, Lei Wang, Lei Zhu, Qidi Wu
2019 J jnl
Int. J. Wirel. Mob. Comput.
Genfu Xiao, Huan Liu, Weian Guo, Lei Wang
2019 conf
ICSI (1)
Dongyang Li, Weian Guo, Lei Wang
2019 J jnl
Neural Comput. Appl.
Wuzhao Li, Lei Wang, Xingjuan Cai, Junjie Hu, Weian Guo
2018 J jnl
IEEE ACM Trans. Comput. Biol. Bioinform.
Weian Guo, Chengyong Si, Yu Xue, Yanfen Mao, Lei Wang, Qidi Wu
2018 J jnl
Inf. Sci.
Anqi Pan, Lei Wang, Weian Guo, Qidi Wu
2018 J jnl
Appl. Soft Comput.
Anqi Pan, Lei Wang, Weian Guo, Qidi Wu
2018 J jnl
IEEE Trans. Smart Grid
Yantai Huang, Lei Wang, Weian Guo, Qi Kang, Qidi Wu
2018 conf
ICSI (1)
Chengyong Si, Jianqiang Shen, Weian Guo, Lei Wang
2017 conf
ICSI (2)
Xiaomei Zheng, Weian Guo, Dongyang Li, Lei Wang, Yushan Wang
2017 conf
ICSI (1)
Dongyang Li, Weian Guo, Yanfen Mao, Lei Wang, Qidi Wu
2017 J jnl
Neural Comput. Appl.
Weian Guo, Ming Chen, Lei Wang, Yanfen Mao, Qidi Wu
2017 J jnl
Int. J. Comput. Sci. Math.
Xiaomei Zheng, Lei Wang, Dongyang Li, Lin Shen, Yanyuan Gao, Weian Guo, Yushan Wang
2017 J jnl
Int. J. Bio Inspired Comput.
Wuzhao Li, Yanfen Mao, Weian Guo, Lei Wang, Qidi Wu
2017 J jnl
Soft Comput.
Weian Guo, Ming Chen, Lei Wang, Qidi Wu
2017 J jnl
Soft Comput.
Weian Guo, Lei Wang, Chenyong Si, Yongwei Zhang, Hongjun Tian, Junjie Hu
2016 conf
SSCI
Anqi Pan, Lei Wang, Dongyang Li, Weian Guo
2016 J jnl
Appl. Intell.
Weian Guo, Ming Chen, Lei Wang, Qidi Wu
2016 J jnl
Neurocomputing
Weian Guo, Yan Zhang, Ming Chen, Lei Wang, Qidi Wu
2016 conf
ICSI (1)
Weian Guo, Ming Chen, Lei Wang, Qidi Wu
2016 J jnl
Inf. Sci.
Weian Guo, Lei Wang, Qidi Wu
2016 B conf
CEC
Dongyang Li, Weian Guo, Lei Wang, Ming Chen
2015 J jnl
Soft Comput.
Weian Guo, Lei Wang, Shuzhi Sam Ge, Hongliang Ren, Yanfen Mao
2014 J jnl
Inf. Sci.
Weian Guo, Lei Wang, Qidi Wu
2014 J jnl
Int. J. Comput. Sci. Math.
Weian Guo, Wuzhao Li, Qi Kang, Lei Wang, Qidi Wu
2014 J jnl
Comput. Biol. Medicine
Hongliang Ren, Weian Guo, Shuzhi Sam Ge, Wan Cheng Lim
2013 conf
CTS
Wan Cheng Lim, Weian Guo, Hongliang Ren
2013 J jnl
Int. J. Model. Identif. Control.
Wuzhao Li, Weian Guo, Lei Wang, Qi Kang, Qidi Wu
2012 conf
ICCI*CC
Wuzhao Li, Weian Guo, Lei Wang, Xingjuan Cai
2012 B conf
ICSR
Wei He, Shuzhi Sam Ge, Weian Guo, Zhen Zhao, Jie Zhang, Shengtao Xiao, Fon Ping Quek Nuraisha
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"