使用 frida hook Android app

news2024/11/18 3:24:43

Frida:

一种基于动态插装(dynamic instrumentation)技术的工具包,它主要是为测试人员、开发人员和逆向工程爱好者创建,在目标程序运行时,允许用户将 JavaScript代码注入其中,实现动态修改和调试。

支持修改多个平台的应用: Windows, macOS, GNU/Linux, iOS, watchOS, tvOS, Android, FreeBSD and QNX.

Github:frida/frida
frida 官方文档:frida doc


调试 Android app:

与同样出名的 Xposed 相比,Frida 不仅可以 Hook Java 层,同样支持 native 层。下面我们来具体操作:

1.安装 frida python 库:

pip install frida-tools
pip install frida        #可通过 pip install frida == 版本号 安装最佳适配自己手机的版本

虽然 JavaScript是用来编写实际注入和修改逻辑的语言,但官方提供了 Python库来管理 javascript 脚本和提供执行环境。输入 frida --version ,出现版本号即安装成功。

frida --version 
>>16.3.3

2. 手机端 adb 连接到电脑:

推荐使用无线 adb 调试,手机和电脑处在同一局域网,手机端进入开发者模式,打开无线调试,找到使用配对码配对:

电脑端打开命令窗口,输入 adb pair [手机ip:端口],回车后输入配对码完成配对。
输入 adb connect [手机ip:端口],完成连接,此端口为无线调试页面中显示的端口,并非配对端口。

adb pair [手机ip:端口]  #例如:adb pair 192.168.31.7:35405 端口每次配对都会发生变化
adb connect [手机ip:另一端口] #例如:adb pair 192.168.31.7:40535 

3. 推送 frida-server 到手机:

访问 https://github.com/frida/frida/releases 下载安卓平台的 frida-server,解压出来。需注意 frida-server 与 frida 和 frida-tools 版本需要匹配,最好保持一致。

将解压出来的文件 push 到安卓 /data/local/tmp目录下面:

adb push C:/Users/Administrator/Desktop/frida-server-16.3.3 /data/local/tmp/frida-server-16.3.3

进入 adb shell,进入 tmp 目录并赋予 frida-server 可执行权限,注意需要输入 su 获取 root 权限,否则无法访问文件目录。无误后输入 ./frida-server-16.3.3,未报错即运行成功。

adb shell
su  
cd data/local/tmp
chmod 777 frida-server-16.3.3

#运行:
./frida-server-16.3.3

注意:新版本 frida-server 不再需要端口转发,旧版需要新开一个 CMD 窗口执行 adb forward tcp:27042 tcp:27042,来将手机端口转发到电脑端口,便于通信。


Hook 前的最后一步:

以 Android 平台为例,了解一下 frida 的工作流程:

  1. frida-server:运行在安卓端,与电脑端进行通信,接收电脑端的调试请求,并将 JavaScript 编写的 hook 代码注入到目标 app 中。
  2. 电脑端:与 frida-server 通信,可以使用多种编程语言编写脚本和管理注入过程,最常用的是 Python。
  3. JavaScript脚本:编写具体的注入和修改逻辑,并通过电脑端提供的环境被推送到 frida-server 中,从而注入到目标 app。

对此,我们需要建立两个文件,一个 hook.js用于存放具体的修改逻辑,一个 hook.py用于自动管理注入流程,如:在合适的时机自动注入。

hook.py:

import frida
import sys
import time

# 应用包名
app_package_name = 'com.tencent.karaoke'

# 延迟注入时间(秒),防止dex未加载
delay_time = 2

# hook脚本所在路径
hookJs='C:/Users/Administrator/Desktop/hook.js'


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

# 启动应用程序
device = frida.get_usb_device()
pid = device.spawn([app_package_name])
device.resume(pid)
time.sleep(1)  # 等待应用程序启动

# 延迟注入
print(f"Waiting for {delay_time} seconds before injecting script...")
time.sleep(delay_time)

# 注入脚本
with open(hookJs, 'r',encoding='utf-8') as f:
    script_code = f.read()

session = device.attach(pid)
script = session.create_script(script_code)
script.on('message', on_message)
script.load()
print("[*] Script injected successfully.")
sys.stdin.read()

hook.js 示例:

// 1.从内存中寻找包含android字样的类并打印
Java.perform(function() {
    Java.enumerateLoadedClasses({
        onMatch: function(className) {
            if (className.includes('android')) {
                console.log(className);
            }
        },
        onComplete: function() {
            console.log('Class enumeration complete');
        }
    });
});

将应用包名修改为需要被 hook 的 app,然后输入命令运行:

 python hook.py

开始 hook 吧!!!!

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

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

相关文章

if action和Switch之间该怎么选择?

1. Switch 2. If及If Action Subsystem 3.结论 元素很多,用switch 元素少,用if或switch 如果...很多,用if

Go语言之集合类型

个人网站: http://hardyfish.top/ 免费书籍分享: 资料链接:https://url81.ctfile.com/d/57345181-61545511-81795b?p3899 访问密码:3899 免费专栏分享: 资料链接:https://url81.ctfile.com/d/57345181-6…

姚期智、张亚勤、薛澜、Stuart Russell、Max Tegmark,DeepMind研究员等共话全球AI治理丨大会回顾...

为什么AI安全已迫在眉睫?如何构建全球范围内的合作?民众该如何参与到其中?未来的AI系统将是什么样的? 2024年6月15日,智源大会第二天,多位AI安全领域专家进行圆桌讨论,连接中国北京和美国加利福…

从概念到现实:数字孪生技术在智慧充电站的实践

在电动汽车蓬勃发展的今天,充电基础设施的智能化升级成为了推动新能源汽车产业跃进的关键一环。数字孪生技术,作为智能制造和工业4.0的核心,正在逐渐渗透到智慧充电站的每一个角落——从提高能源效率到增强用户体验,为智慧充电站的…

DockerDesktop中mysql容器无法使用Exec窗口解决

解决前 需要登陆: 登陆后需要升级才能启动调试模式 需要订阅才能使用 解决后: 正常使用 解决方法: 不要在DockerDesktop中启动mysql容器,使用命令行启动 启动命令 docker run --name mysql_docker -e MYSQL_ROOT_PASSWORD12345…

MySQL递归查询(with recursive)

背景 日常开发中经常会有那种 阶梯式 数据,比如做地图、菜单,裂变给上级、上上级分红等等这样的需求的时候 你需要找个一个对象的 上级,上上级,上上上级 建了一张很容易理解阶级的表,一目了然 很多时候我们的需求就是…

仓库管理系统09--修改用户密码

1、添加窗体 2、窗体布局控件 UI设计这块还是传统的表格布局&#xff0c;采用5行2列 3、创建viewmodel 4、前台UI绑定viewmodel 这里要注意属性绑定和命令绑定及命令绑定时传递的参数 <Window x:Class"West.StoreMgr.Windows.EditPasswordWindow"xmlns"http…

缓存问题二、缓存雪崩

缓存雪崩 缓存雪崩&#xff1a;是指在同一时段大量的缓存key同时失效或者Redis服务宕机&#xff0c;导致大量请求到达数据库&#xff0c;带来巨大压力。 缓存雪崩的解决方案&#xff1a; 给不同的Key的TTL添加随机值利用Redis集群提高服务的可用性给缓存业务添加降级限流策略…

转行AI产品经理,这些“门槛”你得先迈过!

前言 随着人工智能&#xff08;AI&#xff09;技术的飞速发展&#xff0c;AI产品经理这一岗位逐渐崭露头角&#xff0c;成为许多追求创新和挑战的职业人士的新选择。但转行并非易事&#xff0c;特别是进入到一个全新的领域。在决定踏上AI产品经理这条道路之前&#xff0c;以下…

HarmonyOS角落里的知识:“开发应用沉浸式效果”

概述 典型应用全屏窗口UI元素包括状态栏、应用界面和底部导航条。开发应用沉浸式效果主要指通过调整状态栏、应用界面和导航条的显示效果来减少状态栏导航条等系统界面的突兀感&#xff0c;从而使用户获得最佳的UI体验。 图1 界面元素示意图 开发应用沉浸式效果主要要考虑如下…

win7 的 vmware tools 安装失败

没有安装vmware tools的系统屏幕显示异常。桌面是比较小的图像&#xff0c;四周是黑边在 vmware 软件里 方法1&#xff0c;下补丁 https://www.catalog.update.microsoft.com/Search.aspx?qkb4474419 方法2&#xff0c;使用老版vm tools http://softwareupdate.vmware.com/c…

全视通智慧医院解决方案助力“以旧换新”的医疗升级!

全视通表示&#xff0c;以旧换新的本质更多的是医院综合性能的提升&#xff0c;应该通过从顶层设计规划&#xff0c;全面提升医院的整体运营水平&#xff0c;改善患者及医护对医院的满意度、提升医护整体效率&#xff0c;同时实现医院复合手术室、实验室、ICU等医院重点空间的需…

第十一次作业

1.过滤器用的Interceptor因为idea中自带的拦截器 ReaderInterceptor import request from /utils/requestexport function fetchList(query) {return request({url: /vue-element-admin/article/list,method: get,params: query}) }export function fetchArticle(id) {return…

Lua博客网站支持搜索、评论、登录注册

该简易博客示例用于学习网站的基础知识与MySQL数据库。 简述&#xff1a;开源Lua网站开发服务(FastWeb)支持&#xff1a;注册、登录、文章分页、评论分页、简易权限管理和搜索功能。发帖功能支持Markdown(支持记忆功能)图示&#xff1a;

DOM遍历

DOM 遍历是指在 HTML 文档中导航和定位元素的过程。通过 DOM 遍历&#xff0c;您可以在文档中移动并查找特定的元素&#xff0c;以便对其进行操作或者检索信息。 寻找子元素 //DOM遍历 const h1 document.querySelector(h1);//寻找子元素 console.log(h1.querySelectorAll(.…

数据恢复篇:如何恢复丢失的Android短信?

许多用户发现自己处于重要短信意外从Android手机中删除的情况。幸运的是&#xff0c;有一些行之有效的方法可以在没有root的情况下恢复已删除的短信Android&#xff0c;这可以成为救命稻草。这些技术不需要深厚的技术知识&#xff0c;也不需要损害设备的安全性。为了帮助您摆脱…

驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立安全连接的解决方法

在连接数据库的时候出现了下面图面中的错误&#xff0c;尝试集中方法后终于解决了这个问题。 1.修改驱动程序版本 出现这种错误可能是因为你的驱动程序版本不兼容&#xff0c;我们可以尝试修改版本解决。而我们的驱动程序往往是以依赖的形式导入&#xff0c;因此可以在maven仓…

iOS17系统适配

iOS17 新功能 文章目录 iOS17 新功能iOS17支持哪几款机型Xcode15新特性iOS17-开发适配指南 横屏待机 在iOS 17中&#xff0c;还带来了横屏待机功能&#xff0c;苹果将这个新功能命名为“Standby”模式&#xff0c;为 iPhone 带来了全新的玩法。iPhone启用之后&#xff0c;默认情…

Purple Pi OH固件的芯片信息识别问题说明

本文适用于在Purple Pi OH固件的芯片信息识别问题说明。触觉智能的Purple Pi OH鸿蒙开源主板&#xff0c;是华为Laval官方社区主荐的一款鸿蒙开发主板。 该主板主要针对学生党&#xff0c;极客&#xff0c;工程师&#xff0c;极大降低了开源鸿蒙开发者的入门门槛&#xff0c;具…

每日一题——Python实现PAT乙级1030 完美数列(举一反三+思想解读+逐步优化)五千字好文

一个认为一切根源都是“自己不够强”的INTJ 个人主页&#xff1a;用哲学编程-CSDN博客专栏&#xff1a;每日一题——举一反三Python编程学习Python内置函数 Python-3.12.0文档解读 目录 初次尝试 再次尝试 代码结构 时间复杂度分析 空间复杂度分析 总结 我要更强 时…