frida:hook所有方法

标题:frida:hook所有方法

在Android逆向工程中,Frida是一个强大的动态代码插桩工具,能够帮助我们实时hook和调试目标应用的方法。本文将通过一个实际案例,探讨在使用Frida Hook测试应用中的Utils类时遇到的一个JavaScript作用域问题,并提供解决方案。

首先,让我们来看看这段用于Hook Utils类所有方法的Frida脚本:

Java.perform(function() {var utils = Java.use("con.xiaojianbang.hook.Utils");var methods = utils.class.getDeclaredMethods();for (let k = 0; k < methods.length; k++) {var methodName = methods[k].getName();var overloadArr = utils[methodName].overloads;console.log("fun : ", methodName);for (let i = 0; i < overloadArr.length; i++) {overloadArr[i].implementation = function() {var params = "";for (let j = 0; j < arguments.length; j++) {params += arguments[j] + "";}console.log("utils." + methodName + " is called! params is : ", params);return this[methodName].apply(this, arguments);};}}
});test();

注入这段代码后,我们成功获取到了Utils类中的各个方法名,但当尝试在原始方法的基础上进行Hook并调用时,却发现无论调用哪个方法,其参数总是被传递给verifyStoragePermissions方法。经过排查,发现问题并非出在Frida框架本身,而是JavaScript中关于变量作用域的理解与运用。

关键在于代码第6行的var关键字,这里应当使用let替代。在JavaScript中,var声明的变量会在其所在函数作用域内有效,而在for循环内部使用var声明的变量会因循环迭代导致变量值在循环体外部共享同一个作用域。因此,在上述代码中,每次循环迭代时methodName的值会被更新,但在implementation回调函数中引用的却是最后一次循环结束后的methodName值。

var修改为let后,代码如下:

for (let k = 0; k < methods.length; k++) {// ...
}// 在for循环内部及实施Hook的匿名函数中均使用let声明变量
for (let i = 0; i < overloadArr.length; i++) {overloadArr[i].implementation = function() {// ...};
}

这样修改后,methodNameparams等变量就会在各自的for循环块内拥有独立的作用域,从而保证了在回调函数中正确地引用到相应方法的信息。最终,所有Utils类的方法都能被正确Hook并输出调用参数。通过这次实践,我们再次认识到在JavaScript编程中准确理解作用域规则的重要性,这对于利用Frida等工具进行动态调试和Hook至关重要。

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

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

相关文章

LeetCode100 刷题记录

文章目录 矩阵相关1. 旋转矩阵2. 搜索二维矩阵 矩阵相关 1. 旋转矩阵 题目描述&#xff1a; 给定一个 n n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。 你必须在 原地 旋转图像&#xff0c;这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵…

Android JNI复杂用法,回调,C++中调用Java方法

Android JNI复杂用法&#xff0c;回调&#xff0c;C中调用Java方法 一、前言 Android JNI的 普通用法估计很多人都会&#xff0c;但是C中调用Java方法很多人不熟悉&#xff0c;并且网上很多介绍都是片段的。 虽然C/C调用Java不常用&#xff0c;但是掌握多一点还是有好处的。…

【C++杂货铺】详解string

目录 &#x1f308;前言&#x1f308; &#x1f4c1; 为什么学习string &#x1f4c1; 认识string&#xff08;了解&#xff09; &#x1f4c1; string的常用接口 &#x1f4c2; 构造函数 &#x1f4c2; string类对象的容量操作 &#x1f4c2; string类对象的访问以及遍历操…

js判断页面是否是在iframe里面

文章目录 一、前言1.1、_blank跳转1.2、_self跳转 二、方法2.1、判断子项目是否是在iframe内部2.2、实现_self跳转 三、最后 一、前言 上面是父前端项目里的iframe加载了子前端项目的页面。此时如果点击子项目的内容&#xff0c;如果要进行父项目浏览器页面跳转&#xff0c;可以…

C++初阶 类(上)

目录 1. 什么是类 2. 如何定义出一个类 3. 类的访问限定符 4. 类的作用域 5. 类的实例化 6. 类的大小 7. this指针 1.this指针的引出 2. this指针的特性 8. 面试题 1. 什么是类 在C语言中&#xff0c;不同类型的数据集合体是结构体。为了方便管理结构体&#xff0c;我…

HarmonyOS NEXT应用开发案例——自定义TabBar

介绍 本示例主要介绍了TabBar中间页面如何实现有一圈圆弧外轮廓以及TabBar页签被点击之后会改变图标显示&#xff0c;并有一小段动画效果。 效果图预览 使用说明&#xff1a; 依次点击tabBar页面&#xff0c;除了社区图标之外&#xff0c;其它图标往上移动一小段距离。 实现…

中霖教育:消防工程师报考条件汇总

消防工程师考试报名条件汇总&#xff0c;想要参加考试的考生可以根据自己的专业和学历判断自己是否符合条件。 1、大专学历&#xff0c;消防工程专业&#xff0c;工作年限满6年&#xff0c;从事消防安全技术工作满4年;消防工程相关专业&#xff0c;工作年限满7年&#xff0c;从…

实习记录课程内容

2024年3月1日18:21:09 第二周周五——方法篇 等量关系的构造 初中数学中&#xff0c;让学生构造等量关系的数学原理主要包括以下几个方面&#xff1a; 等式的性质&#xff1a;等式的两边同时加上或减去同一个数&#xff0c;等式仍然成立&#xff1b;等式的两边同时乘以或除以…

利用API接口进行竞品价格监控

在电子商务和零售行业&#xff0c;了解竞争对手的定价策略对于保持市场竞争力至关重要。随着技术的发展&#xff0c;通过编程接口&#xff08;API&#xff09;获取商品详情成为企业监控竞品价格的有效手段。本文将详细介绍如何利用API接口实现竞品价格监控的流程和策略。 第一步…

EventSource数据一次性出来

基于txt/event-stream的EventSource流&#xff0c;使用代理时需注意&#xff1a; 开发阶段如果使用vue自带的代理&#xff0c;需要关闭compress&#xff0c;即 devServer: {proxy: {/xx: {target: ip,changeOrigin: true,pathRewrite: {^/xx: /xx}},},compress: false}再nginx部…

浅谈字典攻击

一、前言 字典攻击是一种常见的密码破解方法&#xff0c;它使用预先编制的字典文件作为攻击字典&#xff0c;通过尝试猜测密码的方式来破解密码。下面是一个关于字典攻击的博客&#xff0c;希望能够为您了解字典攻击提供帮助。 二、字典攻击概述 字典攻击是一种密码破解方法&…

文献学习-14-一种用于高精度微创手术的纤维机器人

Authors: Mohamed E. M. K. Abdelaziz1,2 †, Jinshi Zhao1,3 †, Bruno Gil Rosa1,2 , Hyun-Taek Lee4 , Daniel Simon3,5 , Khushi Vyas1,2 , Bing Li6,7 , Hanifa Koguna3 , Yue Li1 , Ali Anil Demircali3 , Huseyin Uvet8 , Gulsum Gencoglan9,10, Arzu Akcay11,12, Moham…

CDR(CorelDRAW)2024最新汉化注册补丁包下载

CorelDRAW 2024是一款功能强大的平面设计软件&#xff0c;广泛应用于图形设计、编辑照片以及创建网站等领域。凭借对高级操作系统的支持、多监视器查看和4K显示屏的兼容性&#xff0c;它让初始用户、图形专家、小型企业主和设计爱好者都能自信快速地交付专业级结果。 CorelDRA…

一文教你搞懂Vue生命周期

Vue生命周期 生命周期示意图 Vue3 组件创建阶段 new vue new一个vue的实例对象&#xff1b;此时会进入组件的创建过程&#xff08;该组件在代码中被注册并使用时&#xff0c;就代表着其被new了一个新的实例对象&#xff09;。 Init Events & Lifecycle 初始化组件的事件和…

spring aop中获取request和response

Spring AOP 操作中如何使用request和response 实际使用时&#xff0c;如果方法一不行&#xff0c;请使用方法二 方法一 HttpServletRequest request ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); HttpServletResponse respons…

Python执行 nohup 导致僵尸进程问题. /usr/bin/sh -> /usr/bin/bash

将 /usr/bin/sh -> dash 改成 /usr/bin/sh -> /usr/bin/bash 即可解决. ln -sf /usr/bin/bash /usr/bin/sh cmd" nohup python3 xxxx.py > /xx/xxx.log 2>&1 &" #在python里执行上边的命令ret subprocess.Popen(cmd,shellTrue,stdouts…

uniapp封装文字提示气泡框toolTip组件

uniapp封装文字提示气泡框toolTip组件 文字提示气泡框&#xff1a;toolTip 因为uniapp 中小程序中没有window对象&#xff0c;需手动调用 关闭 第一种办法关闭&#xff1a;this.$refs.tooltip.close() 第二种办法关闭&#xff1a;visible.sync false 移动端没有现成的toolTip组…

【2024.03.05】定时执行专家 V7.1 发布 - TimingExecutor V7.1 Release

目录 ▉ 软件介绍 ▉ 新版本 V7.1 下载地址 ▉ V7.1 新功能 ▼2024-03-03 V7.1 - 更新日志 ▉ V7.0 新UI设计 ▉ 软件介绍 《定时执行专家》是一款制作精良、功能强大、毫秒精度、专业级的定时任务执行软件。软件具有 25 种【任务类型】、12 种【触发器】触发方式&#x…

InstantiationAwareBeanPostProcessor学习

简介 InstantiationAwareBeanPostProcessor 是 Spring 框架中的一个核心接口&#xff0c;它允许在 Spring 容器实例化 bean 之前和之后执行自定义逻辑。这个接口扩展了 BeanPostProcessor 接口&#xff0c;并增加了与 bean 实例化和属性填充相关的回调方法。 这个接口定义的主…

swift 闭包捕获列表

以下函数会打印出什么&#xff1f; var car "Benz" let closure { [car] in print("I drive \(car)") } car "Tesla" closure() 因为 clousre 已经申明将 car 复制进去了&#xff08;[car]&#xff09;&#xff0c;此时clousre 里的 car…