lovelmh13 / myBlog

个人博客 记录菜狗的学习之路
6 stars 0 forks source link

小白的 frida hook 教程 #181

Open lovelmh13 opened 1 year ago

lovelmh13 commented 1 year ago

前言

因为在网上找的教程都或多或少有一些不完整,没讲明白的地方。自己踩了一些坑。这里记录一下完整的安装配置的流程

因为我是前端,这里很多东西都是第一次设计,所以会啰嗦的尽量详细的都讲一遍怎么安装和配置

所需安装的软件

  1. python 环境
  2. 夜神模拟器,试过 mumu 和夜神,最后选了它,因为它自带了 adb,mumu 我没有看有没有
  3. charles —— 抓包,用习惯了
  4. frida —— 对代码进行 hook 的工具
  5. 准备个要 hook 的 apk 安装包,我用了某鱼的
  6. jadx-gui —— 反编译包,用来找要 hook 的代码的

安装步骤

python 环境

macOS 自带 python 环境,后面我们要用 pip 来装 frida 所以需要它。

不过自带的 python 环境是 2.7 的,在用对应版本的 pip 安装 frida 会有报错,所以我们第一步要准备一个 3.x 的 python 环境。

不推荐直接升级系统自带的 python 环境,我们先安装 Conda 来管理 python 环境(把 Conda 相成 nvm,类比 nvm 管理 node 版本一样,Conda 也是可以管理多个 python 环境,是个 python 版本管理工具)。

进入 Conda 网站,去下载安装包。

安装好了以后,在终端执行 python --version,应该就不是 2.7 而是 3.11.3 了,这是已经被 Conda 设置为了默认的版本,但是如果用 vs code 的终端,会发现还是 2.7,这里我暂时没有管,现在 iTerm 里能用了再说。

如果想要切换其他的版本,可以这样:

#创建一个 3.5 的环境
conda create --name py35 python=3.5

#激活它
source activate py35

安装模拟器

官网下载对应系统的模拟器。 并安装要 hook 的 apk 包。 设置里已经默认开启了 root 权限。 剩下的配置我们后面用到的时候在说

安装、启用 frida

安装

安装方式,两个装:

pip install frida-tools
pip install frida 

然后,我们需要安装 frida-server,这个我们一定要安装跟 frida 版本一致的。 我输入 frida --version 并看不到 frida 版本,所以是在 pip 安装的时候就看的安装的版本。 我的 frida 是 16.1.3,那么就在这里,到找 frida-inject-16.1.3-android-x86.xz 下载并解压。 这里我提供的下载地址只是 16.1.3,如果要换成别的版本,就把 url 上的 tag/16.1.3 换成对应的版本就可以了。 文件找 -android-x86.xz 结尾的,其他的不用管

然后使用 adb 工具将解压后的产物放到模拟器内部 adb 不用我们自己安装,夜神模拟器的目录里有 adb,我们可以直接用。 进入夜神模拟器的目录下(/Applications/NoxAppPlayer.app/Contents/MacOS 这个目录根据自己安装的情况找),找到 adb,执行 push 命令

./adb push /Users/xxx/Downloads/frida-server-16.1.3-android-x86 /data/local/tmp/ # 第一个参数是文件的路径,第二个参数是要放到的模拟器系统的目录(是安卓系统里的目录,不是咱们的电脑里的目录,所以在电脑里是找不到的)

image

启用

然后依然是使用 adb,来启动 frida-server

./adb shell # 启动 shell
su
chmod 777 /data/local/tmp/frida-server-16.1.3-android-x86 # 给 frida-server 读写权限,如果可以直接启动 frida-server 的话,也可以省略这步
data/local/tmp/frida-server-16.1.3-android-x86 # 启动 frida-server

image

然后不要关这个终端,我们再开启一个终端,执行 frida-ps -U 看一下有没有东西,是否开启成功了 image 有列表了,就说明我们 frida-server 开启成功了,如果没有我们要的对应 app,那么就在模拟器里点击 app, 把它打开,再重新执行一下就有了,以闲鱼为例: image

安装 charles

安装

官网下载,注册网上搜一下就有,不注册也一样可以用

配置

给电脑安装证书

这一步是让电脑可以抓网站的包的,跳过也行 Snipaste_2023-08-06_01-06-47

image

这里安装证书,然后到钥匙串访问中找到这个证书,改为「始终信任」

配置 proxy settings 和 SSL Proxying Settings

给电脑安装了证书,但是抓包的时候依然显示 unknown,需要配置一下这两个地方 image image

image image

给模拟器安装证书

给模拟器安装证书,不能够简单的在模拟器里打开浏览器,直接访问 chls.pro/ssl 这样安装,这样只是安装到了用户里面,需要安装到系统才可以顺利抓包

然后就可以在设置 - 安全 - 信任的凭据 - 系统下面找到它了 image

jadx-gui 安装

这个是来用反编译 apk 包的,我们直接去官网下载,然后安装,如果提示我们需要 java 依赖,就根据它提示给的网站进去直接下载安装就好了。

使用 frida 来进行 hook

这里以闲鱼为例,我想抓包闲鱼,但是因为闲鱼是走的 spdy 协议,不是 http 协议,所以不能被抓包,我们需要强制关闭 spdy 协议让它走 http 协议。

先用 jadx-gui 打开闲鱼的 apk,然后找到对应的代码 image 然后就可以对这个方法进行 hook:

import frida, sys
def on_message(message, data):
    print("[%s] => %s" % (message, data))

pid = 0
device = frida.get_usb_device(1000)
process = device.enumerate_processes()

for data in process:
    if data.name == "闲鱼":
        pid = data.pid
        break
session = device.attach(pid)

uuid = '''
    Java.perform(
        function(){
                console.log("############################ Frida 开启 ############################");
                /* 此处是 hook 关闭 spdy 协议 */
                const switchConfigSession = Java.use("mtopsdk.mtop.global.SwitchConfig");
                if (switchConfigSession) {
                    console.log(`------>定位到类名: ${switchConfigSession}`);
                    switchConfigSession.C.implementation = function(){
                        console.log(`------>定位到函数: is_enableSpdy`);
                        return false;
                        }
                };
'''

script = session.create_script(uuid)
script.on('message', on_message)
script.load()
sys.stdin.read()

这里 uuid 写的是 js 代码。我们拦截了 mtopsdk.mtop.global.SwitchConfig ,对里面的 C 方法进行重写,改成返回 false,就关闭了 spdy。

从网上找别人的教程,是 hook 的 A 方法,我复制过来尝试发现不管用,所以用了 jadx-gui 反编译,自己找代码,发现我用的安装包,换成了 C 方法,所以这里改成了 C 就可以了。

使用 hook

我们先启动 frida-server,在上面的「安装、启用 frida」里面有,然后再执行 pythone 代码 python ./code.py,代码可以正常跑起来不报错就成功了

参考文章: Charles+frida抓包闲鱼APP Android 添加系统受信任证书,解决 Charles、Fiddler 等 HTTPS 抓包报错问题 mac本安装Frida