Skip to content

Commit e609c12

Browse files
committed
v1.0.2: fix strong integrity reverting on hourly refresh
Fold the strong-integrity fix into v1.0.2 (no separate v1.0.3). The hourly fingerprint refresh regenerated custom.pif.prop via migrate.sh but never re-applied the STRONG spoof settings (only boot and Action did), so ~1h after boot the fingerprint reverted to spoofProvider=1 / spoofVendingFinger=0 and STRONG dropped while the WebUI still showed 3 green. - pif_native_fetch.sh now enforces the STRONG settings itself, so the native path is correct no matter who calls it. - service.sh hourly loop re-enforces the STRONG settings after each refresh (covers the autopif4 fallback too).
1 parent 12df30a commit e609c12

5 files changed

Lines changed: 44 additions & 12 deletions

File tree

CHANGELOG.md

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,16 @@
11
# AlwaysStrong changelog
22

3-
## v1.0.3
3+
## v1.0.2
44

5-
Fixes strong integrity broken in v1.0.2, and hardens ROM-spoof handling.
5+
New keybox mirror, a far more reliable fetcher, a custom-keybox file picker in the WebUI, strong-integrity fixes, and a faster, steadier Action.
66

7-
- **Strong integrity fix.** The fingerprint now actually reaches PlayIntegrityFork. In v1.0.2 the native fetch wrote the wrong file (`pif.prop`) in the wrong place, so PIF kept spoofing a stale/default fingerprint and STRONG failed even with a valid keybox (3 green). Every fetch path — native, autopif4, and the shipped fallback — now runs `migrate.sh` to produce `custom.pif.prop` in the module dir (the file PIF reads) and enforces the STRONG spoof settings (`spoofProvider=0`, `spoofVendingFinger=1`).
7+
**Strong integrity**
8+
- **The fingerprint reaches PlayIntegrityFork.** PIF's zygisk reads `custom.pif.prop` from the module dir; every fetch path — native, autopif4, and the shipped fallback — now runs `migrate.sh` to produce that file and enforces the STRONG spoof settings (`spoofProvider=0`, `spoofVendingFinger=1`), so STRONG holds with a valid keybox (3 green).
9+
- **Strong survives the hourly refresh.** The hourly fingerprint refresh regenerated `custom.pif.prop` but skipped re-applying the STRONG spoof settings, so ~1 h after boot the fingerprint silently reverted to a weak config (`spoofProvider=1`, `spoofVendingFinger=0`) and STRONG dropped even though the WebUI still showed 3 green. The native fetch now enforces the STRONG settings itself, and the hourly loop re-enforces them, so every refresh stays strong.
810
- **Faster fingerprint.** The fast native crawl (~10s) is primary; autopif4 — whose crawl stalls up to ~1 min on some devices — is the fallback.
9-
- **ROM spoof handling.** The disable list now matches PlayIntegrityFork's current engines (adds `persist.sys.pp.*`, plus AOSPA / PixelOS / Afterlife detection). Uninstalling AlwaysStrong now restores the ROM's own spoof engines — the persist props it set are cleared on uninstall (only if still unchanged), so removing the module frees PixelProps / pihooks / entryhooks again.
10-
11-
## v1.0.2
1211

13-
New keybox mirror, a far more reliable fetcher, a custom-keybox file picker in the WebUI, and a faster, steadier Action.
12+
**ROM spoof**
13+
- The disable list now matches PlayIntegrityFork's current engines (adds `persist.sys.pp.*`, plus AOSPA / PixelOS / Afterlife detection). Uninstalling AlwaysStrong now restores the ROM's own spoof engines — the persist props it set are cleared on uninstall (only if still unchanged), so removing the module frees PixelProps / pihooks / entryhooks again.
1414

1515
**Keybox & status**
1616
- Moved to the new mirror: keybox from `http://evoker.qzz.io/key`, status from `/status`.

module/module.prop

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
id=tricky_store
22
name=AlwaysStrong
3-
version=v1.0.3
4-
versionCode=103
3+
version=v1.0.2
4+
versionCode=102
55
author=Evokerr, JingMatrix, Enginex0, osm0sis
66
description=Strong Play Integrity in one drop-in module. TEE-Simulator-RS + PlayIntegrityFork, auto-refreshed. Tap Action.
77
updateJson=https://raw.githubusercontent.com/evoker0/AlwaysStrong/main/update.json

module/pif_native_fetch.sh

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -199,5 +199,20 @@ sh "$SELF_DIR/migrate.sh" -i -a "$SELF_DIR/pif.prop" >/dev/null 2>&1
199199
if [ ! -s "$SELF_DIR/custom.pif.prop" ]; then
200200
log "migrate.sh did not produce custom.pif.prop."; exit 1
201201
fi
202+
203+
# migrate.sh defaults to spoofProvider=1 / spoofVendingFinger=0, which asks for
204+
# a WEAK attestation and breaks STRONG. Enforce the STRONG settings here so the
205+
# native path is correct no matter who calls it (boot, hourly, Action) — the
206+
# hourly loop has no separate enforce step, so self-enforcing is essential.
207+
for kv in spoofProvider=0 spoofVendingFinger=1 spoofBuild=1 \
208+
spoofProps=1 spoofSignature=0 spoofVendingSdk=0; do
209+
k="${kv%=*}"; v="${kv#*=}"
210+
if grep -qE "^${k}=" "$SELF_DIR/custom.pif.prop"; then
211+
sed -i "s|^${k}=.*|${k}=${v}|" "$SELF_DIR/custom.pif.prop"
212+
else
213+
echo "${k}=${v}" >> "$SELF_DIR/custom.pif.prop"
214+
fi
215+
done
216+
202217
log "installed custom.pif.prop ($FP)"
203218
exit 0

module/service.sh

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -259,6 +259,23 @@ fi
259259
sh "$MODDIR/autopif4.sh" -s -m 2>&1 | log -t "AlwaysStrong-hourly"
260260
fi
261261
[ -f "$MODDIR/sync_patch.sh" ] && sh "$MODDIR/sync_patch.sh" 2>&1 | log -t "AlwaysStrong-hourly"
262+
# enforce STRONG spoof settings — migrate.sh (run by native fetch /
263+
# autopif4) resets them to spoofProvider=1 / spoofVendingFinger=0,
264+
# which breaks STRONG. Without this the hourly refresh silently
265+
# reverts the fingerprint to a WEAK config an hour after boot.
266+
for CPIF in "$MODDIR/custom.pif.prop" "$MODDIR/pif.prop" \
267+
/data/adb/tricky_store/custom.pif.prop /data/adb/tricky_store/pif.prop; do
268+
[ -f "$CPIF" ] || continue
269+
for kv in "spoofProvider=0" "spoofVendingFinger=1" "spoofBuild=1" \
270+
"spoofProps=1" "spoofSignature=0" "spoofVendingSdk=0"; do
271+
k="${kv%=*}"; v="${kv#*=}"
272+
if grep -qE "^${k}=" "$CPIF"; then
273+
sed -i "s|^${k}=.*|${k}=${v}|" "$CPIF"
274+
else
275+
echo "${k}=${v}" >> "$CPIF"
276+
fi
277+
done
278+
done
262279
fi
263280
if [ ! -f "$CFG/custom_keybox" ] && [ ! -f "$CFG/no_auto_keybox" ] && [ -x "$MODDIR/keybox_fetch.sh" ]; then
264281
kbout=$(sh "$MODDIR/keybox_fetch.sh" 2>&1)

update.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
2-
"version": "v1.0.3",
3-
"versionCode": 103,
4-
"zipUrl": "https://github.com/evoker0/AlwaysStrong/releases/latest/download/AlwaysStrong-v1.0.3.zip",
2+
"version": "v1.0.2",
3+
"versionCode": 102,
4+
"zipUrl": "https://github.com/evoker0/AlwaysStrong/releases/latest/download/AlwaysStrong-v1.0.2.zip",
55
"changelog": "https://raw.githubusercontent.com/evoker0/AlwaysStrong/main/CHANGELOG.md"
66
}

0 commit comments

Comments
 (0)