14.安卓逆向-frida基础-编写hook脚本2

news2024/9/29 3:31:34

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

内容参考于:图灵Python学院

本人写的内容纯属胡编乱造,全都是合成造假,仅仅只是为了娱乐,请不要盲目相信。

工具下载:

链接:https://pan.baidu.com/s/1rEEJnt85npn7N38Ai0_F2Q?pwd=6tw3

提取码:6tw3

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

上一个内容:13.安卓逆向-frida基础-编写hook脚本1

接着上一个内容继续,接下来是HOOK构造方法

如下图红框,它有两个构造方法

app中调用构造方法的位置

脚本代码

function demo4(){// HOOK构造方法
   var money = Java.use("com.luoge.com.Money")
   money.$init.overload("java.lang.String","int").implementation = function(str, ii){// 重写构造方法
    console.log(str, ii) // 查看原本参数的值
    str = "飞机"// 修改参数
    ii = 22222// 修改参数
    this.$init(str,ii) // 调用原本的构造方法
   }

}

效果图:

主动调用

效果图:

function demo5(){
    var res = Java.use("com.luoge.com.Money").$new("xxx",23313).getInfo()
    console.log("主动调用", res)
}

第二种主动调用

function demo5(){
    var res = Java.use("com.luoge.com.Money").$new("xxx",23313).getInfo()
    console.log("主动调用", res)
    Java.choose("com.luoge.com.Money", {
        onMatch:function(obj){ // 这里每找到一个Money对象就会调用一次
            console.log('Java.choose', obj.getInfo())
        },
        onComplete:function(){
            console.log('Money对象搜索完执行的代码')
        }
    })
}

HOOK字段

字段就是下图红框里的东西

HOOK静态的字段

function demo6(){
 var money = Java.use("com.luoge.com.Money")
 console.log("flag类型", JSON.stringify(money.flag));
 console.log("flag的值", money.flag.value);
 money.flag.value = "mmmm"
  console.log("flag修改之后的值", money.flag.value);
}

HOOK非静态的字段

function demo6(){
 var money = Java.use("com.luoge.com.Money")
// console.log("flag类型", JSON.stringify(money.flag));
// console.log("flag的值", money.flag.value);
// money.flag.value = "mmmm"
//  console.log("flag修改之后的值", money.flag.value);

    Java.choose("com.luoge.com.Money", {
        onMatch:function(obj){ // 这里每找到一个Money对象就会调用一次
            console.log('Java.choose非静态变量(字段)', obj._name.value)
            obj._name.value = '张飞'
            console.log('Java.choose修改之后非静态变量(字段)', obj._name.value)
        },
        onComplete:function(){
            console.log('Money对象搜索完执行的代码')
        }
    })

}

HOOK内部类

下图红框的就是内部类

效果图:

function demo7(){
 var innerClass = Java.use("com.luoge.com.Money$innerClass")// 内部类的对象使用$符号加类名获取
 innerClass.$init.overload("java.lang.String","int").implementation = function(s,i){
    console.log('demo7s', s);
    console.log('demo7i', i);
    this.$init(s,i);
    console.log(this.outPrint())
    
 }
}

获取全部类和方法

function demo8(){
    console.log(Java.enumerateLoadedClassesSync().join('\n'))
}

获取指定类的普通方法

function demo8(){
//    console.log(Java.enumerateLoadedClassesSync().join('\n'))
    var utils = Java.use("com.luoge.com.Utils")
    var methods = utils.class.getDeclaredMethods()
    for(var i = 0; i < methods.length; i++){
        console.log(methods[i].getName());
    }
}

获取指定类的构造方法

function demo8(){
//    console.log(Java.enumerateLoadedClassesSync().join('\n'))
    console.log('普通方法')
    var utils = Java.use("com.luoge.com.Utils")
    var methods = utils.class.getDeclaredMethods()
    for(var i = 0; i < methods.length; i++){
        console.log(methods[i].getName());
    }
        console.log('构造方法')
     var money = Java.use("com.luoge.com.Money")
     methods = money.class.getDeclaredConstructors()
    for(var i = 0; i < methods.length; i++){
        console.log(methods[i].toString());
        console.log(methods[i].getName());
    }

}

获取指定类的字段

获取指定类的内部类

function demo8(){
//    console.log(Java.enumerateLoadedClassesSync().join('\n'))
    console.log('普通方法\n')
    var utils = Java.use("com.luoge.com.Utils")
    var methods = utils.class.getDeclaredMethods()
    for(var i = 0; i < methods.length; i++){
        console.log(methods[i].getName());
    }
        console.log('构造方法\n')
     var money = Java.use("com.luoge.com.Money")
     methods = money.class.getDeclaredConstructors()
    for(var i = 0; i < methods.length; i++){
        console.log(methods[i].toString());
        console.log(methods[i].getName());
    }
    console.log('字段\n')
    var field = money.class.getDeclaredFields()
    for(var i = 0; i < field.length; i++){
        console.log(field[i].toString())
        console.log(field[i].getName())
    }

   console.log('内部类\n')
    var c = money.class.getDeclaredClasses()
    for(var i = 0; i < c.length; i++){
        console.log(c[i].toString())
        console.log(c[i].getName())
    }

}

安装 @types/frida-gum 插件,可以自动补齐Frida代码


img

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

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

相关文章

图技术与大语言模型 LLM 结合,打造下一代知识图谱应用

随着 AI 人工智能技术的迅猛发展和自然语言处理领域的研究日益深入&#xff0c;如何构建强大的大语言模型对于企业来说愈发重要&#xff0c;而图数据库作为处理复杂数据结构的有力工具&#xff0c;为企业构建行业大语言模型提供了强大的支持。 近日&#xff0c;国产企业级分布…

UE学习篇ContentExample解读------Blueprints Advanced-下

文章目录 总览描述批次阅览2.1 Timeline animation2.2 Actor tracking2.3 Button Trigger using a blueprint interface2.4 Opening door with trigger2.5 Child Blueprints 概念总结致谢&#xff1a; 总览描述 打开关卡后&#xff0c;引入眼帘的就是针对关卡的总体性文字描述&…

netdata(Linux 性能实时监测工具)一键安装 for armbian

下载地址netdata/netdata: Architected for speed. Automated for easy. Monitoring and troubleshooting, transformed! (github.com) sh netdata-armv7l-latest.gz.run^|.-. .-. .-. .-. . netdata| - - - - real-time performance monitoring, done righ…

指定PDF或图片多个识别区域,识别区域文字,并批量对PDF或图片文件改名

常见场景 用户有大量图片/PDF文件&#xff0c;期望能按照图片/PDF中的某些文字对图片/PDF文件重命名。期望工具可以批量处理、离线识别&#xff08;保证数据安全性&#xff09;。手工操作麻烦。具体场景&#xff1a;用户有工程现场照片&#xff0c;订单&#xff0c;简历等PDF或…

动手学深度学习-GPU常见报错-CUDA11.4-AssertionError: Torch not compiled with CUDA enabled

目录 本文还能解决&#xff1a; 0. 问题原因 1. 查看机器的cuda版本 2. 从官网下载对应的torch和torchvision 3. 具体安装方法 本文还能解决&#xff1a; torch.cuda.is_available() 输出为 False&#xff1b; torch.cuda.device_count() 输出为 0 0. 问题原因 这两个问题…

召回09 双塔模型+自监督学习

引入&#xff1a; 自监督学习改进双塔模型&#xff0c;可以提升业务指标。自监督学习是把物品塔学习得更习的更好。 长尾物品的曝光和点击数量太少&#xff0c;训练的样本次数不够。自监督可以更好地学习长尾数据的物品表征。 双塔模型的训练&#xff1a; 线上召回的时候不用纠…

SSM+Vue社区物业管理系统

目录 1 项目介绍2 项目截图3 核心代码3.1 Controller3.2 Service3.3 Dao3.4 spring-mybatis.xml3.5 spring-mvc.xml3.5 Vue 4 数据库表设计5 文档参考6 计算机毕设选题推荐7 源码获取 1 项目介绍 博主个人介绍&#xff1a;CSDN认证博客专家&#xff0c;CSDN平台Java领域优质创作…

SpringCloud简介 Ribbon Eureka 远程调用RestTemplate类 openfeign

〇、SpringCloud 0.区别于单体项目和soa架构&#xff0c;微服务架构每个服务独立&#xff0c;灵活。 1. spring cloud是一个完整的微服务框架&#xff0c;springCloud包括三个体系&#xff1a; spring cloud Netflix spring cloud Alibaba spring 其他 2.spring cloud 版本命名…

【每日刷题】Day133

【每日刷题】Day133 &#x1f955;个人主页&#xff1a;开敲&#x1f349; &#x1f525;所属专栏&#xff1a;每日刷题&#x1f34d; &#x1f33c;文章目录&#x1f33c; 1. LCR 085. 括号生成 - 力扣&#xff08;LeetCode&#xff09; 2. LCR 102. 目标和 - 力扣&#xff…

Spring的热部署工具和数据库密码加盐操作

1.布置热部署 引言&#xff1a;在程序运行起来后&#xff0c;如果我们对代码进行了修改&#xff0c;需要重新测试修改后的程序&#xff0c;就得重新启动程序&#xff0c;这样很麻烦。于是引入热部署之后&#xff0c;我们就不需要重新启动程序&#xff0c;会自动更正。 1.配置po…

多线程;顺序容器;智能指针

多线程的创建创建线程比较简单&#xff0c;C提供头文件thread&#xff0c;使用std的thread实例化一个线程对象创建。 std::thread 在 #include 头文件中声明&#xff0c;因此使用 std::thread 时需要包含 #include 头文件。 #include <iostream> #include <thread&g…

【C++】C++的Vector使用和实现

目录 vector的介绍 vector的使用 construct iterator capacity Element access mondifiers vector的原理介绍以及简单实现 vector的介绍 我们平时在写代码中可能会使用各种类型的array&#xff0c;也就是数组&#xff0c;但是这些数组都是静态的&#xff0c;意味着我们只能…

A股突破3000,连续大涨,公司国庆假放10天

关注▲洋洋科创星球▲一起成长&#xff01; 庆祝A股突破3000&#xff0c;连续大涨&#xff0c;也不知道老板抽了什么风&#xff0c;公司今天开始放国庆假了&#xff0c;连休10天&#xff0c;哈哈哈哈哈哈。 27号开始放国庆假&#xff0c;连休10&#xff0c;刺激。 中秋国庆这一…

在线代码编辑器

在线代码编辑器 文章说明前台核心代码后台核心代码效果展示源码下载 文章说明 采用Java结合vue3设计实现的在线代码编辑功能&#xff0c;支持在线编辑代码、运行代码&#xff0c;同时支持导入文件&#xff0c;支持图片识别&#xff0c;支持复制代码&#xff0c;可将代码导出为图…

网络安全带你练爬虫----添加异常处理代码

&#xff08;当代码越来越长的时候&#xff0c;异常处理代码有时候能起到很好的作用&#xff09; (注&#xff1a;其中的cookie需要填自己的) 一、异常处理代码&#xff1a; &#xff08;1&#xff09;try-except搭配&#xff1a;try关键字后面的代码是要监视异常的代码块&am…

DarkLabel 2.4 目标追标注工具介绍

DarkLabel介绍 https://github.com/darkpgmr/DarkLabel 官方地址 视频/图像标注工具&#xff0c;很适合用于目标追踪任务 DarkLabel可以在视频和图像中标注物体的边界框&#xff0c;并附上 ID 和name。还可以用于裁剪视频、从视频中采样训练图像以及对图像区域进行马赛克处理…

第十三周:机器学习

目录 摘要 Abstract 一、生成式对抗网络&#xff08;上&#xff09; 1、引入——generator 2、discriminator 3、GAN算法 4、GAN的理论 5、GAN的训练技巧 二、word2vec——gensim实践 1、引入 2、 word2vec模型 3、fasttext模型 总结 摘要 本周学习了对GAN进行了…

二叉树的前序遍历,中序遍历,后序遍历(非递归方法+C语言代码)

#include<stdlib.h> #include<stdio.h> #include<assert.h> #include<stdbool.h> //定义一个二叉树结点结构体 typedef int ElemTpye; typedef struct TreeNode {ElemTpye data;struct TreeNode* left;struct TreeNode* right; }TreeNode; //创建结点 …

Autosar EcuM学习笔记-上电初始化执行函数及下电前执行函数

文章目录 前言Autosar标准EcuM启动时的初始化EcuM下电执行过程 总结 前言 Autosar启动和下电过程由EcuM控制&#xff0c;本文介绍EcuM中的初始化和下电前的执行函数 Autosar标准 EcuM启动时的初始化 在标准中&#xff0c;主核启动流程如下&#xff1a; 从核启动流程如下&a…

98问答网是一个怎样的平台?它主要提供哪些服务?

98问答网是一个集知识分享、问题解答与社区交流为一体的综合性在线问答平台。该平台旨在通过汇聚来自各行各业的专家、学者以及广大网友的智慧&#xff0c;为用户提供一个快速获取准确信息、解决生活工作中遇到的各种问题的渠道。 主要服务包括&#xff1a; 问题提问与解答&am…