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

相关文章

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

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

Spring框架5 - 容器的扩展功能 (ApplicationContext)

private static ApplicationContext applicationContext;static {applicationContext = new ClassPathXmlApplicationContext("bean.xml");} BeanFactory的功能扩展类ApplicationContext进行深度的分析。ApplicationConext与 BeanF

数据治理框架-ISO数据治理标准

引言 "数据治理"并不是一个新的概念,国内外有很多组织专注于数据治理理论和实践的研究。目前国际上,主要的数据治理框架有ISO数据治理标准、GDI数据治理框架、DAMA数据治理管理框架等。 ISO数据治理标准 改标准阐述了数据治理的标准、基本原则和数据治理模型,是一套完整的数据治理方法论。 ISO/IEC 38505标准的数据治理方法论的核心内容如下: 数据治理的目标:促进组织高效、合理地

ZooKeeper 中的 Curator 框架解析

Apache ZooKeeper 是一个为分布式应用提供一致性服务的软件。它提供了诸如配置管理、分布式同步、组服务等功能。在使用 ZooKeeper 时,Curator 是一个非常流行的客户端库,它简化了 ZooKeeper 的使用,提供了高级的抽象和丰富的工具。本文将详细介绍 Curator 框架,包括它的设计哲学、核心组件以及如何使用 Curator 来简化 ZooKeeper 的操作。 1

【Kubernetes】K8s 的安全框架和用户认证

K8s 的安全框架和用户认证 1.Kubernetes 的安全框架1.1 认证:Authentication1.2 鉴权:Authorization1.3 准入控制:Admission Control 2.Kubernetes 的用户认证2.1 Kubernetes 的用户认证方式2.2 配置 Kubernetes 集群使用密码认证 Kubernetes 作为一个分布式的虚拟

Spring Framework系统框架

序号表示的是学习顺序 IoC(控制反转)/DI(依赖注入): ioc:思想上是控制反转,spring提供了一个容器,称为IOC容器,用它来充当IOC思想中的外部。 我的理解就是spring把这些对象集中管理,放在容器中,这个容器就叫Ioc这些对象统称为Bean 用对象的时候不用new,直接外部提供(bean) 当外部的对象有关系的时候,IOC给它俩绑好(DI) DI和IO

Sentinel 高可用流量管理框架

Sentinel 是面向分布式服务架构的高可用流量防护组件,主要以流量为切入点,从限流、流量整形、熔断降级、系统负载保护、热点防护等多个维度来帮助开发者保障微服务的稳定性。 Sentinel 具有以下特性: 丰富的应用场景:Sentinel 承接了阿里巴巴近 10 年的双十一大促流量的核心场景,例如秒杀(即突发流量控制在系统容量可以承受的范围)、消息削峰填谷、集群流量控制、实时熔断下游不可用应

利用Django框架快速构建Web应用:从零到上线

随着互联网的发展,Web应用的需求日益增长,而Django作为一个高级的Python Web框架,以其强大的功能和灵活的架构,成为了众多开发者的选择。本文将指导你如何从零开始使用Django框架构建一个简单的Web应用,并将其部署到线上,让世界看到你的作品。 Django简介 Django是由Adrian Holovaty和Simon Willison于2005年开发的一个开源框架,旨在简

Yii框架relations的使用

通过在 relations() 中声明这些相关对象,我们就可以利用强大的 Relational ActiveRecord (RAR) 功能来访问资讯的相关对象,例如它的作者和评论。不需要自己写复杂的 SQL JOIN 语句。 前提条件 在组织数据库时,需要使用主键与外键约束才能使用ActiveReocrd的关系操作; 场景 申明关系 两张表之间的关系无非三种:一对多;一对一;多对多; 在

laravel框架实现redis分布式集群原理

在app/config/database.php中配置如下: 'redis' => array('cluster' => true,'default' => array('host' => '172.21.107.247','port' => 6379,),'redis1' => array('host' => '172.21.107.248','port' => 6379,),) 其中cl