Skip to content

Commit 5c5e497

Browse files
committed
chore(release): v5.53.1
Bundles the v5.53.0 keybox revocation hotfix together with the v5.53.1 WebUI corrections that follow from real-device testing. Keybox: revocation becomes informational metadata, not a verdict or install gate. The badge no longer flashes Revoked on working keyboxes, keybox fetch no longer rejects revoked keyboxes, the revocation lookup is leaf-only, and the embedded fallback is refreshed from the live attestation status endpoint. A new AOSP pill surfaces when a non-AOSP device loads an AOSP-rooted keybox. WebUI: window.y now binds correctly so autosave toasts are visible. TEESimulator-rs is detected on both the Rust webui-init path and the JS visibility-refresh path that reads daemon nice-name. Autosave fires on every card tick or untick, including taps on the card body where the bundle's programmatic checkbox toggle never dispatched a change event. Toast pill anchors at bottom-inset + 8px with smaller font and pointer-events:none, so back-to-back ticks never obstruct the package list. Install: target.txt seeds com.google.android.gms, .gsf, and .vending with the ! generate-mode suffix in Automatic mode. Manual mode preserves any existing target.txt verbatim. See CHANGELOG.md v5.53.0 and v5.53.1 entries for the full detail.
1 parent 95eee91 commit 5c5e497

41 files changed

Lines changed: 4802 additions & 135 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

CHANGELOG.md

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,33 @@
11
# Changelog
22

3+
## v5.53.1 (2026-05-01)
4+
5+
### Bug Fixes
6+
- WebUI engine detector (`_c()` in `webui/assets/index-migrated.min.js`) scans `/data/adb/modules/*/module.prop` for `name=TEESimulator*` before falling back to the daemon nice-name and module.prop lookups. Fixes TEESimulator-rs forks displaying as upstream `TEESimulator` on the badge.
7+
- Save toast pill anchored at `bottom-inset + 8px` with 11px font and 13px icon. `pointer-events:none` retained in the `.show` state so taps pass through to the package list. Default duration reduced to 1200ms.
8+
- Card-body taps trigger autosave. Programmatic `md-checkbox.checked` toggles do not dispatch `change`, so a sibling click listener on `.card[data-package]` calls `scheduleFlush()` directly. Coalesced with the existing change-event path via `saveScheduled`.
9+
10+
## v5.53.0 (2026-05-01)
11+
12+
### Bug Fixes
13+
- Keybox badge no longer reports `Revoked` for working keyboxes. Revocation is now informational metadata. Badge states: `OK`, `Invalid`, `No Keybox`.
14+
- `keybox fetch` install gate checks structural validity only: chain integrity, validity window, recognized root, leaf-to-private-key match. Stops rejecting revoked keyboxes from public sources.
15+
- `lookup_revocation` (`rust/src/keybox/validate.rs`) inspects the leaf only. Removes false positives from intermediate-CA entries in unrelated chains of a multi-Key keybox.
16+
- `rust/src/keybox/roots/status.json` refreshed from `https://android.googleapis.com/attestation/status`. 1660 hex entries replace the prior 517-entry mixed-format snapshot.
17+
- `window.y` bound to the global so the inline-script autosave, flag-toggle, and reboot-required prompts produce visible toasts. The bundled `y()` is module-scoped and not reachable from `webui/index.html`.
18+
19+
### Features
20+
- AOSP keybox badge state. Health banner shows a blue `AOSP` pill when an AOSP-rooted keybox (`aosp_ec` or `aosp_rsa`) is loaded on a non-AOSP device. AOSP detection reads `ro.build.tags` from `/system/build.prop`.
21+
- `detect_engine()` (`rust/src/health/mod.rs`) scans installed modules for `name=TEESimulator*` and returns the exact fork name. The badge now shows `TEESimulator-rs` for the Rust fork and `TEESimulator` for upstream.
22+
- Automatic-mode `target.txt` seed includes `com.google.android.gms!`, `com.google.android.gsf!`, and `com.android.vending!`. Applied in both `generate_initial_target()` and `generate_minimal_target()` in `install_func.sh`.
23+
24+
### Changed
25+
- `ValidationReport.ok` aggregates with `any` instead of `all`. A multi-Key keybox installs when at least one Key is structurally valid.
26+
- `KeyboxInfo` JSON drops the `revoked` field. Revocation metadata remains as `revocation_serial` and `revocation_reason` per Key.
27+
- `StatusInfo` JSON adds `is_aosp_device: bool`.
28+
- `health_keybox_aosp` i18n key added to `webui/locales/template.xml` and 24 per-language strings files.
29+
- Manual install (vol-down) preserves any existing `target.txt` verbatim. Removed the unconditional GMS/GSF/Vending/Oplus/Coloros append loop in `customize.sh`.
30+
331
## v5.52.0 (2026-05-01)
432

533
### Features

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ Real-time status directly in your module manager — no need to open anything.
103103
**WebUI**
104104
- [x] **Glass morphism design** — AMOLED dark gradient (`#0F0F1A``#1A1A2E`), 6 accent color presets with random selection on launch
105105
- [x] **Health status banner** — live engine state (green/red/orange)
106-
- [x] **Keybox status pill:** green `OK`, red `Revoked`, amber `Invalid`, gray `No Keybox`, derived live from the keybox validation report with the full error list on hover
106+
- [x] **Keybox status pill:** green `OK`, blue `AOSP` when an AOSP-rooted keybox is loaded on a non-AOSP device, amber `Invalid` for structural failures, gray `No Keybox` when absent. Hover surfaces the full validation error list. Revocation is exposed as JSON metadata but no longer drives the badge color since TEESimulator routes around Google's attestation status list at runtime
107107
- [x] **Keybox automation panel** — 6 source cards, interval scheduler with preset chips (1h–7d) and custom input with min/hr/day toggle, manual fetch
108108
- [x] **Target list auto-refresh** — every 3s, with search and per-app mode control
109109
- [x] **23 languages** with RTL support

bin/x86/ta-enhanced

-82.6 MB
Binary file not shown.

bin/x86_64/ta-enhanced

-87.8 MB
Binary file not shown.

customize.sh

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -164,11 +164,6 @@ if [ "$AUTOMATION_ENABLED" -eq 1 ]; then
164164
generate_initial_target
165165
elif [ "$HAS_TARGET" -eq 1 ]; then
166166
ui_print " 📋 $(_msg target_preserved)"
167-
for _app in com.google.android.gms com.google.android.gsf com.android.vending \
168-
com.oplus.deepthinker com.heytap.speechassist com.coloros.sceneservice; do
169-
pm list packages -s 2>/dev/null | grep -q "package:$_app" || continue
170-
grep -qxF "$_app" "$TARGET_FILE" 2>/dev/null || echo "$_app" >> "$TARGET_FILE"
171-
done
172167
pm list packages -3 2>/dev/null | sed 's/^package://' | sort > "$AUTOMATION_DIR/known_packages.txt"
173168
else
174169
generate_minimal_target

install_func.sh

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -101,9 +101,9 @@ com.coloros.sceneservice"
101101

102102
# System-apps-only target.txt for manual mode
103103
generate_minimal_target() {
104-
local system_apps="com.google.android.gms
105-
com.google.android.gsf
106-
com.android.vending
104+
local system_apps="com.google.android.gms!
105+
com.google.android.gsf!
106+
com.android.vending!
107107
com.facebook.appmanager
108108
com.facebook.services
109109
com.facebook.system
@@ -183,9 +183,9 @@ generate_initial_target() {
183183
local user_packages
184184
user_packages=$(pm list packages -3 2>/dev/null | sed 's/^package://' | sort)
185185

186-
local system_apps="com.google.android.gms
187-
com.google.android.gsf
188-
com.android.vending
186+
local system_apps="com.google.android.gms!
187+
com.google.android.gsf!
188+
com.android.vending!
189189
com.facebook.appmanager
190190
com.facebook.services
191191
com.facebook.system

module.prop

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
id=TA_enhanced
22
name=Tricky Addon Enhanced
3-
version=v5.52.0
4-
versionCode=50055
3+
version=v5.53.1
4+
versionCode=50058
55
author=Enginex0
66
description=Enhanced TrickyStore addon with dual-source keybox, auto security patch, conflict detection & sleek WebUI
77
updateJson=https://raw.githubusercontent.com/Enginex0/tricky-addon-enhanced/main/update.json

rust/Cargo.lock

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

rust/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "ta-enhanced"
3-
version = "5.52.0"
3+
version = "5.53.1"
44
edition = "2021"
55

66
[dependencies]

rust/src/cli/webui_init.rs

Lines changed: 20 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ pub struct StatusInfo {
4343
pub ts_fork_supported: bool,
4444
pub ts_james_fork: bool,
4545
pub magisk_available: bool,
46+
pub is_aosp_device: bool,
4647
}
4748

4849
#[derive(Serialize)]
@@ -72,7 +73,6 @@ pub struct ConflictApp {
7273
#[serde(rename_all = "camelCase")]
7374
pub struct KeyboxInfo {
7475
pub valid: bool,
75-
pub revoked: bool,
7676
pub source: String,
7777
pub root_type: String,
7878
pub last_fetch: Option<String>,
@@ -129,10 +129,10 @@ fn read_patch_dates() -> (String, String, String) {
129129
(system, boot, vendor)
130130
}
131131

132-
fn check_keybox() -> (bool, String, bool, Vec<String>) {
132+
fn check_keybox() -> (bool, String, Vec<String>) {
133133
let path = Path::new(KEYBOX_PATH);
134134
if !path.exists() {
135-
return (false, "none".into(), false, vec!["keybox.xml not found".into()]);
135+
return (false, "none".into(), vec!["keybox.xml not found".into()]);
136136
}
137137
match crate::keybox::validate::validate_file_full(path) {
138138
Ok(report) => {
@@ -141,19 +141,30 @@ fn check_keybox() -> (bool, String, bool, Vec<String>) {
141141
.first()
142142
.map(|k| k.root_type.as_snake_case().to_string())
143143
.unwrap_or_else(|| "unknown".into());
144-
let revoked = report.keys.iter().any(|k| k.revocation_reason.is_some());
145144
let errors: Vec<String> = report
146145
.keys
147146
.iter()
148147
.filter(|k| !k.ok)
149148
.flat_map(|k| k.errors.clone())
150149
.collect();
151-
(report.ok, root_type, revoked, errors)
150+
(report.ok, root_type, errors)
152151
}
153-
Err(e) => (false, "unknown".into(), false, vec![e.to_string()]),
152+
Err(e) => (false, "unknown".into(), vec![e.to_string()]),
154153
}
155154
}
156155

156+
fn detect_aosp_device() -> bool {
157+
let Ok(content) = std::fs::read_to_string("/system/build.prop") else {
158+
return false;
159+
};
160+
let tags = content
161+
.lines()
162+
.find_map(|l| l.strip_prefix("ro.build.tags="))
163+
.map(str::trim)
164+
.unwrap_or("");
165+
!tags.is_empty() && tags != "release-keys"
166+
}
167+
157168
fn build_conflicts(cfg: &Config) -> ConflictReport {
158169
if !cfg.conflict.enabled {
159170
return ConflictReport { modules: Vec::new(), apps: Vec::new() };
@@ -181,7 +192,8 @@ pub fn handle_webui_init(cfg: &Config) -> anyhow::Result<()> {
181192
let engine_running = crate::health::is_engine_enabled();
182193
let total = count_target_entries();
183194
let (system, boot, vendor) = read_patch_dates();
184-
let (kb_valid, kb_root_type, kb_revoked, kb_errors) = check_keybox();
195+
let (kb_valid, kb_root_type, kb_errors) = check_keybox();
196+
let is_aosp_device = detect_aosp_device();
185197
let vbhash_active = std::fs::read_to_string(BOOT_HASH_PATH)
186198
.map(|h| h.trim().len() == 64 && h.trim().chars().all(|c| c.is_ascii_hexdigit()))
187199
.unwrap_or(false);
@@ -228,11 +240,11 @@ pub fn handle_webui_init(cfg: &Config) -> anyhow::Result<()> {
228240
ts_fork_supported,
229241
ts_james_fork,
230242
magisk_available,
243+
is_aosp_device,
231244
},
232245
conflicts: build_conflicts(cfg),
233246
keybox: KeyboxInfo {
234247
valid: kb_valid,
235-
revoked: kb_revoked,
236248
source: if kb_valid { cfg.keybox.source.clone() } else { "none".into() },
237249
root_type: kb_root_type,
238250
last_fetch: None,

0 commit comments

Comments
 (0)