Day03 3.2 HOOK

发布时间 2023-06-17 18:17:13作者: Chimengmeng

Day03 3.2 HOOK

【一】hook框架frida

  • Hook 框架是一种技术,用于在运行时拦截和修改应用程序的行为。

  • 通过 Hook,你可以劫持应用程序的方法调用、修改参数、篡改返回值等,以达到对应用程序的修改、增强或调试的目的

  • 常见的有:

  • Xposed Framework

    • Xposed 是一个功能强大的开源 Hook 框架,可以在不修改应用程序源代码的情况下,对应用程序进行各种修改。
    • 它允许你编写模块来拦截和修改应用程序的方法调用,修改应用程序的行为和逻辑。
  • Frida

    • Frida 是一个跨平台的动态 Hook 框架,支持安卓和其他操作系统。
    • 它提供了一个强大的 JavaScript API,可以在运行时对应用程序进行 Hook,包括方法拦截、参数修改、调用注入等。
    • Frida 可以用于安全研究、逆向工程和应用程序调试等方面。

【二】下载安装

注意:需要电脑端[电脑端要安装python解释器环境]和手机端同时安装,版本必须对应

【1】电脑端安装

  • 指定版本安装
pip install frida==16.0.1
pip install frida-tools==12.0.1
  • 安装最新版
pip install frida        # 16.0.9
pip install frida-tools  # 12.1.2
  • 正常都可以顺利安装,若安装出现错误,下载源码包安装

必须根据 :frida版本 + Python版本 + 操作系统 来选择下载响应的egg或whl文件。

https://pypi.doubanio.com/simple/frida/
pip install frida-16.0.1-cp37-abi3-macosx_10_9_x86_64.whl

【2】手机端安装 frida-server

  • 1 先查看手机架构
adb shell getprop ro.product.cpu.abi

arm64-v8a
  • 2 下载 frida-server
https://github.com/frida/frida/releases
  • 3 解压,上传到手机 /data/local/tmp/ 目录下

  • -解压得到文件,把文件上传到手机

 adb push ./今日软件/frida-server/frida-server-16.0.19-android-arm64  /data/local/tmp/
  • 4 赋予可执行权限
adb shell  # 进入手机命令行
su        # 切换为超级用
户
cd /data/local/tmp/
chmod 755 frida-server-16.0.19-android-arm64  # 加入执行权限
ls -al   # 查看权限

【三】启动并hook应用

【1】手机端启动 frida 服务端

  • 切换到手机的/data/local/tmp目录下
adb shell
su
cd /data/local/tmp
./frida-server-16.0.19-android-arm64

报错解决

方案一:重启手机
方案二:运行 adb shell setenforce 0

【2】电脑端配置

(1)配置端口转发

  • 方式一:命令行中敲
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")

(2)编写python代码,打印手机中的进程

# 枚举手机上的所有进程 & 前台进程
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)

(3)错误解决

# 没有配置端口转发
adb forward tcp:27042 tcp:27042
adb forward tcp:27043 tcp:27043

【四】hook 某智赢的加密算法encodeMD5

import frida
import sys
# 连接手机设备
rdev = frida.get_remote_device()

# 包名:com.che168.autotradercloud
# 车智赢+
session = rdev.attach("车智赢+")
scr = """
Java.perform(function () {
    //找到类 反编译的首行+类名:com.autohome.ahkit.utils下的
    var SecurityUtil = Java.use("com.autohome.ahkit.utils.SecurityUtil");

    //替换类中的方法
    SecurityUtil.encodeMD5.implementation = function(str){
        console.log("参数:",str);
        var res = this.encodeMD5(str); //调用原来的函数
        console.log("返回值:",res);
        return str;
    }
});
"""

script = session.create_script(scr)

def on_message(message, data):
    print(message, data)

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

【五】Python Hook方式

  • Spawn 方式适应场景:
    • Spawn 方式是在目标应用程序启动时直接注入 Frida 的 Agent 代码
需要在应用程序启动的早期阶段进行 Hook。

需要访问和修改应用程序的内部状态
	例如应用程序的全局变量、静态变量等。

需要 Hook 应用程序的初始化过程
	以实现对应用程序的自定义初始化逻辑。

需要在应用程序的上下文中执行代码
	并与其他模块或库进行交互。
  • Attach 方式适应场景:
    • Attach 方式是在目标应用程序已经运行的过程中动态地连接并注入 Frida 的 Agent 代码
需要对已经运行的应用程序进行 Hook
	即动态地连接到正在运行的进程。

需要在应用程序运行时拦截和修改特定的方法调用。

需要实时监视和修改应用程序的行为
	例如参数修改、返回值篡改等。

需要对应用程序进行调试和分析
	以查找潜在的问题和漏洞。

【1】attach方式(手动操作)

import frida
import sys
# 连接手机设备
rdev = frida.get_remote_device()

# 包名:com.che168.autotradercloud
# 车智赢+
session = rdev.attach("车智赢+")
scr = """
Java.perform(function () {
    //找到类 反编译的首行+类名:com.autohome.ahkit.utils下的
    var SecurityUtil = Java.use("com.autohome.ahkit.utils.SecurityUtil");

    //替换类中的方法
    SecurityUtil.encodeMD5.implementation = function(str){
        console.log("参数:",str);
        var res = this.encodeMD5(str); //调用原来的函数
        console.log("返回值:",res);
        return str;
    }
});
"""

script = session.create_script(scr)

def on_message(message, data):
    print(message, data)

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

【2】spawn方式(自动重启app,适用于在应用程序启动的早期阶段进行)

import frida
import sys

rdev = frida.get_remote_device()
pid = rdev.spawn(["com.che168.autotradercloud"])
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()

【3】js Hook方式javaScript+终端

# 代码 hook.js
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";
    }
});

【4】attach,先启动app,然后再在终端执行

frida -UF -l hook.js  

【5】spwan,脚本自动重启APP并进行Hook

frida -U -f com.che168.autotradercloud -l hook.js

# 注意:输入q + 再点击回车则退出