app逆向之frida的相关配置

发布时间 2023-04-26 16:11:55作者: 字母一哥

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