介绍
Java层和native层的逻辑都可以hook,电脑编写的和执行的脚本,修改之后无需重新编译和额外安装在手机上,环境配置简单,很好的支持跨平台
1.电脑安装frida
pip install frida-tools
2.frida-server下载安装
frida-server下载需要注意的有两点:
1.安装的frida版本:需要下载与安装的frida版本对应的frida-server,否则会出错。
先查看下手机的版本是32位还是64位
C:\Users\tyj>adb shell
flame:/ $ getprop ro.product.cpu.abi
arm64-v8a
可以看到我这里是64位的
注:我所用手机是Goole Pixl4,已经root过解了BL锁
下载地址:https://github.com/frida/frida/releases
下载完成之后解压之后将解压的文件夹内容推过去
adb push frida-core-devkit-16.2.1-android-arm64 /data/local/tmp/
3.启动frida服务并连接
adb shell进入设备shell环境,cd到临时目录下,给frida-server文件设置可执行权限使其可以运行
(app) P:\APP逆向>adb shell
flame:/ $ cd /data/local/tmp/
flame:/data/local/tmp $ ls
frida-core-devkit-16.2.1-android-arm64.tar.xz
adb shell "su - setenforce 0"
2.报错AttributeError: ‘_frida.Process’ object has no attribute ‘get_small_icon’
解决方案
pip3 install --upgrade frida-tools
3.安装测试应用
现在手机上安装对应的app,这里使用的崔大的app来测试,下载地址如下
http://app5.scrape.center
下载结束之后,在文件所在文件夹中通过adb安装
adb install app5.apk
保存文件,文件名:hook_java.js
Java.perform(() => {
let MainActivity = Java.use('com.germey.appbasic1.MainActivity')
console.log('start hook')
MainActivity.getMessage.implementation = () => {
send('Start Hook!')
return '6'
}
})
python脚本如下
import frida
import sys
CODE = open('hook_java.js', encoding='utf-8').read()
# PROCESS_NAME = 'com.germey.appbasic1'
PROCESS_NAME = 'AppBasic1'
def on_message(message, data):
print(message)
process = frida.get_usb_device().attach(PROCESS_NAME)
print(process)
script = process.create_script(CODE)
script.on('message', on_message)
script.load()
sys.stdin.read()
执行结果如下,手机对应app结果也会修改
D:\ProgramData\Anaconda3\envs\app\python.exe P:\FridaDemo\Hook_Java.py
Session(pid=8069)
start hook
{'type': 'send', 'payload': 'Start Hook!'}
今天的学习就到这里了~~~