iOS修改外部符号指针地址—fishhook原理

news2025/2/6 14:46:15

上篇文章解释了外部符号加载的原理,知道了外部函数地址最后都保存在__DATA_CONST,__got__DATA,__lay_symbol_ptr
因此我们如果想要hook外部函数,只需要在启动后修改这两个段内的值就行。

接下来就是怎么找到某个外部符号在__DATA_CONST,__got__DATA,__lay_symbol_ptr的位置了。
假设这个外部符号名字是MMFWHeaderTest,因为无法确定是懒加载还是非懒加载符号,所以__DATA_CONST,__got__DATA,__lay_symbol_ptr都要遍历。
但是我们看__DATA_CONST,__got__DATA,__lay_symbol_ptr在mach-o文件的内容,都是函数指针,没有符号名称。我们要修改这里的值,但是要先找到,第几个符号是MMFWHeaderTest

SectionHeader

先去Load Commands看看,在这里可以找到__la_symbol_ptr的section header,也可以找__got
请添加图片描述
其中Indirect Sym Index(也就是Reserved1)代表在第一个懒加载的符号在间接符号表的位置是第14个。
Size是88,懒加载符号每个大小是8,所以懒加载符号一共有11个。

间接符号表

这样的话,我们需要遍历间接符号表 第14—24 的符号。这里也还是从0开始计数的。


请添加图片描述

找到间接符号表对应的位置,第一个数据是0x81,这代表这个符号在符号表的第0x81个。

符号表

所以这个符号的地址 = 符号表开头地址 + 0x81 * 符号表每个符号大小(0x10)
我这里是0xC300 + 0x81 * 0x10 = 0xCB10

请添加图片描述

字符串表

再看字符串表位置,0x74,不过这里是字符串表开头地址+0x74
我这里是0xCCA8 + 0x74 = 0xCD1C请添加图片描述

匹配成功,修改内存值

这就算匹配上了,所以懒加载符号表的第一个就是MMFWHeaderTest,然后我们直接修改__DATA,__la_symbol_ptr里第一个指针的值就行。

匹配失败,继续匹配

如果没匹配上,就回到间接符号表那一步,继续往下匹配。
如果__la_symbol_ptr找完了,就回到SectionHeader那一步,开始找__got
如果都找完了还没有,那就说明这个符号不存在。

总结

以上就是fishhook的原理,具体操作可以看源码。

mach-o文件结构

  • Header
  • Load Commands
    • Segment Header
      • Section Header
    • 其他
  • Segment
    • Section

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

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

相关文章

【MySQL笔记】InnoDB的插入缓存+非聚簇索引插入的离散性理解

文章目录 为什么需要插入缓存Insert Buffer非聚簇索引插入的离散性 Insert Buffer查看Insert Buffer信息 Insert Buffer的问题Change Buffer总结Reference 为什么需要插入缓存Insert Buffer 磁盘中的主键索引由于天然自增,无须磁盘的随机 I/O,只需不断追…

必示科技与日志易达成深度战略合作,携手共创智能运维新篇章

近日,智能运维企业必示科技与智能日志分析企业日志易达成深度战略合作,双方将在提升产品服务、技术融合创新应用、市场拓展、资源共享和协同效用等方面展开合作,为企业用户提供更全面优质的IT管理智能化服务,共同提升市场影响力&a…

【多线程】单例模式 | 饿汉模式 | 懒汉模式 | 指令重排序问题

文章目录 单例模式一、单例模式1.饿汉模式2.懒汉模式(单线程)3.懒汉模式(多线程)改进 4.指令重排序1.概念2.question:3.解决方法4总结: 单例模式 一、单例模式 单例,就是单个实例 在有些场景中&#xff0c…

半导体成品测试详述(Final Test,简称FT)

00、FT的一些概念 半导体成品测试(Final Test,简称FT)是在芯片封装完成后进行的最后一个测试阶段,其目的是确保芯片在实际应用中的性能和可靠性。FT测试可以包括环境测试、老化测试和应用特定的性能测试。 FT测试主要是为了解决各…

【快速上手STM32】SPI通信协议1.8寸TFT-LCD(ST7735S)

SPI简介 SPI,英文全称Serial Peripheral Interface,即串行外围设备接口,是一种高速、全双工、同步的串行通信总线。 我们之前说过I2C,那么我们就拿I2C和SPI做个对比。 SPI和I2C对比,优势在于SPI的传输速率比I2C快得…

shell脚本学习第一课

shell 简介 解析器 shell脚本基本使用

消息队列中间件,RabbitMQ的使用,死信队列,延迟队列,利用枚举实现队列,交换机,RountKey的声明

目录 0.交换机种类和区别 1.声明队列和交换机以及RountKey 2.初始化循环绑定 3.声明交换机 4.监听队列 4.1 监听普通队列 4.2监听死信队列 5.削峰填谷的实现 0.交换机种类和区别 Direct Exchange(直连交换机): 直连交换机将消息发送到…

青铜器RDM研发管理平台 upload 任意文件上传漏洞复现

0x01 产品简介 青铜器RDM研发管理平台是集成产品管理、研发部门管理、研发项目管理、研发多项目管理、研发资源管理、研发绩效管理、研发工程管理的集中平台。 0x02 漏洞概述 青铜器RDM研发管理平台 upload 接口存在任意文件上传漏洞,未经身份验证的远程攻击者可通过该漏洞…

FreeSWITCH 1.10.10 简单图形化界面17 - ubuntu22.04或者debian12 安装FreeSWITCH(IamFree)

FreeSWITCH 1.10.10 简单图形化界面17 - ubuntu22.04或者debian12 安装FreeSWITCH 界面预览00、先看使用手册0、安装操作系统1、下载脚本2、开始安装3、登录网页 FreeSWITCH界面安装参考:https://blog.csdn.net/jia198810/article/details/132479324 界面预览 htt…

【Web】VS Code 插件

专栏文章索引:Web 有问题可私聊:QQ:3375119339 目录 一、安装步骤 二、插件 1.Chinese (Simplified) (简体中文) 2.open in browser 3.vscode-icons 4.Live Server 5.Live Server Preview 6.翻译(英汉词典) 一、安装步骤 点击 “扩…

Servlet的文件上传下载

Servlet的文件上传|下载 二、文件上传实现 2.1实现思路 需要使用到Commons-FileUpload组件需要将jsp页面form表单的enctype属性值设置为“multipart/form-data”&#xff0c;Servlet中使用IO流实现文件的上传 2.2、实现过程 2.2.1新建web项目导入jar包 <dependency>…

NLP的奥秘:用 Python 揭秘人类语言与人工智能的桥梁【6000 字长文含代码示例】

目录 NLP 的核心任务 NLP 的发展历史 NLP 的技术与方法 传统的 NLP 技术与方法 规则基础方法&#xff1a;语言学的智慧 统计学习方法&#xff1a;数据的力量 深度学习方法&#xff1a;人工智能的新浪潮 NLP 的应用领域 Python在 NLP 中的应用 1、NLTK (Natural Langu…

数字孪生与企业

数字孪生技术&#xff0c;简而言之&#xff0c;就是创造一个物理实体的数字双胞胎&#xff0c;在虚拟世界中精确模拟现实世界的行为、过程和系统。这种技术的核心在于&#xff0c;它允许我们在数字环境中实时地监控、分析和优化其物理对应物的性能和效率。数字孪生的应用场景极…

node.js服务器静态资源处理

前言&#xff1a;node.js服务器动态资源处理见 http://t.csdnimg.cn/9D8WN 一、什么是node.js服务器静态资源&#xff1f; 静态资源服务器指的是不会被服务器的动态运行所改变或者生成的文件. 它最初在服务器运行之前是什么样子, 到服务器结束运行时, 它还是那个样子. 比如平…

基于springboot+vue+Mysql的校园新闻网站

开发语言&#xff1a;Java框架&#xff1a;springbootJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;…

HarmonyOS实战开发-如何实现电话服务中发送短信的功能。

介绍 本示例使用ohos.telephony.sms 接口展示了电话服务中发送短信的功能。 效果预览 使用说明&#xff1a; 首页点击创建联系人&#xff0c;弹框输入联系人姓名和电话&#xff0c;点击确定按钮后&#xff0c;联系人列表中添加该联系人;点击管理&#xff0c;该按钮变成取消&…

[数据结构]——二叉树——堆的实现

1. 堆的概念及结构 如果有一个关键码的集合K { &#xff0c; &#xff0c; &#xff0c;…&#xff0c; }&#xff0c;把它的所有元素按完全二叉树的顺序存储方式存储 在一个一维数组中&#xff0c;并满足&#xff1a; < 且 < ( > 且 > ) i 0&#xff0c;1&…

如何使用OSI七层模型的思路进行Linux网络问题排障?

在运维工作中&#xff0c;我们可能经常遇到诸如服务器无法远程连接、网站无法访问等各种网络问题。此时你是否想过&#xff0c;我们常背的OSI七层模型&#xff0c;能在处理这样的实际问题中发挥什么样的作用呢&#xff1f; 基于OSI架构的方法论&#xff0c;我们可以使用自下而…

OpenHarmony轻量系统开发【5】驱动之GPIO点灯

5.1点灯例程源码 先看最简单得LED灯闪烁操作 源码结构如下&#xff1a; 第一个BUILD.gn文件内容&#xff1a; static_library("led_demo") {sources ["led_demo.c"]include_dirs ["//utils/native/lite/include","//kernel/liteos_m/c…

FL Studio v21.2.3.4004 中文永久版网盘下载(含Key.reg注册表补丁)

软件介绍 FL Studio21水果编曲软件汉化版是一款专业的音乐制作软件&#xff0c;被广泛地应用于电子音乐、hip-hop、流行乐等多种音乐类型的制作。该软件提供了丰富的音频编曲工具和音乐效果器&#xff0c;让用户可以轻松地创作出高品质的音乐作品。同时&#xff0c;这也是一款…