React Native是一个移动应用程序框架,最常用于通过启用React和本机平台功能来为Android和iOS开发应用程序。如今,在你所有资产(有时使用相同的代码)的平台上使用React变得越来越流行,包括公司必须提供的任何移动应用程序。

在检测时,我们通常集中精力尽可能扩大攻击面。这通常意味着深入研究已经为移动平台编写的应用程序,以查找其他API端点或其他更多信息,例如API密钥形式的敏感凭据。

这篇博文的最终目标是能够从APK到React Native JavaScript,可以对其进行进一步分析以分析API路由和敏感凭证是否泄漏。

通常,在反转Android应用程序时,会使用dex2jar将其反编译,然后使用JD-GUI进行分析。在处理React Native应用程序时,如果该应用程序具有你要分析的任何本机代码,这将很有用,但是大多数情况下,应用程序的核心逻辑在于React JavaScript,无需使用即可获取dex2jar。

注意:dex2jar通过将Java字节码转换为Dalvik字节码来工作,因此,并不能始终保证干净有效的输出,因此请不要害怕使用该smali工具来探究Dalvik字节码。

从React Native APK获取JavaScript

对于此示例,我将从以下React Native应用程序中提取JavaScript:

com.react_native_examples(https://apkpure.com/react-native-examples/com.react_native_examples

下载完上述APK后,请使用以下命令将其解压缩到新文件夹中:

unzip React\ Native\ Examples_v1.0_apkpure.com.apk -d ReactNative

浏览到新创建的ReactNative文件夹,然后找到该assets 文件夹。在此文件夹中,应包含index.android.bundle。该文件将以最小格式包含所有React JavaScript。

目录文件的力量

如果能够找到名为的文件index.android.bundle.map,则可以以最小化格式分析源代码。map文件包含允许你映射缩小的标识符的源映射。如果你要反转的React Native应用程序的assets文件夹中包含地图文件,则可以通过index.html在同一目录中创建一个文件,其中包含以下内容来利用此文件:

<script src="index.android.bundle"></script>

保存此文件,然后在Google Chrome中打开它。打开开发人员工具栏(对于OS X为Command + Option + J,对于Windows为Control + Shift + J),然后单击“源”。您应该看到一个整齐地映射的JavaScript文件,分为组成主捆绑包的文件夹和文件:

利用随附的地图文件分析Chrome DevTools中的index.android.bundle

搜索敏感的凭据和端点

在React Native应用程序中流行的一种模式是使用第三方数据库,例如Firebase。过去,发现有许多应用程序在其React Native应用程序中使用不正确的Firebase身份验证模型,并且包含过于宽松的API密钥。

在Donald Daters应用程序中就是这种情况,该应用程序很容易受到此攻击媒介的攻击,并在此处发布了博客。

为了从中提取Firebase API密钥,可以对以下字符串进行grep处理index.android.bundle:

FIREBASE_API_KEYFIREBASE_AUTH_DOMAINFIREBASE_DB_URLFIREBASE_BUCKETapiKey

例如:

grep -rnis 'apiKey' index.android.bundle... omitted for brevity ...initializeApp({     apiKey:"AIzaSyDokhX9fzFlJMfXjwbiiG-2fGDhi4kLPFI",authDomain:"react-native-examples-bcc4d.firebaseapp.com",databaseURL:"https://react-native-examples-bcc4d.firebaseio.com",projectId:"react-native-examples-bcc4d",storageBucket:"",messagingSenderId:"928497342409"});... omitted for brevity ...

除了查找Firebase凭证之外,index.android.bundle还可以分析该文件的API端点。在我正在反转的React Native应用程序中,通过浏览Chrome中未缩小的JavaScript,我能够找到许多API端点:

通过遍历未缩小的源查找API端点

与Firebase接口

以下Python脚本可用于与Firebase数据库连接。使用此脚本之前,请使用来安装pyrebase pip install pyrebase。

import pyrebaseconfig = {       "apiKey": "FIREBASE_API_KEY",  "authDomain": "FIREBASE_AUTH_DOMAIN_ID.firebaseapp.com",  "databaseURL": "https://FIREBASE_AUTH_DOMAIN_ID.firebaseio.com",  "storageBucket": "FIREBASE_AUTH_DOMAIN_ID.appspot.com",}firebase = pyrebase.initialize_app(config)db = firebase.database()print(db.get())

上面的脚本将对给定的Firebase数据库进行身份验证,然后打印出数据库的内容。仅当提供给此脚本的API密钥具有读取数据库的权限时,才可能这样做。要测试数据库上的其他操作,例如写入数据库,请参阅Pyrebase文档。

结论

通过此博客文章中的信息,你现在应该能够轻松分析React Native Android应用程序的JavaScript。通常可以通过分析打包到应用程序APK文件中的JavaScript来从React Native应用程序中提取敏感的凭证和API端点。通过提取APK并打开index.android.bundle文件assets夹中的文件,可以轻松获得React Native应用程序中包含的JavaScript 。

关注:Hunter网络安全 获取更多资讯
网站:bbs.kylzrv.com
CTF团队:Hunter网络安全
文章:Shubham Shah
排版:Hunter-匿名者

更多相关文章

  1. 为何Android普通APP可以执行私有数据中的so文件,而system app却不
  2. UMeng统计分析Android集成文档
  3. [置顶] Android无线开发的几种常用技术(阿里巴巴资深工程师原创
  4. Android使用Socket(Tcp/Udp)协议进行数据传输(传输大文件)
  5. Android(安卓)RePlugin 使用及源码分析(1)
  6. Android(安卓)系列 4.6在显示其他应用程序的同时运行后台服务
  7. Maven系列 7.文档和报告
  8. JS、Android、IOS 批量生成国际化字符串工具
  9. Android从捕获全局异常说起

随机推荐

  1. 输入法软键盘搜索执行两次的解决方法
  2. Android(安卓)系统入门
  3. Arcgis android 10.2安装方法
  4. 2.3.1TextView控件
  5. Android原生(Native)C(JNI/NDK)开发之二:f
  6. Android学习整理 - 系列
  7. TextView去除内边距
  8. 【Android Training UI】创建自定义Views
  9. Android使用ActivityGroup设置android:wi
  10. 深入浅出 - Android系统移植与平台开发(四