当前位置: 首页 > news >正文

iOS Hook 崩溃

0x00 崩溃重现

Hook 的类,是这样的:

@interface ViewController : UIViewController
@end@implementation ViewController
- (void)loadView {[super loadView];NSLog(@"%s", __func__);
}- (void)test {NSLog(@"%s", __func__);
}- (void)viewDidLoad {[super viewDidLoad];[self test];
}@end

写的 Hook 逻辑是这样的:

@interface Hook : NSObject
@end#import <objc/runtime.h>
@implementation Hook+ (void)load {NSLog(@"%s", __func__);Class class = NSClassFromString(@"ViewController");Method originalMethod = class_getInstanceMethod(class, NSSelectorFromString(@"loadView"));Method swizzledMethod = class_getInstanceMethod([self class], NSSelectorFromString(@"swizzled_loadView"));method_exchangeImplementations(originalMethod, swizzledMethod);
}- (void)swizzled_loadView {NSLog(@"%s", __func__);[self swizzled_loadView];
}@end

真机运行后,是这样的,直接崩溃:

+[Hook load]
-[Hook swizzled_loadView]
-[ViewController swizzled_loadView]: unrecognized selector sent to instance 0x102e08dd0
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[ViewController swizzled_loadView]: unrecognized selector sent to instance 0x102e08dd0'

0x00 换个方式

写的 Hook 逻辑是这样的:

@interface UIViewController (Hook)
@end#import <objc/runtime.h>
@implementation UIViewController (Hook)+ (void)load {NSLog(@"%s", __func__);Class class = NSClassFromString(@"ViewController");Method originalMethod = class_getInstanceMethod(class, NSSelectorFromString(@"loadView"));Method swizzledMethod = class_getInstanceMethod([self class], NSSelectorFromString(@"swizzled_loadView"));method_exchangeImplementations(originalMethod, swizzledMethod);
}- (void)swizzled_loadView {NSLog(@"%s", __func__);[self swizzled_loadView];UIView *view = [[UIView alloc] init];view. frame = CGRectMake (100, 200, 200, 200);view.backgroundColor = [UIColor redColor];[self.view addSubview:view];
}@end

真机运行后,不崩溃了:

+[UIViewController(Hook) load]
-[UIViewController(Hook) swizzled_loadView]
-[ViewController loadView]
-[ViewController test]

并且成功,添加了 view


相关文章:

iOS Hook 崩溃

0x00 崩溃重现 被 Hook 的类&#xff0c;是这样的&#xff1a; interface ViewController : UIViewController endimplementation ViewController - (void)loadView {[super loadView];NSLog("%s", __func__); }- (void)test {NSLog("%s", __func__); }-…...

区间预测 | Matlab实现LSTM-ABKDE长短期记忆神经网络自适应带宽核密度估计多变量回归区间预测

区间预测 | Matlab实现LSTM-ABKDE长短期记忆神经网络自适应带宽核密度估计多变量回归区间预测 目录 区间预测 | Matlab实现LSTM-ABKDE长短期记忆神经网络自适应带宽核密度估计多变量回归区间预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab实现LSTM-ABKDE长…...

linux内核下rapidio(TSI721)相关笔记汇总

1 驱动的安装 和 主要功能(doorbell, DMA, rionet)的简单测试 linux5.4 下使用rapidio(tsi721)的笔记记录_kernel-rapidio-CSDN博客 2 机理分析 linux内核下&#xff0c;rapidio网络系统建立的过程(枚举 和 发现)_linux rapidio-CSDN博客 linux内核下&#xff0c;(rapidio)T…...

从GPT-4到GPT-4o:人工智能的进化与革命

从GPT-4到GPT-4o&#xff1a;人工智能的进化与革命 近期&#xff0c;OpenAI推出了最新版本的人工智能模型——GPT-4o&#xff0c;引发了广泛的关注和讨论。在这篇文章中&#xff0c;我们将对GPT-4o进行全面评价&#xff0c;包括与前一版本GPT-4的对比分析&#xff0c;GPT-4o的…...

【Java】/*抽象类和接口*/

目录 一、抽象类和抽象方法 1.1 概念 1.2 特性 1.3 作用 二、接口 2.1 概念及定义 2.2 特性 2.3 实例&#xff1a;笔记本电脑 2.4 一个类可以实现多个接口 2.5 一个接口可以继承多个接口 2.6 Comparable接口 2.7 Comparator接口 2.8 Cloneable接口 2.9 浅拷贝和深…...

TCP/IP协议介绍——三次握手四次挥手

TCP/IP&#xff08;Transmission Control Protocol/Internet Protocol&#xff0c;传输控制协议/网际协议&#xff09;是指能够在多个不同网络间实现信息传输的协议簇。TCP/IP协议不仅仅指的是TCP 和IP两个协议&#xff0c;而是指一个由FTP、SMTP、TCP、UDP、IP等协议构成的协议…...

[C++]基于C++opencv结合vibe和sort tracker实现高空抛物实时检测

【vibe算法介绍】 ViBe算法是一种高效的像素级视频背景建模和前景检测算法。以下是对该算法的详细介绍&#xff1a; 一、算法原理 ViBe算法的核心思想是通过为每个像素点存储一个样本集&#xff0c;利用该样本集与当前像素值进行比较&#xff0c;从而判断该像素是否属于背景…...

Apache Doris 基础 -- 数据表设计(模式更改)

用户可以通过schema Change操作修改现有表的模式。表的模式主要包括对列的修改和对索引的修改。这里我们主要介绍与列相关的Scheme更改。对于与索引相关的更改&#xff0c;可以查看数据表设计/表索引&#xff0c;查看每个索引的更改方法。 1、术语 基本表&#xff08;Base Ta…...

【机器学习】【遗传算法】【项目实战】药品分拣的优化策略【附Python源码】

仅供学习、参考使用 一、遗传算法简介 遗传算法&#xff08;Genetic Algorithm, GA&#xff09;是机器学习领域中常见的一类算法&#xff0c;其基本思想可以用下述流程图简要表示&#xff1a; &#xff08;图参考论文&#xff1a;Optimization of Worker Scheduling at Logi…...

电子电气架构 ---车载安全防火墙

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和事,多看一眼都是你的不对。非必要不费力证明自己,无利益不试图说服别人,是精神上的节…...

解决selenium加载网页过慢影响程序运行时间的问题

在用selenium爬取动态加载网页时&#xff0c;发现网页内容都全部加载完了&#xff0c;但是页面还在转圈&#xff0c;并且获取页面内容的代码也没有执行&#xff0c;后面了解到selenium元素操作等方法是需要等待页面所有元素完全加载完成后才开始执行的&#xff0c;所以在页面未…...

何为云防护?有何作用

云防护又称云防御。随着Internet互联网络带宽的增加和多种DDOS 黑客工具的不断发布&#xff0c;云计算越演越热&#xff0c;DDOS拒绝服务攻击的实施越来越容易&#xff0c;DDOS攻击事件正在成上升趋势。出于商业竞争、打击报复和网络敲诈等多种因素&#xff0c;导致很多IDC 托管…...

2024050402-重学 Java 设计模式《实战责任链模式》

重学 Java 设计模式&#xff1a;实战责任链模式「模拟618电商大促期间&#xff0c;项目上线流程多级负责人审批场景」 一、前言 场地和场景的重要性 射击&#x1f3f9;需要去靶场学习、滑雪&#x1f3c2;需要去雪场体验、开车&#x1f697;需要能上路实践&#xff0c;而编程…...

centos7安装字体

1.安装命令 yum install fontconfig #字体库命令 yum install mkfontscale #更新字体命令2.安装字体&#xff08;注意权限问题&#xff09; 进入目录 /usr/share/fonts &#xff0c;该目录是 centos7 字体库的默认安装目录。在该目录下创建一个文件夹 ekp &#xff08;名字…...

Llama模型家族之使用 ReFT技术对 Llama-3 进行微调(三)为 ReFT 微调准备模型及数据集

LlaMA 3 系列博客 基于 LlaMA 3 LangGraph 在windows本地部署大模型 &#xff08;一&#xff09; 基于 LlaMA 3 LangGraph 在windows本地部署大模型 &#xff08;二&#xff09; 基于 LlaMA 3 LangGraph 在windows本地部署大模型 &#xff08;三&#xff09; 基于 LlaMA…...

学习Canvas过程中2D的方法、注释及感悟一(通俗易懂)

1.了解Canvas&#xff1a; Canvas是前端一个很重要的知识点&#xff0c;<canvas>标签用于创建画布绘制图形&#xff0c;通过JavaScript进行操作。它为开发者提供一个动态绘制图形的区域&#xff0c;用于创建图标、游戏动画、图像处理等。 对于能够熟练使用Canvas的开发者…...

《TCP/IP网络编程》(第十三章)多种I/O函数(2)

使用readv和writev函数可以提高数据通信的效率&#xff0c;它们的功能可以概括为**“对数据进行整合传输及发送”**。 即使用writev函数可以将分散在多个缓冲中的数据一并发送&#xff0c;使用readv函数可以由多个缓冲分别接受&#xff0c;所以适当使用他们可以减少I/O函数的调…...

Java集合汇总

Java中的集合框架是Java语言的核心部分&#xff0c;提供了强大的数据结构来存储和操作对象集合。集合框架位于java.util包中&#xff0c;主要可以分为两大类&#xff1a;Collection&#xff08;单列集合&#xff09;和Map&#xff08;双列集合&#xff09;。下面是对它们的总结…...

度小满金融大模型的应用创新

XuanYuan/README.md at main Duxiaoman-DI/XuanYuan GitHub...

Android WebView上传文件/自定义弹窗技术,附件的解决方案

安卓内核开发 其实是Android的webview默认是不支持<input type"file"/>文件上传的。现在的前端页面需要处理的是&#xff1a; 权限 文件路径AndroidManifest.xml <uses-permission android:name"android.permission.WRITE_EXTERNAL_STORAGE"/&g…...

Qt Widget类解析与代码注释

#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this); }Widget::~Widget() {delete ui; }//解释这串代码&#xff0c;写上注释 当然可以&#xff01;这段代码是 Qt …...

macOS多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用

文章目录 问题现象问题原因解决办法 问题现象 macOS启动台&#xff08;Launchpad&#xff09;多出来了&#xff1a;Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用。 问题原因 很明显&#xff0c;都是Google家的办公全家桶。这些应用并不是通过独立安装的…...

【AI学习】三、AI算法中的向量

在人工智能&#xff08;AI&#xff09;算法中&#xff0c;向量&#xff08;Vector&#xff09;是一种将现实世界中的数据&#xff08;如图像、文本、音频等&#xff09;转化为计算机可处理的数值型特征表示的工具。它是连接人类认知&#xff08;如语义、视觉特征&#xff09;与…...

Maven 概述、安装、配置、仓库、私服详解

目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

sipsak:SIP瑞士军刀!全参数详细教程!Kali Linux教程!

简介 sipsak 是一个面向会话初始协议 (SIP) 应用程序开发人员和管理员的小型命令行工具。它可以用于对 SIP 应用程序和设备进行一些简单的测试。 sipsak 是一款 SIP 压力和诊断实用程序。它通过 sip-uri 向服务器发送 SIP 请求&#xff0c;并检查收到的响应。它以以下模式之一…...

LeetCode - 199. 二叉树的右视图

题目 199. 二叉树的右视图 - 力扣&#xff08;LeetCode&#xff09; 思路 右视图是指从树的右侧看&#xff0c;对于每一层&#xff0c;只能看到该层最右边的节点。实现思路是&#xff1a; 使用深度优先搜索(DFS)按照"根-右-左"的顺序遍历树记录每个节点的深度对于…...

Webpack性能优化:构建速度与体积优化策略

一、构建速度优化 1、​​升级Webpack和Node.js​​ ​​优化效果​​&#xff1a;Webpack 4比Webpack 3构建时间降低60%-98%。​​原因​​&#xff1a; V8引擎优化&#xff08;for of替代forEach、Map/Set替代Object&#xff09;。默认使用更快的md4哈希算法。AST直接从Loa…...

从“安全密码”到测试体系:Gitee Test 赋能关键领域软件质量保障

关键领域软件测试的"安全密码"&#xff1a;Gitee Test如何破解行业痛点 在数字化浪潮席卷全球的今天&#xff0c;软件系统已成为国家关键领域的"神经中枢"。从国防军工到能源电力&#xff0c;从金融交易到交通管控&#xff0c;这些关乎国计民生的关键领域…...

【SpringBoot自动化部署】

SpringBoot自动化部署方法 使用Jenkins进行持续集成与部署 Jenkins是最常用的自动化部署工具之一&#xff0c;能够实现代码拉取、构建、测试和部署的全流程自动化。 配置Jenkins任务时&#xff0c;需要添加Git仓库地址和凭证&#xff0c;设置构建触发器&#xff08;如GitHub…...

机器学习的数学基础:线性模型

线性模型 线性模型的基本形式为&#xff1a; f ( x ) ω T x b f\left(\boldsymbol{x}\right)\boldsymbol{\omega}^\text{T}\boldsymbol{x}b f(x)ωTxb 回归问题 利用最小二乘法&#xff0c;得到 ω \boldsymbol{\omega} ω和 b b b的参数估计$ \boldsymbol{\hat{\omega}}…...