app逆向之frida的相关配置
1.电脑端配置
1.在电脑上安装frida相关的模块
1.在电脑上安装一个python3.7的系统解释器
2.创建一个项目,基于python3.7的系统创建一个虚拟环境
3.安装模块
pip install frida == 16.0.1
pip install frida-tools == 12.0.1
2.手机端配置
1.下载frida-server:网址:https://github.com/frida/frida/releases
# adb 查看手机的架构: adb shell getprop ro.product.cpu.abi
# 下载frida-server 的版本和电脑端frida的版本要一致
# 注:解压后找到解压后的文件,不是文件夹 frida-server-16.0.1-апdroid-аrm 64
# 可以对该文件重命名
2.上传到手机
adb push xxxxx /data/local/tmp/
3.如何查看上传到手机后的文件
>>> adb shell
>>> su # 获取root权限
>>> cd /data/local/tmp/
>>> ls
4.赋予可执行权限
>>> chmod 755 上传文件名
3.启动+编写hook脚本+运行
1.端口转发
>>> аdb forward tcp:27042 tср 27042
>>> adb forward tср:27043 tср 27043
注:每次运行端口转发这样会有些繁琐,我们可以编写一个固定的脚本,用python代码来执行以上的两条命令
import subprocess
subprocess.getoutput("adb forward tcp:27042 tcp:27042")
subprocess.getoutput("adb forward tcp:27043 tcp:27043")
编写hook脚本+运行
1.固定的脚本+获取进程
# 枚举手机上的所有进程 & 前台进程
import frida
# 获取设备信息
rdev = frida.get_remote_device()
print(rdev)
# 枚举所有的进程
# processes = rdev.enumerate_processes()
# for process in processes:
# print(process)
# 获取在前台运行的APP
front_app = rdev.get_frontmost_application()
print(front_app)
2.固定的脚本,只需修改内部的hook脚本就OK啦
1.手动app启动
#hook模板(基于attach,手动app启动)
import frida
import sys
# 1.连接手机设备
rdev = frida.get_remote_device()
# 2.hook手机中的哪个App,(app的包名字)
session = rdev.attach("车智赢+")
scr = """
Java.perform(function(){
//包,类
var UserModel = Java.use("com.che168.autotradercloud.user.model.UserModel")
//hook替换
UserModel.loginByPassword.implementation = function(str,str2,str3,responseCallback){
console.log("请求来了....");
console.log(str2,str3);
this.loginByPassword(str,str2,str3,responseCallback);
}
});
"""
script = session.create_script(scr)
def on_message(message, data):
print(message, data)
script.on("message", on_message)
script.load()
sys.stdin.read()
# 先启动app,后运行hook脚本
2.自动app启动
# spawn这种模式是在启动hook脚本的时候自动开启App
import frida
import sys
rdev = frida.get_remote_device()
pid = rdev.spawn(["com.hupu.shihuo"])
session = rdev.attach(pid)
scr = """
Java.perform(function(){
//包,类 com.azhon.appupdate.dialog.UpdateDialog
var UpdateDialog = Java.use("com.azhon.appupdate.dialog.UpdateDialog")
//hook替换
UpdateDialog.show.implementation = function(){
console.log("++++++++show来啦++++++++++++++");
//this.show();
}
});
"""
script = session.create_script(scr)
def on_message(message, data):
print(message, data)
script.on("message", on_message)
script.load()
rdev.resume(pid)
sys.stdin.read()
3.javascript+终端命令
Java.perform(function(){
//包,类 com.azhon.appupdate.dialog.UpdateDialog
var UpdateDialog = Java.use("com.azhon.appupdate.dialog.UpdateDialog")
//hook替换
UpdateDialog.show.implementation = function(){
console.log("++++++++show来啦++++++++++++++");
//this.show();
}
});
运行js的吗命令
attach,先启动app,然后再在终端运行
>>> frida -UF -l xxxx.js
spwan 脚本自动重启app并进行hook
>>> frida -U -f com.che168.autotradercloud -l xxx.js