反转 apk - 在 classes.dex 中获取本机代码

逆向工程 安卓 apk
2021-07-05 00:54:34

我已经开始反转一些 android 应用程序。我在这方面有一点经验,但我在一件小事上卡住了。

我试图反转的应用程序使用JNI(java 本地接口),这意味着一些代码不是 java - 它是程序集.. 据我所知,本地代码也应该在classes.dex文件中的某个地方(连同dalvik 字节码)。

我的问题是我正在使用的工具知道将 dex 文件转换为 java 代码(dex2jar)似乎不知道如何处理classes.dex文件中的本机代码所以我的问题是:是否有任何工具知道进行这种转换?如果没有,是否有人对 dex 文件中本机代码的下落有一般了解(如果有的话)?

1个回答

不,本机代码不在 classes.dex 中。如果 android apk 文件有原生代码,那么在解压时,apk 本身应该有一个lib子目录,该子目录可能有依赖于体系结构的子目录 armeabiarmeabi-v7a. x86可能还有其他的,这些将包含本机代码对象。有时,共享对象也可能位于其他目录中,尤其是当它们属于应用程序链接到的某些库时。

例如,我解压缩了一个我知道具有本机代码的应用程序的 apk:

$ unzip -l net.skoobe.reader-1.apk
[ stuff omitted ]    
     2291  2016-03-14 10:27   NDK_LICENSES
    18549  2016-03-14 10:27   assets/www/error.js
   345568  2016-03-14 10:27   assets/armeabi/lib64libcrittercism-v3.so
   308716  2016-03-14 10:27   assets/armeabi-v7a/lib64libcrittercism-v3.so
   345696  2016-03-14 10:27   assets/arm64-v8a/lib64libcrittercism-v3.so
     5088  2016-03-14 10:25   lib/armeabi/librsjni.so
  2890256  2016-03-14 10:26   lib/armeabi/libskoobe.so
     5088  2016-03-14 10:25   lib/armeabi/libRSSupport.so
  2792064  2016-03-14 10:26   lib/armeabi-v7a/libskoobe.so
  4555592  2016-03-14 10:26   lib/x86/libskoobe.so
    18560  2015-03-26 19:09   lib/armeabi-v7a/librsjni.so
   420320  2015-03-26 19:09   lib/armeabi-v7a/libRSSupport.so
    26636  2015-03-26 19:09   lib/x86/librsjni.so
   518512  2015-03-26 19:09   lib/x86/libRSSupport.so
   159719  2016-03-14 10:27   META-INF/MANIFEST.MF
[ more stuff omitted ]