Hook 框架 Frida

Hook 框架 Frida

Hook框架介绍

Hook 框架是一种技术,用于在运行时拦截和修改应用程序的行为。
通过 Hook,你可以劫持应用程序的方法调用、修改参数、篡改返回值等,以达到对应用程序的修改、增强或调试的目的

常见hook框架:

  • Xposed Framework:Xposed 是一个功能强大的开源 Hook 框架,可以在不修改应用程序源代码的情况下,对应用程序进行各种修改。它允许你编写模块来拦截和修改应用程序的方法调用,修改应用程序的行为和逻辑。
  • Frida:Frida 是一个跨平台的动态 Hook 框架,支持安卓和其他操作系统。它提供了一个强大的 JavaScript API,可以在运行时对应用程序进行 Hook,包括方法拦截、参数修改、调用注入等。Frida 可以用于安全研究、逆向工程和应用程序调试等方面。

下载和安装

Frida 需要同时安装在手机端和电脑端。电脑端基于python 解释器环境安装,并且手机端的软件版本需要和python 模块版本保持一致

电脑端安装

# 装最新,两个模块
	pip install frida --upgrade
  pip install frida-tools --upgrade
  
pip list | grep frida                                                                                                       
  frida                             16.4.10  # 手机端也要装这个版本
  frida-tools                       12.5.0

手机端安装

# 1 查看手机架构
	adb shell getprop ro.product.cpu.abi
	# arm64-v8a  
# 2 去github下载 frida-server 对应手机的版本
	https://github.com/frida/frida/releases
    下载:frida-server-16.4.10-android-arm64.xz
    
# 3 解压后得到:frida-server-16.4.10-android-arm64
# 4 上传到手机 : /data/local/tmp
	adb push ./frida-server-16.4.10-android-arm64  /data/local/tmp
# 5 在cmd中进入到手机内
	adb shell
    su   # 手机需要解root
    cd /data/local/tmp
    ls # 查看当前目录下所有文件和文件夹
    # 看到这个文件:frida-server-16.4.10-android-arm64
# 6 赋予这个软件执行权限--》liunx
	chmod +x frida-server-16.4.10-android-arm64  # 加上执行权限	

Frida 的使用

手机端启动frida服务端

# 切换到frida-server所在路径
adb shell
su
cd /data/local/tmp
./frida-server-16.4.10-android-arm64 # 卡在这里--》就是运行起来了

# ctrl+c 是停止,使用过程中不要停止

# 遇到如下错误:
	重启手机

在这里插入图片描述

电脑端配置

# 方式一:命令行执行
adb forward tcp:27042 tcp:27042  # 端口转发
adb forward tcp:27043 tcp:27043

# 方式二:使用python执行
import subprocess
subprocess.getoutput("adb forward tcp:27042 tcp:27042")
subprocess.getoutput("adb forward tcp:27043 tcp:27043")

在这里插入图片描述

简单使用

import frida
# 获取设备信息
rdev=frida.get_remote_device()
# 循环打印出目前手机上运行的进程
processes = rdev.enumerate_processes()
for process in processes:
    print(process)


# 获取手机前台在运行的应用
front_app = rdev.get_frontmost_application()
print(front_app)
#Application(identifier="com.google.android.apps.photos", name="相册", pid=29155, parameters={}) 应用包名和应用名


# 下图错误原因--》没有做端口转发,或者手机端没启动frida-server

在这里插入图片描述

python的hook方式

frida的hook 脚本的api是要用js写的,能用python写是因为我们装了个模块去进行转换,本质还是在写js

hook方式分两种

-spawn方案
	-在app启动的时候,就注入
    -解决app在一开始运行时就要hook的情况
    	-唯品会:只要app第一次启动,会向后端发送一个请求,注册设备(自动发的)
	
-attach方案
	-要hook的应用启动了,写了脚本运行--》脚本运行后注入,程序卡住
    -当进行某个操作--》触发hook到的函数,控制台就会有打印
    -针对于登录:
    	-点击了登陆了按钮,再hook,知道hook的时机

hook车智赢的密码逆向

  1. 获取车智赢app信息

    import frida
    # 获取设备信息
    rdev=frida.get_remote_device()
    # 获取手机前台在运行的应用
    front_app = rdev.get_frontmost_application()
    print(front_app)
    
    
    # Application(identifier="com.che168.autotradercloud", name="车智赢+", pid=28133, parameters={})
    
  2. attach方案

# 刚刚hook车智赢的密码加密就是这个方案
import frida
import sys
#1  连接手机设备
rdev = frida.get_remote_device()

#2 链接到这个应用: 车智赢+
session = rdev.attach("车智赢+")  # attach 使用name就行,需要手机app 前台开开app 页面

# 3 重点:字符串--》》js的hook语法
scr = """
//1 外层是固定到的写法
Java.perform(function () {
    //2 找到类 反编译的首行+类名:com.autohome.ahkit.utils下的 配合jadx 使用
    var SecurityUtil = Java.use("com.autohome.ahkit.utils.SecurityUtil");

    //替换类中的方法
    SecurityUtil.encodeMD5.implementation = function(str){
        console.log("入参是:",str);    // 打印入参--》本来传入的密码是111111---》我们可以改成22222
        var res = this.encodeMD5(str); //调用原来的函数
        console.log("返回值:",res); // 把原来函数返回结果打印出来
        return str; // 返回值正常应该是:res,但是我返回了str---》抓包抓到的密码,就是明文密码
    }
});
"""


# 4 以后下面的代码是固定的,不会动--》不用管是什么意思
script = session.create_script(scr)
def on_message(message, data):
    print(message, data)
script.on("message", on_message)
script.load()
sys.stdin.read()
  1. spawn方案
# 使用spawn方案演示hook密码加密
import frida
import sys

rdev = frida.get_remote_device()
pid = rdev.spawn(["com.che168.autotradercloud"])  # spawn 方案 需要使用 identifier,执行程序会自动打开/重启app
session = rdev.attach(pid)

scr = """
Java.perform(function () {
    // 包.类
    var SecurityUtil = Java.use("com.autohome.ahkit.utils.SecurityUtil");
    SecurityUtil.encodeMD5.implementation = function(str){
        console.log("明文:",str);
        var res = this.encodeMD5(str);
        console.log("md5加密结果=",res);
        return "305eb636-eb15-4e24-a29d-9fd60fbc91bf";
    }
});
"""
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()

js的hook方式

js脚本

// 这块实际上就是python hook 里面的 scr
Java.perform(function () {
    // 包.类
    var SecurityUtil = Java.use("com.autohome.ahkit.utils.SecurityUtil");
    SecurityUtil.encodeMD5.implementation = function(str){
        console.log("明文:",str);
        var res = this.encodeMD5(str);
        console.log("md5加密结果=",res);
        return "305eb636-eb15-4e24-a29d-9fd60fbc91bf";
    }
});

attach方案

# 来到当前js所在目录执行--》hook正在运行的应用
frida -UF -l 4-js-hook车智赢加密.js

# 按q退出

spawn方案

# 会重启app,hook 写了包名的应用
frida -U -f com.che168.autotradercloud -l 4-js-hook车智赢加密.js
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

go&Python

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值