HOOK框架Frida

Hook框架Frida

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

1.1 下载和安装

## 注意:电脑端和手机端同时安装---》版本必须一致
-电脑端:安装python解释器--》安装frida模块
-手机端:软件--frida-server
他们版本必须一致

1.1.1 电脑端安装

#1  电脑上,安装两个模块
pip install frida  --upgrade      # 16.3.3
pip install frida-tools --upgrade # 12.4.3

1.1.2 手机端安装

# 1 查看手机架构
adb shell getprop ro.product.cpu.abi	# arm64-v8a
# 2 下载frida-server
https://github.com/frida/frida/releases
# 3 根据平台下载:
https://github.com/frida/frida/releases/download/16.3.3/frida-server-16.3.3-android-arm64.xz
# 4 解压
# 5 推送到手机【真机】 :跟我一样的目录
 adb push ./frida-server-16.3.3-android-arm64  /data/local/tmp/
# 6 给软件赋予执行权限:打开cmd
adb shell # 进入到手机
su        # 获取超级用户权限--》第一次--》手机上有提示:允许root权限
cd /data/local/tmp # 进入到手机的文件夹下
ls        # 没有文件,原来是空的,推动过来后,就有frida-server-16.3.3-android-arm64
ls -al    # 查看文件详情,发现没有x权限
chmod +x ./frida-server-16.3.3-android-arm64  # 给它加x权限
ls -al    # 查看文件详情,有x权限了,ok了

image
image
image

问题

# 1 进入手机,敲su,提示:inaccessible or not found 表示手机没root,没有su命令在手机上
# 2 进入手机,敲su,提示:Permission denied,你拒绝了它的root权限
	-手机是否会弹让你允许
# 3 为什么要加执行权限
	-后期,咱们要在手机上运行:frida-server,如果没有执行权限,运行不了
	-chmod +x 加入执行权限后,后面在手机上才可以运行这个软件

image

1.2 启动并hook应用

1.2.1 手机端启动frida-server

# 1 切换到frida-server所在目录:/data/local/tmp
adb shell
su
cd /data/local/tmp
./frida-server-16.3.3-android-arm64 # 敲回车

# 会卡主,表示启动了,虽然我们在电脑端操作的,但是它运行在手机上

image
报错
方案一: 重启手机 (推荐)
image

1.2.2 电脑端启动

1.2.2.1 配置端口转发

# 方式一:使用命令【cmd中】
adb forward tcp:27042 tcp:27042
adb forward tcp:27043 tcp:27043

# 方式二:使用python命令【python调用系统命令--本质和上面一模一样】
import subprocess
subprocess.getoutput("adb forward tcp:27042 tcp:27042")
subprocess.getoutput("adb forward tcp:27043 tcp:27043")

image

1.2.3 编写python代码,打印手机中的app进程

# 枚举手机上的所有进程 & 前台进程
import frida
# 获取设备信息,做了端口转发--》
rdev = frida.get_remote_device()
# 枚举所有的进程
# processes = rdev.enumerate_processes()
# for process in processes:
#     print(process)

# 获取在前台运行的APP
front_app = rdev.get_frontmost_application()
print(front_app)
# Application(identifier="tv.danmaku.bili", name="哔哩哔哩", pid=4511, parameters={})
# 包名:tv.danmaku.bili
# app名:哔哩哔哩

image

1.3 hook某app的加密算法

# 1 案例--》hook车智赢+app
# 2 下载地址:https://appdownload.che168.com/usedcar/csy/index.html?pvareaid=106101
# 3 安装到手机上
	adb install  app名字  # 敲回车
    
# 4 抓包 登录接口
# 5 反编译定位 pwd 加密的位置:public static final String encodeMD5(String str)
	-我们搜到的,也是我们猜的
    -代码是否真正在执行这个位置,存疑?
    
# 6 通过hook,来确定,它确实执行的是这里
	-在电脑端写代码--》hook--app的encodeMD5
    -手机端操作登录--》如果控制台打印出我们写的东西,表示执行了这个地方
# 7 hook脚本,来hook-encodeMD5方法
import frida
import sys
# 连接手机设备
rdev = frida.get_remote_device()
session = rdev.attach("车智赢+")
#### 以后,上面都是固定的,只要改app名字即可#####

#src中写js语法
scr = """
Java.perform(function () {
    // 1 找到类,赋值给一个变量
    var SecurityUtil=Java.use("com.autohome.ahkit.utils.SecurityUtil");
    // 2 替换类中的方法
    SecurityUtil.encodeMD5.implementation=function(str){
        console.log('我执行了---')
        console.log('传入的参数 是:',str)
        // 2.1 调用原来的函数
        var res=this.encodeMD5(str)
        // 2.2 打印出返回值--》密码加密后的结果
        console.log('加密结果是 是:',res)
        // 2.3 返回
        return res;
    }
});
"""



#### 以后下面都是固定的,什么都不用改###########
script = session.create_script(scr)
def on_message(message, data):
    print(message, data)

script.on("message", on_message)
script.load()
sys.stdin.read()


# 1 保证app在前台运行
# 2 右键运行代码---》代码会卡住-->手机端启动了frida-server并且做了端口转发了

image

1.4 Python的hook方式

# Spawn 方式适应场景:Spawn 方式是在目标应用程序启动时直接注入 Frida 的 Agent 代码

需要在应用程序启动的早期阶段进行 Hook。
需要访问和修改应用程序的内部状态,例如应用程序的全局变量、静态变量等。
需要 Hook 应用程序的初始化过程,以实现对应用程序的自定义初始化逻辑。
需要在应用程序的上下文中执行代码,并与其他模块或库进行交互。

# Attach 方式适应场景:Attach 方式是在目标应用程序已经运行的过程中动态地连接并注入 Frida 的 Agent 代码
需要对已经运行的应用程序进行 Hook,即动态地连接到正在运行的进程。
需要在应用程序运行时拦截和修改特定的方法调用。
需要实时监视和修改应用程序的行为,例如参数修改、返回值篡改等。
需要对应用程序进行调试和分析,以查找潜在的问题和漏洞。

# spawn:app不用运行,就可以,想hook,app就会执行的函数,就用这种方案
# attach:app要先运行,才可以,想hook,app启动后,点击某个按钮,才执行的,就用这种方案

1.4.1 attach方案(刚刚那个就是)

import frida
import sys
# 连接手机设备
rdev = frida.get_remote_device()
session = rdev.attach("车智赢+")
#### 以后,上面都是固定的,只要改app名字即可#####

#src中写js语法
scr = """
Java.perform(function () {
    // 1 找到类,赋值给一个变量
    var SecurityUtil=Java.use("com.autohome.ahkit.utils.SecurityUtil");
    // 2 替换类中的方法
    SecurityUtil.encodeMD5.implementation=function(str){
        console.log('我执行了---')
        console.log('传入的参数 是:',str)
        // 2.1 调用原来的函数
        var res=this.encodeMD5(str)
        // 2.2 打印出返回值--》密码加密后的结果
        console.log('加密结果是 是:',res)
        // 2.3 返回
        return res;
    }
});
"""

#### 以后下面都是固定的,什么都不用改###########
script = session.create_script(scr)
def on_message(message, data):
    print(message, data)

script.on("message", on_message)
script.load()
sys.stdin.read()

# 1 保证app在前台运行
# 2 右键运行代码---》代码会卡住-->手机端启动了frida-server并且做了端口转发了

1.4.2 spawn 方案(app不用启动)

app不用启动,脚本运行,会自动启动app,并进行hook,适用于app一起动执行的函数的hook

import frida
import sys
rdev = frida.get_remote_device()
pid = rdev.spawn(["com.che168.autotradercloud"]) # 需要写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 res;
    }
});
"""


####下面也是固定的#####
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()

1.5 JS的hook方式(他们代码一样)

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 res;
    }
});

1.5.1 attach

frida -UF -l hook.js  

1.5.2 spawn方案

frida -U -f com.che168.autotradercloud -l hook.js
posted @ 2025-05-09 10:55  生而自由爱而无畏  阅读(44)  评论(0)    收藏  举报