我正在对Android应用进行逆向工程。
问题是,我没有多少Android内部经验,我的所有rev-eng技能都与x86练习有关。
应用程序的APK里面有两个本地库(lib ... so),两个中更有趣的一个是加密的(没有ELF头,没有GCC签名等)。
希望它在应用程序使用时被解密,我将它安装在root平板电脑上,发现/data/app-lib/com.[appname]/lib[something].so
也是加密的(.so文件与APK内部相同),即使应用程序是积极使用!
我推测,当应用程序加载此本机库时,必须进行某种透明解密。
它是JNI的某种内置功能吗?如果没有,那怎么可能实现呢? 以及如何在加载这个库的过程中捕获应用程序,因为我理解ld-linux必须看到一个普通的ELF风格的库,否则它会失败。
答案 0 :(得分:0)
lib[something].so
伎俩古老而简单。这是一种在安装时将APK中的任何BLOB解压缩为只读文件的方法。它可能是一些不可执行的数据(加密或不加密)。
另一方面,我不排除文件真的是加密库的可能性。然后,一些自定义解密机制将读取它并将输出写入别处。解密的库可以是 System.load ed(来自Java),或 dlopen 来自文件系统上的任何位置,包括外部存储'。甚至文件名也可能没有 lib 或 .so 的痕迹。