Cam-Tu Nguyen

77 papers A* 13A 1B 8C 2Misc 1Journal 33Unranked 19
YearRankTypeTitle / Venue / Authors
2026 J jnl
IEEE Trans. Netw.
Shichen Dong, Zhixiong Niu, Mingchao Zhang, Zhiying Xu, Chuntao Hu, Pengzhi Zhu, Qingchun Song, Lei Qu, Peng Cheng, Cam-Tu Nguyen, Shaoling Sun, Xiaohu Xu, Yongqiang Xiong, Wei Wang, Xiaoliang Wang, Guihai Chen
2026 J jnl
CoRR
Yeqin Zhang, Yunfei Wang, Jiaxuan Chen, Ke Qin, Yizheng Zhao, Cam-Tu Nguyen
2026 J jnl
CoRR
Zhibo Zhang, Yang Xu, Kai Ming Ting, Cam-Tu Nguyen
2026 A* conf
AAAI
Yeqin Zhang, Yizheng Zhao, Chen Hu, Binxing Jiao, Daxin Jiang, Ruihang Miao, Cam-Tu Nguyen
2026 J jnl
CoRR
Zihao Cheng, Weixin Wang, Yu Zhao, Ziyang Ren, Jiaxuan Chen, Ruiyang Xu, Shuai Huang, Yang Chen, Guowei Li, Mengshi Wang, Yi Xie, Ren Zhu, Zeren Jiang, Keda Lu, Yihong Li, Xiaoliang Wang, Liwei Liu, Cam-Tu Nguyen
2025 J jnl
IEEE Trans. Netw.
Tingting Xu, Xiaoliang Wang, Chen Tian, Yun Xiong, Baoliu Ye, Sanglu Lu, Cam-Tu Nguyen
2025 J jnl
CoRR
Chuanghao Ding, Jiaping Wang, Ziqing Yang, Xiaoliang Wang, Dahua Lin, Cam-Tu Nguyen, Fei Tan
2025 J jnl
CoRR
Shiqi Wang, Zhibo Zhang, Libing Fang, Cam-Tu Nguyen, Wenzhon Li
2025 conf
EMNLP (Findings)
Yiqun Shen, Song Yuan, Zhengze Zhang, Xiaoliang Wang, Daxin Jiang, Cam-Tu Nguyen
2025 J jnl
CoRR
Yiqun Shen, Song Yuan, Zhengze Zhang, Xiaoliang Wang, Daxin Jiang, Cam-Tu Nguyen
2025 J jnl
CoRR
Yeqin Zhang, Yizheng Zhao, Chen Hu, Binxing Jiao, Daxin Jiang, Ruihang Miao, Cam-Tu Nguyen
2025 A* conf
INFOCOM
Shichen Dong, Zhixiong Niu, Mingchao Zhang, Zhiying Xu, Chuntao Hu, Pengzhi Zhu, Qingchun Song, Lei Qu, Peng Cheng, Cam-Tu Nguyen, Shaoling Sun, Xiaohu Xu, Yongqiang Xiong, Wei Wang, Xiaoliang Wang
2025 B conf
COLING
Zehua Xia, Yuyang Wu, Yiyun Xia, Cam-Tu Nguyen
2025 J jnl
CoRR
Zehua Xia, Yuyang Wu, Yiyun Xia, Cam-Tu Nguyen
2025 J jnl
CoRR
Yufei Xiang, Yiqun Shen, Yeqin Zhang, Cam-Tu Nguyen
2025 J jnl
CoRR
Yi Zhao, Yajuan Peng, Cam-Tu Nguyen, Zuchao Li, Xiaoliang Wang, Hai Zhao, Xiaoming Fu
2025 conf
ACL (Findings)
Zhengze Zhang, Shiqi Wang, Yiqun Shen, Simin Guo, Dahua Lin, Xiaoliang Wang, Cam-Tu Nguyen, Fei Tan
2025 J jnl
CoRR
Zhengze Zhang, Shiqi Wang, Yiqun Shen, Simin Guo, Dahua Lin, Xiaoliang Wang, Cam-Tu Nguyen, Fei Tan
2024 conf
USENIX ATC
Tingting Xu, Bengbeng Xue, Yang Song, Xiaomin Wu, Xiaoxin Peng, Yilong Lyu, Xiaoliang Wang, Chen Tian, Baoliu Ye, Cam-Tu Nguyen, Biao Lyu, Rong Wen, Zhigang Zong, Shunmin Zhu
2024 J jnl
PACMNET
Xiaoliang Wang, Penghui Mi, Yong Zhu, Baoyi An, Yinhua Wang, Lixiang Wang, Xuezhi Yu, Qiong Xie, Xiang Huang, Mingliang Yin, Chaoyang Ji, Wei Sun, Yihang Lv, Yuhang Chen, Cam-Tu Nguyen, Chen Tian, Xiaoming Fu
2024 A* conf
AAAI
Shiqi Wang, Yeqin Zhang, Cam-Tu Nguyen
2024 J jnl
CoRR
Shiqi Wang, Yeqin Zhang, Cam-Tu Nguyen
2024 J jnl
CoRR
Qi Gou, Cam-Tu Nguyen
2024 J jnl
CoRR
Shiqi Wang, Zhengze Zhang, Rui Zhao, Fei Tan, Cam-Tu Nguyen
2024 A* conf
EMNLP
Yufei Xiang, Yiqun Shen, Yeqin Zhang, Cam-Tu Nguyen
2024 conf
EMNLP (Findings)
Shiqi Wang, Zhengze Zhang, Rui Zhao, Fei Tan, Cam-Tu Nguyen
2024 A* conf
ACM Multimedia
Haoyang Su, Wenzhe Du, Xiaoliang Wang, Cam-Tu Nguyen
2024 J jnl
CoRR
Chuanghao Ding, Xuejing Liu, Wei Tang, Juan Li, Xiaoliang Wang, Rui Zhao, Cam-Tu Nguyen, Fei Tan
2023 Misc conf
ICASSP
Yeqin Zhang, Haomin Fu, Cheng Fu, Haiyang Yu, Yongbin Li, Cam-Tu Nguyen
2023 J jnl
CoRR
Yeqin Zhang, Haomin Fu, Cheng Fu, Haiyang Yu, Yongbin Li, Cam-Tu Nguyen
2023 A* conf
EMNLP
Qi Gou, Zehua Xia, Bowen Yu, Haiyang Yu, Fei Huang, Yongbin Li, Cam-Tu Nguyen
2023 J jnl
CoRR
Qi Gou, Zehua Xia, Bowen Yu, Haiyang Yu, Fei Huang, Yongbin Li, Cam-Tu Nguyen
2023 A* conf
ACM Multimedia
Wenzhe Du, Haoyang Su, Cam-Tu Nguyen, Jian Sun
2023 conf
EMNLP (Findings)
Zehua Xia, Qi Gou, Bowen Yu, Haiyang Yu, Fei Huang, Yongbin Li, Cam-Tu Nguyen
2023 J jnl
CoRR
Zehua Xia, Qi Gou, Bowen Yu, Haiyang Yu, Fei Huang, Yongbin Li, Cam-Tu Nguyen
2023 conf
ICONIP (6)
Xian Li, Hongguang Shi, Yunfei Wang, Yeqin Zhang, Xubin Li, Cam-Tu Nguyen
2023 J jnl
CoRR
Xian Li, Hongguang Shi, Yunfei Wang, Yeqin Zhang, Xubin Li, Cam-Tu Nguyen
2023 conf
APNet
Shichen Dong, Zhixiong Niu, Mingchao Zhang, Zhiying Xu, Chuntao Hu, Wei Wang, Pengzhi Zhu, Qingchun Song, Lei Qu, Peng Cheng, Yongqiang Xiong, Chen Tian, Cam-Tu Nguyen, Xiaoliang Wang
2023 J jnl
CoRR
Hongguang Shi, Shuirong Cao, Cam-Tu Nguyen
2023 conf
NoF
Jian Tang, Tingting Xu, Liming Wang, Zhenjie Lin, Ming Zhao, Xiaoliang Wang, Cam-Tu Nguyen, Chen Tian, Zhuzhong Qian, Wenzhong Li
2022 conf
EMNLP (Findings)
Haomin Fu, Yeqin Zhang, Haiyang Yu, Jian Sun, Fei Huang, Luo Si, Yongbin Li, Cam-Tu Nguyen
2022 J jnl
CoRR
Haomin Fu, Yeqin Zhang, Haiyang Yu, Jian Sun, Fei Huang, Luo Si, Yongbin Li, Cam-Tu Nguyen
2022 B conf
ICNP
Jian Tang, Tingting Xu, Cam-Tu Nguyen, Xiaoliang Wang, Sanglu Lu, Baoliu Ye
2021 conf
WASA (1)
Hangfan Zhang, Mingchao Zhang, Cam-Tu Nguyen, Wenzhong Li, Sheng Zhang, Xiaoliang Wang
2021 A* conf
INFOCOM
Xiaoliang Wang, Hexiang Song, Cam-Tu Nguyen, Dongxu Cheng, Tiancheng Jin
2021 J jnl
ACM Trans. Knowl. Discov. Data
Mingkai Lin, Wenzhong Li, Lynda J. Song, Cam-Tu Nguyen, Xiaoliang Wang, Sanglu Lu
2020 J jnl
Comput. Networks
Ding Li, Wenzhong Li, Xiaoliang Wang, Cam-Tu Nguyen, Sanglu Lu
2020 J jnl
IEEE/ACM Trans. Netw.
Bin Tang, Xiaoliang Wang, Cam-Tu Nguyen, Baoliu Ye, Sanglu Lu
2019 B conf
SECON
Ding Li, Wenzhong Li, Xiaoliang Wang, Cam-Tu Nguyen, Sanglu Lu
2019 conf
RIVF
Kim Anh Nguyen, Ngan Dong, Cam-Tu Nguyen
2019 J jnl
CoRR
Bin Tang, Xiaoliang Wang, Cam-Tu Nguyen, Baoliu Ye, Sanglu Lu
2019 conf
ICA3PP (2)
Mingkai Lin, Wenzhong Li, Cam-Tu Nguyen, Xiaoliang Wang, Sanglu Lu
2018 conf
ArgMining@EMNLP
Dieu-Thu Le, Cam-Tu Nguyen, Kim Anh Nguyen
2018 conf
NLP-TEA@ACL
Dieu-Thu Le, Cam-Tu Nguyen, Xiaoliang Wang
2018 C conf
HPSR
Xiaoliang Wang, Cam-Tu Nguyen, Baoliu Ye, Zhuzhong Qian, Bin Tang, Wenzhong Li, Sanglu Lu
2018 B conf
GROUP
Haixiang Yang, Xiaoliang Wang, Cam-Tu Nguyen, Sanglu Lu
2018 J jnl
Proc. ACM Interact. Mob. Wearable Ubiquitous Technol.
Jiayao Tan, Xiaoliang Wang, Cam-Tu Nguyen, Yu Shi
2017 B conf
ICPADS
Xuewei Zhang, Xiaoliang Wang, Cam-Tu Nguyen, Jian Wang, Zhuzhong Qian, Sanglu Lu
2017 A* conf
IJCAI
Jianbing Zhang, Yixin Sun, Shujian Huang, Cam-Tu Nguyen, Xiaoliang Wang, Xinyu Dai, Jiajun Chen, Yang Yu
2017 conf
PAKDD (1)
Xiao Zhang, Wenzhong Li, Hong Huang, Cam-Tu Nguyen, Xu Chen, Xiaoliang Wang, Sanglu Lu
2017 A* conf
INFOCOM
Jiayao Tan, Cam-Tu Nguyen, Xiaoliang Wang
2016 B conf
MASS
Maozhi Tang, Cam-Tu Nguyen, Xiaoliang Wang, Sanglu Lu
2016 A* conf
SIGCOMM
Haixiang Yang, Xiaoliang Wang, Cam-Tu Nguyen, Sanglu Lu
2016 J jnl
CoRR
Bin Tang, Xiaoliang Wang, Cam-Tu Nguyen, Sanglu Lu
2016 B conf
ISIT
Bin Tang, Xiaoliang Wang, Cam-Tu Nguyen, Sanglu Lu
2014 A* conf
AAAI
Cam-Tu Nguyen, Xiaoliang Wang, Jing Liu, Zhi-Hua Zhou
2013 conf
KDIR/KMIS
Tran Phuong Nhung, Cam-Tu Nguyen, Jinhee Chun, Ha Vu Le, Takeshi Tokuyama
2013 J jnl
ACM Trans. Web
Cam-Tu Nguyen, Natsuda Kaothanthong, Takeshi Tokuyama, Xuan Hieu Phan
2013 conf
DRCN
Xiaoliang Wang, Xiaohong Jiang, Cam-Tu Nguyen, Xiao Zhang, Sanglu Lu
2013 A* conf
IJCAI
Cam-Tu Nguyen, De-Chuan Zhan, Zhi-Hua Zhou
2011 J jnl
IEEE Trans. Knowl. Data Eng.
Xuan Hieu Phan, Cam-Tu Nguyen, Dieu-Thu Le, Minh Le Nguyen, Susumu Horiguchi, Quang-Thuy Ha
2011 conf
KDIR
Cam-Tu Nguyen, Ha Vu Le, Takeshi Tokuyama
2010 A conf
CIKM
Cam-Tu Nguyen, Natsuda Kaothanthong, Xuan Hieu Phan, Takeshi Tokuyama
2009 J jnl
ACM Trans. Asian Lang. Inf. Process.
Cam-Tu Nguyen, Xuan Hieu Phan, Susumu Horiguchi, Thu-Trang Nguyen, Quang-Thuy Ha
2008 conf
Web Intelligence
Dieu-Thu Le, Cam-Tu Nguyen, Quang-Thuy Ha, Xuan Hieu Phan, Susumu Horiguchi
2008 B conf
LREC
Quang Thang Dinh, Hong Phuong Le, Nguyên Thi Minh Huyên, Cam-Tu Nguyen, Mathias Rossignol, Xuân Luong Vu
2006 C conf
PACLIC
Cam-Tu Nguyen, Trung-Kien Nguyen, Xuan Hieu Phan, Le-Minh Nguyen, Quang-Thuy Ha
redb/extractors/apk_extractors/apk_manifest.py
← Index redb/extractors/apk_extractors/apk_manifest.py python
import inspect
import json
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 APKManifest, APKManifestComponent


class APKManifestExtractor(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.manifest = None
        self.components = []
        self.log.debug(inspect.currentframe().f_code.co_name)

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

    def _is_component_exported(self, component_type, component_name):
        """Determine if a component is exported.

        Pre-API 31: exported is implicitly True if intent filters exist.
        API 31+: android:exported must be explicit; default is False.
        """
        try:
            exported_attr = None
            # Try to get the exported attribute directly from the XML
            axml = self.apk.get_android_manifest_xml()
            if axml is not None:
                for node in axml.getElementsByTagName(component_type):
                    name = node.getAttributeNS(
                        "http://schemas.android.com/apk/res/android", "name"
                    )
                    if name == component_name:
                        exported_attr = node.getAttributeNS(
                            "http://schemas.android.com/apk/res/android", "exported"
                        )
                        break
        except Exception:
            exported_attr = None

        if exported_attr == "true":
            return True
        if exported_attr == "false":
            return False

        # If not explicitly set, check for intent filters (pre-API 31 behavior)
        try:
            intent_filters = self.apk.get_intent_filters(component_type, component_name)
            if intent_filters:
                actions = intent_filters.get("action", [])
                if actions:
                    return True
        except Exception:
            pass

        return False

    def _get_intent_filters_for_component(self, component_type, component_name):
        """Get intent filters for a specific component."""
        actions = []
        categories = []
        try:
            intent_filters = self.apk.get_intent_filters(component_type, component_name)
            if intent_filters:
                actions = intent_filters.get("action", [])
                categories = intent_filters.get("category", [])
        except Exception:
            pass
        return actions, categories

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

        activities = self._safe_extract(
            "activities", lambda: list(self.apk.get_activities() or []), []
        )
        services = self._safe_extract(
            "services", lambda: list(self.apk.get_services() or []), []
        )
        receivers = self._safe_extract(
            "receivers", lambda: list(self.apk.get_receivers() or []), []
        )
        providers = self._safe_extract(
            "providers", lambda: list(self.apk.get_providers() or []), []
        )

        # Build component list with intent filter info
        self.components = []
        all_actions = set()
        all_categories = set()
        exported_components = []

        component_map = [
            ("activity", activities),
            ("service", services),
            ("receiver", receivers),
            ("provider", providers),
        ]

        for comp_type, comp_list in component_map:
            for comp_name in comp_list:
                try:
                    is_exported = self._is_component_exported(comp_type, comp_name)
                    actions, categories = self._get_intent_filters_for_component(
                        comp_type, comp_name
                    )
                    all_actions.update(actions)
                    all_categories.update(categories)
                    if is_exported:
                        exported_components.append(comp_name)

                    self.components.append(APKManifestComponent(
                        component_type=comp_type,
                        class_name=comp_name,
                        is_exported=is_exported,
                        intent_actions=list(actions),
                        intent_categories=list(categories),
                    ))
                except Exception as e:
                    self.log.warning(
                        f"Error processing component '{comp_name}' for "
                        f"{self.hash.sha256}: {e}"
                    )
                    # Still add the component with minimal info
                    self.components.append(APKManifestComponent(
                        component_type=comp_type,
                        class_name=comp_name,
                        is_exported=False,
                        intent_actions=[],
                        intent_categories=[],
                    ))

        # Uses-feature
        uses_features = []
        try:
            uses_features = list(self.apk.get_features() or [])
        except Exception:
            pass

        # Meta-data
        meta_data = None
        try:
            axml = self.apk.get_android_manifest_xml()
            if axml is not None:
                md = {}
                for node in axml.getElementsByTagName("meta-data"):
                    name = node.getAttributeNS(
                        "http://schemas.android.com/apk/res/android", "name"
                    )
                    value = node.getAttributeNS(
                        "http://schemas.android.com/apk/res/android", "value"
                    )
                    resource = node.getAttributeNS(
                        "http://schemas.android.com/apk/res/android", "resource"
                    )
                    if name:
                        md[name] = value or resource or ""
                if md:
                    meta_data = md
        except Exception:
            pass

        # Full manifest XML
        manifest_xml = None
        try:
            axml = self.apk.get_android_manifest_xml()
            if axml is not None:
                manifest_xml = axml.toxml()
        except Exception:
            try:
                manifest_xml = self.apk.get_android_manifest_axml().get_xml()
                if isinstance(manifest_xml, bytes):
                    manifest_xml = manifest_xml.decode("utf-8", errors="replace")
            except Exception:
                pass

        self.manifest = APKManifest(
            activity_count=len(activities),
            service_count=len(services),
            receiver_count=len(receivers),
            provider_count=len(providers),
            activities=activities,
            services=services,
            receivers=receivers,
            providers=providers,
            exported_components=exported_components,
            intent_filters_by_action=sorted(all_actions),
            intent_filters_by_category=sorted(all_categories),
            uses_features=uses_features,
            meta_data=meta_data,
            manifest_xml=manifest_xml,
        )
        return self.manifest

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

            current_time = datetime.now(timezone.utc)
            m = self.manifest

            # Components table (one row per component)
            components_data = []
            for comp in self.components:
                components_data.append([
                    self.sha256,
                    comp.component_type,
                    comp.class_name,
                    int(comp.is_exported),
                    comp.intent_actions,
                    comp.intent_categories,
                    current_time,
                ])

            # Manifest summary table (one row per APK)
            manifest_data = [[
                self.sha256,
                m.activity_count,
                m.service_count,
                m.receiver_count,
                m.provider_count,
                m.intent_filters_by_action,
                m.intent_filters_by_category,
                m.uses_features,
                m.manifest_xml,
                current_time,
            ]]

            return {
                'multi_table': True,
                'manifest': {
                    'table': 'redb_apk_manifest',
                    'data': manifest_data,
                    'column_names': [
                        'sha256',
                        'activity_count', 'service_count', 'receiver_count', 'provider_count',
                        'intent_filters_by_action', 'intent_filters_by_category',
                        'uses_features', 'manifest_xml', 'analysis_date',
                    ],
                    'column_type_names': [
                        'FixedString(64)',
                        'UInt16', 'UInt16', 'UInt16', 'UInt16',
                        'Array(String)', 'Array(String)',
                        'Array(String)', 'Nullable(String)',
                        "DateTime64(3, 'UTC')",
                    ],
                },
                'components': {
                    'table': 'redb_apk_components',
                    'data': components_data,
                    'column_names': [
                        'sha256', 'component_type', 'class_name', 'is_exported',
                        'intent_actions', 'intent_categories', 'analysis_date',
                    ],
                    'column_type_names': [
                        'FixedString(64)', 'LowCardinality(String)', 'String', 'UInt8',
                        'Array(String)', 'Array(String)',
                        "DateTime64(3, 'UTC')",
                    ],
                },
            }

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