Xiaolan Xie

92 papers B 2C 3Misc 12Journal 47Unranked 28
YearRankTypeTitle / Venue / Authors
2026 J jnl
IEEE Robotics Autom. Lett.
Rachda Naila Mekhaldi, Julia L. Fleck, Raksmey Phan, Xiaolan Xie
2025 J jnl
Int. J. Prod. Res.
Omar Rifki, Zhihao Peng, Lionel Perrier, Xiaolan Xie
2024 J jnl
IEEE Trans Autom. Sci. Eng.
Chen He, Benjamin Dalmas, Cédric Bousquet, Béatrice Trombert Paviot, Xiaolan Xie
2024 J jnl
IEEE Trans Autom. Sci. Eng.
Jules Le Lay, Vincent Augusto, Edgar Alfonso-Lizarazo, Malek Masmoudi, Baptiste Gramont, Xiaolan Xie, Bienvenu Bongue, Thomas Celarier
2024 J jnl
IEEE Trans Autom. Sci. Eng.
Zhihao Peng, Vincent Augusto, Lionel Perrier, Xiaolan Xie
2024 J jnl
Int. J. Prod. Res.
Chengbin Chu, Feng Chu, Alexandre Dolgui, Rakesh Nagi, Xiaolan Xie
2023 J jnl
Comput. Oper. Res.
Roberto Bargetto, Thierry Garaix, Xiaolan Xie
2023 J jnl
IEEE Trans Autom. Sci. Eng.
Xiaolan Xie, Stéphane Dauzère-Pérès
2023 Misc conf
WSC
Jules Le Lay, Lionel Perrier, Vincent Augusto, Xavier Boucher, Xiaolan Xie
2022 J jnl
IEEE Trans Autom. Sci. Eng.
Nilson Herazo-Padilla, Vincent Augusto, Benjamin Dalmas, Xiaolan Xie, Bienvenu Bongue
2022 J jnl
IEEE Trans Autom. Sci. Eng.
Thomas Franck, Vincent Augusto, Xiaolan Xie, Regis Gonthier
2022 J jnl
IEEE Trans Autom. Sci. Eng.
Canan Pehlivan, Xiaolan Xie
2022 J jnl
Int. J. Prod. Res.
Yuwei Lu, Zhibin Jiang, Na Geng, Shan Jiang, Xiaolan Xie
2022 J jnl
INFORMS J. Comput.
Na Geng, Xiaolan Xie
2021 J jnl
Int. J. Prod. Res.
Xingwei Pan, Na Geng, Xiaolan Xie
2021 conf
CASE
Chen He, Benjamin Dalmas, Cédric Bousquet, Béatrice Trombert Paviot, Xiaolan Xie
2021 J jnl
Eur. J. Oper. Res.
Xingwei Pan, Na Geng, Xiaolan Xie
2021 J jnl
IEEE Trans. Autom. Control.
Jiajun Dai, Na Geng, Xiaolan Xie
2021 J jnl
Eur. J. Oper. Res.
Jiajun Dai, Na Geng, Xiaolan Xie
2021 J jnl
IISE Trans.
Ran Liu, Xiaolan Xie
2020 conf
CASE
Hugo De Oliveira, Vincent Augusto, Baptiste Jouaneton, Ludovic Lamarsalle, Martin Prodel, Xiaolan Xie
2020 J jnl
IEEE J. Biomed. Health Informatics
Hugo De Oliveira, Vincent Augusto, Baptiste Jouaneton, Ludovic Lamarsalle, Martin Prodel, Xiaolan Xie
2020 J jnl
INFORMS J. Comput.
Zheng Zhang, Brian T. Denton, Xiaolan Xie
2020 conf
CASE
Cyriac Azefack, Vincent Augusto, Remi Bouvier, Guillaume Gardin, Claude Montuy Coquard, Raksmey Phan, Xiaolan Xie
2020 Misc conf
WSC
Jules Le Lay, Vincent Augusto, Xiaolan Xie, Edgar Alfonso-Lizarazo, Bienvenu Bongue, Thomas Celarier, Regis Gonthier, Malek Masmoudi
2020 J jnl
Comput. Oper. Res.
Jing Wen, Na Geng, Xiaolan Xie
2020 J jnl
Inf. Sci.
Hugo De Oliveira, Vincent Augusto, Baptiste Jouaneton, Ludovic Lamarsalle, Martin Prodel, Xiaolan Xie
2020 J jnl
Int. J. Prod. Res.
Jing Wen, Na Geng, Xiaolan Xie
2019 conf
IEEM
Xingwei Pan, Na Geng, Xiaolan Xie
2019 J jnl
Int. J. Prod. Res.
Na Geng, Xiaolan Xie, Zheng Zhang
2019 conf
CASE
Cyriac Azefack, Raksmey Phan, Vincent Augusto, Guillaume Gardin, Claude Montuy Coquard, Remi Bouvier, Xiaolan Xie
2019 J jnl
IISE Trans.
Zheng Zhang, Bjorn P. Berg, Brian T. Denton, Xiaolan Xie
2019 Misc conf
WSC
Afafe Zehrouni, Vincent Augusto, Xiaolan Xie, Tu-Anh Duong
2019 Misc conf
WSC
Cyriac Azefack, Raksmey Phan, Vincent Augusto, Xiaolan Xie, Guillaume Gardin, Claude Montuy Coquard, Remi Bouvier
2019 J jnl
IEEE Trans Autom. Sci. Eng.
Roberto Bargetto, Thierry Garaix, Xiaolan Xie
2019 J jnl
IEEE Trans Autom. Sci. Eng.
Jingshan Li, Xiaolan Xie, Jie Song, Hui Yang, Gregory Faraut
2019 conf
CASE
Nilson Herazo-Padilla, Vincent Augusto, Benjamin Dalmas, Xiaolan Xie, Bienvenu Bongue
2018 B conf
SMC
Oussama Batata, Vincent Augusto, Xiaolan Xie
2018 conf
SSCI
Danielle Hooijenga, Raksmey Phan, Vincent Augusto, Xiaolan Xie, Abdesslam Redjaline
2018 J jnl
Eur. J. Oper. Res.
Yuwei Lu, Xiaolan Xie, Zhibin Jiang
2018 Misc conf
WSC
Oussama Batata, Vincent Augusto, Xiaolan Xie
2018 J jnl
IEEE Trans Autom. Sci. Eng.
Martin Prodel, Vincent Augusto, Baptiste Jouaneton, Ludovic Lamarsalle, Xiaolan Xie
2018 J jnl
INFORMS J. Comput.
Ran Liu, Xiaolan Xie
2018 conf
CASE
Nilson Herazo-Padilla, Vincent Augusto, Bienvenu Bongue, Xiaolan Xie
2018 J jnl
CoRR
Carlos Rodriguez, Thierry Garaix, Xiaolan Xie, Vincent Augusto
2017 conf
CASE
Thomas Franck, Vincent Augusto, Xiaolan Xie, Regis Gonthier
2017 Misc conf
WSC
Afafe Zehrouni, Vincent Augusto, Thierry Garaix, Raksmey Phan, Xiaolan Xie
2017 Misc conf
WSC
Oussama Batata, Vincent Augusto, Setareh Ebrahimi, Xiaolan Xie
2017 conf
CASE
Martin Prodel, Vincent Augusto, Xiaolan Xie, Baptiste Jouaneton, Ludovic Lamarsalle
2016 conf
CASE
Sabri Hamana, Vincent Augusto, Xiaolan Xie
2016 C conf
ETFA
Jing Wen, Na Geng, Xiaolan Xie
2016 Misc conf
WSC
Vincent Augusto, Xiaolan Xie, Martin Prodel, Baptiste Jouaneton, Ludovic Lamarsalle
2016 J jnl
IEEE Trans. Autom. Control.
Na Geng, Xiaolan Xie
2015 conf
CASE
Edgar Alfonso, Xiaolan Xie, Vincent Augusto
2015 conf
CASE
Martin Prodel, Vincent Augusto, Xiaolan Xie, Baptiste Jouaneton, Ludovic Lamarsalle
2015 J jnl
IEEE Trans Autom. Sci. Eng.
Edgar Alfonso, Vincent Augusto, Xiaolan Xie
2015 C conf
PRO-VE
Sabri Hamana, Vincent Augusto, Xiaolan Xie
2015 Misc conf
WSC
Thomas Franck, Vincent Augusto, Xiaolan Xie, Regis Gonthier, Emilie Achour
2015 Misc conf
WSC
Vincent Augusto, Olfa Rejeb, Xiaolan Xie, Saber Aloui, Lionel Perrier, Pierre Biron, Thierry Durand
2015 J jnl
IEEE Robotics Autom. Mag.
Siqiao Li, Na Geng, Xiaolan Xie
2014 J jnl
IEEE Trans. Syst. Man Cybern. Syst.
Vincent Augusto, Xiaolan Xie
2014 conf
CASE
Siqiao Li, Xiaolan Xie, Na Geng
2014 conf
CASE
Qiang Liu, Xiaolan Xie, Ran Liu
2014 conf
CASE
Nizar Triki, Thierry Garaix, Xiaolan Xie
2014 J jnl
IEEE Trans Autom. Sci. Eng.
Canan Pehlivan, Vincent Augusto, Xiaolan Xie
2014 J jnl
IEEE Trans Autom. Sci. Eng.
Zheng Zhang, Xiaolan Xie, Na Geng
2014 Misc conf
WSC
Martin Prodel, Vincent Augusto, Xiaolan Xie
2014 conf
CASE
Zheng Zhang, Xiaolan Xie, Na Geng
2013 Misc conf
WSC
Canan Pehlivan, Vincent Augusto, Xiaolan Xie
2013 J jnl
J. Enterp. Inf. Manag.
Carlos Rodríguez-Verjan, Vincent Augusto, Xiaolan Xie, Valerie Buthion
2013 J jnl
Eur. J. Oper. Res.
Ran Liu, Xiaolan Xie, Vincent Augusto, Carlos Rodríguez-Verjan
2013 J jnl
Eur. J. Oper. Res.
Na Geng, Xiaolan Xie, Zhibin Jiang
2013 conf
CASE
Limin Zhu, Na Geng, Xiaolan Xie
2013 conf
CASE
Edgar Alfonso, Vincent Augusto, Xiaolan Xie
2013 conf
ICNSC
Ran Liu, Xiaolan Xie, Thierry Garaix
2012 conf
CASE
Carlos Rodríguez-Verjan, Vincent Augusto, Thierry Garaix, Xiaolan Xie, Valerie Buthion
2012 conf
CASE
Canan Pehlivan, Vincent Augusto, Xiaolan Xie, Catherine Crenn-Hebert
2012 J jnl
Eur. J. Oper. Res.
Na Geng, Xiaolan Xie
2012 conf
CASE
Zheng Zhang, Xiaolan Xie, Na Geng
2011 J jnl
IEEE Trans. Autom. Control.
Na Geng, Xiaolan Xie, Vincent Augusto, Zhibin Jiang
2011 J jnl
IEEE Trans Autom. Sci. Eng.
Na Geng, Xiaolan Xie, Zhibin Jiang
2010 conf
CASE
Na Geng, Vincent Augusto, Xiaolan Xie, Zhibin Jiang
2010 J jnl
Comput. Ind. Eng.
Vincent Augusto, Xiaolan Xie, Viviana Perdomo
2009 conf
CASE
Na Geng, Vincent Augusto, Xiaolan Xie, Zhibin Jiang
2008 J jnl
Eur. J. Oper. Res.
Mehdi Lamiri, Xiaolan Xie, Alexandre Dolgui, Frédéric Grimaud
2008 conf
CASE
Mehdi Lamiri, Vincent Augusto, Xiaolan Xie
2007 conf
CASE
Vincent Augusto, Xiaolan Xie, Frédéric Grimaud
2007 J jnl
Algorithmic Oper. Res.
Sampath Kameshwaran, Lyès Benyoucef, Xiaolan Xie
2005 B conf
CEC
Sampath Kameshwaran, Lyès Benyoucef, Xiaolan Xie
2005 C conf
ICEC
Sampath Kameshwaran, Lyès Benyoucef, Xiaolan Xie
2005 conf
WINE
Sampath Kameshwaran, Lyès Benyoucef, Xiaolan Xie
1997 J jnl
IEEE Trans. Robotics Autom.
Feng Chu, Xiaolan Xie
redb/extractors/apk_extractors/apk_features.py
← Index redb/extractors/apk_extractors/apk_features.py python
import inspect
import zipfile
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 APKFeatures


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

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

    def _extract_zip_timestamps(self):
        """Extract earliest and latest content modification from ZIP entries."""
        earliest = None
        latest = None
        try:
            zf = self._get_zip_file()
            if zf:
                with zf:
                    for info in zf.infolist():
                        try:
                            dt = datetime(*info.date_time)
                            if earliest is None or dt < earliest:
                                earliest = dt
                            if latest is None or dt > latest:
                                latest = dt
                        except (ValueError, TypeError):
                            continue
        except Exception as e:
            self.log.warning(f"Error extracting ZIP timestamps: {e}")
        return (
            earliest.isoformat() if earliest else None,
            latest.isoformat() if latest else None,
        )

    def _extract_supported_abis(self):
        """Determine supported ABIs from lib/ directory."""
        abis = set()
        for f in self._list_files():
            if f.startswith("lib/") and f.endswith(".so"):
                parts = f.split("/")
                if len(parts) >= 3:
                    abis.add(parts[1])
        return sorted(abis)

    def _count_dex_files(self):
        """Count DEX files and compute total size."""
        dex_count = 0
        total_size = 0
        try:
            zf = self._get_zip_file()
            if zf:
                with zf:
                    for info in zf.infolist():
                        if info.filename.endswith(".dex"):
                            dex_count += 1
                            total_size += info.file_size
        except Exception as e:
            self.log.warning(f"Error counting DEX files: {e}")
        return dex_count, total_size

    def _check_embedded_apk(self):
        """Check if the archive contains nested APK files."""
        for f in self._list_files():
            if f.lower().endswith(".apk"):
                return True
        return False

    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 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

        package_name = self._safe_extract(
            "package_name", lambda: self.apk.get_package()
        )
        app_name = self._safe_extract(
            "app_name", lambda: self.apk.get_app_name()
        )

        def _get_version_code():
            try:
                return int(self.apk.get_androidversion_code() or 0)
            except (ValueError, TypeError):
                return 0

        version_code = self._safe_extract("version_code", _get_version_code)
        version_name = self._safe_extract(
            "version_name", lambda: self.apk.get_androidversion_name()
        )

        def _get_sdk(getter):
            val = getter()
            return int(val) if val else None

        min_sdk = self._safe_extract(
            "min_sdk_version", lambda: _get_sdk(self.apk.get_min_sdk_version)
        )
        target_sdk = self._safe_extract(
            "target_sdk_version", lambda: _get_sdk(self.apk.get_target_sdk_version)
        )
        compile_sdk = self._safe_extract(
            "compile_sdk_version",
            lambda: _get_sdk(self.apk.get_effective_target_sdk_version),
        )

        main_activity = self._safe_extract(
            "main_activity", lambda: self.apk.get_main_activity()
        )

        is_debuggable = self._safe_extract(
            "is_debuggable",
            lambda: self.apk.get_attribute_value(
                "application", "debuggable"
            ) == "true",
            False,
        )
        allow_backup = self._safe_extract(
            "allow_backup",
            lambda: self.apk.get_attribute_value(
                "application", "allowBackup"
            ) != "false",
            True,
        )
        uses_cleartext = self._safe_extract(
            "uses_cleartext_traffic",
            lambda: self.apk.get_attribute_value(
                "application", "usesCleartextTraffic"
            ) == "true",
            False,
        )

        supported_abis = self._safe_extract(
            "supported_abis", self._extract_supported_abis, []
        )
        dex_count, total_dex_size = self._safe_extract(
            "dex_files", self._count_dex_files, (0, 0)
        )
        all_files = self._safe_extract("file_list", self._list_files, [])
        total_file_count = len(all_files)
        has_native_code = any(
            f.startswith("lib/") and f.endswith(".so") for f in all_files
        )
        has_assets = any(f.startswith("assets/") for f in all_files)
        contains_embedded_apk = self._safe_extract(
            "contains_embedded_apk", self._check_embedded_apk, False
        )

        uses_libraries = self._safe_extract(
            "uses_libraries",
            lambda: list(self.apk.get_libraries() or []),
            [],
        )

        earliest_mod, latest_mod = self._safe_extract(
            "zip_timestamps", self._extract_zip_timestamps, (None, None)
        )

        self.apk_features = APKFeatures(
            package_name=package_name,
            app_name=app_name,
            version_code=version_code,
            version_name=version_name,
            min_sdk_version=min_sdk,
            target_sdk_version=target_sdk,
            compile_sdk_version=compile_sdk,
            main_activity=main_activity,
            is_debuggable=is_debuggable,
            allow_backup=allow_backup,
            uses_cleartext_traffic=uses_cleartext,
            supported_abis=supported_abis,
            dex_count=dex_count,
            total_dex_size=total_dex_size,
            total_file_count=total_file_count,
            has_native_code=has_native_code,
            has_assets=has_assets,
            uses_libraries=uses_libraries,
            earliest_content_modification=earliest_mod,
            latest_content_modification=latest_mod,
            contains_embedded_apk=contains_embedded_apk,
        )
        return self.apk_features

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

            f = self.apk_features
            current_time = datetime.now(timezone.utc)
            data = [[
                self.sha256,
                f.package_name,
                f.app_name,
                f.version_code,
                f.version_name,
                f.min_sdk_version,
                f.target_sdk_version,
                f.compile_sdk_version,
                f.main_activity,
                int(f.is_debuggable),
                int(f.allow_backup),
                int(f.uses_cleartext_traffic),
                f.supported_abis,
                f.dex_count,
                f.total_dex_size,
                f.total_file_count,
                int(f.has_native_code),
                int(f.has_assets),
                f.uses_libraries,
                f.earliest_content_modification,
                f.latest_content_modification,
                int(f.contains_embedded_apk),
                current_time,
            ]]

            column_names = [
                "sha256",
                "package_name", "app_name", "version_code", "version_name",
                "min_sdk_version", "target_sdk_version", "compile_sdk_version",
                "main_activity",
                "is_debuggable", "allow_backup", "uses_cleartext_traffic",
                "supported_abis",
                "dex_count", "total_dex_size", "total_file_count",
                "has_native_code", "has_assets",
                "uses_libraries",
                "earliest_content_modification", "latest_content_modification",
                "contains_embedded_apk",
                "analysis_date",
            ]

            column_type_names = [
                "FixedString(64)",
                "Nullable(String)", "Nullable(String)", "Nullable(UInt32)", "Nullable(String)",
                "Nullable(UInt16)", "Nullable(UInt16)", "Nullable(UInt16)",
                "Nullable(String)",
                "UInt8", "UInt8", "UInt8",
                "Array(String)",
                "UInt16", "UInt64", "UInt32",
                "UInt8", "UInt8",
                "Array(String)",
                "Nullable(String)", "Nullable(String)",
                "UInt8",
                "DateTime64(3, 'UTC')",
            ]

            return (data, column_names, column_type_names)

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