Ship Magisk like GOLDEN; KernelSU optional recycle only; parallel to sunfish-a16-rom standby.
3.8 KiB
005 — Restricted signature spoofing runbook
Feature: 005-restricted-signature-spoofing
LAB only: serial 11231JEC207477 — never GOLDEN
Host: rom-dev01 under /srv/rom/
What we discovered (2026-09-15)
LineageOS 23.2 already ships restricted microG spoofing
(frameworks/base commit 23c0a5c19844, LuK1337):
| Gate | Stock LOS behaviour |
|---|---|
| Build | userdebug/eng only (isDebuggable() JNI) |
| Packages | com.google.android.gms, com.android.vending only |
| Signer | Must match microG release cert (MICROG_REAL_SIGNATURE) |
| Fake value | Must equal platform Google cert (MICROG_FAKE_SIGNATURE) |
| Surfaces | Spoofs both PackageInfo.signatures and signingInfo |
Gaps vs our stack / AXP UX:
- Our Phonesky is signed with the project JKS, not microG — stock
gate rejected it → Play
UNREGISTERED_ON_API_CONSOLE. - No
FAKE_PACKAGE_SIGNATUREpermission → microG Self-Check permission rows empty. - No Developer Options master switch (
allow_signature_fake).
What we applied
Script (idempotent, marker SUNFISH_A16_005_SIGSPOOF):
- Meta:
vendor/sunfish-a16/patches/005-sigspoof/apply_005_sigspoof.py - Host copy:
/srv/rom/src/lineage/vendor/sunfish-a16/patches/005-sigspoof/ - References:
/srv/rom/references/extendrom@f129253c… - Cert hex:
/srv/rom/artifacts/005-spoofing/phonesky-cert.hex(SHA-25631:31:86:CB:…:BD:56)
Changes on the LOS tree:
- Extend
isMicrogSigned()to accept project Phonesky signer forcom.android.vending. - Gate spoofing on
Settings.Secure.allow_signature_fake(default 0). - Require grant of
android.permission.FAKE_PACKAGE_SIGNATURE. - Port EXTENDROM permission + Settings Developer Options toggle + strings.
- Keep packaging leftovers:
LOCAL_REPLACE_PREBUILT_APK_INSTALLED+ Play FGS privapp XML (already invendor/sunfish-a16/).
LAB 2026-09-15 post-flash: Self-Check / spoofing / no
UNREGISTERED_ON_API_CONSOLE OK. Play install failures / ANR: DownloadService
/VpaService FGS systemExempted needs any of SCHEDULE_EXACT_ALARM /
USE_EXACT_ALARM / VPN — privapp alone is not enough if the APK does not
request those permissions.
Fix (2026-09-15): Phonesky rebuild adds USE_EXACT_ALARM +
SCHEDULE_EXACT_ALARM to the manifest; artifact
/srv/rom/artifacts/005-spoofing/Phonesky_exact-alarm.apk; pushed to LAB via
adb install -r (same project JKS); vendor prebuilt updated under
/srv/rom/src/lineage/vendor/sunfish-a16/prebuilt/Phonesky.apk for next bacon.
USE_EXACT_ALARM: granted=true on LAB after upgrade.
Re-apply after repo sync that resets frameworks/Settings:
python3 /srv/rom/src/lineage/vendor/sunfish-a16/patches/005-sigspoof/apply_005_sigspoof.py
Backups: /srv/rom/artifacts/005-spoofing/bak-snapshots/ (never leave
*.005.bak under res/ — aapt2 will fail).
LAB validation (US6 — 2026-09-15)
Accepted on LAB 11231JEC207477 / build 23.2-20260915-UNOFFICIAL-sunfish.
Evidence: /srv/rom/artifacts/005-spoofing/20260915-us6-validation/LAB-US6.txt.
Flash LAB;— passpm pathgms / gsf / vendingAllow signature spoofing—allow_signature_fake=1Self-Check correct signature— pass (grant on user 0 + Island 10)Play sign-in / installs— pass after exact-alarm Phonesky; noUNREGISTERED_ON_API_CONSOLE- Location: configure BeaconDB
https://api.beacondb.net(no UnifiedNlp) — steps indocs/004-lab-selfcheck.md+quickstart.md
adb -s 11231JEC207477 shell settings get secure allow_signature_fake
# expect 1 when enabled
Handoff: first stack done → next feature 006 banking rootless. Do not
add KernelSU/007 until after 006.
Out of scope
- Banking apps (
006), KSU/root (007), Magisk/LSPosed.