基于小米6X的逆向环境

114 阅读5分钟

概述

背景介绍

为了获取一些数据来分析行业趋势,打算爬取一个app其中的数据,在逆向的时候发现app的网络接口网络请求的响应是加密的初步判断是通过AES加密,通过学习发现可以使用Frida Hook 来分析加密流程,所以来搭建一套用于Frida 逆向分析的环境。下面是这篇文章一些重要概念的介绍。

Frida

Frida 是一款强大的动态插桩(Dynamic Instrumentation)工具,主要用于 逆向工程、安全研究和移动应用调试。它允许研究人员和开发者在应用程序运行时,直接对其行为进行监控、修改和调试。而 Instrumentation(插桩)是指在 程序执行前或执行过程中,通过插入额外的代码或逻辑来 监控、收集信息或改变程序行为的一种技术。下面是官方对其的解释:

Frida 通过其强大的 Instrumentation 内核 Gum 提供动态插桩功能,Gum 是用 C 编写的。由于这种插桩逻辑往往会频繁变化,所以通常希望用一种脚本语言来编写,这样在开发和维护过程中就能获得更短的反馈循环。这就是 GumJS 派上用场的地方。只需要几行 C 代码,你就可以在一个运行时环境中执行一段 JavaScript,而这个运行时对 Gum 的 API 拥有完整访问权限,从而能够实现函数 Hook、枚举已加载的库及其导入导出函数、读写内存、按模式扫描内存等功能。

怎么把 GumJS(脚本执行引擎)放到目标进程里称之为Frida的操作模式,而Frida 提供了 3种操作模式:

  • 注入模式:这是 Frida 最常见的使用方式
  • 嵌入模式:常用于无法Root和越狱的情况或调试自己开发的App
  • 预加载模式:想在App启动时自动加载某些脚本,而不是每次都通过客户端连接。

在注入模式下,Frida 的工作原理是:先通过 frida-server 进程把 Frida 的 GumJS 引擎(脚本执行引擎)注入到目标应用的进程空间里,然后我们就可以通过 Frida 客户端把自己的 JavaScript 脚本加载进去,实现对函数的 Hook、内存的读写等功能。

Root

要想把 Frida 的 GumJS 成功注入到目标应用的进程里,前提是我们必须具备 对该进程的调试权限。在 Android 或 iOS 设备上,普通用户对大多数系统进程或第三方应用是没有足够权限的,因此需要 ROOT(或越狱)来绕过系统限制。对于Root的解释不做过多阐述,想必各位已经都有一定的概念。

Magisk

在 Android 设备上,获取 Root 权限的方式有很多,而 Magisk 是目前最主流、最安全的一种 Systemless Root 解决方案。所谓 Systemless,是指它不会直接修改系统分区,而是通过修改启动镜像(boot.img),在系统启动时将 Root 权限和相关功能以“虚拟挂载”的方式加载到系统中。这样不仅能让系统分区保持“干净”,而且在需要时可以轻松关闭或卸载 Root。对于一些带有 Root 检测的应用,可以配合Zygisk使其在运行时感知不到 Root 环境。

ROOT环境

解锁BL

小米设备在出厂时 Bootloader 默认处于锁定状态,这是厂商为保证系统安全性和完整性所采取的措施。然而,Bootloader 锁定会带来一些限制:例如无法刷入第三方 recovery(如 TWRP)、无法刷入经过修改的 boot.img(如使用 Magisk 打过补丁的内核镜像)、也无法安装第三方 ROM。对于普通用户来说这能避免误操作带来的风险,但对于需要进行逆向、安全研究或深度定制的开发者来说,这些限制会成为障碍。因此,如果我们想要在设备上使用 Magisk 获取 Root 权限,或者搭建如 Frida 这样的安全研究与调试环境,就必须先对 Bootloader 进行解锁。具体的解锁方式:

安装Magisk

这里我们通过 TWRP 来刷入Magisk。教程如下(注意TWRP的下载版本):

安装Frida

Frida 的安装和使用分为两部分:frida-toolsfrida-serverfrida-tools 是在本地电脑上使用的命令行工具,通过 Python 的 pip install frida-tools 安装即可;而 frida-server 需要安装在目标 Android 设备上,它充当桥梁,让本地的 frida 工具能够注入和操作应用程序。

frida-tools 安装frida-tools:pip install frida-tools ,需要Python环境:安装Python

Frida-server 先通过 adb shell getprop ro.product.cpu.abi 查看设备的 CPU 架构,在frida-server 下载地址选择对应版本的Frida-server;用 adb push 推送到设备的 /data/local/tmp/ 目录中。接着进入 shell,获取 root 权限(su),赋予 frida-server 可执行权限(chmod 755),最后在后台运行它。

测试 通过 frida-ps -Uai 查看设备上正在运行的进程,确认目标应用是否可被注入。 使用 frida -U -n <包名> -l hook.js 加载脚本,实现动态调试和 Hook 操作。

命令速查表

adb shell getprop ro.product.cpu.abi #先通过查看设备架构
adb push frida-server /data/local/tmp/ #推送frida-server 到 /data/local/tmp/
adb shell #获取Shell
su #获取Root权限
chmod 755 /data/local/tmp/frida-server # 修改权限
/data/local/tmp/frida-server & #运行
frida -U -n com.hpbr.bosszhipin -l hook.js #加载脚本
frida-ps -Uai #查看进程

参考资料: