Insu Song

49 papers A 2B 11C 2Journal 12Unranked 20
YearRankTypeTitle / Venue / Authors
2026 J jnl
Comput. Secur.
Aditya Subash, Insu Song, Ickjai Lee, Kyungmi Lee
2026 J jnl
Digit. Appl. Archaeol. Cult. Heritage
V. Sithira Vadivel, Insu Song, Abhishek Singh Bhati
2025 conf
ICAART (3)
Aditya Subash, Insu Song, Ickjai Lee, Kyungmi Lee
2025 J jnl
EURASIP J. Inf. Secur.
Aditya Subash, Insu Song, Ickjai Lee, Kyungmi Lee
2024 J jnl
SN Comput. Sci.
Yi Huang, Insu Song
2024 conf
SAI (4)
Bah Tee Eng, Insu Song
2022 conf
HCI (42)
Sithira Vadivel, Insu Song, Abhishek Singh Bhati
2021 C conf
ICEC
Sithira Vadivel, Insu Song, Abhishek Singh Bhati
2021 conf
PRICAI (1)
Insu Song, Yi Huang, Tieh Hee Hai Guan Koh, Victor Samuel Rajadurai
2020 conf
SAI (1)
Bah Tee Eng, Insu Song, Chaw Suu Htet Nwe, Tian Liang Yi
2019 conf
ICBBE
Yi Huang, Insu Song
2019 J jnl
Int. J. Emerg. Technol. Learn.
Abhishek Singh Bhati, Insu Song
2017 B conf
IJCNN
Yi Huang, Insu Song, Priyanka Rana, Guan Koh
2017 conf
ICISA
Sithira Vadivel, Insu Song, Abhishek Singh Bhati
2016 B conf
IJCNN
Thanh Tam Nguyen, Insu Song
2016 conf
ICCNS
Harsha Mittemari Rajesh, Insu Song
2016 B conf
IJCNN
Thanh Tam Nguyen, Insu Song
2016 conf
ACIIDS (1)
Thi Hoang Yen Ho, Thanh Tam Nguyen, Insu Song
2015 B conf
IJCNN
Insu Song
2015 conf
ICONIP (3)
Insu Song
2014 B conf
ICALT
Insu Song, Abhishek Singh Bhati
2014 J jnl
Neurocomputing
Baiying Lei, Shah Atiqur Rahman, Insu Song
2014 J jnl
Expert Syst. Appl.
Shah Atiqur Rahman, Insu Song, Maylor K. H. Leung, Ickjai Lee, Kyungmi Lee
2013 conf
SoCPaR
Insu Song, John Vong
2013 conf
ICITCS
Insu Song, John Vong
2013 conf
ICITCS
Insu Song, John Vong
2013 J jnl
J. Artif. Intell. Soft Comput. Res.
Insu Song, John Vong, Nguwi Yok Yen, Joachim Diederich, Peter Yellowlees
2013 conf
CICARE
Insu Song, Nguwi Yok Yen, John Vong, Joachim Diederich, Peter Yellowlees
2013 J jnl
J. Syst. Softw.
Baiying Lei, Insu Song, Shah Atiqur Rahman
2012 ed.
PRIMA Workshops
Stephen Cranefield, Insu Song
2012 J jnl
IEEE Trans. Inf. Technol. Biomed.
Insu Song, Nigel V. Marsh
2012 J jnl
Int. J. Inf. Syst. Chang. Manag.
John Vong, Jeff Fang, Insu Song
2012 B conf
IJCNN
Shah Atiqur Rahman, Insu Song, Maylor K. H. Leung
2012 B conf
IJCNN
Baiying Lei, Insu Song, Shah Atiqur Rahman
2011 B conf
PRIMA
Insu Song, Denise Dillon, Tze Jui Goh, Min Sung
2011 B conf
CogSci
Insu Song, Denise Dillon
2010 C conf
ICARCV
Insu Song, Guido Governatori, Joachim Diederich
2010 conf
ICONIP (1)
Insu Song, Joachim Diederich
2010 J jnl
Aust. J. Intell. Inf. Process. Syst.
Yok-Yen Nguwi, Teik-Toe Teoh, Insu Song, Siu-Yeung Cho
2007 B conf
PRIMA
Mehdi Dastani, Guido Governatori, Antonino Rotolo, Insu Song, Leendert W. N. van der Torre
2007 A conf
AAMAS
Mehdi Dastani, Guido Governatori, Antonino Rotolo, Insu Song, Leendert W. N. van der Torre
2007
Insu Song
2006 conf
STAIRS
Insu Song, Guido Governatori
2006 B conf
PRICAI
Insu Song, Guido Governatori
2006 A conf
AAMAS
Insu Song, Guido Governatori
2006 conf
Australian Conference on Artificial Intelligence
Insu Song, Guido Governatori
2005 conf
RuleML
Insu Song, Guido Governatori
2004 conf
Australian Conference on Artificial Intelligence
Insu Song, Guido Governatori, Robert M. Colomb
2003 conf
Australian Conference on Artificial Intelligence
Insu Song, Pushkar Piggott
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"