如何在应用APK文件的情况下检测应用是否使用React Native?

时间:2017-06-01 08:25:12

标签: android react-native apk react-native-android decompiling

我从Google Play下载了APK文件,想知道该应用程序的开发是否使用了React Native库。什么是一种快速而稳定的方法呢? (如果它可以在以后自动化的话会更好 - 但是这种自动化本身超出了这个问题的范围。)

2 个答案:

答案 0 :(得分:11)

我可以为您提供2种解决方案:

  • 解决方案1 ​​

您可以使用dex2jar。 当您打开生成的jar文件时,如果有文件夹/com/facebook/react/,您可以检查它是否使用React Native。

  • 解决方案2

    1. 将您的应用程序APK app.apk重命名为app.zip
    2. 解压缩您的zip文件
    3. 使用Android dexdump中的SDK $ ANDROID_HOME / build-tools // dexdump : dexdump classes.dex`
    4. 在dexdump
    5. 的输出中搜索com/facebook/react

答案 1 :(得分:2)

公认的解决方案当然可以为您提供正确的答案,但是速度会很慢。这是我最初所做的,并且由于我要在数百个APK中运行此脚本,因此它的速度还不足以满足我的需求。我开发了替代解决方案,并在原始解决方案通过5%的APK之前执行了该解决方案。

我不喜欢检查名称中包含com_facebook的布局(另一个现有解决方案)的原因是,对于应用程序使用包含以该字符串开头的布局文件的另一个Facebook SDK来说,这完全是合理的。我不知道有任何误报,但似乎很有可能会有误报。

相反,我检查libreactnativejni.so的存在,我必须想象只有在使用React Native时才会使用。 (我原本是在寻找libyoga.so,但我有一些误报,我想是因为有一个同名的日志记录库。)

具体来说,我使用的是bash脚本中Mac上的这种情况(我认为它是便携式的,但尚未经过测试):

if [ "$(unzip -l $apkfile | grep libreactnativejni.so | wc -l)" -gt "0" ]
then 
echo "Uses RN"
fi