Android Hook之Frida安装使用

news2025/1/20 5:58:01

目录

      • Frida安装
      • 安装frida-server
      • frida-server配置和启动
      • Frida Hook
        • 实例1:
        • 实例2:
      • Frida 常用命令

Frida 是一个动态检测框架,允许开发人员在 Windows、macOS、Linux、iOS 和 Android 上的原生应用程序中注入 JavaScript 或 Python 脚本。该框架可用于操纵应用程序的行为、从中提取信息或与其进行通信。Frida 通常被安全研究人员和渗透测试人员用来对应用程序进行动态分析,并执行钩子函数调用、跟踪函数调用和反向代码等任务。对于移动应用开发人员来说,它也很有用,可以用来进行测试或自动化等任务。

使用Frida需要Python 3环境,python环境请大家自行下载安装。我使用的是python3.7版本。

Frida安装

pip install frida -i https://pypi.mirrors.ustc.edu.cn/simple/ 
pip install frida-tools -i https://pypi.mirrors.ustc.edu.cn/simple/

#查看frida版本
frida --version

安装frida-server

安装frida-server前需要先通过adb连接设备,然后进入虚拟机查看模拟器cpu类型

.\nox_adb.exe shell
getprop ro.product.cpu.abi

请添加图片描述
我的是x86,选择x86的frida-server安装包frida-server-16.0.8-android-x86_64.xz。frida-server版本要和上面安装的frida版本对应。
frida-server下载地址:https://github.com/frida/frida/releases

下载后解压文件,然后推送到模拟器上的/data/local/tmp目录

.\nox_adb.exe push frida-server-16.0.8-android-x86 /data/local/tmp/frida-server

frida-server配置和启动

进入adb shell环境

.\nox_adb.exe shell

赋予frida-server权限

chmod 777 frida-server

启动运行

./frida-server

开启端口转发

.\nox_adb.exe forward tcp:27043 tcp:27043 
.\nox_adb.exe forward tcp:27042 tcp:27042

#我用的是模拟器,如果是真机且adb配的有环境变量,用下面的命令
adb.exe forward tcp:27043 tcp:27043 
adb.exe forward tcp:27042 tcp:27042

重新打开一个cmd窗口运行frida-ps -U,查看是否正常运行。注意需要在有python环境的cmd窗口运行。

#列出设备上正在运行的进程
 frida-ps -U

显示已下信息说明运行正常
请添加图片描述

Frida Hook

通过frida-ps -Ua 命令可以查看到所有打开app的包名
这时候就可以试下frida-trace了,比如想看下微信会打开哪些文件,那么执行命令:

frida-trace -U -f com.tencent.mm -i open

实例1:

下面是一个使用 Frida hook Android 应用程序中的方法的实际例子:
假设我们有一个名为 “com.example.app” 的应用程序,其中有一个类 “com.example.app.Secret”,其中有一个名为 “getSecret” 的方法。这个方法会返回一个字符串,我们想要hook它并在每次调用时打印它的返回值。

  1. 在目标设备上运行 Frida Server。
adb push frida-server /data/local/tmp/
adb shell "chmod 755 /data/local/tmp/frida-server"
adb shell "/data/local/tmp/frida-server &"
  1. 我们在 hook.js文件里面编写钩子的脚本
Java.perform(function () {
    var Secret = Java.use("com.example.app.Secret");
    var secret = Secret.getSecret.implementation = function () {
        console.log("getSecret() called");
        var ret_value = this.getSecret();
        console.log("getSecret() returned: " + ret_value);
        return ret_value;
    };
});
  1. 在本地电脑上,我们可以使用 Frida 来附加到目标进程。
frida -U -f com.example.app -l hook.js

-U 参数表示附加到 USB 设备上的应用程序
-f 参数表示目标进程的包名
-l 参数表示包含 Frida 脚本的文件路径
接着,我们在 hook.js文件里面编写钩子的脚本

最后,在目标应用程序上进行一些操作,并在 Frida 控制台上查看结果,看看钩子是否正常工作。
如果一切顺利,你就可以看到钩子成功地输出了一些信息。

实例2:

使用python脚本来使用frida hook应用程序的例子:

import frida
import sys

def on_message(message, data):
    if message['type'] == 'send':
        print("[*] {0}".format(message['payload']))
    else:
        print(message)

jscode = """
Interceptor.attach(Module.findExportByName("libc.so", "puts"), {
    onEnter: function(args) {
        send(Memory.readCString(args[0]));
    }
});
"""

process = frida.get_usb_device().attach('com.example.app')
script = process.create_script(jscode)
script.on('message', on_message)
script.load()
sys.stdin.read()

其中"com.example.app" 为应用程序的包名, 上述代码将在应用程序的 “libc.so” 中钩住 “puts” 函数,并在回调中打印出信息。
这里,我们使用 frida python API hook应用程序。
frida.get_usb_device().attach('com.example.app')连接到指定包名的应用程序进程。 然后使用script.load()加载 JavaScript 代码并开始监听事件。
这只是一个简单的示例,实际使用中需要根据具体场景来修改代码。

Frida 常用命令

  • frida --version - 显示当前 Frida 的版本。
  • frida-ps -U - 显示当前正在运行的 USB 设备上的进程列表。
  • frida-ps -Uai - 列出安装的程序
  • frida-ps -Ua - 列出运行中的程序(查看包名很方便)
  • frida-ps - 显示当前正在运行的进程列表。
  • frida -U -l script.js -f package.name - 通过 USB 连接到设备并在 package.name 应用程序上运行 script.js 脚本。
  • frida-trace -i function_name -U package.name - 在 package.name 应用程序上跟踪函数 function_name 的调用。
  • frida-discover -U - 在 USB 连接的设备上扫描可钩住的函数。
  • frida -U -f package.name --no-pause - 运行 package.name 应用程序并在启动时附加到它,不暂停它。
  • frida-ls-devices - 显示可用的 Frida 设备。
  • frida-kill -U - 结束与 USB 设备上的 Frida 相关进程。
  • frida-trace -U -i "*libc.so*" package.name - 在 package.name 应用程序上跟踪所有 libc.so 中的函数调用。
  • frida -U -l script.js -f package.name -n libexample.so - 在 package.name 应用程序上的 libexample.so 中运行 script.js 脚本。
  • frida-trace -U -I "*sqlite3*" package.name - 在 package.name 应用程序上跟踪所有包含“sqlite3”的函数调用.

  • 📢博客主页:https://blog.csdn.net/qq233325332
  • 📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!
  • 📢本文由 陌北V1 原创,首发于 CSDN博客🙉
  • 📢停下休息的时候不要忘了别人还在奔跑,希望大家抓紧时间学习,全力奔赴更美好的生活✨

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/155179.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Spring复习(二)

FactoryBean FactoryBean是一个接口,需要创建一个类实现该接口 package com.mao.pojo;import org.springframework.beans.factory.FactoryBean;public class StudentFactoryBean implements FactoryBean {//getObject方法将对象交给Spring容器来管理Overridepubli…

Go web开发

使用 Gin-Plus 框架快速进行 web 开发 一、前言 安装 Get go get github.com/archine/gin-plus/v2v2.0.0Mod # go.mod文件加入下面的一条 github.com/archine/gin-plus/v2 v2.0.0# 命令行在该项目目录下执行 go mod tidy二、项目使用 1、启动入口 定义 main 文件&#xf…

来自一位双非本科大二学生的?自我救赎:堕落——蜕变

回望2022:获得?:失去;开心?:难过;伤心?:释怀 先提一句,总结2022,有后悔、不甘;有开心、感动;2022结束,更多的是…

springboot 2.6.6读不到nacos上的配置文件

搭建了一个微服务项目 spring boot 版本:2.6.6 spring cloud 版本:2021.0.1 spring cloud alibaba 版本:2021.0.1.0 遇到的问题无论是在application.yml还是在bootstrap.properties属性文件里配置服务中心相关的的信息都不能读取nacos上的…

LeetCode[215]数组中的第K个最大元素

难度:中等题目:给定整数数组 nums和整数 k,请返回数组中第 k个最大的元素。请注意,你需要找的是数组排序后的第 k个最大的元素,而不是第 k个不同的元素。你必须设计并实现时间复杂度为 O(n)的算法解决此问题。示例 1:输…

2.5(完结)C语言重点解剖内存管理函数要点速记

1.指针如果有具体的指向,包括野指针,对应的合法性,我们是无法验证的。 2.所有的指针如果没有被直接使用,必须设置为NULL。 3.在函数内部,要验证指针的合法性,本质上是验证指针!NULL。 4.自定义函数传入指…

Odoo 16 企业版手册 - 库存管理之到岸成本

到岸成本 到岸成本可以定义为买方在购买时应支付的产品总价。这包括运输、关税、手续费、服务费、运费等。为了获得产品的销售价格,这些额外费用被添加到产品的实际成本中。根据公司政策,不同公司的到岸成本计算方法将有所不同。在Odoo 库存模块中&#…

JAVA中的for循环使用方法

一. 循环结构1. 概念在学习Java里的循环之前,我们先来了解一下到底什么是循环,以及循环的作用。我们先来看下面这张图:大家想一下,我们在400米的跑道上参加万米长跑,正常情况下要跑25圈,这25圈每一圈的跑步…

FPGA:逻辑运算及逻辑门

文章目录逻辑变量与逻辑函数逻辑运算基本逻辑运算及对应的逻辑门1.与运算与逻辑举例状态表与真值表与逻辑符号与逻辑表达式与门电路2. 或运算或逻辑举例电路状态表状态表与真值表或逻辑符号或逻辑表达式或门电路3. 非运算非逻辑举例电路状态表状态表与真…

Lichee_RV学习系列---认识Lichee Rv Dock、环境搭建和编译第一个程序

Lichee Rv Dock学习系列文章目录 文章目录Lichee Rv Dock学习系列文章目录前言一、认识Lichee RV1、D1-H 芯片2、Lichee RV开发板3、系统镜像二、Lichee RV 固件烧录1、要求基本硬件2、基本资料下载3、固件烧录在这里插入图片描述三、连接上开发板1、ADB方式连接a:A…

【ART-Pi学习FreeRTOS】使用STM32CubeIDE搭建开发环境

【ART-Pi】使用STM32CubeIDE搭建开发环境STM32CubeIDESTM32CubeIDE新建工程进入芯片选型界面HSE和LSE时钟源设置时钟系统(时钟树)配置Generate CodeSTM32CubeIDE STM32CubeIDE安装比较简单,这里略过,可以百度搜索相关教程 STM32…

Excel 中选择行的快捷方式有哪些

在处理不同类型的数据时,用户需要多次选择任意行或多行。在这种情况下,任何人都必须知道选择行的快捷方式。了解一些快捷键,如在Excel中选择行,使任何人都能熟练使用MS Excel,而且这对任何人以更智能的方式工作都很有帮助。当一个人开始使用快捷方式执行他的/她的工作时,…

Spring与SpringMVC的区别和联系是啥?

Spring Spring是一个开源容器框架,可以接管web层,业务层,dao层,持久层的组件,并且可以配置各种bean,和维护bean与bean之间的关系。其核心就是控制反转(IoC),和面向切面(AOP),简单的说就是一个分层的轻量级开源框架。 …

餐饮巨头被攻击的“致命”48小时

编者按数字化浪潮蓬勃兴起,企业面临的安全挑战亦日益严峻。腾讯安全近期将复盘2022年典型的攻击事件,帮助企业深入了解攻击手法和应对措施,完善自身安全防御体系。本篇是第八期,讲述了某餐饮巨头遭遇黑客多轮次攻击、全国点餐系统…

Linux ALSA 之六:ALSA ASoc 架构

ALSA ASoc 架构一、ASOC 由来二、从 HW 角度三、从 SW 角度四、重要数据结构关联图1、基于 Linux 3.0 数据结构图2、基于 Linux 4.0 数据结构图一、ASOC 由来 ASoC–ALSA System on Chip,是建立在标准 ALSA 驱动层上,为了更好地支持嵌入式处理器和移动设…

软件著作权申请注意事项

​软著申请需要哪些材料 ①企业申请:企业营业执照副本复印件(加盖公章)、身份证复印件(正反面)。 个人申请:个人身份证复印件。 ②软件设计/使用说明书文档一份 文档可根据要求提供,可以是软件…

c#使用配置文件

在我们开发软件的时候,有时候有很多的配置文件,可以把配置的参数保存到本地,那么肯定要对文件进行读和写的操作,使用SharpConfig可以很简单的实现这个功能。 下面是GitHub的介绍。 https://codeload.github.com/cemdervis/Sharp…

常见的锁策略

文章目录一、常见的锁策略乐观锁 vs 悲观锁轻量级锁 vs 重量级锁自旋锁 vs 挂起等待锁互斥锁 vs 读写锁公平锁 vs 非公平锁可重入锁 vs 不可重入锁二、CAS原子类实现自旋锁ABA问题一、常见的锁策略 我们这里所介绍到的锁策略,不仅仅是java中的,任何涉及…

异常检测-缺陷检测-论文精读PaDiM

Abstract 我们提出了一个新的 Patch 分布建模框架,在单类学习的设置下,PaDiM 同时检测和定位图像中的异常。PaDiM 利用一个预先训练好的卷积神经网络 (CNN) 进行 patch 嵌入,利用多元高斯分布得到正常类的概率表示。它还利用了 CNN 的不同语…

基础1-用于癫痫发作预测的卷积门控递归神经网络

A Convolutional Gated Recurrent Neural Network for Epileptic Seizure Prediction ABSTRACT 在本文中,我们提出了一种卷积门控递归神经网络(CGRNN)来预测癫痫发作,基于从EEG数据中提取的代表信号的时间方面和频率方面的特征。使用波士顿儿童医院收集…