【Frida】【Android】工具篇:ZenTracer

🛫 系列文章导航

  • 【Frida】【Android】01_手把手教你环境搭建 https://blog.csdn.net/kinghzking/article/details/136986950
  • 【Frida】【Android】02_JAVA层HOOK https://blog.csdn.net/kinghzking/article/details/137008446
  • 【Frida】【Android】03_RPC https://blog.csdn.net/kinghzking/article/details/137050967
  • 【Frida】【Android】04_Objection安装和使用 https://blog.csdn.net/kinghzking/article/details/137071768
  • 【Frida】【Android】05_Objection实战 https://blog.csdn.net/kinghzking/article/details/137071826

▒ 目录 ▒

    • 🛫 系列文章导航
    • 🛫 导读
      • 开发环境
    • 1️⃣ 安装
      • python环境
      • 启动ZenTracer
      • ZenTracer更改说明
    • 2️⃣ 使用
      • 设置匹配模板
      • `Action`→`Start`
      • 验证hook效果
    • 🛬 文章小结
    • 📖 参考资料

🛫 导读

开发环境

版本号描述
文章日期2024-03-24
操作系统Win11 - 22H222621.2715
node -vv20.10.0
npm -v10.2.3
夜神模拟器7.0.5.8
Android9
python3.9.9
frida16.2.1
frida-tools12.3.0
objection1.11.0

1️⃣ 安装

通过《【Frida】【Android】01_手把手教你环境搭建》系列文章,我们已经了解了objection的强大,优点是hook准确、粒度细。
今天再推荐个好友自己写的批量hook查看调用轨迹的工具ZenTracer,可以更大范围地hook,帮助读者辅助分析。该工具是Android逆向大佬葫芦娃随手写的工具,19年10月停止了更新。

python环境

环境安装如下命令(含注释)

REM # 安装python(3.9.9为例)


REM # 安装frida-tools(objection自带最新frida-tools 16.2.1)
pip install objection 


REM # 安装界面库
pip install PyQt5

这里需要注意一点:android环境中的frida-server版本一定得是16.2.1版本,否则会报错。

启动ZenTracer

这里小编使用的frida16,接口变更导致部分代码失效,修复了该代码,并上传了gitcode上。
最终启动如下界面:
在这里插入图片描述

REM # 下载源码(改)
REM # git clone https://github.com/hluwa/ZenTracer
git clone https://gitcode.com/android8/ZenTracer

REM # python运行!!!
cd /d J:\_ALL\CODE\gitcode.com\android8\ZenTracer
python ZenTracer.py

ZenTracer更改说明

  • frida.get_usb_device
    该接口需要传递等待时长,默认为0,一运行就会报下面错误:
    在这里插入图片描述
    保证足够时间获取到设备列表,这里小编等待了5秒
    在这里插入图片描述
  • device.enumerate_processes
    该接口返回对象中的name不再是identifier,所以target改为name即可(否则程序一直没有反应,这个其实就是调试的时候一步步跟出来的):
    在这里插入图片描述

2️⃣ 使用

ZenTracer操作很简单,只需要下面几步即可:

  1. 选择ActionMatch RegEx
  2. 输入E:java.io.File,点击add,然后关闭窗口
  3. 点击ActionStart
  4. 点击APP,观察运行结果

设置匹配模板

点击Action之后,会出现匹配模板(Match RegEx)和过滤模板(Black RegEx)。匹配就是包含的关键词,过滤就是不包含的关键词,见下图:
在这里插入图片描述

我们以java.io.File为例,选择Match RegEx菜单,再弹出对话框中,新增java.io.File
在这里插入图片描述

这里,增加的规则支持完全匹配和模糊匹配:

  • E:java.io.File(完全匹配)
  • M:java.io.File(模糊匹配)
    如果不指定类型(M、E),则为模糊匹配。逻辑代码如下:
    在这里插入图片描述

ActionStart

执行菜单ActionStart,ZenTracer开始Hook满足条件的类,如下图,hook了包含java.io.File的所有类。
在这里插入图片描述

验证hook效果

我们以https://download.csdn.net/download/kinghzking/89036983中的app为例,点击《测试》按钮,发现显示了两个拦截内容,可见hook成功了。
在这里插入图片描述

🛬 文章小结

ZenTracer作为一个工具,大大的提高了逆向效率。但也存在一些问题:

  • 不支持选择进程,只能针对顶部进程进行逆向。(对应没有界面的进程,请直接改源码)
  • 崩溃率还是有,这种方式 trace 多了 APP 容易崩
  • 无法打印调用栈
  • 无法hook构造函数

📖 参考资料

  • ZenTracer原git地址: https://github.com/hluwa/ZenTracer
  • ZenTracer支持frida16的最新git地址: https://gitcode.com/android8/ZenTracer
  • 重复造轮子-用 FRIDA 打造 MethodTracer https://wiki.hluwa.cn/s/01f7fac2-81e4-4468-85d8-f710e17da12d/doc/frida-methodtracer-ZdXqg6xeoX
  • Frida进阶:Objection内存漫游、hook anywhere、抓包 https://www.cnblogs.com/lxh2cwl/p/14842544.html

ps: 文章中内容仅用于技术交流,请勿用于违规违法行为。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

如何使用 ChatGPT 进行编码和编程

文章目录 一、初学者1.1 生成代码片段1.2 解释功能 二、自信的初学者2.1 修复错误2.2 完成部分代码 三、中级水平3.1 研究库3.2 改进旧代码 四、进阶水平4.1 比较示例代码4.2 编程语言之间的翻译 五、专业人士5.1 模拟 Linux 终端 总结 大多数程序员都知道,ChatGPT …

mac+win10虚拟机+phpstudy便捷运行php+pgsql的方法

痛点:mac下要搭建nginxphp(含pdo_pgsql)pgsql比较麻烦 另类解决方法: 前提:mac下需要已安装win10虚拟机 方法: 1. win10虚拟机下安装phpstudy8.1 -> 开启php扩展(pdo_pgsql)&a…

竞赛 python+深度学习+opencv实现植物识别算法系统

0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 基于深度学习的植物识别算法研究与实现 🥇学长这里给一个题目综合评分(每项满分5分) 难度系数:4分工作量:4分创新点:4分 🧿 更多…

荣誉 | 人大金仓连续三年入选“金融信创优秀解决方案”

3月28日,由中国人民银行领导,中国金融电子化集团有限公司牵头组建的金融信创生态实验室发布“第三期金融信创优秀解决方案”,人大金仓新一代手机银行系统解决方案成功入选,这也是人大金仓金融行业解决方案连续第三年获得用户认可。…

OSI七层参考模型

osi即开放系统互联参考模型。 osi的目的是为了解决主机间的通信 从下到上:物理层、数据链路层、网络层、传输层、会话层、表示出、应用层 上三层(应用层、表示出、会话层)负责产生数据,下四层(传输层、网络层、数据…

类加载 双亲委派 内存模型 对象内存分配 逃逸分析学习记录

类加载双亲委派 main方法运行过程 C语言实现的java.exe来创建jvm,和引导类加载器,并由引导类加载器来创建类加载器的启动器launcher,在类加载器启动器空参构造中就对剩下的拓展类加载器,应用程序加载器,和自定义加载器来进行了加…

前端第一天练习

一、安装Node.js和搭建前端环境 安装 Node.js:访问 Node.js 官网 下载并安装最新版本的 Node.js。 LTS 为长期稳定的版本, Current 为新特性尝鲜版本, 可能存在隐藏的 bug 或者安全漏洞打开终端, 在终端输入命令 node -v后, 即可查看已安装的 Node.js 版本号 使用 …

JWFD流程图转换为矩阵数据库的过程说明

在最开始设计流程图的时候,请务必先把开始节点和结束节点画到流程图上面,就是设计器面板的最开始两个按钮,先画开始点和结束点,再画中间的流程,然后保存,这样提交到矩阵数据库就不会出任何问题,…

linux命令之tput

1.tput介绍 linux命令tput是可以在终端中进行文本和颜色的控制和格式化,其是一个非常有用的命令 2.tput用法 命令: man tput 3.样例 3.1.清除屏幕 命令: tput clear [rootelasticsearch ~]# tput clear [rootelasticsearch ~]# 3.2.…

32-2 APP渗透 - 移动APP架构

前言 app渗透和web渗透最大的区别就是抓包不一样 一、客户端: 反编译: 静态分析的基础手段,将可执行文件转换回高级编程语言源代码的过程。可用于了解应用的内部实现细节,进行漏洞挖掘和算法分析等。调试: 排查软件错误的一种手段,用于分析应用内部原理和行为。篡改/重打…

数据分析之POWER Piovt透视表分析

将几个数据表之间进行关联 生成数据透视表 超级透视表这里的字段包含子字段 这三个月份在前面的解决办法 1.选中这三个月份,鼠标可移动的时候移动到后面 2.在原数据进行修改 添加列获取月份,借助month的函数双击日期 选择月份这列----按列排序-----选择月…

wps斜线表头并分别打字教程

wps斜线表头怎么做并分别打字: 1、首先选中我们想要设置的表头。 2、接着右键选中它,点击“设置单元格格式” 3、然后点击上方“边框”选项卡。 4、随后选择图示的斜线,点击“确定” 5、设置完成后,我们只要在其中打字就可以在斜…

UniFace:深度人脸识别的统一交叉熵损失

UniFace: Unified Cross-Entropy Loss for Deep Face Recognition softmax损失 缺点:不能保证最小正样本类相似度大于最大负样本类相似度 问题:没有统一的阈值可用于将正样本与类对与负样本与类对分开 创新点 设计了用于人脸识别模型训练的UCE&#xf…

设计模式之装饰模式精讲

概念:动态地给一个对象添加一些额外的职责。 装饰器模式侧重于在不改变接口的前提下动态地给对象添加新功能,保持对象结构的透明性,客户端无感知。 以一个咖啡制作和装饰的例子来帮助大家理解: public interface Coffee {double…

汽车租赁(源码+文档)

汽车租赁(小程序、ios、安卓都可部署) 文件包含内容程序简要说明含有功能项目截图客户端登录界面首页订单个人信息我的界面新手指引注册界面车型选择支付界面修改信息 管理端用户管理订单管理分类管理 文件包含内容 1、搭建视频 2、流程图 3、开题报告 …

校园招聘管理系统(源码+文档)

校园招聘管理系统(小程序、ios、安卓都可部署) 文件包含内容程序简要说明含有功能项目截图客户端热门岗位校园招聘首页个人简历添加个人简历我的界面注册界面查看个人简历界面个人资料界面登录界面消息界面退出登录 管理端登录界面![请添加图片描述](htt…

【shell】select in实现终端交互场景

文章目录 序言1. select in语句及其语法2. select in和case语句相结合3. 执行界面示例 序言 shell脚本实现简单的终端交互功能,根据用户不同输入执行不同功能脚本 1. select in语句及其语法 select in是shell独有的一种循环,非常适合终端交互场景 该语…

什么是nginx正向代理和反向代理?

什么是代理? 代理(Proxy), 简单理解就是自己做不了的事情或实现不了的功能,委托别人去做。 什么是正向代理? 在nginx中,正向代理指委托者是客户端,即被代理的对象是客户端 在这幅图中,由于左边内网中…

数据结构(六)——图的存储及基本操作

6.2 图的存储及基本操作 6.2.1 邻接矩阵法 邻接矩阵存储无向图、有向图 #define MaxVertexNum 100 //顶点数目的最大值typedef struct{char Vex[MaxVertexNum]; //顶点表int Edge[MaxVertexNum][MaxVertexNum]; //邻接矩阵,边表int vexnum,arcnum; //图的当前…

pytest--python的一种测试框架--pycharm创建项目并进行接口请求

前言 学习request的使用,在用之前,用官方文档提供的接口:https://api.github.com/events; ctrl鼠标左键可以进入被调用函数源码,可以看到第一个参数URL是必须参数,params是选填,**kwargs是关键…