frida native hook简单demo

2023-10-29

记录frida hook native的笔记

整体代码如下

Java.perform(function() {
    console.log("Inside-java-perform-function");

    function jstring2Str(jstring) {
        var ret;
        Java.perform(function () {
            var String = Java.use("java.lang.String");
            ret = Java.cast(jstring, String);
        });
        return ret;
    }

    Interceptor.attach(Module.findExportByName("libnativetest.so", "Java_com_mc_nativetestlib_NativeLib_stringFromJNI"), {
        onEnter: function (args) {
            console.log("stringFromJNI onEnter...");
        },
        onLeave: function (retval) {
            console.log("stringFromJNI onLeave...");
            //step1: 获取返回值
            console.log("stringFromJNI 函数返回old值:", jstring2Str(retval));
            //step2: 修改返回值
            var env = Java.vm.getEnv();
            var jstringa = env.newStringUtf("new hello");
            retval.replace(ptr(jstringa));
        }
    });

});
import subprocess
import sys
import time

import frida
from pip._vendor.distlib.compat import raw_input


def cmd(cmd):
    subprocess.run(cmd, shell=True)

def my_message_handler(message , payload): #定义错误处理
	print(message)
	print(payload)

if __name__ == '__main__':
    # cmd('adb shell "su -c /data/local/tmp/frida-server-15.2.2-android-arm64 &"')  #开启手机端frida-server

    pkg="com.mc.envircheck"

    device = frida.get_usb_device()
    pid = device.spawn(pkg)
    print("pid-->" + str(pid))
    device.resume(pid)
    print("resume")
    # time.sleep(1)
    session = device.attach(pid)
    print("attach")
    with open('./hook_native_envircheck.js', 'r', encoding='utf-8') as file:
        script_code = file.read()

    script = session.create_script(script_code)
    script.on("message", my_message_handler)  # 调用错误处理
    script.load()
    # 脚本会持续运行等待输入
    raw_input()

注意:最开始的时候,写的demo,一直不能hook,因为我在activity页面初始化的时候就调用so里面的方法了,后来我发现需要加一个按钮,然后点击按钮再去调用so里面的方法,这个时候就能hook了。
当前frida的版本是16.1.0

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

frida native hook简单demo 的相关文章

  • 如何拦截全局资源加载?

    背景 我需要使用翻译 SDK Lokalise 文档here https docs lokalise com en articles 3487109 lokalise android sdk 2 0 beta 旨在从其服务器加载字符串资源
  • 在 Android 中获取联系方式需要花费大量时间?

    您好 目前正在做一个与联系人相关的项目 我正在从联系人中获取详细信息 电子邮件 电话号码和联系人姓名 效果很好 但问题是获取联系方式需要很长时间 超过 1000 个联系人 包括从社交网站同步的联系人 这样我就放了一个Asynchronous
  • 删除 Android 中切换按钮的填充

    我正在 android 中创建一个简单的切换按钮并将背景设置为可绘制对象
  • Android Wear:在手持设备上启动服务

    我正在构建一个 Wear 应用程序 它将与手持设备上的 WearableListenerService 进行通信 但是 我想确保当应用程序在手表上启动时服务已启动并运行 我最初的想法是发送意图或广播消息来启动服务 但是 我一直无法弄清楚如何
  • 在 Android strings.xml 文件中使用 HREF

    我正在尝试从 strings xml 文件中为 TextView android text 属性分配以下字符串 我无法让链接显示为可点击的超链接 有什么建议么 我尝试过以下技术
  • 将片段部分移出屏幕

    我已经被这个问题难住有一段时间了 我试图将包含在 FrameLayout 中的片段向右移动 以便只有片段的左侧 20 可见 我认为我遇到的问题是父级不会让片段移出其边界 或者我不知道如何移动它 我所尝试的一切只是将片段推到右墙上 然后缩放片
  • SQLite 中的 NOT NULL 列和错误捕获

    我有一个由用户定义的 EditText 填充的数据库 所有编辑文本都不允许有空字段 我知道我可以通过几个简单的 if 语句来检查这一点 if myEditText getText toString equals display error
  • Android Surface 与 Canvas 的关系

    Surface 和 Canvas 之间到底是什么关系 请解释 表面是一个缓冲区 画布保存绘图 视图未附加到画布 也不是表面 窗户被绑在 Surface 和 ViewRoot 询问 随后使用的画布表面 通过要绘制的视图 详细答案你可以阅读这篇
  • 在我授予许可后,表面视图不显示相机

    public View onCreateView LayoutInflater inflater Nullable ViewGroup container Bundle savedInstanceState View view inflat
  • InflateException 膨胀类 android.support.design.widget.CoordinatorLayout 时出错

    E AndroidRuntime 致命异常 main 进程 com atech a business PID 30662 java lang RuntimeException 无法启动活动 ComponentInfo com atech a
  • Android Fragment 中的 SharedPreferences

    我正在尝试读取 Fragment 内的 SharedPreferences 我的代码用于获取任何其他活动中的首选项 SharedPreferences preferences getSharedPreferences pref 0 我收到错
  • Android 缩放和密度问题

    Update 一些研究表明 华硕 Transformer TF700T 高端 的像素密度应约为 224 因此 android 报告的 159 值要么是错误的 要么已被某种方式修改 system 中的 lcd 密度键 build prop 由
  • 以编程方式卸载 Android 应用程序

    我希望能够允许我的用户从我的应用程序中卸载应用程序 就像 Google Play 商店允许其用户一样 请下图 主要问题是如何定义一个按钮 按下它我们可以通过提供包名称或其他一些信息来卸载应用程序 就像图像上的卸载按钮一样 try Inten
  • Android 中可以导入 java.rmi.* 吗?

    我的分布式系统课程中有一个项目 我们必须在我们的项目中使用 java rmi 而且我知道由于 dalvik VM 问题 android 不提供这个库 所以我只是想问是否可以在 Android 上使用这些库 Thanks Android 不支
  • 在 NumberPicker 中显示更多数字

    我有两个问题 第一个问题是删除 NumberPicker 中的分隔线 我在 Android 中扩展 NumberPicker 来解决这个问题 如下所示 import android content Context import androi
  • startDrag 方法 已弃用且无法编译程序

    startDrag android content ClipData android view View DragShadowBuilder java lang Object int 已弃用 如何解决这个问题而又不失去对旧版本的兼容性 还有
  • 如何强制刷新 CallLog.Calls.CACHED_NAME 列?

    我的目标是从通话记录中收集所有未知的电话号码 这可以通过以下代码来实现 private static final String CALLOG PROJECTION CallLog Calls ID CallLog Calls CACHED
  • 如何在清单文件中添加符合我意图的标志

    我们知道 我们可以使用 java 代码中的 addFlags 方法将一些标志添加到我们的意图中 有什么方法可以将这些标志添加到清单文件本身中 而不是用 java 代码编写 我需要为清单中的一项活动添加 REORDER TO FRONT 标志
  • 如何在运行时检查授予权限?

    In Android M 预览版 用户可以选择特定的应用程序并检索特定的权限 所以我问如何在运行时检查授予权限 您可以使用以下复制的代码https android googlesource com platform frameworks b
  • PinnedHeaderListView 滚动和标题问题

    背景 我正在尝试模仿 Lollipop 的联系人应用程序显示联系人首字母的固定标题的方式 正如我所写的here https stackoverflow com q 27621425 878126 问题 由于原始代码 发现here http

随机推荐

  • 如何使用React脚手架新建一个React项目

    1 react脚手架 xxx脚手架 用来帮助程序员快速创建一个基于xxx库的模板项目 包含了所有需要的配置 语法检查 jsx编译 devServer 下载好了所有相关的依赖 可以直接运行一个简单效果 react提供了一个用于创建react项
  • 狂神说Docker进阶篇笔记

    文章目录 Docker Compase 简介 官方介绍 安装 体验 网络规则 停止 小结 docker compose yaml 规则 实战开源项目 WordPress 实战微服务 小结 Docker Swarm 工作模式 node Ser
  • openjudge 1.6.7 有趣的跳跃

    OpenJudge 07 有趣的跳跃 解题思路 1 有趣的跳跃定义为n个数据 相邻两个相减后得到的绝对值的n 1个数据 经过排序后 正好是从1到n 1 那么首先的步骤为创建一个能容纳n个数据的数组 int a 3005 定义在主函数外 2
  • 前端代码集锦

    HTML中隐藏标签和显示标签的例子 注意登录前后的变化 HTML的代码 div div class login div div
  • cd.ssh bash: cd.ssh: 未找到命令.../没有这个文件或目录

    在linux中设置免密登录的时候 cd ssh 报错说bash cd ssh 未找到命令 原来是我的命令打错了 应该是cd ssh 后面有个 但是我这样输入以后 还是报错 说什么没有这个文件或目录 那你就要先ssh 一下自己的现在的ip地址
  • nodejs+vue+vue-router.路由问题

    路由加载出现警告 页面上路由不起作用 查看源码发现router view标签被解析成 lt gt 由于没有完全编译 修改配置文件vue config js添加如下配置
  • 在linux中,如何增加、修改、删除、暂停和冻结用户名

    在linux中 如何增加 修改 删除 暂停和冻结用户名 在操作增加 修改和删除用户名前 先认识linux中两个最重要的文件 它们就是账号管理最重要文件 etc passwd 与 etc shadow 环境 windows 7 virtual
  • router-view上添加key和data-key的作用

    key属性 用于提供对每个渲染的组件的唯一标识 当路由切换时 如果
  • 2022年12月-电子学会青少年等级考试C语言(一级)真题与解析

    2022年12月软件编程 C语言 等级考试 一级 分数 100 题数 5 时间限制 1000 ms 内存限制 65536 kB 1 加一 题目描述 输入一个整数x 输出这个数加1后的值 即x 1的值 输入 一个整数x 0 x 1000 输出
  • C/S、B/S架构详解,一文带你搞懂

    一 CS BS架构定义 CS架构 Client Server Architecture 是一种分布式计算模型 其中客户端和服务器之间通过网络进行通信 在这种架构中 客户端负责向服务器发送请求 并接收服务器返回的响应 服务器则负责处理客户端的
  • IDEA中 @override报错的解决方法

    IDEA中 override报错的解决方法 参考文章 1 IDEA中 override报错的解决方法 2 https www cnblogs com printN p 6870036 html 备忘一下
  • ETL正则匹配汇总

    一 正则匹配全部汇总 1 匹配中文 u4e00 u9fa5 2 英文字母 a zA Z 3 数字 0 9 4 匹配中文 英文字母和数字及下划线 u4e00 u9fa5 a zA Z0 9 同时判断输入长度 u4e00 u9fa5 a zA
  • 分布式事务有这一篇就够了!

    分布式事务 文章目录 分布式事务 1 基础概念 1 1 什么是事务 1 2 本地事务 1 3 分布式事务 1 4 分布式事务产生的情景 2 分布式事务基础理论 2 1 CAP理论 2 1 1 理解CAP C Consistency A Av
  • 盒子的宽度超出元素的盒子的解决办法box-sizing

    padding用在哪里超出的 box sizing就放在哪 盒子的宽度超出元素的盒子的解决办法 未修改的代码与样式 rpx与px都是单位 如果不了解就当px处理 1 calc 减轻相当于两侧的padding值 不推荐 了解 2 border
  • 计算机专业毕业设计选题原则

    计算机技术变化很快 新技术新观念每年都会涌现很多 计算机专业的毕业设计 是一次非常好的把理论知识结合实践的好机会 所以 选好自己的毕业设计题目 相当重要 我们建议 你要结合自己的职业理想来做 1 如果你将来想从事信息系统类开发 建议选择C
  • SpringBoot项目整合RabbitMQ

    1 简介 消息队列 Message Queue 是分布式系统中常用的组件 它允许不同的应用程序之间通过发送和接收消息进行通信 Spring Boot提供了简单且强大的方式来整合消息队列 其中包括RabbitMQ ActiveMQ Kafka
  • openwrt控制天翼网关定时重启

    由于天翼网关不支持定时重启 另外app里设置定时重启也没有作用 所以查找了一些相关工具和用法 再结合前辈的经验 参考的博客网址 自己最终把该功能实现了 首先需要用winscp登陆到刷了openwrt的路由器中 然后在 usr bin 目录下
  • CC2530学习(一)环境配置

    CC2530F256是一款将各种丰富的功能系统地集成到一片LSI Large Scale Integrated circuit 大规模集成电路 的片上系统 System on Chip 简称SoC 内嵌增强型51内核的单片机 芯片后缀256
  • docker安装redis(镜像安装)

    目录 安装 1 1 安装redis镜像 2 查看redis镜像 3 运行容器 4 查看容器安装成功 安装2 1 安装redis镜像 其中latest是镜像版本 根据程序需要 选择适合的版本 2 新建data和conf两个文件夹 位置随意 3
  • frida native hook简单demo

    记录frida hook native的笔记 整体代码如下 Java perform function console log Inside java perform function function jstring2Str jstrin