Open lovelmh13 opened 1 year ago
因为在网上找的教程都或多或少有一些不完整,没讲明白的地方。自己踩了一些坑。这里记录一下完整的安装配置的流程
因为我是前端,这里很多东西都是第一次设计,所以会啰嗦的尽量详细的都讲一遍怎么安装和配置
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 里能用了再说。
python --version
如果想要切换其他的版本,可以这样:
#创建一个 3.5 的环境 conda create --name py35 python=3.5 #激活它 source activate py35
去官网下载对应系统的模拟器。 并安装要 hook 的 apk 包。 设置里已经默认开启了 root 权限。 剩下的配置我们后面用到的时候在说
安装方式,两个装:
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 结尾的,其他的不用管
frida --version
然后使用 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/ # 第一个参数是文件的路径,第二个参数是要放到的模拟器系统的目录(是安卓系统里的目录,不是咱们的电脑里的目录,所以在电脑里是找不到的)
然后依然是使用 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
然后不要关这个终端,我们再开启一个终端,执行 frida-ps -U 看一下有没有东西,是否开启成功了 有列表了,就说明我们 frida-server 开启成功了,如果没有我们要的对应 app,那么就在模拟器里点击 app, 把它打开,再重新执行一下就有了,以闲鱼为例:
frida-ps -U
去官网下载,注册网上搜一下就有,不注册也一样可以用
这一步是让电脑可以抓网站的包的,跳过也行
这里安装证书,然后到钥匙串访问中找到这个证书,改为「始终信任」
给电脑安装了证书,但是抓包的时候依然显示 unknown,需要配置一下这两个地方
给模拟器安装证书,不能够简单的在模拟器里打开浏览器,直接访问 chls.pro/ssl 这样安装,这样只是安装到了用户里面,需要安装到系统才可以顺利抓包
先在模拟器中代理到电脑的 ip ip 可以通过 ifconfig 或者 option+点击 wifi 图标查看
导出 charles 证书, 并重命名 我选择的是导出 pem, 使用终端命令,来查看 hash 值,并把它复制出来把这个证书文件改名为 hash.0: openssl x509 -subject_hash_old -in charles-ssl-proxying-certificate.pem
保存到模拟器的系统目录下 同样使用 adb push
adb push
./adb push /Users/xxx/Downloads/52e594d4.0 /system/etc/security/cacerts/
然后就可以在设置 - 安全 - 信任的凭据 - 系统下面找到它了
这个是来用反编译 apk 包的,我们直接去官网下载,然后安装,如果提示我们需要 java 依赖,就根据它提示给的网站进去直接下载安装就好了。
这里以闲鱼为例,我想抓包闲鱼,但是因为闲鱼是走的 spdy 协议,不是 http 协议,所以不能被抓包,我们需要强制关闭 spdy 协议让它走 http 协议。
先用 jadx-gui 打开闲鱼的 apk,然后找到对应的代码 然后就可以对这个方法进行 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 就可以了。
我们先启动 frida-server,在上面的「安装、启用 frida」里面有,然后再执行 pythone 代码 python ./code.py,代码可以正常跑起来不报错就成功了
python ./code.py
参考文章: Charles+frida抓包闲鱼APP Android 添加系统受信任证书,解决 Charles、Fiddler 等 HTTPS 抓包报错问题 mac本安装Frida
前言
因为在网上找的教程都或多或少有一些不完整,没讲明白的地方。自己踩了一些坑。这里记录一下完整的安装配置的流程
因为我是前端,这里很多东西都是第一次设计,所以会啰嗦的尽量详细的都讲一遍怎么安装和配置
所需安装的软件
安装步骤
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 里能用了再说。如果想要切换其他的版本,可以这样:
安装模拟器
去官网下载对应系统的模拟器。 并安装要 hook 的 apk 包。 设置里已经默认开启了 root 权限。 剩下的配置我们后面用到的时候在说
安装、启用 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,来启动 frida-server
然后不要关这个终端,我们再开启一个终端,执行
frida-ps -U
看一下有没有东西,是否开启成功了 有列表了,就说明我们 frida-server 开启成功了,如果没有我们要的对应 app,那么就在模拟器里点击 app, 把它打开,再重新执行一下就有了,以闲鱼为例:安装 charles
安装
去官网下载,注册网上搜一下就有,不注册也一样可以用
配置
给电脑安装证书
这一步是让电脑可以抓网站的包的,跳过也行
这里安装证书,然后到钥匙串访问中找到这个证书,改为「始终信任」
配置 proxy settings 和 SSL Proxying Settings
给电脑安装了证书,但是抓包的时候依然显示 unknown,需要配置一下这两个地方
给模拟器安装证书
给模拟器安装证书,不能够简单的在模拟器里打开浏览器,直接访问 chls.pro/ssl 这样安装,这样只是安装到了用户里面,需要安装到系统才可以顺利抓包
先在模拟器中代理到电脑的 ip ip 可以通过 ifconfig 或者 option+点击 wifi 图标查看
导出 charles 证书, 并重命名 我选择的是导出 pem, 使用终端命令,来查看 hash 值,并把它复制出来把这个证书文件改名为 hash.0: openssl x509 -subject_hash_old -in charles-ssl-proxying-certificate.pem
保存到模拟器的系统目录下 同样使用
adb push
然后就可以在设置 - 安全 - 信任的凭据 - 系统下面找到它了
jadx-gui 安装
这个是来用反编译 apk 包的,我们直接去官网下载,然后安装,如果提示我们需要 java 依赖,就根据它提示给的网站进去直接下载安装就好了。
使用 frida 来进行 hook
这里以闲鱼为例,我想抓包闲鱼,但是因为闲鱼是走的 spdy 协议,不是 http 协议,所以不能被抓包,我们需要强制关闭 spdy 协议让它走 http 协议。
先用 jadx-gui 打开闲鱼的 apk,然后找到对应的代码 然后就可以对这个方法进行 hook:
这里 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