Kanoksak Wattanachote

24 papers B 3C 1Journal 14Unranked 6
YearRankTypeTitle / Venue / Authors
2026 J jnl
Discov. Artif. Intell.
Kanoksak Wattanachote, Chih-Yang Lin, Shao-En Hsu, Timothy K. Shih
2024 J jnl
IEEE Trans. Circuits Syst. Video Technol.
Junbin Yuan, Aiqing Zhu, Qingzhen Xu, Kanoksak Wattanachote, Yongyi Gong
2024 J jnl
Neural Comput. Appl.
Junbin Yuan, Lifang Xiao, Kanoksak Wattanachote, Qingzhen Xu, Xiaonan Luo, Yongyi Gong
2023 conf
ICSLT
Junkai Hong, Kanoksak Wattanachote, Hai Wang, Kexin Li
2022 J jnl
Appl. Intell.
Junbin Yuan, Jinhui Wei, Kanoksak Wattanachote, Kun Zeng, Xiaonan Luo, Qingzhen Xu, Yongyi Gong
2022 J jnl
IET Image Process.
M. Zhu, Kun Zeng, Ge Lin, Yongyi Gong, T. Hao, Kanoksak Wattanachote, Xiaonan Luo
2021 J jnl
ACM Trans. Asian Low Resour. Lang. Inf. Process.
Nankai Lin, Boyu Chen, Xiaotian Lin, Kanoksak Wattanachote, Shengyi Jiang
2021 J jnl
CoRR
Xiaotian Lin, Nankai Lin, Kanoksak Wattanachote, Shengyi Jiang, Lianxi Wang
2021 J jnl
ACM Trans. Multim. Comput. Commun. Appl.
Kun Zeng, Jiangchuan Hu, Yongyi Gong, Kanoksak Wattanachote, Runpeng Yu, Xiaonan Luo
2020 J jnl
IEEE Access
Guangyi Huang, Yongyi Gong, Qingzhen Xu, Kanoksak Wattanachote, Kun Zeng, Xiaonan Luo
2020 B conf
ICIP
Jiangchuan Hu, Kun Zeng, Kanoksak Wattanachote, Yongyi Gong
2020 J jnl
IEEE Trans. Multim.
Yongzhe Xu, Jiangchuan Hu, Kanoksak Wattanachote, Kun Zeng, Yongyi Gong
2019 J jnl
ACM Trans. Multim. Comput. Commun. Appl.
Yongyi Gong, Shangru Li, Kanoksak Wattanachote, Xiaonan Luo
2018 conf
ICIT
Gongliang Wang, Zhenguo Yang, Junhong Chen, Kanoksak Wattanachote, Wenyin Liu
2018 conf
IntelliSys (1)
Kanoksak Wattanachote, Yongyi Gong, Wenyin Liu, Yong Wang
2017 B conf
AINA
Kanoksak Wattanachote, Yong Wang, Timothy K. Shih, Hui-Huang Hsu, Wenyin Liu
2017 C conf
ICVS
Kanoksak Wattanachote, Zehang Lin, Mingchao Jiang, Liuwu Li, Gongliang Wang, Wenyin Liu
2016 J jnl
IEEE Trans. Circuits Syst. Video Technol.
Kanoksak Wattanachote, Timothy K. Shih
2015 J jnl
Int. J. Distance Educ. Technol.
W. G. C. W. Kumara, Kanoksak Wattanachote, Batbaatar Battulga, Timothy K. Shih, Wu-Yuin Hwang
2015 J jnl
IEEE Trans. Inf. Forensics Secur.
Kanoksak Wattanachote, Timothy K. Shih, Wen-Lung Chang, Hon-Hang Chang
2013 conf
UIC/ATC
Guangyu Piao, Qun Jin, Xiaokang Zhou, Shoji Nishimura, Kanoksak Wattanachote, Timothy K. Shih, Neil Y. Yen
2013 conf
ICWL Workshops
Wu-Yuin Hwang, Kanoksak Wattanachote, Timothy K. Shih, Shih-Ching Yeh, Shi-Yi Zhan
2012 B conf
AINA
Joseph C. Tsai, Timothy K. Shih, Kanoksak Wattanachote, Kuan-Ching Li
2011 conf
IMIS
Hsing-Chung Chen, Kanoksak Wattanachote
redb/extractors/apk_extractors/apk_native_libs.py
← Index redb/extractors/apk_extractors/apk_native_libs.py python
import fnmatch
import hashlib
import inspect
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 APKNativeLib

# Known packer/protector native library names
KNOWN_PACKER_LIBS = {
    # Jiagu (360/Qihoo)
    "libjiagu.so", "libjiagu_a64.so", "libjiagu_x86.so", "libjiagu_x64.so",
    # Bangcle/SecNeo
    "libsecexe.so", "libsecmain.so", "libSecShell.so",
    # Baidu
    "libbaiduprotect.so",
    # Tencent (Legu)
    "libtxAppProtect.so", "libBugly.so",
    # iJiami
    "libexec.so", "libexecmain.so",
    # Alibaba
    "libmobisec.so", "libaliprotect.so",
    # APKProtect
    "libAPKProtect.so",
    # Pangxie (Pangolin)
    "libdexjni.so",
    # DexProtector
    "libdexprotector.so",
    # AppSolid
    "libAppSolid.so",
    # Kiwisec
    "libkwscmm.so",
    # DingXiang
    "libx3g.so",
    # NQ Shield
    "libnqshield.so",
    # Generic / other
    "libprotectClass.so",
    "libDexHelper.so",
    "libdexloader.so",
    "libfdog.so",
}

# Glob-style patterns for packer libs (e.g. libshella-*.so)
KNOWN_PACKER_PATTERNS = [
    "libshella-*.so",
    "libshell-super.*.so",
]


def is_known_packer_lib(filename):
    """Check if a native library filename matches known packer signatures."""
    if filename in KNOWN_PACKER_LIBS:
        return True
    for pattern in KNOWN_PACKER_PATTERNS:
        if fnmatch.fnmatch(filename, pattern):
            return True
    return False


class APKNativeLibExtractor(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.native_libs = []
        self.abis = set()
        self.log.debug(inspect.currentframe().f_code.co_name)

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

    def extract(self):
        if not self._is_valid_apk():
            self.log.error(f"Invalid APK for {self.hash.sha256}")
            return None

        self.native_libs = []
        self.abis = set()

        zf = self._get_zip_file()
        if not zf:
            return None

        with zf:
            for info in zf.infolist():
                if not (info.filename.startswith("lib/") and info.filename.endswith(".so")):
                    continue
                parts = info.filename.split("/")
                if len(parts) < 3:
                    continue

                abi = parts[1]
                filename = parts[-1]
                self.abis.add(abi)

                try:
                    data = zf.read(info.filename)
                    lib_sha256 = hashlib.sha256(data).hexdigest()
                except Exception as e:
                    self.log.warning(f"Error reading native lib {info.filename}: {e}")
                    continue

                self.native_libs.append(APKNativeLib(
                    abi=abi,
                    filename=filename,
                    size=info.file_size,
                    sha256=lib_sha256,
                    is_known_packer=is_known_packer_lib(filename),
                ))

        if not self.native_libs:
            return None

        return {
            "native_lib_count": len(self.native_libs),
            "abis": sorted(self.abis),
            "native_libs": self.native_libs,
            "known_packer_libs": [
                lib for lib in self.native_libs if lib.is_known_packer
            ],
        }

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

            current_time = datetime.now(timezone.utc)
            data = []
            for lib in self.native_libs:
                data.append([
                    self.sha256,
                    lib.abi,
                    lib.filename,
                    lib.size,
                    lib.sha256,
                    int(lib.is_known_packer),
                    current_time,
                ])

            column_names = [
                'sha256', 'lib_abi', 'lib_filename', 'lib_size',
                'lib_sha256', 'lib_is_known_packer', 'analysis_date',
            ]

            column_type_names = [
                'FixedString(64)', 'LowCardinality(String)', 'String', 'UInt64',
                'FixedString(64)', 'UInt8', "DateTime64(3, 'UTC')",
            ]

            return (data, column_names, column_type_names)

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