首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

frida钩子本机非导出函数

Frida 是一个动态代码插桩工具,它允许开发者在不修改源代码的情况下,对正在运行的程序进行功能增强或调试。Frida 可以用于钩住(hook)函数,包括本机(native)代码中的非导出函数。下面是对这个问题的详细解答:

基础概念

Frida 钩子:Frida 允许开发者通过 JavaScript 脚本与目标进程进行交互,实现对目标进程中函数的拦截和修改。

非导出函数:在动态链接库(DLL)或共享对象(SO)中,有些函数并没有被标记为导出,这意味着它们不能直接从外部程序调用。这些函数通常用于内部实现细节。

相关优势

  1. 无需源代码:Frida 可以在不拥有源代码的情况下对程序进行分析和修改。
  2. 实时性:可以在程序运行时动态地插入代码,非常适合进行实时调试和分析。
  3. 跨平台:支持多种操作系统和架构。
  4. 灵活性:可以通过编写 JavaScript 脚本来实现复杂的逻辑。

类型与应用场景

类型

  • 同步钩子:在目标函数执行前后插入代码。
  • 异步钩子:在目标函数执行时触发异步事件。

应用场景

  • 逆向工程:分析软件的内部逻辑。
  • 安全测试:检测软件的安全漏洞。
  • 性能监控:监控程序的性能瓶颈。
  • 自动化测试:模拟用户操作进行自动化测试。

遇到的问题及解决方法

问题:如何钩住本机非导出函数?

解决方法

  1. 使用模块基址和偏移量:首先需要知道目标函数的模块基址和函数在模块中的偏移量。这通常通过逆向工程工具(如 IDA Pro)获得。
  2. 编写 Frida 脚本:使用 Module.findBaseAddress 找到模块基址,然后加上偏移量得到函数地址。接着使用 Interceptor.attach 来钩住该函数。

示例代码

代码语言:txt
复制
// 假设我们已经知道目标函数的模块名和偏移量
const moduleName = "target_module.dll";
const functionOffset = 0x1234;

// 获取模块基址
const baseAddress = Module.findBaseAddress(moduleName);
if (baseAddress) {
    const functionAddress = baseAddress.add(functionOffset);

    // 钩住函数
    Interceptor.attach(functionAddress, {
        onEnter: function (args) {
            console.log("Function entered");
            // 可以在这里修改参数
        },
        onLeave: function (retval) {
            console.log("Function left");
            // 可以在这里修改返回值
        }
    });
} else {
    console.error("Module not found");
}

注意事项

  • 权限问题:在某些操作系统上,可能需要管理员权限才能钩住某些系统级别的函数。
  • 稳定性问题:不当的钩子操作可能导致程序崩溃或行为异常,因此需要谨慎使用。

通过上述方法,你可以成功地使用 Frida 钩住本机非导出函数,并对其进行监控或修改。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

在 Go 语言中 Patch 非导出函数

TLDR; 使用 supermonkey[1] 可以 patch 任意导出/非导出函数。 目前在 Go 语言里写测试还是比较麻烦的。...patchvalue 读取 target 的地址使用了 reflect.ValueOf(funcVal).Pointer() 获取函数的虚拟地址,然后把替换函数的内容以 []byte 的形式覆盖进去。...一方面是因为 reflect 本身没有办法读取非导出函数,一方面是从 Go 的语法上来讲,我们没法在包外部以字面量对非导出函数进行引用。...所以目前开源的 monkey patch 是没有办法 patch 那些非导出函数的。...如果我们想要 patch 那些非导出函数,理论上并不需要对这个函数进行引用,只要能找到这个函数的虚拟地址就可以了,在这里提供一个思路,可以使用 nm 来找到我们想要 patch 的函数地址: NM(1)

1K30

r2frida:基于Frida的远程进程安全检测和通信工具

r2frida是一款能够将Radare2和Frida的功能合二为一的强大工具,该工具本质上是一个Radare2的自包含插件,可以帮助广大研究人员利用Frida的功能实现对目标进程的远程安全检测和通信管理...、导出、协议、类和方法; 5、在代理内部或主机的内存中搜索值; 6、使用短命令替换方法实现或创建钩子; 7、在目标进程中加载库或框架; 8、支持Dalvik、Java、ObjC、Swift和C接口; 9...、操作文件描述符和环境变量; 10、向进程和断点发送信号; 11、读/写进程内存; 12、调用函数、系统调用和原始代码段; 13、通过USB或TCP/IP连接Frida服务器; 14、枚举应用程序和进程...; 15、跟踪寄存器、参数和函数; 16、已在Linux、Windows、macOS、iOS和Android的x64、arm32和arm64上测试; 17、不需要在主机中安装Frida; 18、支持使用代理运行的插件扩展...# 显示所有可用命令 :dm # 枚举映射,使用':dm|head'搜索程序基地址 :iE # 枚举当前二进制的导出 :dt fread # 跟踪'fread'函数

22510
  • 搭建frida+木木模拟器运行环境

    目录 pip安装frida 安装木木模拟器 开启模拟器的root权限 打开模拟器USB调试 安装RE文件管理器 下载frida服务端-Android 下载frida-server文件 移动文件到tmp下...使用adb连接mumu模拟器 设置frida-server权限并启动 查看是否启动成功 使用python调用 pip安装frida 本机环境win10 (AMD64)、python3.6.4 pip...pip install frida-tools 安装完成后frida后,再pip安装frida-tools 安装木木模拟器 直接去官网下载. http://mumu.163.com/ 此过程省略…...下载frida服务端-Android 下载frida-server文件 到 https://github.com/frida/frida/releases 下载相应的版本 这里是给木木模拟器安装Android...weixin = "com.tencent.mm" # 枚举进程中加载指定模块中的导出函数 session = rdev.attach(weixin) # 也可以使用attach(pid)的方式 #

    88020

    Frida - App逆向 JavaScript代码注入 基本语法以及数据类型介绍

    ) / Frida数据类型 1.重载函数介绍 2.重载函数常用的类型 三、Frida Hook常用代码介绍 1.基本代码框架 四、注入JavaScript代码运行监听App 总结 ---- 前言 Frida...可以通过将JavaScript 脚本插入到APP的内存中来对APP的逻辑进行跟踪和监视乃至修改原程序的逻辑,实现逆向开发和分析人员想要实现的功能称之为HOOK(钩子 即通过钩子机制与钩子函数建立联系);...1.重载函数介绍 重载(overloading) 是在一个类里面,方法名字相同,而参数不同,返回类型可以相同也可以不同; 每个重载的方法(或者构造函数)都必须有一个独一无二的参数类型列表,根据参数类型以及参数的数量调用不同的同名函数...无法以返回值类型作为重载函数的区分标准。...2.重载函数常用的类型 java中的类型 frida里面的类型 int int float float boolean boolean string java.lang.String char [C byte

    3.8K10

    安卓Frida Hook进阶

    hook_art.js JNI-Frida-Hook 函数名已定义,方便定位 JNI-Frida-Hook findhash ida插件,可用于检测加解密函数,也可作为Native Trace库 findhash...函数参数和返回值:除了函数调用,Frida-Trace 还可以显示函数的参数和返回值,帮助用户更好地理解函数的执行过程。...易用性:Frida-Trace 提供了简洁的命令行接口,用户可以通过命令轻松设置和启动函数追踪。 - `-i` / `-a`: 跟踪 C 函数或 so 库中的函数。...PS:-a 包含模块+偏移跟踪,一般用于追踪未导出函数,例子:-a "lib52pojie.so!0x4793c" 包含/排除模块或函数: - `-I` : 包含指定模块。...attach 方式附加当前进程 日志输出: `-o`:日志输出到文件 使用案例: 注意下面需要打开相应的app保持在屏幕上 #附加当前进程并追踪lib52pojie.so里的所有Java_开头的jni导出函数

    11600

    绕过安卓SSL验证证书的常见四种方式

    一般来说,为了绕过这种验证方法,我们需要对应用程序的代码以及验证接口设置钩子。...Frida工具中包含了一个能够让应用程序在运行时加载Frida的动态库,并允许我们对目标应用程序的代码和指令进行动态修改。...Frida命令行工具的使用方法如下: C:\>frida-ps-U PID Name ---- ------ 6383 Gadget C:\>frida-U gadget ____ / _ |Frida...javax.net.ssl.TrustManagerFactorySpi javax.net.ssl.X509ExtendedTrustManager [Ljavax.net.ssl.TrustManager; 此时,你就可以使用内置的SSL绑定绕过函数来实施攻击了...当你找到了负责处理证书验证的代码之后,你就可以选择对代码进行直接修改或者使用Frida来给特定函数设置钩子了。为了避免对整个应用程序进行重构,我们可以直接对证书验证函数设置钩子。

    3.4K20

    iOS 逆向工具:逆向做的好,码农下班早丨音视频工具

    MonkeyDev[2]:一款非越狱插件开发集成神器。 FLEX[3] :一个探索和调试 iOS App UI 和堆栈的工具。...1、非越狱 App 调试 1.1、环境配置 使用下列命令下载最新的 Theos: sudo git clone --recursive https://github.com/theos/theos.git...logify.pl 工具将 .xm文件转成 .mm 文件进行编译,集成了 CydiaSubstrate,可以使用 MSHookMessageEx 和 MSHookFunction 来 Hook OC 函数和指定地址...CaptainHook Tweak:使用 CaptainHook 提供的头文件进行 OC 函数的 Hook 以及属性的获取。...1.4、导出调试 App 的沙盒文件 通常我们会想要导出调试 App 的沙盒文件,这时候我们可以在 MonkeyApp 的 Info.plist 文件中添加 Application supports iTunes

    1.2K20

    【愚公系列】2023年05月 攻防世界-MOBILE(Phishing is not a crime-2)

    Objection是一款移动设备运行时漏洞利用工具,该工具由Frida驱动,可以帮助研究人员访问移动端应用程序,并在无需越狱或root操作的情况下对移动端应用程序的安全进行评估检查。...安装命令 pip3 install objection frida是一款便携的、自由的、支持全平台的hook框架,可以通过编写JavaScript、Python代码来和frida_server端进行交互...d2j-dex2jar.bat classes.dex 2、我们可以看到函数getSignatureString(byte[]),它由本机库实现。...实现getSignatureString的so函数实在 (/lib/armeabi-v7a/libstrings.so): 3、Signature密钥查找 签名算法 (HMACSHA256)...反编译此方法会显示密钥是动态生成的: 4、Fook函数 import frida import sys session = frida.get_usb_device(1000000).attach

    41820

    android app 抓包

    长按修改网络-高级选项-代理-手动 配置主机名 端口 主机名填写 配置后浏览器访问 http://ip111.cn/ 然后看burp上是否有ip111的抓包记录 有的话就代表配置成功 证书安装: 导出证书...Proxy-Options-导出CA证书 传输证书到手机上 adb push cacert.cer /sdcard/Download 安装证书 以我的手机Pixel为例,选择设置-安全性和位置信息...-加密与凭据-从存储设备安装-选择证书 填写证书名称 提示已安装 就安装成功了 返回选择信任的凭据-用户 有PortSwigger就代表证书安装成功了 android7.0以后安装证书 导出后的证书...https://www.charlesproxy.com/download/ Charles抓包配置 HTTP Proxy-Proxy Settings-Port 默认8888 ifconfig查看本机...-U|grep -i xx 执行脚本 frida -U -f com.xx.xx --no-pause -l xx.js 导出证书 adb shell cd /sdcard/Download mv

    3K31

    App逆向 Frida - 夜神模拟器安装配置 基本使用

    可以获取进程的信息(模块列表,线程列表,库导出函数); 2、可以拦截指定函数和调用指定函数,可以注入代码; 3、Frida的主要工作方式是将脚本注入到目标新的进程中,而且在执行过程中可以实时看到其中的变化...; 2.Frida原理(建议了解一下,否则后续的安装会有些懵懂) frida分为两部分,服务端运行在目标机上,通过注入进程的方式来实现劫持应用函数,另一部分运行在系统机器上 1、模拟器端/手机端安装一个...-i https://pypi.tuna.tsinghua.edu.cn/simple 2.查看本地的frida版本,需要与模拟器端/手机端的版本对应,否则会出错 本地的frida版本:frida...--version 3.frida下载 下载地址:https://github.com/frida/frida/releases 我用的是夜神模拟器,查看系统信息 下载完成解压...-Ua 监听成功 ---- 总结 本文仅仅简单介绍了如何在模拟器端安装frida,以及启动frida服务并监听,后面会更新使用frida监听app代码注入进行hook的示例,关于模拟器的操作可以查看我的相关博文

    4.2K10

    安卓Frida Hook之Frida-Native-Hook

    实验环境 windows 10 vscode frida 16.2.1 jadx-gui Frida相关api介绍 1.Process、Module、Memory基础 1.Process Process...Module Module 对象代表一个加载到进程的模块(例如,在 Windows 上的 DLL,或在 Linux/Android 上的 .so 文件),能查询模块的信息,如模块的基址、名称、导入/导出的函数等...导出表(Export Table):列出了库中可以被其他程序或库访问的所有公开函数和符号的名称。...导入表(Import Table):列出了库需要从其他库中调用的函数和符号的名称。 简而言之,导出表告诉其他程序:“这些是我提供的功能。”,而导入表则表示:“这些是我需要的功能。”。...Process.getModuleByName("lib52pojie.so").base; var moduleAddr3 = Module.findBaseAddress("lib52pojie.so"); 6.Hook未导出函数与函数地址计算

    17900

    Notes|Android 客户端逆向基础知识分享

    GitHub 地址: https://github.com/skylot/jadx Frida:一款动态插桩工具,可以用于 Hook 应用程序中的函数、拦截系统调用等。...GitHub 地址: https://github.com/frida/frida Burp Suite:一款用于渗透测试的工具,可以拦截 HTTP(S) 流量,并提供各种功能,如拦截、修改、重放、验证等...神器 动态下钩子 动态调试 smail~ 官方网站: https://www.hex-rays.com/products/ida/ Xposed Framework:一款基于动态链接库注入的框架,可以用于修改应用程序的行为...res/mipmap-xxhdpi/ic_launcher.png W: libpng error: Not a PNG file 则代表不要直接通过修改图片格式的方式去调整图片格式,通过某些软件的导出...,导出 png 即可。

    64630

    FRIDA-API使用篇:Java、Interceptor、NativePointer

    当想要回收类时可以调用$Dispose()方法显式释放,当然也可以等待JavaScript的垃圾回收机制,当实例化一个对象之后,可以通过其实例对象调用类中的静态或非静态的方法,官方代码示例定义如下。...~ function frida_Java() { Java.perform(function () { //拦截getStr函数 Interceptor.attach...我们来看看示例代码~ //使用Module对象getExportByNameAPI直接获取libc.so中的导出函数read的地址,对read函数进行附加拦截 Interceptor.attach(Module.getExportByName...function frida_Interceptor() { Java.perform(function () { //对So层的导出函数getSum进行拦截 Interceptor.attach...int'])); console.log("result:",add_method(1,2)); }); 结语 本篇咱们学习了非常实用的API,如Interceptor对象对so层导出库函数拦截

    4.7K00

    借你一双慧眼, Frida Native Trace

    一日饮酒乐甚,突发奇想,IDA识别出所有函数,然后导出来给OD,给这些函数下断点,触发之后先打日志,再自动取消断点。这样程序运行的流程不就出来了?...实际跑起来发现,有些函数会频繁被调用,这样导致程序容易假死或者崩溃,所以还需要有个方便的过滤措施,过滤掉频繁调用的函数。...二、步骤 frida-trace 大胡子其实和我们想到一块去了,他搞了个frida-trace,可以一次性监控一堆函数地址。 然后还能打印出比较漂亮的树状图,不仅可以显示调用流程,还能显示调用层次。...现在就缺个数据源,把IDA的识别结果导出来了。 trace_natives https://github.com/Pr0214/trace_natives 是的,大佬已经写好了,我们又可以白嫖了。...然后在分析目录下面会生成 libxxbitmapkit_16250177xx.txt 这就是frida-trace要导入的数据了 先把某电商程序的App跑起来,然后命令 frida-trace -UF

    1.6K20
    领券