$ cat writeup.md…
$ cat writeup.md…
hackthebox
English summary: Given an Android APK file that uses a native library to dynamically decrypt and load hidden code. The goal is to reverse engineer the native library, recover the XOR key, decrypt the hidden DEX payload, and extract the flag.
$ cat /etc/rate-limit
Rate limit reached (20 reads/hour per IP). Showing preview only — full content returns at the next hour roll-over.
The malware forensics lab identified a new technique for hiding and executing code dynamically. A sample that seems to use this technique has just arrived in their queue. Can you help them?
English summary: Given an Android APK file that uses a native library to dynamically decrypt and load hidden code. The goal is to reverse engineer the native library, recover the XOR key, decrypt the hidden DEX payload, and extract the flag.
The challenge provides an APK file (SAW.apk). Initial extraction reveals:
classes.dex — main Dalvik bytecodelib/ — native libraries for multiple architectures (arm64-v8a, armeabi-v7a, x86, x86_64)
libdefault.so — loaded by the applibnative-lib.so — NOT loaded (decoy)Java Layer Analysis (jadx):
com.stego.sawlibdefault.so via System.loadLibrary("default")open=sesame to proceedpublic native String a(String str, String str2);
str = FILE_PATH_PREFIX (app's data directory)str2 = user input from EditText dialogNative Library Analysis (libdefault.so):
JNI_OnLoad: Registers native method a for com/stego/saw/MainActivity.data section:
l at 0x3de0: [10, 11, 24, 15, 94, 49, 12, 15]m at 0x3e00: [108, 103, 40, 110, 42, 88, 98, 104]input[i] XOR l[i] == m[i]jni_def symbol using mask 0x64 ('d')The key validation uses: input[i] XOR l[i] == m[i]
Therefore: key[i] = l[i] XOR m[i]
...
$ grep --similar