Weijun Sun

81 papers B 1Misc 2Journal 62Unranked 16
YearRankTypeTitle / Venue / Authors
2026 J jnl
Int. J. Mach. Learn. Cybern.
Weijun Sun, Qiaoyun Li, Na Han, Xiaozhao Fang, Yonghui Huang, Yang Li
2026 J jnl
IEEE Trans. Fuzzy Syst.
Weijun Sun, Jiakai He, Xiyuan Yang, Chaoye Li, Lei Liu, Guoxu Zhou, Yongjun Cao
2026 J jnl
Pattern Recognit.
Zhixiang Zeng, Weijun Sun, Xiaozhao Fang, Guoxu Zhou, Shengli Xie
2025 J jnl
J. Big Data
Zhaoyan Ming, Ying Huang, Cheng Hu, Jiahao Peng, Weijun Sun, Weijin Guo, Tang Sheng, Xiangyu Huangfu, Zhaolin Li, Xinrui Li, Jicheng Huang, Zhiming Yuan, Guanlin Chen, Kui Su, Yongxia Shi, Han Xia
2025 conf
ISBI
Yinqi Cai, De-Jun Fan, Feng Gao, Mingzhi Mao, Weijun Sun, Guanbin Li
2025 J jnl
Appl. Intell.
Jiaguo Mu, Yu Chen, Weijun Sun, Zhenyu Wan, Shengwei Wang, Tao Tao
2025 J jnl
Inf. Sci.
Tianle Hu, Yu Chen, Chuwei Cheng, Junhong Xiao, Weijun Sun, Xiaozhao Fang
2025 J jnl
IEEE Trans. Comput. Soc. Syst.
Weijun Sun, Zhikun Jiang, Yonghao Chen, Jiaqing Li, Chengbin Zhou, Na Han
2025 J jnl
Pattern Recognit.
Yulong Jia, Jiaming Li, Ganlong Zhao, Shuangyin Liu, Weijun Sun, Liang Lin, Guanbin Li
2025 J jnl
Pattern Recognit.
Weijun Sun, Chaoye Li, Qiaoyun Li, Xiaozhao Fang, Jiakai He, Lei Liu
2025 conf
ICRCA
Yuhao Zhang, Yong Xu, Yuhao Chen, Huizi Li, Guoxin Feng, Shuyan Guo, Weijun Sun
2025 J jnl
IEEE Internet Things J.
Haopeng Lai, Yuntao Deng, Mingwei Su, Weijun Sun, Shengli Xie, Zhouqiang Qiu
2025 J jnl
Image Vis. Comput.
Wai Keung Wong, Hao Liang, Hongkun Sun, Weijun Sun, Haoliang Yuan, Shuping Zhao, Lunke Fei
2025 J jnl
Neural Networks
Weijun Sun, Chaoye Li, Jiakai He, Xiaozhao Fang, Guoxu Zhou, Xiyuan Yang, Kangsheng Wu
2025 J jnl
Briefings Bioinform.
Qirui Zhou, Chaowen Li, Chao Chen, Songqing Gu, Weijun Sun, Zongmeng Zhang, Yishan Cai, Yonghui Huang, Hongtao Liu, Chao Yang, Xin Chen
2025 J jnl
Multim. Syst.
Zejiang Xu, Yu Chen, Yuanyuan Liu, Xiaozhao Fang, Han Na, Weijun Sun, Yonghui Huang
2025 conf
ICRCA
Guoxin Feng, Yong Xu, Yuhao Chen, Huizi Li, Yuhao Zhang, Shuyan Guo, Weijun Sun
2024 J jnl
IEEE Trans. Syst. Man Cybern. Syst.
Zhenhao Huang, Yuning Qiu, Xinqi Chen, Weijun Sun, Guoxu Zhou
2024 J jnl
Remote. Sens.
Huihui Niu, Weijun Sun, Baojuan Huai, Yuzhe Wang, Rensheng Chen, Chuntan Han, Yingshan Wang, Jiaying Zhou, Lei Wang
2024 J jnl
IEEE Internet Things J.
Yifei Sun, Jigang Wu, Yalan Wu, Long Chen, Weijun Sun, Yidong Li
2024 J jnl
IEEE Trans. Circuits Syst. Video Technol.
Dong Huang, Xiaozhi Deng, Ding-Hua Chen, Zihao Wen, Weijun Sun, Chang-Dong Wang, Jian-Huang Lai
2024 J jnl
J. Supercomput.
Yifei Sun, Jigang Wu, Yalan Wu, Long Chen, Weijun Sun
2024 conf
ICRCA
Weijun Sun, Xu Yong, Shuyan Guo, Liu Lingxiao
2024 J jnl
Neural Networks
Hai-Xin Zhang, Dong Huang, Hua-Bao Ling, Weijun Sun, Zihao Wen
2024 J jnl
Neurocomputing
Jiaqing Li, Peipei Kang, Weijun Sun, Zhikun Jiang
2024 J jnl
Database J. Biol. Databases Curation
Jiabei Liu, Yiyi Yu, Mingyue Li, Yixuan Wu, Weijun Chen, Guanru Liu, Lingxian Liu, Jiechun Lin, Chujun Peng, Weijun Sun, Xiaoli Wu, Xin Chen
2024 J jnl
Comput. Speech Lang.
Yuan Xie, Tao Zou, Junjie Yang, Weijun Sun, Shengli Xie
2024 J jnl
Knowl. Based Syst.
Yuan Xie, Tao Zou, Junjie Yang, Weijun Sun, Shengli Xie
2024 conf
ISBI
Jie Ma, Zhijun Xu, Xinyu Xiong, Ma-yi-di-li Ni-jia-ti, Dongyu Zhang, Weijun Sun, Feng Gao, Guanbin Li
2024 J jnl
Remote. Sens.
Lichen Yin, Xin Wang, Wentao Du, Jizu Chen, Youyan Jiang, Weijun Sun, Chengde Yang, Bowen Li, Xingyu Xue, Changsheng Lu
2024 J jnl
Signal Image Video Process.
Yichun Qiu, Weijun Sun, Guoxu Zhou, Qibin Zhao
2023 J jnl
Int. J. Mach. Learn. Cybern.
Junran He, Xiaozhao Fang, Peipei Kang, Lin Jiang, Lunke Fei, Na Han, Weijun Sun
2023 J jnl
Neural Networks
Haomin Ni, Jianjun Zhang, Peipei Kang, Xiaozhao Fang, Weijun Sun, Shengli Xie, Na Han
2023 J jnl
Remote. Sens.
Xiaohong Yang, Weijun Sun, Jiake Wu, Jiahang Che, Mengyuan Liu, Qinglin Zhang, Yingshan Wang, Baojuan Huai, Yuzhe Wang, Lei Wang
2023 J jnl
Eng. Appl. Artif. Intell.
Yeping Yang, Lunke Fei, Adel Homoud Alshehri, Shuping Zhao, Weijun Sun, Shaohua Teng
2023 J jnl
Signal Process.
Lin Jiang, Xiaozhao Fang, Weijun Sun, Na Han, Shaohua Teng
2023 conf
MICCAI (8)
Junjia Huang, Haofeng Li, Weijun Sun, Xiang Wan, Guanbin Li
2023 J jnl
CoRR
Junjia Huang, Haofeng Li, Weijun Sun, Xiang Wan, Guanbin Li
2023 J jnl
Int. J. Mach. Learn. Cybern.
Haomin Ni, Shengli Xie, Pingping Xu, Xiaozhao Fang, Weijun Sun, Ribo Fang
2023 J jnl
IEEE Trans. Neural Networks Learn. Syst.
Jinshi Yu, Guoxu Zhou, Weijun Sun, Shengli Xie
2023 J jnl
Vis. Comput.
Zuyuan Yang, Huimin Zhang, Naiyao Liang, Zhenni Li, Weijun Sun
2023 J jnl
Sensors
Lingjiang Li, Maolin Li, Weijun Sun, Zhenni Li, Zuyuan Yang
2022 J jnl
Circuits Syst. Signal Process.
Haonan Huang, Zuyuan Yang, Zhenni Li, Weijun Sun
2022 conf
PRCV (1)
Peilin Yang, Yonghui Huang, Yuning Qiu, Weijun Sun, Guoxu Zhou
2022 J jnl
CoRR
Peilin Yang, Yonghui Huang, Yuning Qiu, Weijun Sun, Guoxu Zhou
2022 J jnl
IEEE Trans. Syst. Man Cybern. Syst.
Xiaozhao Fang, Lin Jiang, Na Han, Weijun Sun, Yong Xu, Shengli Xie
2022 J jnl
IEEE Access
Weiliang Zeng, Panlong Liu, Chao Yang, Weijun Sun, Yonghui Huang, Yu Han
2022 J jnl
Appl. Intell.
Xinhai Zhao, Yuyuan Yu, Guoxu Zhou, Qibin Zhao, Weijun Sun
2022 J jnl
CoRR
Peilin Yang, Weijun Sun, Qibin Zhao, Guoxu Zhou
2022 J jnl
Remote. Sens.
Jiake Wu, Weijun Sun, Baojuan Huai, Minghu Ding, Lei Wang, Yuzhe Wang, Junlong Zhang, Wentao Du, Jizu Chen, Xiang Qin
2022 J jnl
Remote. Sens.
Jiahang Che, Minghu Ding, Qinglin Zhang, Yetang Wang, Weijun Sun, Yuzhe Wang, Lei Wang, Baojuan Huai
2022 conf
FNC/MobiSPC/SEIT
Xiongjun Xu, Weijun Sun, Xiang Xia, Xingshuai Lu, Rong Yang, Haiyan Ma
2022 J jnl
Appl. Intell.
Mingyang Liu, Zuyuan Yang, Wei Han, Junhang Chen, Weijun Sun
2022 J jnl
Remote. Sens.
Wentao Du, Shichang Kang, Libing Qian, Youyan Jiang, Wenxuan Sun, Jizu Chen, Zhilong Xu, Weijun Sun, Xiang Qin, Xian Chai
2022 J jnl
CoRR
Yichun Qiu, Weijun Sun, Guoxu Zhou, Qibin Zhao
2021 J jnl
Appl. Intell.
Xichen Chen, Zuyuan Yang, Naiyao Liang, Zhenni Li, Weijun Sun
2021 J jnl
Int. J. Mach. Learn. Cybern.
Shanhua Zhan, Weijun Sun, Cuifeng Du, Weifang Zhong
2021 J jnl
CoRR
Xinhai Zhao, Yuyuan Yu, Guoxu Zhou, Qibin Zhao, Weijun Sun
2021 J jnl
Mach. Vis. Appl.
Xinpeng Zhang, Jigang Wu, Min Meng, Yifei Sun, Weijun Sun
2021 J jnl
Knowl. Based Syst.
Naiyao Liang, Zuyuan Yang, Zhenni Li, Shengli Xie, Weijun Sun
2020 J jnl
IEEE Access
Jinshi Yu, Weijun Sun, Yuning Qiu, Yonghui Huang
2020 J jnl
IEEE Access
Weijun Sun, Yiming Liu, Zhijia Zhao, Kan Xie, Shengli Xie
2020 conf
ICONIP (2)
Junwen Zhong, Weijun Sun, Qinyu Cai, Zhaowei Zhang, Zhekang Dong, Mingyu Gao
2020 J jnl
IEEE Access
Weiliang Zeng, Yu Han, Weijun Sun, Shengli Xie
2020 J jnl
Knowl. Based Syst.
Naiyao Liang, Zuyuan Yang, Zhenni Li, Weijun Sun, Shengli Xie
2020 conf
ICDM (Workshops)
Haonan Huang, Naiyao Liang, Wei Yan, Zuyuan Yang, Zhenni Li, Weijun Sun
2020 J jnl
CoRR
Haonan Huang, Naiyao Liang, Wei Yan, Zuyuan Yang, Weijun Sun
2019 J jnl
CoRR
Jinshi Yu, Weijun Sun, Yuning Qiu, Shengli Xie
2019 conf
ISPA/BDCloud/SocialCom/SustainCom
Yifei Sun, Jigang Wu, Long Chen, Tonglai Liu, Mianyang Yao, Weijun Sun
2019 J jnl
Int. J. Mach. Learn. Cybern.
Weijun Sun, Shengli Xie, Na Han
2018 conf
APSIPA
Yali Feng, Guoxu Zhou, Yuning Qiu, Weijun Sun
2018 J jnl
Complex.
Xin Chen, Zuyuan Yang, Chao Yang, Kan Xie, Weijun Sun, Shengli Xie
2017 conf
ICONIP (6)
Bensheng Lyu, Kan Xie, Weijun Sun
2017 B conf
ICIP
Chunchen Su, Zongze Wu, Ming Yin, Kaixin Li, Weijun Sun
2012 J jnl
J. Softw.
Yuqing Yan, Shixian Li, Weijun Sun
2011 Misc conf
ICNC
Weijun Sun, Xiqiang Zhao
2011 Misc conf
ICNC
Xiqiang Zhao, Weijun Sun
2008 J jnl
Appl. Math. Comput.
Shuangshuang Ding, Weijun Sun, Danchen Zhu
2008 conf
IGARSS (4)
Jianxi Huang, Qiang Hu, Weijun Sun, Feng Mao, Wensheng Zhou
2008 conf
IGARSS (3)
Wensheng Zhou, Feng Mao, Zhihua Tang, Weijun Sun
2008 conf
IGARSS (1)
Qiang Hu, Feng Mao, Jianxi Huang, Weijun Sun, Qiang Li, Wensheng Zhou
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"