Add boot timing and AVB/Play Integrity evasion
Boot timing system defers all modifications until after Play Integrity first attestation completes. Monitors DroidGuard (com.google.android.gms.unstable) CPU activity to detect attestation window. PI watcher daemon auto-hides mods during periodic re-checks — unmounts spoofs, removes non-stock props, ensures boot state reads green/locked/enforcing, then re-applies after check finishes. post-fs-data.sh cleaned to only set stock-safe props during early boot. KernelSU version props hidden. WebUI boot timing panel with hide/unhide controls.
This commit is contained in:
@@ -357,6 +357,40 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Boot Timing -->
|
||||
<div class="card">
|
||||
<div class="card-title"><span class="dot" id="bootDot"></span> Boot Timing / AVB Evasion</div>
|
||||
<div class="row">
|
||||
<div>
|
||||
<div class="row-label">Boot Timing</div>
|
||||
<div class="row-desc">Defer mods until after Play Integrity passes</div>
|
||||
</div>
|
||||
<select class="sel" id="bootTiming" onchange="setConf('boot_timing', this.value)">
|
||||
<option value="0">Disabled (apply immediately)</option>
|
||||
<option value="1">Enabled (wait for PI)</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div>
|
||||
<div class="row-label">PI Watcher</div>
|
||||
<div class="row-desc">Auto-hide during re-attestation checks</div>
|
||||
</div>
|
||||
<div class="row-value" id="piWatcherStatus">—</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div>
|
||||
<div class="row-label">Boot State</div>
|
||||
<div class="row-desc">Verified boot props</div>
|
||||
</div>
|
||||
<div class="row-value" id="bootState">—</div>
|
||||
</div>
|
||||
<div class="btn-row">
|
||||
<button class="btn" onclick="bootAction('hide')">Hide Now</button>
|
||||
<button class="btn" onclick="bootAction('unhide')">Unhide</button>
|
||||
<button class="btn" onclick="bootAction('status')">Check Status</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Driver Spoofing -->
|
||||
<div class="card">
|
||||
<div class="card-title"><span class="dot" id="spoofDot"></span> Driver Spoofing</div>
|
||||
@@ -493,6 +527,37 @@
|
||||
if (fmFreq) document.getElementById('fmFreq').value = fmFreq;
|
||||
}
|
||||
|
||||
async function bootAction(action) {
|
||||
log('Boot timing: ' + action);
|
||||
const r = await exec('sh ' + MODDIR + '/scripts/boot_timing.sh ' + action);
|
||||
log(r.stdout.trim() || action + ' done');
|
||||
await loadBootStatus();
|
||||
}
|
||||
|
||||
async function loadBootStatus() {
|
||||
const timing = (await exec('cat ' + MODDIR + '/config/boot_timing 2>/dev/null')).stdout.trim();
|
||||
document.getElementById('bootTiming').value = timing || '0';
|
||||
|
||||
const dot = document.getElementById('bootDot');
|
||||
dot.className = 'dot' + (timing === '1' ? '' : ' off');
|
||||
|
||||
// PI watcher
|
||||
const watcherPid = (await exec('cat ' + MODDIR + '/run/pi_watcher.pid 2>/dev/null')).stdout.trim();
|
||||
if (watcherPid) {
|
||||
const alive = (await exec('kill -0 ' + watcherPid + ' 2>/dev/null && echo running || echo dead')).stdout.trim();
|
||||
document.getElementById('piWatcherStatus').textContent = alive === 'running' ? 'Active (PID ' + watcherPid + ')' : 'Dead';
|
||||
} else {
|
||||
document.getElementById('piWatcherStatus').textContent = timing === '1' ? 'Will start on boot' : 'Disabled';
|
||||
}
|
||||
|
||||
// Boot state
|
||||
const vb = await gp('ro.boot.verifiedbootstate');
|
||||
const fl = await gp('ro.boot.flash.locked');
|
||||
const vbm = await gp('ro.boot.vbmeta.device_state');
|
||||
document.getElementById('bootState').textContent =
|
||||
'vboot=' + (vb || '?') + ' flash=' + (fl || '?') + ' vbmeta=' + (vbm || '?');
|
||||
}
|
||||
|
||||
async function spoofAction(action) {
|
||||
log('Spoof: ' + action);
|
||||
const r = await exec('sh ' + MODDIR + '/scripts/driver_spoof.sh ' + action);
|
||||
@@ -676,6 +741,7 @@
|
||||
await loadSdrInfo();
|
||||
await loadControllerInfo();
|
||||
await loadRtlStatus();
|
||||
await loadBootStatus();
|
||||
await loadSpoofStatus();
|
||||
await loadStealthStatus();
|
||||
log('Done');
|
||||
|
||||
Reference in New Issue
Block a user