Xiangfu Meng

97 papers A* 1A 2B 12C 1Misc 3Journal 41Unranked 36
YearRankTypeTitle / Venue / Authors
2026 J jnl
Biomed. Signal Process. Control.
Xiaoyan Zhang, Zheng Zhao, Yongqin Zhang, Chunlin Yu, Xiangfu Meng, Shuai Li
2026 J jnl
IEEE Access
Polycarp Shizawaliyi Yakoi, Xiangfu Meng, Chunlin Yu, Victor Adeyi Odeh, Danladi Suleman, Yongqin Zhang, Xiaoyan Zhang
2026 J jnl
Inf. Process. Manag.
Ming Xu, Jinrong Xiang, Zilong Xie, Xiangfu Meng
2026 J jnl
IEEE Trans. Artif. Intell.
Xiaoyan Zhang, Yongqin Zhang, Xiangfu Meng
2026 J jnl
IEEE Trans. Intell. Transp. Syst.
Zhenlong Man, Ze Yu, Jiahui Yu, Xiangfu Meng
2025 B conf
IJCNN
Xiangfu Meng, Zilun Zhang, Weipeng Xie, Jiangyan Cui
2025 conf
CNIOT
Polycarp Shizawaliyi Yakoi, Xiangfu Meng, Chunli Yu, Xiaoyan Zhang
2025 B conf
IJCNN
Xiangfu Meng, Yongjie Xu, Xue Weng
2025 J jnl
J. Supercomput.
Qiangkui Leng, Chunyue Lyu, Zhuoyu Zhou, Xiangfu Meng, Changzhong Wang
2025 J jnl
IEEE Internet Things J.
Zhenlong Man, Ze Yu, Jiahui Yu, Chang Gao, Xiangfu Meng
2025 J jnl
CoRR
Ming Xu, Jinrong Xiang, Zilong Xie, Xiangfu Meng
2025 conf
CNIOT
Polycarp Shizawaliyi Yakoi, Xiangfu Meng, Chunli Yu, Victor Adeyi Odeh, Yongqin Zhang, Zheng Zhao, Danladi Suleman, Yuzhuo Yang
2025 J jnl
Comput. Vis. Image Underst.
Tianyu Wei, Dehuan Zhang, Zongxin He, Rui Zhou, Xiangfu Meng
2025 J jnl
Int. J. Mach. Learn. Cybern.
Xiaoyan Zhang, Yongqin Zhang, Xiangfu Meng
2025 J jnl
Comput. Medical Imaging Graph.
Chunlin Yu, Xiangfu Meng, Yinhao Li, Zheng Zhao, Yongqin Zhang
2025 J jnl
Appl. Soft Comput.
Erjie Jiao, Qiangkui Leng, Jiamei Guo, Xiangfu Meng, Changzhong Wang
2024 conf
CSAI
Shuolin Cui, Penglan Liu, Haoyuan Shi, Xiangfu Meng
2024 C conf
SEKE
Xiangfu Meng, Weipeng Xie, Jiangyan Cui
2024 J jnl
Data Min. Knowl. Discov.
Wei Wang, Wenhan Ruan, Xiangfu Meng
2024 conf
ICIC (LNBI 2)
Yuqiang Zhang, Yuying Li, Yang Yang, Donghui Zhang, Jixing Gong, Xiangfu Meng, Zhongjun Wan, Shanqing Gao
2024 J jnl
Complex Intell. Syst.
Qiangkui Leng, Jiamei Guo, Jiaqing Tao, Xiangfu Meng, Changzhong Wang
2024 conf
SpatialDI
Xiangfu Meng, Weipeng Xie, Jiangyan Cui
2024 J jnl
IEEE Geosci. Remote. Sens. Lett.
Pengzhi Cui, Xiangfu Meng, Wenhui Zhang
2024 conf
ICONIP (6)
Xiangfu Meng, Weipeng Xie, Jiangyan Cui
2024 conf
ICIT
Lin Shuo Cui, Zheng Zhao, Xiangfu Meng, Fa You Tian, Shuai Li
2024 conf
ICIC (LNAI 6)
Xiangfu Meng, Yanbo Bai, Minghao Li, Ziang Cai
2024 J jnl
Comput. Biol. Medicine
Xiangfu Meng, Chunlin Yu, Zhichao Zhang, Xiaoyan Zhang, Meng Wang
2024 Misc conf
WISA
Xiangfu Meng, Zilun Zhang, Shuolin Cui, Hongjin Huo
2024 J jnl
Knowl. Inf. Syst.
Xiangfu Meng, Xiaoyan Zhang, Hongjin Huo, Qiangkui Leng
2024 J jnl
Data Sci. Eng.
Jiaqi Duan, Xiangfu Meng, Guihong Liu
2023 conf
FSDM
Qiangkui Leng, Liang Zhou, Xiangfu Meng
2023 conf
ICSAI
Qiangkui Leng, Xuezi Sun, Xiangfu Meng
2023 J jnl
Data Sci. Eng.
Xiangfu Meng, Hongjin Huo, Xiaoyan Zhang, Wanchun Wang, Jinxia Zhu
2023 J jnl
Neurocomputing
Jinfeng Fang, Xiangfu Meng, Xueyue Qi
2023 conf
ICSAI
Qiangkui Leng, Zeqi Zhang, Xiangfu Meng
2023 J jnl
IEEE Access
Polycarp Shizawaliyi Yakoi, Xiangfu Meng, Shuolin Cui, Danladi Suleman, Xueyong Yang
2023 B conf
DSAA
Xiangfu Meng, Hongjin Huo, Xiaoyan Zhang, Wanchun Wang
2023 J jnl
Knowl. Based Syst.
Qiangkui Leng, Jiamei Guo, Erjie Jiao, Xiangfu Meng, Changzhong Wang
2023 conf
BIBM
Xiangfu Meng, Chunlin Yu, Xiaoyan Zhang
2023 conf
ICSAI
Qiangkui Leng, Wei Liu, Xiangfu Meng
2023 Misc conf
WISA
Quanying Ren, Keqian Li, Dongshen Yang, Yan Zhu, Keyu Yao, Xiangfu Meng
2023 J jnl
CoRR
Ming Xu, Yunyi Ma, Ruimin Li, Geqi Qi, Xiangfu Meng, Haibo Jin
2022 J jnl
Earth Sci. Informatics
Xiangfu Meng, Lin Zhu, Yan Wang, Xiaoyan Zhang
2022 J jnl
Inf.
Lin Zhu, Xiangfu Meng, Zehui Mi
2022 conf
CCIS
Xiangfu Meng, Mingyang Zhang, Xiaoyan Zhang, Jinfeng Fang
2022 J jnl
J. Database Manag.
Luyi Bai, Jinyao Wang, Chengyu Zhang, Xiangfu Meng
2022 J jnl
Knowl. Based Syst.
Jinfeng Fang, Xiangfu Meng
2021 B conf
Big Data (CCF)
Qi Xue, Bo Gao, Jing Wen, Yan Zhu, Xiangfu Meng
2021 B conf
IJCNN
Feng Zhang, Xiangfu Meng, Ruimin Chai, Quangui Zhang
2021 J jnl
ISPRS Int. J. Geo Inf.
Xiangfu Meng, Lin Zhu, Qing Li, Xiaoyan Zhang
2020 J jnl
IEEE Access
Yu Yang, Yongku Zhang, Xiangfu Meng
2020 J jnl
IEEE Access
Xiangfu Meng, Jinfeng Fang
2020 J jnl
IEEE Access
Xiangfu Meng, Pan Li, Xiaoyan Zhang
2020 J jnl
J. Medical Imaging Health Informatics
Xiangfu Meng, Wei Liu
2020 J jnl
IEEE Access
Yu Sang, Jinguang Sun, Xiangfu Meng, Haibo Jin, Yanfei Peng, Xinjun Zhang
2020 J jnl
J. Medical Imaging Health Informatics
Weiping Wang, Simei Niu, Xiangfu Meng, Youjie Li
2019 J jnl
IEEE Access
Quangui Zhang, Li Wang, Xiangfu Meng, Keda Xu, Jiayan Hu
2019 conf
ACM TUR-C
Xiaoyan Zhang, Yue Mao, Xiangfu Meng
2019 J jnl
IEEE Access
Xiaoyan Zhang, Xiangfu Meng, Jinguang Sun, Quangui Zhang, Pan Li
2019 conf
PRICAI (2)
Yu Sang, Jinguang Sun, Si-Miao Wang, Xiangfu Meng, Heng Qi
2019 conf
AIIPCC
Pan Cai, Xin Li, Xiangfu Meng, Zhiguang Chu
2019 conf
SmartIoT
Yu Sang, Jinguang Sun, Xiangfu Meng, Haibo Jin, Yanfei Peng, Xinjun Zhang
2019 conf
DASFAA (3)
Xiangfu Meng, Xiaoyan Zhang, Lin Li, Quangui Zhang, Pan Li
2018 conf
ICNC-FSKD
Xiangfu Meng, Xiaoyan Zhang, Zeqi Zhao
2017 J jnl
J. Inf. Sci. Eng.
Xiaoyan Zhang, Xiangfu Meng, Yanhuan Tang, Chongchun Bi
2017 J jnl
Knowl. Inf. Syst.
Xiangfu Meng, Xiaoyan Zhang, Yanhuan Tang, Chongchun Bi
2017 B conf
DSAA
Xiangfu Meng, Yanhuan Tang, Xiaoyan Zhang
2017 conf
ICONIP (4)
Xiaoliang Tang, Xing Wang, Di Jia, Weidong Song, Xiangfu Meng
2017 J jnl
Knowl. Inf. Syst.
Xiangfu Meng, Longbing Cao, Xiaoyan Zhang, Jingyu Shao
2016 B conf
DSAA
Xiangfu Meng, Xiaoyan Zhang, Jinguang Sun, Lin Li, Changzheng Xing, Chongchun Bi
2016 conf
BESC
Jie Zhang, Lin Li, Ge Zhu, Xiangfu Meng, Qing Xie
2016 conf
WAIM (1)
Junmei Ding, Yan Chen, Xin Li, Guiquan Liu, Aili Shen, Xiangfu Meng
2016 J jnl
计算机科学
Mengjiao Guo, Jingguang Sun, Xiangfu Meng
2014 B conf
DSAA
Xiangfu Meng, Jingyu Shao
2014 A conf
CIKM
Xiangfu Meng, Longbing Cao, Jingyu Shao
2014 J jnl
Knowl. Based Syst.
Xing Wang, Zong Min Ma, Ji Chen, Xiangfu Meng
2013 ed.
FSKD
Jianhua Chen, Xingwei Wang, Lipo Wang, Jinguang Sun, Xiangfu Meng
2013 conf
FSKD
Xiaoyan Zhang, Xiangfu Meng
2013 conf
FSKD
Xing Wang, Ji Chen, Xiangfu Meng, Bing Wang
2013 conf
Web Intelligence/IAT Workshops
Xing Wang, Ji Chen, Longbing Cao, Xiangfu Meng
2012 B conf
SMC
Chunxiao Liu, Xiangfu Meng, Ke Wei
2012 conf
FSKD
Xiaoyan Zhang, Ke Wei, Xiangfu Meng
2012 conf
FSKD
Jianhua Ren, Ke Wei, Xiangfu Meng
2012 B conf
SMC
Xiangfu Meng, Jian Zhou, Xiaopeng Zhang
2012 B conf
SMC
Ting Li, Xin Li, Xiangfu Meng
2011 Misc conf
ICNC
Xiaoyan Zhang, Xiangfu Meng, Xing Wang
2011 conf
FSKD
Xing Wang, Jinguang Sun, Xiangfu Meng, Ji Chen
2010 conf
FSKD
Xiangfu Meng, Jinguang Sun, Chunxiao Liu
2010 conf
WISE Workshops
Wei Yan, Zong Min Ma, Fu Zhang, Xiangfu Meng
2009 A* conf
WWW
Xiangfu Meng, Zong Min Ma, Li Yan
2009 A conf
CIKM
Fu Zhang, Zong Min Ma, Jingwei Cheng, Xiangfu Meng
2008 conf
Web Intelligence
Xiangfu Meng, Zong Min Ma, Ranran Cheng, Xing Wang
2008 conf
ASWC
Fu Zhang, Zong Min Ma, Hailong Wang, Xiangfu Meng
2008 conf
KES (2)
Zong Min Ma, Xiangfu Meng
2008 B conf
SMC
Xiangfu Meng, Zongmin Ma
2008 conf
KES (2)
Xiangfu Meng, Zong Min Ma, Li Yan
2008 conf
RR
Xing Wang, Zong Min Ma, Li Yan, Xiangfu Meng
redb/extractors/apk_extractors/apk_inconsistency_tests.py
← Index redb/extractors/apk_extractors/apk_inconsistency_tests.py python
import inspect
import re
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 APKInconsistencyTests

# Emulator detection indicator strings
EMULATOR_INDICATORS = {
    "generic", "sdk", "google_sdk", "Emulator",
    "goldfish", "ranchu", "Andy", "Genymotion",
    "BlueStacks", "nox", "ttVM_Hdragon",
}

# Root detection indicator strings
ROOT_INDICATORS = {
    "/system/app/Superuser.apk",
    "/system/xbin/su",
    "/system/bin/su",
    "com.noshufou.android.su",
    "com.thirdparty.superuser",
    "eu.chainfire.supersu",
    "com.koushikdutta.superuser",
    "com.topjohnwu.magisk",
}

# Standard DEX filename pattern
STANDARD_DEX_PATTERN = re.compile(r"^classes\d*\.dex$")


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

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

    def _test_zip_bomb(self):
        """Check if any ZIP entry has compression ratio > 100:1."""
        try:
            zf = self._get_zip_file()
            if not zf:
                return None
            with zf:
                for info in zf.infolist():
                    if info.compress_size > 0:
                        ratio = info.file_size / info.compress_size
                        if ratio > 100:
                            return True
            return False
        except Exception as e:
            self.log.warning(f"Error in zip bomb test: {e}")
            return None

    def _test_zip_duplicate_entries(self):
        """Check for duplicate filenames in ZIP directory."""
        try:
            zf = self._get_zip_file()
            if not zf:
                return None
            with zf:
                names = [info.filename for info in zf.infolist()]
                return len(names) != len(set(names))
        except Exception as e:
            self.log.warning(f"Error in duplicate entries test: {e}")
            return None

    def _test_zip_path_traversal(self):
        """Check for path traversal (../) in ZIP entry names."""
        try:
            for f in self._list_files():
                if ".." in f or f.startswith("/"):
                    return True
            return False
        except Exception as e:
            self.log.warning(f"Error in path traversal test: {e}")
            return None

    def _test_zip_suspicious_timestamps(self):
        """Check for timestamps at epoch (1980) or in the future."""
        try:
            zf = self._get_zip_file()
            if not zf:
                return None
            now = datetime.now()
            with zf:
                for info in zf.infolist():
                    try:
                        dt = datetime(*info.date_time)
                        if dt.year <= 1980 or dt > now:
                            return True
                    except (ValueError, TypeError):
                        continue
            return False
        except Exception as e:
            self.log.warning(f"Error in suspicious timestamps test: {e}")
            return None

    def _test_hidden_dex_files(self):
        """Check for DEX files not matching classes*.dex pattern."""
        try:
            for f in self._list_files():
                if f.endswith(".dex"):
                    basename = f.split("/")[-1]
                    if not STANDARD_DEX_PATTERN.match(basename):
                        return True
            return False
        except Exception as e:
            self.log.warning(f"Error in hidden DEX files test: {e}")
            return None

    def _test_manifest_component_mismatch(self):
        """Check for declared components that don't exist in DEX."""
        try:
            if not self._is_valid_apk():
                return None

            # Get all class names from DEX
            dex_classes = set()
            try:
                from androguard.core.dex import DEX
                for dex_data in (self.apk.get_all_dex() or []):
                    try:
                        d = DEX(dex_data)
                        for cls in d.get_classes():
                            name = cls.get_name()
                            if name:
                                # Convert "Lcom/example/Foo;" to "com.example.Foo"
                                dex_classes.add(
                                    name[1:-1].replace("/", ".") if name.startswith("L") else name
                                )
                    except Exception:
                        continue
            except Exception:
                return None

            if not dex_classes:
                return None

            # Check manifest components against DEX classes
            components = []
            try:
                components.extend(self.apk.get_activities() or [])
                components.extend(self.apk.get_services() or [])
                components.extend(self.apk.get_receivers() or [])
                components.extend(self.apk.get_providers() or [])
            except Exception:
                return None

            for comp in components:
                if comp and comp not in dex_classes:
                    # Component might use a shorthand; check with package prefix
                    package = self.apk.get_package() or ""
                    full_name = package + comp if comp.startswith(".") else comp
                    if full_name not in dex_classes:
                        return True

            return False
        except Exception as e:
            self.log.warning(f"Error in manifest component mismatch test: {e}")
            return None

    def _test_debuggable_release(self):
        """Check android:debuggable=true combined with a release signature."""
        try:
            if not self._is_valid_apk():
                return None

            is_debuggable = self.apk.get_attribute_value(
                "application", "debuggable"
            ) == "true"

            if not is_debuggable:
                return False

            # Check if it has a signing certificate (release builds have certs)
            try:
                certs = self.apk.get_certificates()
                if certs and len(certs) > 0:
                    return True
            except Exception:
                pass

            return False
        except Exception as e:
            self.log.warning(f"Error in debuggable release test: {e}")
            return None

    def _get_dex_strings(self):
        """Get all string constants from DEX files."""
        all_strings = set()
        try:
            from androguard.core.dex import DEX
            for dex_data in (self.apk.get_all_dex() or []):
                try:
                    d = DEX(dex_data)
                    for s in d.get_strings():
                        if s:
                            all_strings.add(s)
                except Exception:
                    continue
        except Exception:
            pass
        return all_strings

    def _test_emulator_detection_strings(self):
        """Check for emulator detection patterns in DEX strings."""
        try:
            if not self._is_valid_apk():
                return None

            dex_strings = self._get_dex_strings()
            for indicator in EMULATOR_INDICATORS:
                for s in dex_strings:
                    if indicator in s:
                        return True
            return False
        except Exception as e:
            self.log.warning(f"Error in emulator detection test: {e}")
            return None

    def _test_debugger_detection(self):
        """Check for debugger detection API calls in DEX."""
        try:
            if not self._is_valid_apk():
                return None

            dex_strings = self._get_dex_strings()
            debugger_patterns = {
                "isDebuggerConnected",
                "waitingForDebugger",
                "Debug.isDebuggerConnected",
            }
            for pattern in debugger_patterns:
                for s in dex_strings:
                    if pattern in s:
                        return True
            return False
        except Exception as e:
            self.log.warning(f"Error in debugger detection test: {e}")
            return None

    def _test_root_detection(self):
        """Check for root detection patterns in DEX."""
        try:
            if not self._is_valid_apk():
                return None

            dex_strings = self._get_dex_strings()
            for indicator in ROOT_INDICATORS:
                for s in dex_strings:
                    if indicator in s:
                        return True
            return False
        except Exception as e:
            self.log.warning(f"Error in root detection test: {e}")
            return None

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

        self.test_results = APKInconsistencyTests(
            test_zip_bomb=self._test_zip_bomb(),
            test_zip_duplicate_entries=self._test_zip_duplicate_entries(),
            test_zip_path_traversal=self._test_zip_path_traversal(),
            test_zip_suspicious_timestamps=self._test_zip_suspicious_timestamps(),
            test_hidden_dex_files=self._test_hidden_dex_files(),
            test_manifest_component_mismatch=self._test_manifest_component_mismatch(),
            test_debuggable_release=self._test_debuggable_release(),
            test_emulator_detection_strings=self._test_emulator_detection_strings(),
            test_debugger_detection=self._test_debugger_detection(),
            test_root_detection=self._test_root_detection(),
        )
        return self.test_results

    def _bool_to_nullable(self, val):
        """Convert bool/None to ClickHouse Nullable(UInt8)."""
        if val is None:
            return None
        return int(val)

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

            current_time = datetime.now(timezone.utc)
            t = self.test_results

            data = [[
                self.sha256,
                self._bool_to_nullable(t.test_zip_bomb),
                self._bool_to_nullable(t.test_zip_duplicate_entries),
                self._bool_to_nullable(t.test_zip_path_traversal),
                self._bool_to_nullable(t.test_zip_suspicious_timestamps),
                self._bool_to_nullable(t.test_hidden_dex_files),
                self._bool_to_nullable(t.test_manifest_component_mismatch),
                self._bool_to_nullable(t.test_debuggable_release),
                self._bool_to_nullable(t.test_emulator_detection_strings),
                self._bool_to_nullable(t.test_debugger_detection),
                self._bool_to_nullable(t.test_root_detection),
                current_time,
            ]]

            column_names = [
                'sha256',
                'test_zip_bomb', 'test_zip_duplicate_entries',
                'test_zip_path_traversal', 'test_zip_suspicious_timestamps',
                'test_hidden_dex_files', 'test_manifest_component_mismatch',
                'test_debuggable_release', 'test_emulator_detection_strings',
                'test_debugger_detection', 'test_root_detection',
                'analysis_date',
            ]

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

            return (data, column_names, column_type_names)

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