Frida&Xserver Hook APP

0x00 前言

测试中碰到个带有参数签名验证的APP,导致不能修改参数,于是乎想看一下其中的生成算法。之前同事用过Frida+Xserver的方法来分析,效仿一下,唯一不同之处是无需Xposed。然而因为工具原因忽略了某个重要的因素导致最终没能成功Hook目标APP,方法本身没问题(艹,好像也有问题,Hook方法报错需要Android版本5),记录一下过程,为了下次操作方便。

0x01 环境条件

  • 已root的Android设备(模拟器也行,这里为了测试方便用的真机)

    本文失败原因就是设备Android版本问题,最终在夜神模拟器Android 5版本测试成功

  • Adb

  • Python 3.8 + pip

    可以设置个国内镜像提升速度
    pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple

  • Xserver V0.7.1

    下载Xserver.js和apk

  • Frida 14.2.11

    下载对应构架的服务端文件frida-server-版本-平台-架构.xz并解压备用(在目标机shell(可用adb)上执行getprop ro.product.cpu.abi可查看架构)

0x02 搭建过程

[额外]无线ADB

手机直接USB连接电脑用adb devices命令查看到设备即可,此步骤无线adb非必要(我这破笔记本只有两个USB接口,插了个无线网卡不够用了才出此下策,无线adb偶尔还会断掉)

确认连接

1
adb devices

转换成无线,5555是端口号

1
adb tcpip 5555

然后因为不知道手机ip……直接拿nmap暴力扫一下

1
nmap -n -v -Pn -p 5555 192.168.137.0/24 

知道ip就可以adb连接:

1
adb connect 192.168.137.88:5555

移动端准备

使用adb push把文件放到手机上
本文选择这个/data/local/tmp/目录来存放文件

1
2
adb push XServer.V0.7.1.apk /data/local/tmp/xserver.apk #无需安装,放在这里即可
adb push frida-server-14.2.11-android-arm64 /data/local/tmp/frida-server-14.2.11-android-arm64

然后进adb shell给frida-server设置执行权限并执行

1
2
3
4
5
adb shell
cd /data/local/tmp
su #提升到root权限
chmod +x frida-server-14.2.11-android-arm64 #加执行权限
./frida-server-14.2.11-android-arm64 & #放后台执行,ps一下能看到

桌面端准备

Python安装frida和依赖,注意frida和frida-server保持版本一致

1
2
pip install wheel numpy matplotlib frida==14.2.11 frida-tools==9.1.0
frida --version #查看版本

以上没有问题的话运行frida-ps -U即可看到进程PID和对应包名

0x03 使用

附加到进程

1
frida -U 包名或者PID -l XServer.js

然后访问手机IP:8000即可看到Xserver界面

也可以根据提升端口转发到本机,访问本机的8000端口

1
adb forward tcp:8000 tcp:8000

以上是顺利的情况,然鹅我用过时的工具以为目标APP没加固,于是乎…
也并非权限问题

回到主题

新的状况又出现了……一点hook就报错

0x04 小结

失败加失败
搜了一下Xserver的issues,好像是安卓版本问题,改日换个模拟器再战。

换了夜神安卓5版本的模拟器(x86),成功了。