disasm / Dockerfile
kemmlowww's picture
Update Dockerfile
6036461 verified
Raw
History Blame Contribute Delete
3.66 kB
FROM ubuntu:22.04
ENV DEBIAN_FRONTEND=noninteractive
ENV JAVA_HOME=/usr/lib/jvm/java-21-openjdk-amd64
ENV ANDROID_SDK_ROOT=/home/user/android-sdk
ENV PATH="${JAVA_HOME}/bin:${ANDROID_SDK_ROOT}/cmdline-tools/latest/bin:${PATH}"
RUN apt-get update && apt-get install -y \
openjdk-21-jdk wget unzip python3 curl ca-certificates \
&& rm -rf /var/lib/apt/lists/*
RUN useradd -m -u 1000 user
WORKDIR /home/user
# Android command-line tools
RUN mkdir -p "$ANDROID_SDK_ROOT/cmdline-tools" && \
cd /tmp && \
wget -q https://dl.google.com/android/repository/commandlinetools-linux-14742923_latest.zip -O cmd.zip && \
unzip -q cmd.zip && \
mv cmdline-tools "$ANDROID_SDK_ROOT/cmdline-tools/latest" && \
rm -f cmd.zip
# Install official NDK
RUN yes | sdkmanager --sdk_root="$ANDROID_SDK_ROOT" --licenses >/dev/null && \
sdkmanager --sdk_root="$ANDROID_SDK_ROOT" "ndk;29.0.14206865"
# Ghidra
ENV GHIDRA_URL=https://github.com/NationalSecurityAgency/ghidra/releases/download/Ghidra_12.0.4_build/ghidra_12.0.4_PUBLIC_20260303.zip
RUN wget -q "$GHIDRA_URL" -O ghidra.zip && \
unzip -q ghidra.zip && \
mv ghidra_* ghidra && \
test -x /home/user/ghidra/support/analyzeHeadless && \
rm ghidra.zip
RUN mkdir -p /data /home/user/android_libs
COPY --chown=user:user libmsaoaidsec.so /home/user/libmsaoaidsec.so
COPY --chown=user:user export_all.py /home/user/export_all.py
# Copy REAL ARM64 libraries from the NDK sysroot
RUN set -eux; \
ndk_root="$(find "$ANDROID_SDK_ROOT/ndk" -mindepth 1 -maxdepth 1 -type d | sort | tail -n 1)"; \
test -n "$ndk_root"; \
arm64_sysroot="$(find "$ndk_root/toolchains/llvm/prebuilt" -type d -path '*/sysroot/usr/lib/aarch64-linux-android' | head -n 1)"; \
test -n "$arm64_sysroot"; \
for lib in \
liblog.so \
libandroid.so \
libEGL.so \
libGLESv2.so \
libGLESv3.so \
libGLESv1_CM.so \
libc.so \
libm.so \
libdl.so \
libz.so; do \
src="$(find "$arm64_sysroot" -type f -name "$lib" | head -n 1)"; \
test -n "$src"; \
cp "$src" "/home/user/android_libs/$lib"; \
done
# UI
RUN cat > /home/user/index.html <<'HTML'
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Ghidra Analysis Active</title>
<style>
body { font-family: Arial, sans-serif; margin: 40px; background: #f6f6f6; color: #111; }
.card { max-width: 760px; background: white; border-radius: 16px; padding: 24px 28px; box-shadow: 0 4px 22px rgba(0,0,0,0.08); }
code { background: #eee; padding: 2px 6px; border-radius: 6px; }
</style>
</head>
<body>
<div class="card">
<h1>Ghidra Analysis Active</h1>
<p>Target: <code>libmsaoaidsec.so</code></p>
<p>Real ARM64 Android libraries are loaded from the official NDK sysroot.</p>
<p>Output: <code>/data/libmsaoaidsec_pseudocode.cpp</code></p>
</div>
</body>
</html>
HTML
# Launcher
RUN cat > /home/user/run.sh <<'SH'
#!/bin/bash
set -euo pipefail
GHIDRA="/home/user/ghidra/support/analyzeHeadless"
test -x "$GHIDRA"
IMPORT_ARGS=()
# Import ARM64 libs first so Ghidra has them in-project before analyzing lib.so
while IFS= read -r -d '' f; do
IMPORT_ARGS+=(-import "$f")
done < <(find ./android_libs -maxdepth 1 -type f -name '*.so' -print0 | sort -z)
# Target last
IMPORT_ARGS+=(-import ./libmsaoaidsec.so)
"$GHIDRA" \
/tmp tmp_proj \
"${IMPORT_ARGS[@]}" \
-scriptPath . \
-postScript export_all.py /data/libmsaoaidsec_pseudocode.cpp \
-deleteProject
echo "--- DECOMPILATION COMPLETE ---"
SH
RUN chmod +x /home/user/run.sh
USER user
CMD python3 -m http.server 7860 & \
./run.sh && \
wait