10.安卓逆向2-frida hook技术-frida基本使用-frida指令(用于hook)

article/2025/6/18 8:49:39

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动!

内容参考于:图灵Python学院

工具下载:

链接:https://pan.baidu.com/s/1bb8NhJc9eTuLzQr39lF55Q?pwd=zy89

提取码:zy89

复制这段内容后打开百度网盘手机App,操作更方便哦

上一个内容:9.安卓逆向2-frida hook技术-frida基本使用-frida-ps指令

frida的hook主要是学习下图红框的参数,也并不需要全部学习,常用的就那几个

-U

使用usb线连接

frida -U

-f

指令app包名

-p

使用app的pid

-l

加载 hook脚本

-o

把脚本输出的信息保存到文件中

frida两种操作模式

cli命令行,javascript脚本注入进程

rpc,Python进行javascript脚本注入

frida两种操作app的方式

spwan模式,不管app运不运行它都会重启,然后注入,它的注入比较早,就是可以拦截app启动时执行的代码

attach模式,给一个正在运行的app进行注入,也就是说只有app运行了它才能进行注入,它比较晚,app启动时的代码没办法拦截(运行之后才注入怎么可能拦截启动时的代码)

到底是用spwan模式还是attach模式,-f指定包名 使用spwan模式,加了-f就会使用spwan模式,加-F使用attach模式

frida脚本都是使用JavaScript语言编写,它有个固定格式

Java.perform(function () {});

首先启动一下手机里的 frida-server

attach模式注入脚本 frida -UF -l .\FridaHook初体验.js

Java.perform(function () {// 获取当前应用的上下文var currentApplication = Java.use('android.app.ActivityThread').currentApplication();var context = currentApplication.getApplicationContext();// 获取包名var packageName = context.getPackageName();// 输出包名console.log("当前应用的包名是: " + packageName);send(packageName)
});

直接写exit然后按回车键(Enter键)退出hook

使用Python启动脚本

核心是通过 frida.get_usb_device()获取frida功能

然后使用device.get_process("com.xxx.frodo").pid 获取app进程id

然后写JavaScript的hook脚本

js_cpde = '''
Java.perform(function () {// 获取当前应用的上下文var currentApplication = Java.use('android.app.ActivityThread').currentApplication();var context = currentApplication.getApplicationContext();// 获取包名var packageName = context.getPackageName();// 输出包名console.log("当前应用的包名是: " + packageName);
});
'''

然后使用 session.create_script(js_cpde) 加载脚本

然后使用 script.load() 把脚本注入到app中并执行脚本

spwan模式

指令 frida -Uf com.XXX.frodo -l .\FridaHook初体验.js

执行了上面的指令后会卡主,然后输入 %resume让app继续运行

Python使用spwan模式,,主要修改了下图红框的两行代码

# -*- coding: utf-8 -*-
import frida
import sysdef on_message(message, data):print("message", message)print("data", data)# 通过Spawn模式启动一个新的应用程序进程,并在该进程中加载Frida脚本
device = frida.get_usb_device()pid = device.spawn(["com.trs.xxxx.xxx"])
# 恢复应用程序的执行
device.resume(pid)session = device.attach(pid)js_cpde = '''
Java.perform(function () {// 获取当前应用的上下文var currentApplication = Java.use('android.app.ActivityThread').currentApplication();var context = currentApplication.getApplicationContext();// 获取包名var packageName = context.getPackageName();// 输出包名console.log("当前应用的包名是: " + packageName);send(packageName)
});
'''script = session.create_script(js_cpde)
# 设置监听
script.on("message", on_message)
script.load()
# 阻塞主线程,以保持脚本运行
sys.stdin.read()

还有如下图红框

使用 script.on("message", on_message)设置监听message消息,然后通过 send(packageName)的send函数触发on_message函数,这样就可以在Python代码中获取JavaScript里的数据

frida远程模式,一般不使用,它有点麻烦

首先使用把刚刚启动的frida-server按CTRL+C进行退出,然后使用 ./frida-server-14.2.18-android-arm64 -l 0.0.0.0:8881指定frida-server的端口为8881启动

然后使用 adb forward tcp:8881 tcp:8881 指令映射端口(或者理解为开启端口)

然后这时的客户端指令,不是-U使用-H了,别的没变化

Python使用frida的远程模式

# -*- coding: utf-8 -*-import frida, sysjsCode = """
Java.perform(function () {// 获取当前应用的上下文var currentApplication = Java.use('android.app.ActivityThread').currentApplication();var context = currentApplication.getApplicationContext();// 获取包名var packageName = context.getPackageName();// 输出包名console.log("当前应用的包名是: " + packageName);
});
"""def message(message, data):if message['type'] == 'send':print(f"[*] {message['payload']}")else:print(message)# 远程连接服务端
device = frida.get_device_manager().add_remote_device('127.0.0.1:8881')
# 附着到已运行的应用
process = device.attach('com.trs.xxx.newsclient')
script = process.create_script(jsCode)
script.on("message",message)
script.load()

img


http://www.hkcw.cn/article/VSSegfubNp.shtml

相关文章

# CppCon 2014 学习: Quick game development with C++11/C++14

这是一个关于游戏开发与现代 C(尤其是 C11/C14)结合的技术分享或讲座的概要,结构清晰、内容分为几个部分: About This Talk — 内容结构 1. 导言部分(Introductory part) 介绍为什么选择游戏开发作为主题…

vscode不满足先决条件问题的解决——vscode的老版本安装与禁止更新(附安装包)

目录 起因 vscode更新设置的关闭 安装包 结语 起因 由于主包用的系统是centos的,且版本有点老了,再加上vscode现在不支持老版本的,这对主包来说更是雪上加霜啊 但是主包看了网上很多教程,眼花缭乱,好多配置要改&…

如何手搓扫雷(待扩展)

文章目录 一、扫雷游戏分析与设计1.1 扫雷游戏的功能说明1.2 游戏的分析和设计1.2.1 数据结构的分析1.2.2 文件结构设计 二、扫雷游戏的代码实现三、扫雷游戏的扩展总结 一、扫雷游戏分析与设计 扫雷游戏网页版 1.1 扫雷游戏的功能说明 使用控制台(黑框框的程序&a…

Python打卡训练营学习记录Day41

DAY 41 简单CNN 知识回顾 数据增强卷积神经网络定义的写法batch归一化:调整一个批次的分布,常用与图像数据特征图:只有卷积操作输出的才叫特征图调度器:直接修改基础学习率 卷积操作常见流程如下: 1. 输入 → 卷积层 →…

我们来学mysql -- mysql8.4主从

mysql8.4主从 8.4安装主从原理主my.cnf启动创建复制用户 从my.cnf启动锁库&迁移数据连接主&开启复制检查复制 8.4安装 参考保姆级安装教程传送门 主从原理 从库准备 使用 CHANGE MASTER TO 配置主库信息并写入 master.info 文件。执行 START SLAVE 启动从库&#xff…

kafka学习笔记(三、消费者Consumer使用教程——消费性能多线程提升思考)

1.简介 KafkaConsumer是非线程安全的,它定义了一个acquire()方法来检测当前是否只有一个线程在操作,如不是则会抛出ConcurrentModifcationException异常。 acquire()可以看做是一个轻量级锁,它仅通过线程操作计数标记的方式来检测线程是否发…

记忆胶囊应用源码纯开源

下载地址:https://pan.quark.cn/s/729681531125 📱 应用功能特点 核心功能: 创建记忆胶囊 - 用户可以创建包含文本内容的时间胶囊时间设定 - 设置胶囊的开启时间情感标签 - 为记忆添加情感标记(开心、难过、兴奋等)…

破题城市更新 老旧街区如何新生?南京这样干→

暮春4月,经过十年更新改造的南京小西湖街区游人纷纷,老南京风貌从更新过的街巷中透出,市井烟火气里交织着现代时尚感。但是,略微向深处走走,年久失修的房屋,私搭乱建的建筑,让小西湖少了一分西湖的美,多了几分棚户的乱。王卉在小西湖出生长大,箍桶巷33号是父亲留给她的…

郑钦文今日战萨姆索诺娃 法网1/8决赛焦点

法网6月1日赛程已公布,郑钦文与萨姆索诺娃的比赛将在苏珊-朗格伦球场第二场进行,比赛时间不早于19点。当天是法网第八比赛日,将展开单打第四轮的较量。在苏珊-朗格伦球场的第一场比赛是保罗对阵波佩林的男单第四轮。从交手记录来看,萨姆索诺娃以3-2领先郑钦文。不过,在双方…

俄罗斯布良斯克州一桥梁坍塌 已致数十人伤亡

总台记者获悉,当地时间5月31日,位于俄罗斯布良斯克州的一座桥梁发生坍塌,导致当时行经桥下、由莫斯科开往该州城市克利莫沃的列车脱轨。据俄罗斯BAZA网站报道,事件造成4人死亡,至少44人受伤。据悉,死亡人员分别是火车司机、副司机和两名乘客。有媒体报道称,不明身份者在…

neo4j 5.19.0安装、apoc csv导入导出 及相关问题处理

前言 突然有需求需要用apoc 导入 低版本的图谱数据,网上资料又比较少,所以就看官网资料并处理了apoc 导入的一些问题。 相关地址 apoc 官方安装网址 apoc 官方导出csv 教程地址 apoc 官方 导入 csv 地址 docker 安装 执行如下命令启动镜像 doc…

【Linux】进程地址空间揭秘(初步认识)

10.进程地址空间(初步认识) 文章目录 10.进程地址空间(初步认识)一、进程地址空间的实验现象解析二、进程地址空间三、虚拟内存管理补充:数据的写时拷贝(浅谈)补充:页表(…

SEO长尾关键词优化进阶指南

内容概要 在流量竞争日趋激烈的数字营销环境中,长尾关键词作为精准获客的核心入口,已成为SEO进阶优化的战略重点。本指南将系统梳理从用户意图识别到可持续流量增长的完整技术路径,围绕“需求挖掘-资源构建-竞争突围”三大核心模块展开。通过…

[网页五子棋][对战模块]实现游戏房间页面,服务器开发(创建落子请求/响应对象)

实现游戏房间页面 创建 css/game_room.css #screen 用于显示当前的状态,例如“等待玩家连接中…”,“轮到你落子”,“轮到对方落子”等 #screen { width: 450px; height: 50px; margin-top: 10px; color: #8f4e19; font-size: 28px; …

利用nginx完成iframe请求的身份认证

需求说明 在dify中搭建了一个chatflow,搭建完成后,将其以iframe的方式,嵌入到自己开发的一个网站中。 嵌入完成后,效果如下图所示: 此时存在一个安全问题,如果用户知道了这个iframe的URL地址,…

t017-高校实习管理系统 【含材料源码!!!】

项目演示视频 摘 要 如今社会上各行各业,都喜欢用自己行业的专属软件工作,互联网发展到这个时候,人们已经发现离不开了互联网。新技术的产生,往往能解决一些老技术的弊端问题。因为传统高校实习管理系统信息管理难度大&#xff0…

【项目】在线OJ(负载均衡式)

目录 一、项目目标 二、开发环境 1.技术栈 2.开发环境 三、项目树 目录结构 功能逻辑 编写思路 四、编码 1.complie_server 服务功能 代码蓝图 开发编译功能 日志功能 ​编辑 测试编译模块 开发运行功能 设置运行限制 jsoncpp 编写CR 如何生成唯一文件名 …

B3623 枚举排列(递归实现排列型枚举)

B3623 枚举排列(递归实现排列型枚举) - 洛谷 题目描述 今有 n 名学生,要从中选出 k 人排成一列拍照。 请按字典序输出所有可能的排列方式。 输入格式 仅一行,两个正整数 n,k。 输出格式 若干行,每行 k 个正整数…

深入探讨redis:主从复制

前言 如果某个服务器程序,只部署在一个物理服务器上就可能会面临一下问题(单点问题) 可用性问题,如果这个机器挂了,那么对应的客户端服务也相继断开性能/支持的并发量有限 所以为了解决这些问题,就要引入分布式系统&#xff0c…

c++ typeid运算符

typeid运算符能获取类型信息。获取到的是type_info对象。type_info类型如下: 可以看到,这个类删除了拷贝构造函数以及等号操作符。有一些成员函数:hash_code、before、name、raw_name, 还重载了和!运算符。 测试: void testTyp…