Xi Zhang

18 papers B 3Journal 4Unranked 11
YearRankTypeTitle / Venue / Authors
2019 conf
ISICDM
Xiaopan Xu, Peng Du, Yang Liu, Xi Zhang, Jing Yuan, Hongbing Lu
2019 conf
ISICDM
Di Lu, Xi Zhang, Xiaopan Xu, Xiaowei He, Yang Liu
2019 B conf
Image Processing
Hao-jie Zheng, Xiaopan Xu, Xi Zhang, Hongbing Lu, Jimin Liang, Yang Liu
2018 J jnl
CoRR
Jose Dolz, Xiaopan Xu, Jérôme Rony, Jing Yuan, Yang Liu, Eric Granger, Christian Desrosiers, Xi Zhang, Ismail Ben Ayed, Hongbing Lu
2017 conf
Biomedical Applications in Molecular, Structural, and Functional Imaging
Yang Liu, Huangsheng Pu, Xi Zhang, Baojuan Li, Zhengrong Liang, Hongbing Lu
2017 conf
Biomedical Applications in Molecular, Structural, and Functional Imaging
Yang Liu, Liang Li, Baojuan Li, Xi Zhang, Hongbing Lu
2017 conf
Computer-Aided Diagnosis
Xi Zhang, Qiang Tian, Yuxia Wu, Xiaopan Xu, Baojuan Li, Yi-Xiong Liu, Yang Liu, Hongbing Lu
2017 B conf
Image Processing
Yuxia Wu, Xi Zhang, Xiaopan Xu, Yang Liu, Guopeng Zhang, Baojuan Li, Hui-Jun Chen, Hongbing Lu
2017 conf
ICIG (2)
Xiaopan Xu, Xi Zhang, Yang Liu, Qiang Tian, Guopeng Zhang, Zengyue Yang, Hongbing Lu, Jing Yuan
2017 J jnl
Int. J. Comput. Assist. Radiol. Surg.
Xiaopan Xu, Xi Zhang, Qiang Tian, Guopeng Zhang, Yang Liu, Guang-Bin Cui, Jiang Meng, Yuxia Wu, Tianshuai Liu, Zengyue Yang, Hongbing Lu
2016 J jnl
Int. J. Comput. Assist. Radiol. Surg.
Dan Xiao, Guopeng Zhang, Yang Liu, Zengyue Yang, Xi Zhang, Lihong Li, Chun Jiao, Hongbing Lu
2016 conf
Biomedical Applications in Molecular, Structural, and Functional Imaging
Yang Liu, Liang Li, Baojuan Li, Xi Zhang, Hongbing Lu
2016 conf
Computer-Aided Diagnosis
Xiaopan Xu, Xi Zhang, Yang Liu, Qiang Tian, Guopeng Zhang, Hongbing Lu
2016 conf
Biomedical Applications in Molecular, Structural, and Functional Imaging
Yang Liu, Baojuan Li, Xi Zhang, Linchuan Zhang, Liang Li, Hongbing Lu
2015 conf
Computer-Aided Diagnosis
Xi Zhang, Yang Liu, Baojuan Li, Guopeng Zhang, Zhengrong Liang, Hongbing Lu
2015 B conf
Image Processing
Yang Liu, Baojuan Li, Xi Zhang, Linchuan Zhang, Zhengrong Liang, Hongbing Lu
2015 J jnl
IEEE Trans. Biomed. Eng.
Xi Zhang, Yang Liu, Zengyue Yang, Qiang Tian, Guopeng Zhang, Dan Xiao, Guang-Bin Cui, Hongbing Lu
2014 conf
ABDI@MICCAI
Xi Zhang, Yang Liu, Dan Xiao, Guopeng Zhang, Qimei Liao, Hongbing Lu
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("/", ".")