Ole J. Mengshoel

104 papers A* 6A 8B 9Misc 3Journal 34Unranked 39
YearRankTypeTitle / Venue / Authors
2024 J jnl
Frontiers Big Data
Shanmuga Venkatachalam, Harideep Nair, Ming Zeng, Cathy Tan, Ole J. Mengshoel, John Paul Shen
2024 J jnl
Inf. Sci.
Jianpeng Chen, Yujing Wang, Ming Zeng, Zongyi Xiang, Bitan Hou, Tong Yu, Ole J. Mengshoel, Yazhou Ren
2024 conf
SCAI
Erling Olweus, Ole J. Mengshoel
2024 conf
SCAI
Jan-Marius Vatle, Bjørn-Olav H. Eriksen, Ole J. Mengshoel
2022 J jnl
Frontiers Big Data
Shanmuga Venkatachalam, Harideep Nair, Ming Zeng, Cathy Tan, Ole J. Mengshoel, John Paul Shen
2020 J jnl
J. Artif. Intell. Res.
Ritchie Lee, Ole J. Mengshoel, Anshu Saksena, Ryan W. Gardner, Daniel Genin, Joshua Silbermann, Michael P. Owen, Mykel J. Kochenderfer
2020 A* conf
ICML
Tong Yu, Branislav Kveton, Zheng Wen, Ruiyi Zhang, Ole J. Mengshoel
2020 J jnl
CoRR
Tong Yu, Branislav Kveton, Zheng Wen, Ruiyi Zhang, Ole J. Mengshoel
2019 conf
UbiComp/ISWC Adjunct
Harideep Nair, Cathy Tan, Ming Zeng, Ole J. Mengshoel, John Paul Shen
2019 J jnl
CoRR
Bitan Hou, Yujing Wang, Ming Zeng, Shan Jiang, Ole J. Mengshoel, Yunhai Tong, Jing Bai
2018 J jnl
CoRR
Ritchie Lee, Ole J. Mengshoel, Anshu Saksena, Ryan W. Gardner, Daniel Genin, Joshua Silbermann, Michael P. Owen, Mykel J. Kochenderfer
2018 J jnl
CoRR
Aniruddha Basak, Kamalika Das, Ole J. Mengshoel
2018 B conf
DSAA
Anshu Rajendra, Ritwik Rajendra, Ole J. Mengshoel, Ming Zeng, Momina Haider
2018 A* conf
AAAI
Bing Liu, Tong Yu, Ian R. Lane, Ole J. Mengshoel
2018 conf
AAAI Workshops
Tong Yu, Shijia Pan, Susu Xu, Xinlei Chen, Mostafa Mirshekari, Jonathon Fagert, Hae Young Noh, Pei Zhang, Ole J. Mengshoel
2018 conf
UbiComp/ISWC Adjunct
Ming Zeng, Tong Yu, Ole J. Mengshoel, Helen Qin, Chris Lee, John Paul Shen
2018 A conf
SDM
Ritchie Lee, Mykel J. Kochenderfer, Ole J. Mengshoel, Joshua Silbermann
2018 B conf
CLOUD
Zhou Fang, Mulong Luo, Tong Yu, Ole J. Mengshoel, Mani B. Srivastava, Rajesh K. Gupta
2018 J jnl
J. Vis. Lang. Comput.
Severino F. Galán, Ole J. Mengshoel
2018 conf
DARE@PKDD/ECML
Ole J. Mengshoel, Priya Krishnan Sundararajan, Erik Reed, Dongzhen Piao, Briana Johnson
2018 J jnl
CoRR
Ming Zeng, Tong Yu, Xiao Wang, Le T. Nguyen, Ole J. Mengshoel, Ian R. Lane
2018 conf
ECML/PKDD (2)
Tong Yu, Branislav Kveton, Zheng Wen, Hung Bui, Ole J. Mengshoel
2018 conf
ICBK
Xiaoyi Fu, Xinqi Ren, Ole J. Mengshoel, Xindong Wu
2018 J jnl
CoRR
Ming Zeng, Haoxiang Gao, Tong Yu, Ole J. Mengshoel, Helge Langseth, Ian R. Lane, Xiaobing Liu
2018 Misc conf
UbiComp
Ming Zeng, Haoxiang Gao, Tong Yu, Ole J. Mengshoel, Helge Langseth, Ian R. Lane, Xiaobing Liu
2018 B conf
DSAA
Aniruddha Basak, Ole J. Mengshoel, Kevin M. Schmidt, Chinmay Kulkarni
2017 B conf
SMC
Charlie Wang, Arpita Agrawal, Xiaojun Li, Tanima Makkad, Ejaz Veljee, Ole J. Mengshoel, Alvin Jude
2017 J jnl
CoRR
Bing Liu, Tong Yu, Ian R. Lane, Ole J. Mengshoel
2017 J jnl
Proc. ACM Interact. Mob. Wearable Ubiquitous Technol.
Shijia Pan, Tong Yu, Mostafa Mirshekari, Jonathon Fagert, Amelie Bonde, Ole J. Mengshoel, Hae Young Noh, Pei Zhang
2017 J jnl
CoRR
Ritchie Lee, Mykel J. Kochenderfer, Ole J. Mengshoel, Joshua Silbermann
2017 conf
SoCC
Zhou Fang, Mulong Luo, Tong Yu, Ole J. Mengshoel, Mani B. Srivastava, Rajesh K. Gupta
2017 ch.
Self-Aware Computing Systems
Nikolas Herbst, Ayman A. Amin, Artur Andrzejak, Lars Grunske, Samuel Kounev, Ole J. Mengshoel, Priya Krishnan Sundararajan
2017 A conf
GECCO
Aniruddha Basak, Ole J. Mengshoel, Chinmay Kulkarni, Kevin M. Schmidt, Prathi Shastry, Rao Rapeta
2017 A conf
CIKM
Zhou Fang, Tong Yu, Ole J. Mengshoel, Rajesh K. Gupta
2017 ch.
Self-Aware Computing Systems
Martina Maggio, Tarek F. Abdelzaher, Lukas Esterle, Holger Giese, Jeffrey O. Kephart, Ole J. Mengshoel, Alessandro Vittorio Papadopoulos, Anders Robertsson, Katinka Wolter
2017 ch.
Self-Aware Computing Systems
Alexandru Iosup, Xiaoyun Zhu, Arif Merchant, Eva Kalyvianaki, Martina Maggio, Simon Spinner, Tarek F. Abdelzaher, Ole J. Mengshoel, Sara Bouchenak
2017 conf
IEEE BigData
Ming Zeng, Tong Yu, Xiao Wang, Le T. Nguyen, Ole J. Mengshoel, Ian R. Lane
2017 J jnl
CoRR
Tong Yu, Branislav Kveton, Zheng Wen, Hung Bui, Ole J. Mengshoel
2017 ch.
Self-Aware Computing Systems
Radu Calinescu, Marco Autili, Javier Cámara, Antinisca Di Marco, Simos Gerasimou, Paola Inverardi, Alexander Perucci, Nils Jansen, Joost-Pieter Katoen, Marta Z. Kwiatkowska, Ole J. Mengshoel, Romina Spalazzese, Massimo Tivoli
2017 conf
ECML/PKDD (1)
Tong Yu, Branislav Kveton, Ole J. Mengshoel
2017 conf
WISEC
Xiao Wang, Tong Yu, Ole J. Mengshoel, Patrick Tague
2016 conf
Probabilistic Graphical Models
Priya Krishnan Sundararajan, Ole J. Mengshoel
2016 conf
MobiCASE
Tong Yu, Yong Zhuang, Ole J. Mengshoel, Osman Yagan
2016 conf
AAAI Workshop: AI for Smart Grids and Smart Buildings
Aniruddha Basak, Ole J. Mengshoel, Stefan Hosein, Rodney Martin, Jayasudha Jayakumaran, Mario Gurrola Morga, Ishwari Aghav
2016 conf
IEEE BigData
Tong Yu, Ole J. Mengshoel, Alvin Jude, Eugen Feller, Julien Forgeat, Nimish Radia
2016 A* conf
IJCAI
Ole J. Mengshoel, Youssef Ahres, Tong Yu
2016 conf
AAAI Workshop: AI for Smart Grids and Smart Buildings
Aniruddha Basak, Ole J. Mengshoel, Stefan Hosein, Rodney Martin
2016 J jnl
CoRR
Alexandru Iosup, Xiaoyun Zhu, Arif Merchant, Eva Kalyvianaki, Martina Maggio, Simon Spinner, Tarek F. Abdelzaher, Ole J. Mengshoel, Sara Bouchenak
2016 conf
ECML/PKDD (1)
Dipan K. Pal, Ole J. Mengshoel
2015 B conf
CLOUD
Priya Krishnan Sundararajan, Eugen Feller, Julien Forgeat, Ole J. Mengshoel
2014 conf
MobiCASE
Ming Zeng, Xiao Wang, Le T. Nguyen, Pang Wu, Ole J. Mengshoel, Joy Zhang
2014 J jnl
Inf. Sci.
Ole J. Mengshoel, Severino F. Galán, Antonio de Dios
2014 conf
BMA@UAI
Erik Reed, Ole J. Mengshoel
2014 conf
CompIMAGE
Dongzhen Piao, Prahlad G. Menon, Ole J. Mengshoel
2014 conf
MobiCASE
Ming Zeng, Le T. Nguyen, Bo Yu, Ole J. Mengshoel, Jiang Zhu, Pang Wu, Joy Zhang
2014 conf
GECCO (Companion)
Eric Yawei Chen, Lin-Shung Huang, Ole J. Mengshoel, Jason D. Lohn
2014 conf
CompIMAGE
Stephen Kruzick, Ole J. Mengshoel, Prahlad G. Menon
2014 J jnl
Int. J. Approx. Reason.
Brian Ricks, Ole J. Mengshoel
2014 A conf
GECCO
Jun Shi, Ole J. Mengshoel, Dipan K. Pal
2013 J jnl
Evol. Comput.
Severino F. Galán, Ole J. Mengshoel, Rafael Pinter
2013 conf
Feedback Computing
Erik Reed, Abe Ishihara, Ole J. Mengshoel
2013 conf
UAI Application Workshops
Lu Zheng, Ole J. Mengshoel
2013 conf
UAI Application Workshops
Feng-Tso Sun, Yi-Ting Yeh, Ole J. Mengshoel, Martin L. Griss
2013 conf
Feedback Computing
Ole J. Mengshoel, Bob Iannucci, Abe Ishihara
2013 Misc conf
Visualization and Data Analysis
Michele Cossalter, Ole J. Mengshoel, Ted Selker
2013 Misc conf
Visualization and Data Analysis
Priya Krishnan Sundararajan, Ole J. Mengshoel, Ted Selker
2013 A* conf
KDD
Lu Zheng, Ole J. Mengshoel
2013 ed.
UAI Application Workshops
Russell G. Almond, Ole J. Mengshoel
2013 J jnl
Innov. Syst. Softw. Eng.
Johann Schumann, Timmy Mbaya, Ole J. Mengshoel, Knot Pipatsrisawat, Ashok N. Srivastava, Arthur Choi, Adnan Darwiche
2012 conf
BigMine
Aniruddha Basak, Irina Brinster, Xianheng Ma, Ole J. Mengshoel
2012 A conf
AISTATS
Avneesh Singh Saluja, Priya Krishnan Sundararajan, Ole J. Mengshoel
2012 J jnl
CoRR
Lu Zheng, Ole J. Mengshoel, Jike Chong
2012 conf
BMA
Ole J. Mengshoel, Abe Ishihara, Erik Reed
2012 J jnl
AI Mag.
Noa Agmon, Vikas Agrawal, David W. Aha, Yiannis Aloimonos, Donagh Buckley, Prashant Doshi, Christopher W. Geib, Floriana Grasso, Nancy L. Green, Benjamin Johnston, Burt Kaliski, Christopher Kiekintveld, Edith Law, Henry Lieberman, Ole J. Mengshoel, Ted Metzler, Joseph Modayil, Douglas W. Oard, Nilufer Onder, Barry O'Sullivan, Katerina Pastra, Doina Precup, Sowmya Ramachandran, Chris Reed, Sanem Sariel Talay, Ted Selker, Lokendra Shastri, Stephen F. Smith, Satinder Singh, Siddharth Srivastava, Gita Sukthankar, David C. Uthus, Mary-Anne Williams
2011 A conf
UAI
Lu Zheng, Ole J. Mengshoel, Jike Chong
2011 J jnl
IEEE Trans. Knowl. Data Eng.
Ole J. Mengshoel, David C. Wilkins, Dan Roth
2011 conf
Scalable Integration of Analytics and Visualization
Priya Krishnan Sundararajan, Ole J. Mengshoel, Ted Selker
2011 J jnl
J. Autom. Reason.
Ole J. Mengshoel, Dan Roth, David C. Wilkins
2011 conf
Scalable Integration of Analytics and Visualization
Michele Cossalter, Ole J. Mengshoel, Ted Selker
2010 A conf
GECCO
Severino F. Galán, Ole J. Mengshoel
2010 conf
MobiCASE
Bruce DeBruhl, Michele Cossalter, Roy Want, Ole J. Mengshoel, Pei Zhang
2010 J jnl
IEEE Trans. Syst. Man Cybern. Part A
Ole J. Mengshoel, Mark Chavira, Keith Cascio, Scott Poll, Adnan Darwiche, N. Serdar Uckun
2010 conf
FoSER
Johann Schumann, Ole J. Mengshoel, Ashok N. Srivastava, Adnan Darwiche
2010 J jnl
Artif. Intell.
Ole J. Mengshoel
2010 B conf
RV
Johann Schumann, Ashok N. Srivastava, Ole J. Mengshoel
2009 J jnl
Evol. Comput.
Severino F. Galán, Ole J. Mengshoel
2008 A* conf
AAAI
Ole J. Mengshoel, Adnan Darwiche, Keith Cascio, Mark Chavira, Scott Poll, N. Serdar Uckun
2008 J jnl
Evol. Comput.
Ole J. Mengshoel, David E. Goldberg
2008 J jnl
Artif. Intell.
Ole J. Mengshoel
2007 A* conf
AAAI
Ole J. Mengshoel
2006 J jnl
Artif. Intell.
Ole J. Mengshoel, David C. Wilkins, Dan Roth
2003 A conf
IUI
Corinne Clinton Ruokangas, Ole J. Mengshoel
2000 B conf
SMC
Caroline C. Hayes, Robin R. Penner, Hakan Ergan, Li Lu, Nan Tu, Patricia M. Jones, Peter Asaro, Robin Bargar, Oleksandr Chernyshenko, Insook Choi, Nora Danner, Ole J. Mengshoel, Janet A. Sniezek, David C. Wilkins
1998 B conf
SMC
Patricia M. Jones, Caroline C. Hayes, David C. Wilkins, Robin Bargar, Janet A. Sniezek, Peter Asaro, Ole J. Mengshoel, D. Kessler, Martin J. Lucenti Jr., Insook Choi, Nan Tu, J. L. Schlabach
1998 conf
Evolutionary Programming
Ole J. Mengshoel, David C. Wilkins
1997 conf
AAAI/IAAI
Ole J. Mengshoel
1997 J jnl
Comput. Educ.
Carol Hubbard, Ole J. Mengshoel, Chris Moon, Yong Se Kim
1996 J jnl
Artif. Intell. Eng. Des. Anal. Manuf.
Ole J. Mengshoel, Sanjeev Chauhan, Yong Se Kim
1996 conf
ICMCS
Carol Hubbard, Ole J. Mengshoel, Chris Moon, Yong Se Kim
1996 conf
Agent Modeling
Ole J. Mengshoel, David C. Wilkins
1995 J jnl
Int. J. Hum. Comput. Stud.
Ole J. Mengshoel
1993 B conf
EKAW
Ole J. Mengshoel, Ingeborg Sølvberg
1993 J jnl
IEEE Expert
Ole J. Mengshoel
1991 conf
EUROVAV
Ole J. Mengshoel
APK_FEATURES_PDD.md
← Index APK_FEATURES_PDD.md markdown
# APK Extractor — Product Design Document

**Author:** Engineering Team
**Date:** 2026-02-21
**Status:** Draft
**Target:** redb ingestor pipeline

---

## 1. Overview

This document describes the design for adding APK (Android Package) static analysis to the redb ingestor pipeline. The APK extractor will follow the same architecture used by the existing PE, ELF, and Mach-O extractors: a format-specific base class (`APKExtractor`) with specialized sub-extractors for each analysis dimension.

### 1.1 Goals

- Extract comprehensive static metadata from Android APK files, comparable in depth to our PE/ELF/Mach-O analysis
- Follow the established extractor architecture (base class, sub-extractors, dataclasses, dual-export to Elasticsearch and ClickHouse)
- Enable clustering, hunting, and pivoting on APK-specific fields (permissions, certificates, DEX API usage, package names)
- Integrate with the existing format-agnostic extractors (BasicProperties, Hashes, DIE, CAPA, YARA, Strings, IOC)

### 1.2 Non-Goals

- Dynamic analysis / sandbox execution (out of scope)
- Full DEX decompilation to Java/smali (out of scope; may be a future extension)
- Deep analysis of embedded native `.so` libraries (inventory only; full ELF pipeline deferred)
- Recursive ingestion of APKs embedded inside other APKs (flag only; full recursive ingestion deferred)

---

## 2. Background

### 2.1 What Is an APK

An APK is a ZIP archive containing an Android application. Its internal structure:

| Path | Contents |
|------|----------|
| `AndroidManifest.xml` | Binary Android XML — package name, permissions, components, SDK versions, intent filters |
| `classes.dex` (+ `classes2.dex`, ...) | Dalvik bytecode — compiled Java/Kotlin code |
| `resources.arsc` | Compiled resource table (strings, dimensions, styles) |
| `res/` | Layouts, drawables, raw resources |
| `lib/<abi>/` | Native shared libraries (`.so`) per CPU architecture |
| `META-INF/` | JAR signing (v1 scheme), CERT.RSA/DSA certificates |
| `assets/` | Arbitrary files bundled by the developer |

### 2.2 Current State

The ingestor already detects APK files via Magika (`ingestor.py:1668`), but the handler is a no-op — it logs `"APK file detected"` and returns without running any extractors. All infrastructure for registration, dispatch, and export is already in place.

### 2.3 Industry Reference

This design was informed by analysis of existing platforms:

- **VirusTotal** — Extracts: hashes (MD5, SHA-1, SHA-256, SSDEEP, TLSH, Permhash), Android metadata (package name, SDK versions, main activity), certificate attributes, permissions with danger flags, full component lists (activities, services, receivers, providers), intent filters, and capability indicators ("performs reflection calls", "makes use of telephony related APIs")
- **Koodous** (https://docs.koodous.com/) — Powered by Androguard for static analysis. Extracts: package name, app name, activities, services, receivers, providers, permissions, intent filters, certificate (SHA-1, issuer, subject), hardcoded URLs, SDK versions. Supports YARA rules with an Androguard module for matching on all these fields
- **APKiD** (https://github.com/rednaga/APKiD) — "PEiD for Android". Signature-based identification of compilers, packers, obfuscators, protectors, anti-VM/debug/root techniques. Uses YARA rules on DEX/APK/ELF. Available under GPL or commercial perpetual license (https://github.com/rednaga/APKiD/blob/master/LICENSE.COMMERCIAL)
- **APKDetect** (https://www.apkdetect.com/) — Malware family identification (30+ families), configuration extraction, loader recognition, shared code detection

---

## 3. Architecture

### 3.1 Existing Extractor Pattern

All extractors in redb follow this hierarchy:

```
Extractor (abstract base — redb/extractors/extractor.py)
├── PEExtractor (redb/extractors/pe_extractor.py)
│   ├── PEFeaturesExtractor
│   ├── PEImportExtractor
│   ├── PESectionExtractor
│   └── ...
├── ELFExtractor (redb/extractors/elf_extractor.py)
│   ├── ELFFeaturesExtractor
│   ├── ELFImportExtractor
│   └── ...
├── MachOExtractor (redb/extractors/macho_extractor.py)
│   ├── MachOFeaturesExtractor
│   ├── MachOImportExtractor
│   └── ...
└── [Format-agnostic extractors]
    ├── BasicPropertiesExtractor
    ├── HashExtractor
    ├── DIEExtractor
    ├── CAPAExtractor
    ├── YaraExtractor
    └── StringsExtractor
```

Each concrete extractor implements:
- `tag()` — returns a `Tag` enum value identifying the extraction category
- `extract()` — performs the analysis, returns a dataclass instance or `None`
- `prepare_export_data(exporter_type)` — formats data for Elasticsearch or ClickHouse
- `get_clickhouse_table()` — returns the target ClickHouse table name

The format-specific base class (e.g., `PEExtractor`) handles:
- Accepting a pre-parsed object (e.g., `pe=`) to avoid redundant parsing
- Providing shared helper methods used by multiple sub-extractors
- Passing `precomputed_hashes` to the parent `Extractor.__init__()` when available

The ingestor dispatches extractors by filetype detected via Magika, running format-agnostic extractors (BasicProperties, Hashes, DIE, CAPA, YARA) followed by the format-specific list.

### 3.2 APK Extractor Architecture

```
Extractor
└── APKExtractor (NEW — redb/extractors/apk_extractor.py)
    ├── APKFeaturesExtractor      (redb/extractors/apk_extractors/apk_features.py)
    ├── APKManifestExtractor      (redb/extractors/apk_extractors/apk_manifest.py)
    ├── APKPermissionsExtractor   (redb/extractors/apk_extractors/apk_permissions.py)
    ├── APKSignatureExtractor     (redb/extractors/apk_extractors/apk_signature.py)
    ├── APKDexExtractor           (redb/extractors/apk_extractors/apk_dex.py)
    ├── APKResourceExtractor      (redb/extractors/apk_extractors/apk_resources.py)
    ├── APKNativeLibExtractor     (redb/extractors/apk_extractors/apk_native_libs.py)
    └── APKInconsistencyTestsExtractor (redb/extractors/apk_extractors/apk_inconsistency_tests.py)
```

The `APKExtractor` base class will:
- Accept an optional pre-parsed `androguard.core.apk.APK` object (`apk=`) to share across sub-extractors
- Parse the APK once in `__init__` if not provided
- Provide shared helpers: `_get_manifest()`, `_get_certificates()`, `_list_files()`, `_is_valid_apk()`

### 3.3 Ingestor Integration

In `ingestor.py:process_binary_file()`, the `elif filetype == "apk"` branch will be expanded to:

1. Parse the APK once using Androguard (`APK(filepath)`)
2. Run format-agnostic extractors (BasicProperties, Hashes, DIE, YARA) — same as PE/ELF/Mach-O
3. Run APK-specific extractors with the shared `apk` object
4. Run Strings + IOC extractors if applicable

---

## 4. Extractor Specifications

### 4.1 APKFeaturesExtractor

**Purpose:** Core APK metadata — the equivalent of `PEFeaturesExtractor` or `ELFFeaturesExtractor`.

**Extracted fields:**
- `package_name` — Android package identifier (e.g., `com.example.app`)
- `app_name` — Human-readable application name
- `version_code` — Internal integer version
- `version_name` — Display version string (e.g., `"1.2.3"`)
- `min_sdk_version` — Minimum Android API level
- `target_sdk_version` — Target Android API level
- `compile_sdk_version` — Compile SDK (if available)
- `main_activity` — Launcher activity class name
- `is_debuggable` — Whether `android:debuggable="true"`
- `allow_backup` — Whether `android:allowBackup="true"`
- `uses_cleartext_traffic` — Whether `android:usesCleartextTraffic="true"`
- `supported_abis` — List of ABIs from `lib/` directory (e.g., `["arm64-v8a", "armeabi-v7a"]`)
- `dex_count` — Number of DEX files
- `total_dex_size` — Combined DEX file size in bytes
- `total_file_count` — Total number of files in the APK archive
- `has_native_code` — Whether `lib/` contains `.so` files
- `has_assets` — Whether `assets/` directory is non-empty
- `uses_libraries` — Declared `<uses-library>` entries
- `earliest_content_modification` — Earliest timestamp from ZIP entry metadata
- `latest_content_modification` — Latest timestamp from ZIP entry metadata
- `contains_embedded_apk` — Whether the archive contains nested APK files (flag only)

**Tag:** `APK_FEATURES`
**ClickHouse table:** `redb_apk_features`

### 4.2 APKManifestExtractor

**Purpose:** Full AndroidManifest.xml component enumeration, mirroring what VirusTotal and Koodous display.

**Extracted fields:**
- `activities` — List of Activity class names with `exported` flag
- `services` — List of Service class names with `exported` flag
- `receivers` — List of BroadcastReceiver class names with `exported` flag
- `providers` — List of ContentProvider class names with `exported` flag
- `intent_filters_by_action` — Aggregated list of all intent filter actions
- `intent_filters_by_category` — Aggregated list of all intent filter categories
- `uses_features` — Declared hardware/software features (e.g., `android.hardware.camera`)
- `meta_data` — Key-value pairs from `<meta-data>` elements
- `manifest_xml` — Full decompiled AndroidManifest.xml as plain text

**Tag:** `APK_MANIFEST`
**ClickHouse table:** `redb_apk_manifest` (one row per APK for aggregated data), `redb_apk_components` (one row per component)

### 4.3 APKPermissionsExtractor

**Purpose:** Dedicated permission analysis with protection-level classification and permhash computation.

**Extracted fields:**
- `permissions` — List of requested permissions with protection level (`normal`, `dangerous`, `signature`, `signatureOrSystem`)
- `dangerous_permissions` — Filtered list of dangerous permissions only
- `dangerous_permission_count` — Count of dangerous permissions
- `custom_permissions` — Permissions defined by the app itself (`<permission>` declarations)
- `total_permission_count` — Total number of requested permissions
- `permhash` — SHA-256 of sorted permission list (Mandiant/Google permhash — https://github.com/google/permhash)

The `permhash` value will also be added to the `Hashes` dataclass in `redb/models/dataclasses.py` so it appears alongside `imphash`, `symhash`, etc. in the unified hash record.

**Tag:** `APK_PERMISSIONS`
**ClickHouse table:** `redb_apk_permissions` (one row per permission per APK)

### 4.4 APKSignatureExtractor

**Purpose:** Certificate and signing scheme analysis, analogous to `PESignatureExtractor` and `MachOSignatureExtractor`.

**Extracted fields:**
- `signature_scheme_versions` — Which signing schemes are present (v1 JAR, v2, v3, v4)
- `is_signed` — Whether the APK has a valid signature
- `number_of_certificates` — Certificate count in the chain
- `x509_certificates` — List of certificate details:
  - `subject` (Distinguished Name)
  - `issuer` (Distinguished Name)
  - `serial_number`
  - `valid_from` / `valid_to`
  - `thumbprint_sha1`
  - `thumbprint_sha256`
  - `algorithm`
  - `key_size`
  - `is_self_signed`
- `signer_subject` — Primary signer's subject DN (convenience field)
- `signer_issuer` — Primary signer's issuer DN

**Tag:** `APK_SIGNATURE`
**ClickHouse table:** `redb_apk_signature`

### 4.5 APKDexExtractor

**Purpose:** DEX file analysis — summarized with categorized API usage (not full method enumeration).

**Output structure (per DEX file):**

- `filename` — DEX filename (e.g., `classes.dex`)
- `sha256` — SHA-256 of the DEX file
- `class_count` — Total number of classes
- `method_count` — Total number of methods
- `string_count` — Total number of string constants
- `top_packages` — List of `{package, class_count}` for top-level Java packages
- `api_usage` — Categorized sensitive API calls:
  - `reflection` — `java.lang.reflect.*`, `Class.forName`, etc.
  - `crypto` — `javax.crypto.*`, `java.security.*`
  - `dynamic_loading` — `DexClassLoader`, `PathClassLoader`, `InMemoryDexClassLoader`
  - `telephony` — `TelephonyManager` methods
  - `sms` — `SmsManager`, `SmsReceiver`
  - `network` — `HttpURLConnection`, `OkHttp`, `Volley`, `Retrofit`
  - `native` — `System.loadLibrary`, `Runtime.exec`
  - `device_info` — `Build.*`, `Settings.Secure.ANDROID_ID`, IMEI/IMSI access
  - `file_io` — `FileOutputStream`, `SharedPreferences`, `SQLiteDatabase`
  - `ipc` — `ContentResolver`, `BroadcastReceiver`, `Binder`
- `obfuscation_indicators`:
  - `short_class_names_pct` — Percentage of classes with names <= 2 chars
  - `short_method_names_pct` — Percentage of methods with names <= 2 chars
  - `non_ascii_identifiers` — Count of identifiers with non-ASCII characters
  - `avg_class_name_length` — Average class name length

**Tag:** `APK_DEX`
**ClickHouse table:** `redb_apk_dex` (one row per DEX file), `redb_apk_dex_api_usage` (one row per API category per DEX)

### 4.6 APKResourceExtractor

**Purpose:** Inventory of embedded resources with filetype detection for suspicious content.

**Extracted fields:**
- `total_resource_count` — Total files in `res/` and `assets/`
- `total_resource_size` — Combined size
- `resource_inventory` — List of `{path, size, sha256, filetype_magika}` for each file
- `suspicious_files` — Files detected as ELF, PE, DEX, APK, ZIP, script, or other executable types
- `suspicious_file_count` — Count of suspicious files

**Tag:** `APK_RESOURCES`
**ClickHouse table:** `redb_apk_resources`

### 4.7 APKNativeLibExtractor

**Purpose:** Inventory of native `.so` libraries per ABI. No deep ELF analysis (inventory only).

**Extracted fields:**
- `native_lib_count` — Total `.so` file count
- `abis` — List of ABI directories present (e.g., `["arm64-v8a", "x86"]`)
- `native_libs` — List of `{abi, filename, size, sha256}` per `.so` file
- `known_packer_libs` — Any `.so` files matching known packer/protector library names (e.g., `libjiagu.so`, `libsecexe.so`, `libDexHelper.so`, `libprotectClass.so`)

**Tag:** `APK_NATIVE_LIBS`
**ClickHouse table:** `redb_apk_native_libs`

### 4.8 APKInconsistencyTestsExtractor

**Purpose:** Anomaly and anti-analysis detection, analogous to `PEInconsistencyTestsExtractor`.

**Extracted fields:**
- `test_zip_bomb` — Compression ratio exceeds threshold
- `test_zip_duplicate_entries` — ZIP contains duplicate filenames
- `test_zip_path_traversal` — ZIP entries with `../` path traversal
- `test_zip_suspicious_timestamps` — Timestamps in the future or at epoch (1980-01-01)
- `test_hidden_dex_files` — DEX files outside standard `classes*.dex` naming or in unexpected locations
- `test_manifest_component_mismatch` — Declared components that don't exist in DEX, or undeclared code
- `test_debuggable_release` — `android:debuggable="true"` combined with a release signature
- `test_emulator_detection_strings` — Presence of Build.FINGERPRINT/MANUFACTURER emulator check strings in DEX
- `test_debugger_detection` — Presence of `Debug.isDebuggerConnected()` calls
- `test_root_detection` — Presence of root detection patterns (su binary checks, Superuser.apk)

**Tag:** `APK_INCONSISTENCY_TESTS`
**ClickHouse table:** `redb_apk_inconsistency_tests`

---

## 5. New Dependencies

### 5.1 Required

| Library | Version | License | Purpose |
|---------|---------|---------|---------|
| **androguard** | >=4.1 | Apache 2.0 | Core APK parsing: binary XML manifest, DEX analysis, certificate extraction, permissions |
| **permhash** | latest | Apache 2.0 | Compute permhash (SHA-256 of sorted permissions) for APK clustering |

### 5.2 Already Available (no changes)

| Library | Current Version | Usage |
|---------|----------------|-------|
| `zipfile` (stdlib) | — | APK archive traversal, ZIP anomaly detection |
| `pyelftools` | 0.32 | Could be used for native .so analysis if scope expands |
| `lief` | 0.17.3 | Has `lief.DEX` module; complement to androguard for DEX class/method enumeration |
| `cryptography` | 43.0.3 | Certificate chain validation (used by PE/Mach-O signature extractors) |
| `Pillow` | 10.4.0 | Icon extraction if needed |
| `magika` | 1.0.1 | Filetype detection for embedded resources |

### 5.3 Future Consideration

| Library | License | Purpose | Notes |
|---------|---------|---------|-------|
| **APKiD** | GPL-3.0 or Commercial (perpetual, royalty-free) | Packer/protector/obfuscator identification | "PEiD for Android". Detects compilers (dx, dexlib, r8), packers (AppGuard, DingXiang, JiaguK), obfuscators (DexGuard, BlackObfuscator), protectors (DexProtector, DxShield), anti-VM/debug/root. Commercial license is perpetual and allows binary redistribution: https://github.com/rednaga/APKiD/blob/master/LICENSE.COMMERCIAL |
| **apksigtool** | MIT | APK Signature Scheme v2/v3/v4 verification | androguard handles v1 well; apksigtool provides more thorough v2+ support |
| **quark-engine** | GPL-3.0 | Behavioral analysis scoring | Similar to CAPA but for Android. Stretch goal |

---

## 6. Data Model Changes

### 6.1 New Dataclasses

Add to `redb/models/dataclasses.py`:
- `APKFeatures`
- `APKManifestComponent`
- `APKPermission`
- `APKCertificate`
- `APKCodeSigningInfo`
- `APKDexFile`
- `APKDexApiUsage`
- `APKResource`
- `APKNativeLib`
- `APKInconsistencyTests`

See Tech Annex for full field definitions.

### 6.2 Existing Dataclass Changes

**`Hashes` dataclass** — add:
```python
permhash: Optional[str] = None  # APK: SHA-256 of sorted permissions (Mandiant/Google)
```

### 6.3 Tag Enum Additions

Add to `redb/extractors/enum.py`:
```python
# APK
APK_FEATURES = "apk_features"
APK_MANIFEST = "apk_manifest"
APK_PERMISSIONS = "apk_permissions"
APK_SIGNATURE = "apk_signature"
APK_DEX = "apk_dex"
APK_RESOURCES = "apk_resources"
APK_NATIVE_LIBS = "apk_native_libs"
APK_INCONSISTENCY_TESTS = "apk_inconsistency_tests"
```

---

## 7. Implementation Phases

### Phase 1 — Core Extractors

1. `APKExtractor` base class + `APKFeaturesExtractor`
2. `APKManifestExtractor`
3. `APKPermissionsExtractor` (including permhash)
4. `APKSignatureExtractor`
5. `APKDexExtractor`
6. `APKResourceExtractor`
7. `APKNativeLibExtractor`
8. Ingestor integration (wire up dispatch in `process_binary_file()`)
9. Hashes dataclass update (add `permhash`)

### Phase 2 — Detection and Anomalies

10. `APKInconsistencyTestsExtractor`
11. Wire up existing format-agnostic extractors for APK (YARA, Strings, IOC)

### Phase 3 — Future (out of scope for this PDD)

- APKiD integration for packer/protector detection
- Deep native library analysis (run ELF pipeline on extracted `.so` files)
- Recursive APK ingestion
- androguard-yara module integration for YARA rules matching on APK metadata

---

## 8. Testing Strategy

- Unit tests per extractor using known APK samples (benign + malicious)
- Validate output against VirusTotal reports for the same samples (cross-reference fields)
- Edge cases: split APKs, obfuscated APKs, packed APKs, APKs with no native code, APKs with no DEX, corrupted APKs
- Integration test: full pipeline run (ingest APK, verify all extractors produce output, verify ClickHouse/ES export)