mirror of
https://github.com/ApfelTeeSaft/OpenRoyale.git
synced 2026-08-26 19:33:32 +00:00
27 lines
1.6 KiB
Bash
27 lines
1.6 KiB
Bash
#!/usr/bin/env bash
|
|
# analyze_native_libs.sh - regenerate native-side facts for analysis/NATIVE_LIB_*.md.
|
|
# Emits ELF headers, NEEDED, JNI exports, import/export counts, and modern-linker checks.
|
|
set -euo pipefail
|
|
HERE="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
PROJ="$(cd "$HERE/../.." && pwd)"
|
|
NL="$PROJ/original_reference/native_libs_original"
|
|
OUT="$PROJ/analysis/rawdata"; mkdir -p "$OUT"
|
|
[ -d "$NL" ] || { echo "Run extract_apk.sh first"; exit 1; }
|
|
|
|
for so in "$NL"/*.so; do
|
|
b="$(basename "$so")"
|
|
echo "================= $b ================="
|
|
file "$so"
|
|
readelf -h "$so" | grep -iE 'Class|Type|Machine|Flags'
|
|
echo "-- NEEDED --"; readelf -d "$so" 2>/dev/null | grep -E 'NEEDED|SONAME' | grep -oE '\[.*\]'
|
|
echo -n "-- TEXTREL: "; readelf -d "$so" 2>/dev/null | grep -qi TEXTREL && echo PRESENT || echo none
|
|
echo -n "-- exec-stack: "; readelf -l "$so" 2>/dev/null | grep -A1 GNU_STACK | grep -qi RWE && echo EXEC || echo non-exec
|
|
echo -n "-- JNI exports: "; readelf -W --dyn-syms "$so" 2>/dev/null | grep -cE 'Java_|JNI_OnLoad'
|
|
# per-lib dumps
|
|
readelf -W --dyn-syms "$so" 2>/dev/null | grep -E 'Java_|JNI_OnLoad' | awk '{print $8}' | sort -u > "$OUT/${b%.so}_jni.txt" || true
|
|
readelf -W --dyn-syms "$so" 2>/dev/null | awk '$7!="UND" && ($4=="FUNC"||$4=="OBJECT"){print $8}' | sort -u > "$OUT/${b%.so}_exports.txt" || true
|
|
readelf -W --dyn-syms "$so" 2>/dev/null | awk '$7=="UND"{print $8}' | grep -vE '^$' | sort -u > "$OUT/${b%.so}_imports.txt" || true
|
|
echo " exports=$(wc -l < "$OUT/${b%.so}_exports.txt") imports=$(wc -l < "$OUT/${b%.so}_imports.txt")"
|
|
done
|
|
echo "[+] Dumps in $OUT/"
|