Android 上的本机共享库 (.so) 看起来已加密 - 如何获取?

Native shared library (.so) on Android looks encrypted - how to get it?

我是 reverse-engineering 一个 Android 应用程序。 问题是,我在 Android 内部没有太多经验,我所有的 rev-eng 技能都与 x86 实践有关。 该应用程序的 APK 内部带有两个本机库 (lib...so),两者中更有趣的一个是加密的(没有 ELF header,没有 GCC 签名等)。 希望在使用该应用程序时它会被解密,我将它安装在有根权限的平板电脑上却发现 /data/app-lib/com.[appname]/lib[something].so 也在那里被加密(.so 文件与 APK 中的文件相同),即使应用程序是正在积极使用! 我猜想当应用程序加载本机库时必须进行某种透明解密。

它是 JNI 的某种 built-in 功能吗?如果没有,那是如何实现的? 以及如何在加载此库的过程中捕获应用程序,因为我知道 ld-linux 必须看到正常的 ELF-style 库,否则它会失败。

lib[something].so 技巧既古老又简单。这是一种在安装时将 APK 中的任何 BLOB 解压缩为只读文件的方法。它可能是一些不可执行的数据(加密或未加密)。

另一方面,我不排除该文件确实是一个加密库的可能性。然后一些自定义解密机制将读取它并将输出写入别处。解密的库可以 System.loaded(来自 Java),或从文件系统上的任何位置 dlopened,包括 'external storage'。甚至文件名可能都没有 lib.so.

的痕迹