Neil Charness

33 papers Misc 1Journal 18Unranked 14
YearRankTypeTitle / Venue / Authors
2022 J jnl
Inf. Process. Manag.
Zhe He, Shubo Tian, Ankita Singh, Shayok Chakraborty, Shenghao Zhang, Mia Liza A. Lustria, Neil Charness, Nelson A. Roque, Erin Harrell, Walter R. Boot
2022 J jnl
CoRR
Zhe He, Shubo Tian, Arslan Erdengasileng, Neil Charness, Jiang Bian
2021 conf
CHI Extended Abstracts
Sayan Sarcar, Cosmin Munteanu, Neil Charness, Jussi Jokinen, Xiangshi Ren, Emma Nicol
2021 J jnl
Frontiers Virtual Real.
Jennifer A. Margrett, Kaitlyn Michelle Ouverson, Stephen B. Gilbert, L. Alison Phillips, Neil Charness
2020 J jnl
Hum. Factors
Dustin J. Souders, Neil Charness, Nelson A. Roque, Hellen Pham
2020 conf
CHI Extended Abstracts
Sayan Sarcar, Cosmin Munteanu, Jussi Jokinen, Neil Charness, Mark D. Dunlop, Xiangshi Ren, Jenny Waycott
2019 Misc conf
AMIA
Qian Li, Zhe He, Yi Guo, Hansi Zhang, Thomas J. George, William R. Hogan, Neil Charness, Jiang Bian
2019 J jnl
ACM Trans. Access. Comput.
Joseph Sharit, Jerad H. Moxley, Walter R. Boot, Neil Charness, Wendy A. Rogers, Sara J. Czaja
2018 conf
CHI Extended Abstracts
Sayan Sarcar, Cosmin Munteanu, Jussi Jokinen, Antti Oulasvirta, Neil Charness, Mark D. Dunlop, Xiangshi Ren
2017 conf
CHI Extended Abstracts
Sayan Sarcar, Cosmin Munteanu, Jussi P. P. Jokinen, Antti Oulasvirta, Chaklam Silpasuwanchai, Neil Charness, Mark D. Dunlop, Xiangshi Ren
2017 J jnl
Top. Cogn. Sci.
Neil Charness
2016 conf
HCI (25)
Cary Stothart, Walter R. Boot, Daniel J. Simons, Neil Charness, Timothy Wright
2016 conf
BHI
Zhe He, Neil Charness, Jiang Bian, William R. Hogan
2016 conf
HCI (25)
Dustin J. Souders, Neil Charness
2016 conf
HCI (25)
Walter R. Boot, Kimberly Barajas, Ainsley Mitchum, Cary Stothart, Neil Charness
2016 conf
HCI (25)
Walter R. Boot, Joseph Sharit, Sara J. Czaja, Neil Charness, Wendy A. Rogers
2016 J jnl
Games Cult.
Dustin J. Souders, Walter R. Boot, Neil Charness, Jerad H. Moxley
2016 J jnl
Univers. Access Inf. Soc.
Tracy L. Mitzner, Wendy A. Rogers, Arthur D. Fisk, Walter R. Boot, Neil Charness, Sara J. Czaja, Joseph Sharit
2016 conf
CHI Extended Abstracts
Neil Charness, Mark D. Dunlop, Cosmin Munteanu, Emma Nicol, Antti Oulasvirta, Xiangshi Ren, Sayan Sarcar, Chaklam Silpasuwanchai
2016 conf
HCI (25)
Nelson A. Roque, Walter R. Boot, Neil Charness, Kimberly Barajas, Jared Dirghalli, Ainsley Mitchum
2016 conf
HCI (24)
Walter R. Boot, Dustin J. Souders, Neil Charness, Kenneth Blocker, Nelson A. Roque, Thomas Vitale
2015 conf
HCI (25)
Tracy L. Mitzner, Neil Charness, Wendy A. Rogers
2015 conf
HCI (26)
Ryan Best, Dustin J. Souders, Neil Charness, Tracy L. Mitzner, Wendy A. Rogers
2010 J jnl
Comput. Hum. Behav.
Tracy L. Mitzner, Julie B. Boron, Cara Bailey Fausset, Anne Edith Adams, Neil Charness, Sara J. Czaja, Katinka Dijkstra, Arthur D. Fisk, Wendy A. Rogers, Joseph Sharit
2008 J jnl
Hum. Factors
Neil Charness
2008 J jnl
Hum. Factors
Neil Charness, Michael Tuffiash
2007 J jnl
Hum. Factors
Roy W. Roring, Franklin G. Hines, Neil Charness
2006 J jnl
Hum. Factors
Roy W. Roring, Franklin G. Hines, Neil Charness
2005 J jnl
Univers. Access Inf. Soc.
Tiffany S. Jastrzembski, Neil Charness, Patricia Holley, Jeffrey Feddon
2004 J jnl
Hum. Factors
Neil Charness, Patricia Holley, Jeffrey Feddon, Tiffany S. Jastrzembski
1999 J jnl
Hum. Factors
Neil Charness, Katinka Dijkstra
1998 J jnl
Int. J. Hum. Comput. Interact.
Catherine Kelley, Elizabeth A. Bosman, Neil Charness, Melvin A. Mottram
1995 J jnl
Behav. Inf. Technol.
Catherine Kelley, Neil Charness
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"