mirror of
https://github.com/ApfelTeeSaft/OpenRoyale.git
synced 2026-08-26 19:33:32 +00:00
41 lines
1.8 KiB
Bash
41 lines
1.8 KiB
Bash
set -euo pipefail
|
|
APK="${1:?usage: verify_apk.sh <app.apk> [armeabi-v7a|arm64-v8a|universal]}"
|
|
EXPECT="${2:-}"
|
|
[ -f "$APK" ] || { echo "APK not found: $APK"; exit 1; }
|
|
REQUIRED_LIBS=(libfmod.so libg.so libcr.so)
|
|
fail=0
|
|
|
|
echo "[*] Zip integrity"; unzip -tq "$APK" >/dev/null && echo " ok" || { echo " CORRUPT"; fail=1; }
|
|
echo "[*] classes.dex present"; unzip -l "$APK" | grep -q 'classes.*\.dex' && echo " ok" || { echo " MISSING dex"; fail=1; }
|
|
echo "[*] AndroidManifest present"; unzip -l "$APK" | grep -q 'AndroidManifest.xml' && echo " ok" || { echo " MISSING manifest"; fail=1; }
|
|
|
|
echo "[*] Native libs / ABI check"
|
|
TMP="$(mktemp -d)"; trap 'rm -rf "$TMP"' EXIT
|
|
unzip -qo "$APK" 'lib/*' -d "$TMP" 2>/dev/null || true
|
|
mapfile -t ABIS < <(ls "$TMP/lib" 2>/dev/null || true)
|
|
if [ "${#ABIS[@]}" -eq 0 ]; then echo " NO native libs in APK"; fail=1; fi
|
|
for abi in "${ABIS[@]}"; do
|
|
echo " ABI $abi:"
|
|
case "$abi" in
|
|
armeabi-v7a) want="ELF 32-bit.*ARM";;
|
|
arm64-v8a) want="ELF 64-bit.*aarch64\|ELF 64-bit.*AArch64\|ELF 64-bit.*ARM aarch64";;
|
|
*) want=".";;
|
|
esac
|
|
for f in "$TMP/lib/$abi"/*.so; do
|
|
[ -e "$f" ] || continue
|
|
desc="$(file -b "$f")"
|
|
if echo "$desc" | grep -qiE "$want"; then echo " ok $(basename "$f") [$desc]"
|
|
else echo " BAD $(basename "$f") expected /$want/ got: $desc"; fail=1; fi
|
|
done
|
|
if [ "$abi" = "arm64-v8a" ]; then
|
|
for req in "${REQUIRED_LIBS[@]}"; do
|
|
[ -e "$TMP/lib/$abi/$req" ] || { echo " MISSING required arm64 lib: $req (arm64 INCOMPLETE)"; fail=1; }
|
|
done
|
|
fi
|
|
done
|
|
|
|
[ -z "$EXPECT" ] || { [ -d "$TMP/lib/$EXPECT" ] || [ "$EXPECT" = universal ] || { echo "[!] expected ABI '$EXPECT' not in APK"; fail=1; }; }
|
|
|
|
if [ "$fail" -eq 0 ]; then echo "[+] VERIFY OK: $APK"; else echo "[x] VERIFY FAILED: $APK"; fi
|
|
exit "$fail"
|