# AXP Resurrection Pro (AXPR) — Presentación de la ROM **Dispositivo:** Google Pixel 4a (`sunfish`) **Base upstream:** LineageOS **23.2** / Android **16** (`BP4a`, `lineage_sunfish-user`) **Producto:** **AXP Resurrection Pro** — clon funcional de AXP.OS Pro (LOS22 / GOLDEN) sobre LOS23 **Repositorio:** `AXP_Resurection` (rama Magisk / `009`) **Documento:** síntesis enriquecida para lectura o exportación a PDF — **2026-10-11** **Público / usuarios:** ver [`public/AXP-Resurrection-Pro-sunfish.md`](public/AXP-Resurrection-Pro-sunfish.md) y lista CVE [`public/kernel-cve-backport-list.txt`](public/kernel-cve-backport-list.txt). --- ### Exportar a PDF (en el laptop) ```bash cd /home/aventura/Workspaces/AXP_Resurection # Opción A — pandoc (si está instalado) pandoc docs/009-axpr-rom-presentation.md -o docs/009-axpr-rom-presentation.pdf \ --pdf-engine=xelatex -V geometry:margin=2.5cm -V lang=es # Opción B — navegador / VS Code: vista previa Markdown → Imprimir → Guardar como PDF ``` **Fuentes normativas:** `specs/009-axp-los23-port/spec.md`, `.specify/memory/constitution.md`, `docs/009-handoff-20261008.md`. Este archivo es **presentación**; no sustituye el spec. --- ## Tabla de contenidos 1. [Resumen ejecutivo](#1-resumen-ejecutivo) 2. [Arco del proyecto (punto 0 → hoy)](#2-arco-del-proyecto-punto-0--hoy) 3. [Línea base LineageOS vs identidad AXPR](#3-línea-base-lineageos-vs-identidad-axpr) 4. [Qué se clonó de AXP.OS / EXTENDROM](#4-qué-se-clonó-de-axpos--extendrom) 5. [Kernel: AXP, GrapheneOS-class, CVE](#5-kernel-axp-grapheneos-class-cve) 6. [Userspace: parches AXP en Android 16](#6-userspace-parches-axp-en-android-16) 7. [Debloob / de-Google selectivo](#7-debloob--de-google-selectivo) 8. [microG, Play y apps empaquetadas](#8-microg-play-y-apps-empaquetadas) 9. [Magisk preroot (sin KernelSU en ship)](#9-magisk-preroot-sin-kernelsu-en-ship) 10. [Hardening userspace y malloc](#10-hardening-userspace-y-malloc) 11. [Toggles y políticas de privacidad](#11-toggles-y-políticas-de-privacidad) 12. [Firma, AVB y actualizaciones](#12-firma-avb-y-actualizaciones) 13. [Inspiración GrapheneOS (qué sí / qué no)](#13-inspiración-grapheneos-qué-sí--qué-no) 14. [Verificación y hitos en LAB](#14-verificación-y-hitos-en-lab) 15. [Build de referencia actual (oct 2026)](#15-build-de-referencia-actual-oct-2026) 16. [Abierto / no objetivo](#16-abierto--no-objetivo) 17. [Apéndice: scripts de integración](#17-apéndice-scripts-de-integración) 18. [Apéndice: lecciones LAB (Magisk / flash)](#18-apéndice-lecciones-lab-magisk--flash) --- ## 1. Resumen ejecutivo **AXP Resurrection Pro (AXPR)** no es un LineageOS con “algunos APKs”: es un **resurrection track** que toma **LineageOS 23.2 vanilla** probado en LAB (`003`) y reintegra el **conjunto de capacidades AXP.OS Pro** (referencia **GOLDEN** en Pixel 4a con AXP 22.2 / Android 15), adaptado a **Android 16** y **Magisk 30.7**, con: - **Kernel** `msm-4.14` de LOS + **Stage 1** Graphene/AXP (~30 parches) + **FORTIFY** + **~429 CVE** “clean-offset” + **lotes high-offset** + endurecimiento **US-S5-1** (sin Yama como GOLDEN). - **Userspace** microG + **Phonesky** parcheado del proyecto + **sigspoof** y **call recording** con toggles + DNS privado / connectivity check al estilo AXP (sin servidores `axp.os`). - **Debloob** en **4 oleadas** (euicc Google, carrier/RCS, herramientas Lineage, comandos solo-LAB) — **no** el `Deblob.sh` ciego de AXP. - **Magisk** embebido en **build** (EXTENDROM `EXTENDROM_PREROOT_BOOT`), manager **dormant** hasta activación; **KernelSU/SusFS** fuera del bacon de ship (`007` en paralelo). - **Firma** `release-keys` de proyecto, **AVB flags=0** (track desbloqueado + Magisk), **SPL vendor** fijado en **2023-09-05** (guardia anti-downgrade). Paridad bancaria **Swissquote en Island: PASS** en cierre 2026-10-09; **Yuh** sigue abierto. --- ## 2. Arco del proyecto (punto 0 → hoy) | Fase | Feature | Qué se logró | |------|---------|----------------| | **Host** | `001` | `rom-dev01`, artefactos bajo `/srv/rom/artifacts/`, builds largos en tmux (`rom-detach`) | | **Oracle** | `002` | Inventario **GOLDEN** (`11071JEC203839`) — solo lectura `adb` | | **Baseline** | `003` | **LOS 23.2 UNOFFICIAL** vanilla en LAB (`20260914`), smoke hardware, **sin** AXP/microG | | **MicroG track (standby)** | `004`–`008` | microG, spoof, call rec, etc. — reutilizado por `009` | | **KernelSU track (paralelo)** | `007` | Boot OK sept 2026; **no mezclar** en bacon Magisk | | **Ship activo** | `009` | **AXP → LOS23** resurrection; spec `009-axp-los23-port` | **Dispositivos:** | Rol | Serial | Uso | |-----|--------|-----| | **GOLDEN** | `11071JEC203839` | Oracle AXP 22.2 — **nunca** flashear | | **LAB** | `11231JEC207477` | Flash, sideload, Magisk, banca en Island | --- ## 3. Línea base LineageOS vs identidad AXPR ### 3.1 Vanilla LOS (`003`) - Build: `lineage-23.2-20260914-UNOFFICIAL-sunfish` - `ro.lineage.version` UNOFFICIAL, test-keys, sin microG ni Magisk AXP - Vendor SPL **2023-09-05** (EOL Pixel; documentado) - **Gate:** smoke LAB OK → autoriza integración AXP ### 3.2 Pin upstream OTA (oct 2026) - Manifest pin: **Lineage nightly `20261008`** (`lineage-23.2-20261008-nightly-sunfish`) - Zip de producto: `AXP-Resurection-Pro-23.2-20261008-sunfish.zip` (hermano de `lineage-23.2-20261008-PRO-sunfish.zip`) - `LINEAGE_BUILDTYPE=PRO`, `user`, `TARGET_RELEASE=bp4a` - Platform SPL: **2026-09-01** (merges LOS) - Vendor SPL ship: **2023-09-05** (deliberado vs GOLDEN `2023-08-05` — guardia en `apply_009_axp_identity.py`) ### 3.3 Branding - Nombre producto: **AXP Resurrection Pro** - Bootanimation: **fullscreen sunfish** (mejora de tamaño vs banda Lineage); assets AXP PRO en payload aún limitados — animación puede seguir siendo clase Lineage en algunos builds - **No** NeoLauncher — **Launcher3** Lineage - **No** servidores OTA AXP ni repos de mercado externos (EOL) --- ## 4. Qué se clonó de AXP.OS / EXTENDROM **Regla del repo (`AGENTS.md`):** copiar método AXP/EXTENDROM/GOLDEN **antes** de inventar política local. | Área | Mecanismo AXP | Implementación AXPR | |------|----------------|---------------------| | **Magisk en boot** | `EXTENDROM_PREROOT_BOOT`, `patch.sh`, hook `releasetools` | `vendor/sunfish-a16/magisk/`, `out/.magisk/READY`, `SUNFISH_A16_MAGISK_PREROOT` | | **Magisk no en PRODUCT** | Root dormant hasta activación | Stub manager; **no** `PRODUCT_PACKAGE` Magisk | | **Env patcher** | `PREINITDEVICE=userdata`, `KEEPVERITY`, `KEEPFORCEENCRYPT` | Mismo en `vendor/sunfish-a16/magisk/patch.sh` | | **Product wiring** | `gms.mk`, `magisk.mk`, `apps.mk` | `apply_009_product_includes.py` en cada bacon | | **Identidad / certs** | `vendor/lineage-priv/keys`, `avb.pem` | `apply_009_axp_identity.py` + `/srv/rom/secrets/android-certs` | | **Phonesky** | APK parcheado (exact alarm, etc.) | `/srv/rom/prebuilts/phonesky/` — **no** en git | | **Toggles EXTENDROM** | `allow_signature_fake`, `extendrom_call_recording` | `005` sigspoof, `008` call rec / FLAG_SECURE | | **Private DNS lista** | AXP Settings providers | `apply_009_private_dns_providers.py` | | **Connectivity / INTERNET UX** | AXP-class | `apply_009_connectivity_check.py` | | **Disable app clásico** | vs Archive A16 | `apply_009_disable_user_apps.py` | | **OpenSSH en product** | Binarios fuera; `init.openssh.rc` queda | US-S4-1 + `hardening.mk` | | **Referencias build** | EXTENDROM en `rom-dev01` | `/srv/rom/references/extendrom/` | **FAQ AXP (Magisk):** tras flash, **sí** a descargar/instalar el **APK** del manager; el paso **Additional setup** que **re-parchea boot** suele **no hacer falta** en preroot (el boot ya va parcheado en bacon). Ver [AXP FAQ](https://github.com/AXP-OS/build/wiki/Frequently-Asked-Questions#magisk-requires-additional-setup-on-start). --- ## 5. Kernel: AXP, GrapheneOS-class, CVE **Base:** `kernel/google/msm-4.14` @ `4.14.357-openela` (pin LOS `28f9290ae067`), **non-GKI**. ### 5.1 Ya en LOS (no duplicar) CFI, shadow call stack, stack protector, KASLR, PAN, hardened usercopy, restricción perf events, etc. (`docs/009-kernel-hardening-map.md`). ### 5.2 Stage 1 — parches Graphene/AH vía AXP `kernel_patches` ~**30 parches** aplicados (deny USB toggle, allocsize, BUG_ON, FORTIFY intra-object, randomize, ro_after_init, sanitize, slab hardened, unused-fn, …). **Omitido por política:** location lockdown (FR-018), LinuxIncrementals, mega CVE hasta fase estable. ### 5.3 Combo4 + Clang FORTIFY - `CONFIG_FORTIFY_SOURCE=y` y opciones slab/init/on alloc tras Stage 1 - Fixes de build (LTO/modules qcacld, stubs acotados en bisect histórico) ### 5.4 CVE | Etapa | Contenido | |-------|-----------| | **CVE clean-offset** | ~**429** IDs en `cve-clean-offset.list` (strict apply en bacon) | | **High-offset batches 1–3** | Offsets grandes con `max_abs_offset` elevado | | **Denylist** | p.ej. `CVE-2022-49980` (lock-scope USB) | | **Política** | Atribución en logs `cve-stage/`; no megapatch opaco | ### 5.5 US-S5-1 (como GOLDEN) - `CONFIG_SECURITY_YAMA` **no** activado (Yama `ptrace_scope=2` rompió **PairIP** / anti-debug) - `SLAB_FREELIST_RANDOM=y`, USERFAULTFD off - `KSYM_NAME_LEN=192`; **sin KernelSU** en defconfig ship ### 5.6 hardened_malloc (`012`) - Integrado en bacon OTA (`009-bacon-hardened-malloc.sh`) - Exclusiones SurfaceFlinger/cámara documentadas en árbol bionic --- ## 6. Userspace: parches AXP en Android 16 Scripts bajo `vendor/sunfish-a16/patches/009-axp-los23-port/` (puertos desde árbol AXP legacy **a A16**, no “SDK 35”): | Script | Función | |--------|---------| | `apply_009_product_includes.py` | `gms.mk` + `magisk.mk` + **`apps.mk`** + BoardConfig | | `apply_009_axp_identity.py` | release keys, AVB, SPL vendor guard | | `apply_009_axp_branding.py` | branding Pro | | `apply_009_private_dns_providers.py` | lista DNS privado AXP | | `apply_009_connectivity_check.py` | checks de conectividad | | `apply_009_disable_user_apps.py` | Disable clásico | | `apply_009_supl_privacy.py` | SUPL / ubicación (sin lockdown extra FR-018) | | `apply_009_cmdline_mode.py` | cmdline / modo debug (Magisk track) | | `apply_009_yama_ptrace.py` | Yama inerte si no hay Yama en kernel | | `apply_009_a15_*` | timeouts reboot/Wi‑Fi/BT, settings | | `apply_005` / `apply_008` | sigspoof, call recording, FLAG_SECURE DO | | `apply_009_drop_*` | deblob waves (ver §7) | **WMS / FLAG_SECURE:** override global opcional (proyecto `008`), default off. --- ## 7. Debloob / de-Google selectivo **No** se ejecuta `Deblob.sh` por defecto AXP. Oleadas controladas (`AXP_DEBLOB_WAVE4=1` en OTA): | Wave | Contenido | |------|-----------| | **1** | Drop **Google EUICC** / LPA (`apply_009_drop_euicc_google.py`) — OpenEUICC en system_ext | | **2** | Carrier Google + AOSP RCS (`apply_009_drop_carrier_google.py`) | | **3** | Herramientas Lineage en system (`bash`, `htop`, `nano`, `unrar`, `addon.d/50-lineage.sh`) — **Swissquote** fallaba con estas en system | | **4** | Comandos solo-LAB / diag (`apply_009_drop_lab_only_commands.py`) | **Se mantiene (radio/IMS):** `ims`, `QtiTelephonyService`, `xtra-daemon`, Widevine, `EuiccSupportPixel` donde el spec lo exige, Qualcomm diag en wave 4 parcial según cierre. --- ## 8. microG, Play y apps empaquetadas ### 8.1 Stack deGoogle (servicios) | Componente | Ubicación | Versión pin (ej.) | |------------|-----------|-------------------| | **GmsCore** (microG) | `system_ext/app/GmsCore` | `0.3.17.252432` | | **GsfProxy** | `system_ext` | `0.1.0` | | **Phonesky** | `system/priv-app/Phonesky` | `52.9.22-24` (artifact host) | | **JNI GmsCore** | `.../lib/arm64/*.so` | Extraído en bacon (**obligatorio** para Maps) | ### 8.2 Apps usuario (system_ext / product) | App | Paquete | Notas | |-----|---------|-------| | **Aurora Store** | `com.aurora.store` | system_ext | | **Droidify** | `com.looker.droidify` | sustituye cliente F-Droid | | **Fossify Gallery** | `org.fossify.gallery` | no Gallery2/Glimpse | | **Jelly** | `org.lineageos.jelly` | **product** | | **OpenEUICC** | `im.angry.openeuicc` | LPA privilegiada | | **WebView** | `com.android.webview` | **LOS 23** — no Aosmium (EOL); selector multi-proveedor en Dev options | Postflight bacon: **US-S4-2** (Jelly), **US-S4-3** (Aurora/Droidify/Fossify en system_ext). --- ## 9. Magisk preroot (sin KernelSU en ship) | Tema | Detalle | |------|---------| | **Versión** | **30.7** (pin; GOLDEN oracle **29.0**) | | **Build** | Hook `common.py` + `patch.sh` en empaquetado `target_files/IMAGES/boot.img` | | **Verificación host** | `magiskboot cpio ramdisk.cpio test` ≠ 0 en **ship** `boot.img` | | **Artefacto forensics** | `boot-make-out.img` = `out/.../boot.img` **sin** Magisk — **no flashear** | | **Activación** | Abrir app → **download/install** APK real; **evitar** re-parchear boot (Install / inactive slot) | | **UI Ramdisk Yes/No** | Clasificación de **método de instalación**; con preroot puede quedar **No** sin impedir root | | **Módulos GOLDEN** | **No** empaquetados (PIF, hosts, tee sim, …) — usuario instala después | | **KernelSU** | Prohibido en mismo boot que Magisk ship | --- ## 10. Hardening userspace y malloc | ID | Medida | |----|--------| | **US-S4-1** | Sin `sshd`/`ssh`/`rsync`/`procmem` en product; **sí** `init.openssh.rc` | | **US-S4-2/3** | Superficie apps (Jelly + Fossify + stores) | | **US-S6** | `lineage_sunfish-user` lunch | | **012** | **hardened_malloc** en bionic (ship OTA) | | **SELinux** | Enforcing (medido en LAB) | | **Encryption** | FBE/file encryption estándar | | **Bootloader lock** | **Wont** — AXP/LOS/Magisk asumen unlock | --- ## 11. Toggles y políticas de privacidad | Toggle / setting | Origen | Comportamiento | |------------------|--------|----------------| | **Signature spoofing** | AXP / `005` | Restricted; Developer Options | | **Call recording unlock** | EXTENDROM / `008` | SQLite / settings key | | **FLAG_SECURE override** | Proyecto `008` | Default off | | **Private DNS providers** | AXP lista | Sin endpoints `axp.os` | | **Connectivity check** | AXP-class | Sin branding AXP en URLs | | **SUPL / XTRA / IZat** | AXP timeouts + switches | Precisión GPS (no extra-cap FR-018) | | **Native debug / Yama props** | `apply_009_yama_ptrace` | Inerte sin Yama en kernel | | **Disable app** | AXP vs Archive A16 | Restaurar disable clásico | --- ## 12. Firma, AVB y actualizaciones | Tema | Valor ship | |------|------------| | **Firma APK/OAT** | `vendor/lineage-priv/keys/releasekey` | | **AVB key** | `vendor/sunfish-a16/certs/avb.pem` (SHA256_RSA4096) | | **AVB flags** | **0** (runtime unlocked; no “hardened verified boot” Magisk track) | | **Zip OTA** | `payload.bin` sideload; **no** OTA servidor AXP | | **FR-019** | microG, Phonesky, apps — actualización **sideload** cada ~2–3 meses (stub doc) | | **Downgrade** | User builds rechazan SPL vendor < `2023-09-05` | **Flash LAB recomendado:** recovery → factory reset → **sideload zip completo**. **Evitar:** `fastboot -w`; mezclar `vbmeta`/`boot` de otro build; flashear solo `boot-make-out.img`. --- ## 13. Inspiración GrapheneOS (qué sí / qué no) | GrapheneOS / AH | En AXPR | |-----------------|---------| | Parches **kernel** hardening (alloc, fortify, slab, sanitize, …) | **Sí** — vía AXP `kernel_patches` + Stage1 | | **hardened_malloc** | **Sí** (`012`) | | Árbol kernel A13 Graphene sunfish | **No** — base es LOS `msm-4.14` | | Lockdown ubicación Graphene | **No** (FR-018) | | Auditoría attestation bancaria tipo Graphene | **No** como gate; banking deferred | | WebView Vanadium por defecto | **No** — WebView LOS + elección usuario | --- ## 14. Verificación y hitos en LAB | Hito | Fecha / evidencia | |------|-------------------| | Vanilla LOS boot | `003` — 2026-09-14 | | Stage1 kernel bacon | `20260918T180359Z-axp-kh-stage1` | | CVE bacon | `20260918T215034Z-axp-kh-cve` | | **Closure baseline** wave 3 | `20261009T145241Z` — Swissquote Island **PASS** | | **Final ship** wave4 + malloc | `20261009T172104Z`, `bacon009final` | | **OTA rebacon** pin `20261008` | `20261011T092526Z` — `bacon009ota-r13`, `bacon_exit=0` | **Matrices:** `docs/009-capability-matrix.md`, `docs/009-closure-parity-20261009.md`, `docs/axp-pro-parity.md`. --- ## 15. Build de referencia actual (oct 2026) | Campo | Valor | |-------|--------| | **Directorio** | `/srv/rom/artifacts/009-axp-los23-port/20261011T092526Z-axp-stage1-combo4-cve-hi-releasekeys` | | **Zip** | `AXP-Resurection-Pro-23.2-20261008-sunfish.zip` | | **SHA256 zip** | `91d7adf5435c4e7279123bca4ce72793754384bb341cfbb61522f3411eea2847` | | **boot.img (ship)** | `9e6ec52543445b10279b681f69c055fb240f6910616f569914fe598d77ef7d4f` | | **README artefacto** | Stage1+combo4+FORTIFY+CVE+hi1-3+US-S4+US-S5-1+wave1-4+malloc+releasekeys | | **Script bacon** | `scripts/009-bacon-axp-stage1-combo4-cve-hi-releasekeys.sh` | --- ## 16. Abierto / no objetivo **Abierto:** rebase LOS periódico (`009-upstream-rebase-ota.md`), **Yuh** en Island, FR-019 sideload playbook, llamada **SIM física** gate radio, postflight OTA boot hash = ship boot, animación AXP completa en payload. **No objetivo / wont:** KernelSU en ship, NeoLauncher, Aosmium WebView, OTA/repositorios AXP externos, backup ROM integrado, bootloader relock, flash GOLDEN, mezclar track `007` en bacon Magisk. **Paralelo:** `007` KernelSU/SusFS — `docs/007-parallel-on-009.md`. --- ## 17. Apéndice: scripts de integración Bacon entry (host): `scripts/009-rebuild-from-los.sh` → rsync `vendor/sunfish-a16` → `009-bacon-axp-stage1-combo4-cve-hi-releasekeys.sh`. Wrappers OTA: `009-bacon-hardened-malloc.sh`, `009-bacon-wave4-deblob.sh`. Kernel: `vendor/sunfish-a16/patches/009-kernel-hardening/apply_stage1.sh`, `apply-cve-strict.sh`, listas `cve-clean-offset.list`, `cve-high-offset-batch*.list`. Checklist pre-bacon: `docs/009-ota-rebuild-checklist.md`. --- ## 18. Apéndice: lecciones LAB (Magisk / flash) 1. **Sideload completo** tras wipe es el camino principal; no depender de reflashear solo `boot` salvo recovery rota. 2. **`boot.img` del artefacto** = Magisk; **`boot-make-out.img`** = stock. 3. Tras preroot: **download/install** del manager; **no** insistir en Additional setup que re-parchea boot ni **Install inactive slot** (conflicto slots / UI Ramdisk). 4. **Ramdisk: No** en la app **no** implica ROM sin Magisk si `magiskd` y **30.7** están activos. 5. Flash manual **boot+vbmeta+dtbo** debe ser **juego completo del mismo artefacto**; si no, riesgo de **fastboot loop**. 6. **No** bajar vendor SPL bajo **2023-09-05** en upgrades (`init_user0_failed` / rollback Keymaster). --- *Fin del documento. Para el día a día del equipo: `docs/README.md` → `009-handoff-20261008.md`.*