Weicheng Cui

19 papers Journal 15Unranked 4
YearRankTypeTitle / Venue / Authors
2026 J jnl
IEEE Trans. Comput. Soc. Syst.
Hao Chen, Weikun Li, Le Hong, AnLan Sun, Weicheng Cui
2026 J jnl
Appl. Math. Comput.
Hao Chen, Weicheng Cui
2025 J jnl
CoRR
Xinyu Cui, Boai Sun, Yi Zhu, Ning Yang, Haifeng Zhang, Weicheng Cui, Dixia Fan, Jun Wang
2025 J jnl
CoRR
Qu He, Weikun Li, Guangmin Dai, Hao Chen, Qimeng Liu, Xiaoqing Tian, Jie You, Weicheng Cui, Michael S. Triantafyllou, Dixia Fan
2025 J jnl
Complex Intell. Syst.
Le Hong, Weicheng Cui
2025 J jnl
CoRR
Zhangyuan Wang, Yunpeng Zhu, Yuqi Yan, Xiaoyuan Tian, Xinhao Shao, Meixuan Li, Weikun Li, Guangsheng Su, Weicheng Cui, Dixia Fan
2024 J jnl
CoRR
Aoming Liang, Qi Liu, Lei Xu, Fahad Sohrab, Weicheng Cui, Changhui Song, Moncef Gabbouj
2024 conf
iThings/GreenCom/CPSCom/SmartData/Cybermatics
Le Hong, Ran Yan, Ruihan Wang, Hao Chen, Weicheng Cui
2024 J jnl
Expert Syst. Appl.
Hao Chen, Zhilang Zhang, Weikun Li, Qimeng Liu, Kai Sun, Dixia Fan, Weicheng Cui
2023 conf
GECCO Companion
Hao Chen, Weikun Li, Zhenhua Wang, Weicheng Cui, Kai Sun
2023 J jnl
CoRR
Jinyu Li, Ping Hu, Weicheng Cui, Tianyi Huang, Shenghui Cheng
2023 J jnl
J. Inf. Technol. Tour.
Jinyu Li, Ping Hu, Weicheng Cui, Tianyi Huang, Shenghui Cheng
2023 J jnl
Sensors
Kai Sun, Zhenhua Wang, Qimeng Liu, Hao Chen, Weicheng Cui
2023 conf
NCAA (2)
Le Hong, Weicheng Cui
2023 J jnl
Expert Syst. Appl.
Hao Chen, Weikun Li, Weicheng Cui
2022 J jnl
Int. J. Comput. Intell. Syst.
Hao Chen, Weikun Li, Wentao Song, Ping Yang, Weicheng Cui
2021 conf
ICISCAE (ACM)
Hao Chen, Weikun Li, Weicheng Cui
2021 J jnl
Sensors
Kai Sun, Weicheng Cui, Chi Chen
2020 J jnl
Comput. Intell. Neurosci.
Hao Chen, Weikun Li, Weicheng Cui
redb/extractors/decompiler/apk/library_filter.py
← Index redb/extractors/decompiler/apk/library_filter.py python
"""Package-based library filtering for APK DEX code analysis.

Determines whether a method belongs to a known library/framework package
and should be filtered out of content tables. This is the Android equivalent
of is_lib_or_thunk() in the Binary Ninja pipeline.
"""

import os
from typing import Dict, List


DEFAULT_LIBRARY_PREFIXES = [
    "android.",
    "androidx.",
    "com.google.android.",
    "com.google.firebase.",
    "com.google.gson.",
    "com.google.protobuf.",
    "kotlin.",
    "kotlinx.",
    "org.apache.",
    "com.squareup.",
    "io.reactivex.",
    "org.reactivestreams.",
    "com.facebook.",
    "com.crashlytics.",
    "io.fabric.",
    "org.junit.",
    "org.mockito.",
]


class LibraryFilter:
    """Filters library/framework classes from APK analysis."""

    def __init__(self, prefixes: List[str] = None):
        env_prefixes = os.getenv("APK_LIBRARY_PREFIXES")
        if env_prefixes:
            self._prefixes = [p.strip() for p in env_prefixes.split(",") if p.strip()]
        elif prefixes is not None:
            self._prefixes = prefixes
        else:
            self._prefixes = DEFAULT_LIBRARY_PREFIXES

        # Convert Dalvik-style prefixes to both formats for matching
        self._dot_prefixes = tuple(self._prefixes)

        self._stats = {"library": 0, "user": 0}

    def is_library(self, class_name: str) -> bool:
        """Check if a class belongs to a known library/framework package.

        Accepts both Java dot notation (com.example.Foo) and Dalvik
        descriptor notation (Lcom/example/Foo;).
        """
        # Normalize Dalvik descriptor to dot notation
        normalized = self._normalize_class_name(class_name)

        is_lib = normalized.startswith(self._dot_prefixes)
        if is_lib:
            self._stats["library"] += 1
        else:
            self._stats["user"] += 1
        return is_lib

    def get_filter_stats(self) -> Dict[str, int]:
        """Return counts of filtered vs. retained classes."""
        return dict(self._stats)

    @staticmethod
    def _normalize_class_name(class_name: str) -> str:
        """Convert Dalvik descriptor to dot notation.

        Lcom/example/Foo; -> com.example.Foo
        com.example.Foo -> com.example.Foo
        """
        if class_name.startswith("L") and class_name.endswith(";"):
            return class_name[1:-1].replace("/", ".")
        return class_name.replace("/", ".")