Hook 框架 Frida

2024-08-31 11:20
文章标签 框架 hook frida

本文主要是介绍Hook 框架 Frida,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • Hook 框架 Frida
    • Hook框架介绍
    • 下载和安装
    • Frida 的使用
      • 手机端启动frida服务端
      • 电脑端配置
      • 简单使用
      • python的hook方式
      • js的hook方式

Hook 框架 Frida

Hook框架介绍

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

常见hook框架:

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

下载和安装

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

电脑端安装

# 装最新,两个模块pip install frida --upgradepip install frida-tools --upgradepip 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/tmpadb push ./frida-server-16.4.10-android-arm64  /data/local/tmp
# 5 在cmd中进入到手机内adb shellsu   # 手机需要解rootcd /data/local/tmpls # 查看当前目录下所有文件和文件夹# 看到这个文件:frida-server-16.4.10-android-arm64
# 6 赋予这个软件执行权限--》liunxchmod +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---》我们可以改成22222var 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 sysrdev = 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

这篇关于Hook 框架 Frida的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1123756

相关文章

Python Dash框架在数据可视化仪表板中的应用与实践记录

《PythonDash框架在数据可视化仪表板中的应用与实践记录》Python的PlotlyDash库提供了一种简便且强大的方式来构建和展示互动式数据仪表板,本篇文章将深入探讨如何使用Dash设计一... 目录python Dash框架在数据可视化仪表板中的应用与实践1. 什么是Plotly Dash?1.1

基于Flask框架添加多个AI模型的API并进行交互

《基于Flask框架添加多个AI模型的API并进行交互》:本文主要介绍如何基于Flask框架开发AI模型API管理系统,允许用户添加、删除不同AI模型的API密钥,感兴趣的可以了解下... 目录1. 概述2. 后端代码说明2.1 依赖库导入2.2 应用初始化2.3 API 存储字典2.4 路由函数2.5 应

Python GUI框架中的PyQt详解

《PythonGUI框架中的PyQt详解》PyQt是Python语言中最强大且广泛应用的GUI框架之一,基于Qt库的Python绑定实现,本文将深入解析PyQt的核心模块,并通过代码示例展示其应用场... 目录一、PyQt核心模块概览二、核心模块详解与示例1. QtCore - 核心基础模块2. QtWid

最新Spring Security实战教程之Spring Security安全框架指南

《最新SpringSecurity实战教程之SpringSecurity安全框架指南》SpringSecurity是Spring生态系统中的核心组件,提供认证、授权和防护机制,以保护应用免受各种安... 目录前言什么是Spring Security?同类框架对比Spring Security典型应用场景传统

Python结合Flask框架构建一个简易的远程控制系统

《Python结合Flask框架构建一个简易的远程控制系统》这篇文章主要为大家详细介绍了如何使用Python与Flask框架构建一个简易的远程控制系统,能够远程执行操作命令(如关机、重启、锁屏等),还... 目录1.概述2.功能使用系统命令执行实时屏幕监控3. BUG修复过程1. Authorization

SpringBoot集成图片验证码框架easy-captcha的详细过程

《SpringBoot集成图片验证码框架easy-captcha的详细过程》本文介绍了如何将Easy-Captcha框架集成到SpringBoot项目中,实现图片验证码功能,Easy-Captcha是... 目录SpringBoot集成图片验证码框架easy-captcha一、引言二、依赖三、代码1. Ea

Gin框架中的GET和POST表单处理的实现

《Gin框架中的GET和POST表单处理的实现》Gin框架提供了简单而强大的机制来处理GET和POST表单提交的数据,通过c.Query、c.PostForm、c.Bind和c.Request.For... 目录一、GET表单处理二、POST表单处理1. 使用c.PostForm获取表单字段:2. 绑定到结

修改若依框架Token的过期时间问题

《修改若依框架Token的过期时间问题》本文介绍了如何修改若依框架中Token的过期时间,通过修改`application.yml`文件中的配置来实现,默认单位为分钟,希望此经验对大家有所帮助,也欢迎... 目录修改若依框架Token的过期时间修改Token的过期时间关闭Token的过期时js间总结修改若依

MyBatis框架实现一个简单的数据查询操作

《MyBatis框架实现一个简单的数据查询操作》本文介绍了MyBatis框架下进行数据查询操作的详细步骤,括创建实体类、编写SQL标签、配置Mapper、开启驼峰命名映射以及执行SQL语句等,感兴趣的... 基于在前面几章我们已经学习了对MyBATis进行环境配置,并利用SqlSessionFactory核

cross-plateform 跨平台应用程序-03-如果只选择一个框架,应该选择哪一个?

跨平台系列 cross-plateform 跨平台应用程序-01-概览 cross-plateform 跨平台应用程序-02-有哪些主流技术栈? cross-plateform 跨平台应用程序-03-如果只选择一个框架,应该选择哪一个? cross-plateform 跨平台应用程序-04-React Native 介绍 cross-plateform 跨平台应用程序-05-Flutte