Directly from action.sh, service.sh, and utils.sh
From disable_new_mods() - Uses jq differential analysis to compare module lists and disable only new or updated modules.
changed_ids=$("$JQ" -n --slurpfile new "$TMP_FILE" --slurpfile old "$MODULE_LIST" '
($old[0] | map({key: .id, value: .}) | from_entries) as $oldmap |
$new[0][] as $n |
($oldmap[$n.id] // null) as $o |
if $o == null then $n.id else empty end')
From lockdown() - Disables all modules except whitelisted when threshold reached.
for module_folder in "$mdir"/*; do
if [ -d "$module_folder" ]; then
is_whitelisted=0
case ",$whitelist," in *",${id},"* ) is_whitelisted=1 ;; esac
[ "$is_whitelisted" -eq 1 ] && continue
touch "$module_folder/disable"
fi
done
Emergency mode - disables everything including AshLooper itself.
if [ "$LOCKDOWN_TYPE" = "full" ]; then log "Full Lockdown: Disabling everything" fi
Volume + Screen Key Listener - Navigate menus using volume buttons OR touch
VSKL() {
[ "$1" ] && local delay=$1 || local delay=10
local attempts=0
while [ $attempts -lt 3 ]; do
local count=0
while true; do
EVENT_LINE=$(timeout "$delay" /system/bin/getevent -lqc 1)
echo "$EVENT_LINE" | grep -q 'ABS_MT_TRACKING_ID' && return 0
echo "$EVENT_LINE" | grep -q 'KEY_VOLUMEUP.*DOWN' && return 1
echo "$EVENT_LINE" | grep -q 'KEY_VOLUMEDOWN.*DOWN' && return 2
[ $count -gt 9 ] && break
sleep 0.2
done
attempts=$((attempts + 1))
done
}
generate_random_port() {
if [ -c "/dev/urandom" ]; then
PORT=$(od -An -N2 -tu2 /dev/urandom | tr -d ' ')
PORT=$((6000 + (PORT % 4000)))
fi
}
TOKEN=$(generate_secure_token) am start -a android.intent.action.VIEW \ -d "http://127.0.0.1:$LAUNCH_PORT/#$LAUNCH_TOKEN"
OUTPUT=$(printf '%s\n' "$RAW_CMD" | su -c "$BB sh")
Protect essential modules from being disabled during lockdown
whitelist=$(get_prop "whitelist")
pending_adds=",$id_val"
whitelist="$whitelist,$pending_adds"
modify_prop -s "whitelist" "\"$whitelist\""
if [ -d "/data/adb/modules/$mod" ]; then
new_wl="${new_wl},${mod}"
else
log "Whitelist cleanup: '$mod' removed"
fi