<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Eric's Blog]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/m0_38076563</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; m0_38076563]]></copyright><item><title><![CDATA[[iOS 理解] Swift Runtime (1) 类]]></title><link>https://blog.youkuaiyun.com/m0_38076563/article/details/129214091</link><guid>https://blog.youkuaiyun.com/m0_38076563/article/details/129214091</guid><author>m0_38076563</author><pubDate>Sat, 25 Feb 2023 15:19:08 +0800</pubDate><description><![CDATA[简单介绍 Swift 根类的内存布局；理解 Swift Runtime 和 Objc Runtime 的桥梁，为我们实现无限功能提供了基础。]]></description><category></category></item><item><title><![CDATA[[iOS 理解] 为什么 objc_msgSend 必须用汇编实现]]></title><link>https://blog.youkuaiyun.com/m0_38076563/article/details/129134856</link><guid>https://blog.youkuaiyun.com/m0_38076563/article/details/129134856</guid><author>m0_38076563</author><pubDate>Tue, 21 Feb 2023 01:43:01 +0800</pubDate><description><![CDATA[Runtime 源码，objc_msgSend 使用汇编实现，为什么不使用 C语言 实现？为了解决问题，我们直接复现问题：使用 C 实现一个简化的 objc_msgSend ... #消息机制]]></description><category></category></item><item><title><![CDATA[iOS CoreAnimation (九) transform]]></title><link>https://blog.youkuaiyun.com/m0_38076563/article/details/112987212</link><guid>https://blog.youkuaiyun.com/m0_38076563/article/details/112987212</guid><author>m0_38076563</author><pubDate>Sat, 30 Jan 2021 17:39:54 +0800</pubDate><description><![CDATA[本系列之前的文章或多或少地提到了 transform，本文进行完全解析。transform 直译就是改变形态、变形、变换，用来改变图层的显示效果，我们使用 CoreAnimation 框架，就从它提供的几个类和属性展开介绍。
CGAffineTransform
常用的变换如 平移 拉伸 旋转等，有一个共同的特点：原坐标系中的两条平行线，经过这类变换，仍然保持平行。于是把这类变换称为“保留平行关系的变换”，英语叫 affine transform，再翻译回来叫 仿射变换（是不是听起来高大上了）。仿射，保留了平]]></description><category></category></item><item><title><![CDATA[iOS CoreAnimation (八) 拉伸过滤，组透明，magnificationFilter，allowsGroupOpacity，opaque，光栅化 shouldRasterize]]></title><link>https://blog.youkuaiyun.com/m0_38076563/article/details/111679999</link><guid>https://blog.youkuaiyun.com/m0_38076563/article/details/111679999</guid><author>m0_38076563</author><pubDate>Tue, 29 Dec 2020 00:08:52 +0800</pubDate><description><![CDATA[啊啊啊

]]></description><category></category></item><item><title><![CDATA[[重复造轮子] 输入面板布局]]></title><link>https://blog.youkuaiyun.com/m0_38076563/article/details/111314270</link><guid>https://blog.youkuaiyun.com/m0_38076563/article/details/111314270</guid><author>m0_38076563</author><pubDate>Thu, 17 Dec 2020 14:55:47 +0800</pubDate><description><![CDATA[加号面板布局方式：
水平方向滑动，水平方向排列，垂直方向换行，水平方向翻页。
目标效果是像微信这样：

Demo + 实现链接
效果：
三个按钮：

很多按钮 第一页：

很多按钮 最后一页：

很多按钮 横屏之后，页数发生变化：

思路：主要是实现一种布局，重复劳动：
import UIKit
import SnapKit
  
/// 加号面板布局：水平方向滑动，item 折行排列
///
/// 内部会自动处理 safeAreaInsets、contentInsets
/// 暂不支持多个 secti]]></description><category></category></item><item><title><![CDATA[iOS Modern Collection Views]]></title><link>https://blog.youkuaiyun.com/m0_38076563/article/details/109047024</link><guid>https://blog.youkuaiyun.com/m0_38076563/article/details/109047024</guid><author>m0_38076563</author><pubDate>Sun, 25 Oct 2020 18:34:30 +0800</pubDate><description><![CDATA[本文是对 WWDC 2019、WWDC 2020 引入的 UICollectionView 新特性的理解。
关键词：

UICollectionViewCompositionalLayout
UICollectionViewDiffableDataSource
UIContentConfiguration

背景

现有的 Collection Views 用 UICollectionViewFlowLayout 流式布局，局限性太高；自己实现 Layout 子类，代码太繁琐。iOS 13（WWDC 201]]></description><category></category></item><item><title><![CDATA[macOS 10.15 解决 app 已损坏，打不开。您应该将它移到废纸篓]]></title><link>https://blog.youkuaiyun.com/m0_38076563/article/details/106671914</link><guid>https://blog.youkuaiyun.com/m0_38076563/article/details/106671914</guid><author>m0_38076563</author><pubDate>Wed, 10 Jun 2020 17:53:36 +0800</pubDate><description><![CDATA[app is damaged and can’t be opened. You should move it to the Trash.

一般网上的解决办法是命令行执行 sudo spctl --master-disable，很多人肯定也试了，但是无效。打开设置一看，明明已经设置好了啊。这应该是 macOS 10.15 新增的安全特性，需要额外的命令。

解决办法：在终端执行：
sudo xattr -rd com.apple.quarantine 你的app路径

例如
sudo xattr -rd c]]></description><category></category></item><item><title><![CDATA[[iOS 逆向 13] 代码混淆]]></title><link>https://blog.youkuaiyun.com/m0_38076563/article/details/105891605</link><guid>https://blog.youkuaiyun.com/m0_38076563/article/details/105891605</guid><author>m0_38076563</author><pubDate>Fri, 29 May 2020 17:17:18 +0800</pubDate><description><![CDATA[背景
经过逆向工程实践，可以发现静态分析在整个过程中是不可缺少的，而且静态分析工具生成的伪代码极大地提高了分析效率。想象一下如果没有静态分析，实现解除会员限制的过程：连接界面调试器 Reveal，找到目标界面，获取按钮地址，打印按钮的响应事件，获取响应方法的 C 函数指针，连接 LLDB 给该函数打断点，但是该函数内有大量的分支语句，每个分支都要通过调试才能判断是不是确定会员权限的函数，分析“一天...]]></description><category></category></item><item><title><![CDATA[[iOS 逆向 12] 加密与动态保护]]></title><link>https://blog.youkuaiyun.com/m0_38076563/article/details/105877079</link><guid>https://blog.youkuaiyun.com/m0_38076563/article/details/105877079</guid><author>m0_38076563</author><pubDate>Fri, 29 May 2020 17:15:38 +0800</pubDate><description><![CDATA[前面详细介绍了 App 的逆向过程，可以发现逆向工具层出不穷，使逆向开发的门槛越来越低。回看自己开发的 App，也面临着被分析、解除使用限制等危险。下面介绍几种保护方案。
数据加密
App 内需要保护的数据主要包括静态字符串、本地存储数据和网络传输数据，一般开发者不会对这些数据加密后使用，而是直接明文保存在本地或网络传输。分析者通过分析本地文件或拦截网络请求就可以轻松读取或修改数据。
加密算法
根...]]></description><category></category></item><item><title><![CDATA[[iOS 逆向 7] Hook]]></title><link>https://blog.youkuaiyun.com/m0_38076563/article/details/105532356</link><guid>https://blog.youkuaiyun.com/m0_38076563/article/details/105532356</guid><author>m0_38076563</author><pubDate>Fri, 29 May 2020 16:46:39 +0800</pubDate><description><![CDATA[概述
Hook，钩子，用来改变程序执行流程。iOS 中有以下几种方式：

Method Swizzling：利用 runtime 特性，进行 OC 方法重排。
fishhook：利用 Mach-O 格式程序加载原理，对动态库中 C 函数重排。
Cydia Substrate：一个框架，提供多种函数 hook 方式。

详解
Method Swizzling
原理比较简单，大致就是：OC 函数 = ...]]></description><category></category></item><item><title><![CDATA[[iOS 逆向 6] 分析与调试]]></title><link>https://blog.youkuaiyun.com/m0_38076563/article/details/105480346</link><guid>https://blog.youkuaiyun.com/m0_38076563/article/details/105480346</guid><author>m0_38076563</author><pubDate>Fri, 29 May 2020 16:46:14 +0800</pubDate><description><![CDATA[获取 App
iTools
越狱后，iTools 软件内可以看到手机安装了哪些应用，选中某个应用，点导出即可。
注意：.ipa 文件实际就是 .zip 文件，直接改后缀、解压即可。
获取到 某.app，查看包内容，找到里面的可执行文件：
nm 命令查看目标文件中的符号信息
file 命令查看文件状态，比如可重定位/可执行 等
otool 命令
观察 app 包内容，包含：可执行文件、库文件、配置文...]]></description><category></category></item><item><title><![CDATA[[iOS 逆向 5] 逆向储备]]></title><link>https://blog.youkuaiyun.com/m0_38076563/article/details/105598773</link><guid>https://blog.youkuaiyun.com/m0_38076563/article/details/105598773</guid><author>m0_38076563</author><pubDate>Fri, 29 May 2020 16:45:49 +0800</pubDate><description><![CDATA[本文主要介绍一些 iOS / Mac OS X 操作系统的东西，比如 DYLD，Mach-O，ARM 汇编。内容很枯燥，可以跳过。
dyld

]]></description><category></category></item><item><title><![CDATA[[iOS 逆向 4] 开发储备]]></title><link>https://blog.youkuaiyun.com/m0_38076563/article/details/105510738</link><guid>https://blog.youkuaiyun.com/m0_38076563/article/details/105510738</guid><author>m0_38076563</author><pubDate>Fri, 29 May 2020 16:44:54 +0800</pubDate><description><![CDATA[1 iOS 基础
这部分简述。
视图树
Xcode 可以点击 Debug View Hierarchy 查看视图树，例如：

明确地展示了视图层级关系。
点击某个视图可以查看非常详细的属性。
内存图
Xcode 可以点击 Debug Memory Graph 查看对象引用关系、内存申请情况等，例如：

1 可以十分明确地看出对象间引用关系：图中的 UINavigationController 通过...]]></description><category></category></item><item><title><![CDATA[[iOS 逆向 3] 应用砸壳]]></title><link>https://blog.youkuaiyun.com/m0_38076563/article/details/105548482</link><guid>https://blog.youkuaiyun.com/m0_38076563/article/details/105548482</guid><author>m0_38076563</author><pubDate>Fri, 29 May 2020 16:41:43 +0800</pubDate><description><![CDATA[iOS 逆向工程的流程大致如下：
1 解密、导出应用程序、class-dump 导出头文件，为后续工作做准备。
2 分析界面，获取当前界面布局及控制器。
3 hook 发现的一些相关类，记录输出调用顺序及参数。
4 找到关键函数，查看调用堆栈，hook 测试效果。
5 静态分析加动态调试分析关键函数的实现逻辑。
6 模拟或篡改函数调用逻辑。
7 制作插件，或者移植到非越狱机器。
整体流程虽然很清晰...]]></description><category></category></item><item><title><![CDATA[[iOS 逆向 2] 越狱介绍]]></title><link>https://blog.youkuaiyun.com/m0_38076563/article/details/105461160</link><guid>https://blog.youkuaiyun.com/m0_38076563/article/details/105461160</guid><author>m0_38076563</author><pubDate>Fri, 29 May 2020 16:41:07 +0800</pubDate><description><![CDATA[介绍
越狱，就是利用 iOS 系统中的漏洞，对系统安全权限进行破解，获取 Root 权限，然后就可以为所欲为了。
越狱分三种：
1 引导式越狱
重启后无法开机，需要用工具重新引导
2 不完美越狱
重启后回到未越狱状态，需要重新越狱
3 完美越狱
重启后仍然保持越狱状态
至于如何寻找漏洞并利用漏洞，肯定不是初学者能搞的；
至于如何越狱，电脑端下载爱思助手，打开软件应该就能看见一键越狱了。
备注1 历...]]></description><category></category></item><item><title><![CDATA[[iOS 逆向 1] 系统安全架构]]></title><link>https://blog.youkuaiyun.com/m0_38076563/article/details/105211200</link><guid>https://blog.youkuaiyun.com/m0_38076563/article/details/105211200</guid><author>m0_38076563</author><pubDate>Fri, 29 May 2020 16:40:36 +0800</pubDate><description><![CDATA[iOS逆向系列文章
系统安全架构
iOS系统的安全架构，包含以下几个点：
1 安全启动链
系统启动过程中每一步包含的组件都已经过苹果签名，只有签名验证成功才会执行：

关于上图中的签名验证，需要先介绍一些加密知识。每段程序都含有一个数字签名，数字签名是什么？对于一段程序，苹果先选用某个哈希函数计算出一个摘要，这个摘要也称为指纹，这个哈希函数也称为指纹算法。然后利用非对称加密算法，用苹果的私钥对指纹...]]></description><category></category></item><item><title><![CDATA[屏蔽广告方法（Adblock 插件）]]></title><link>https://blog.youkuaiyun.com/m0_38076563/article/details/105445952</link><guid>https://blog.youkuaiyun.com/m0_38076563/article/details/105445952</guid><author>m0_38076563</author><pubDate>Sat, 11 Apr 2020 00:42:37 +0800</pubDate><description><![CDATA[方法一（推荐）
1 下载谷歌浏览器
为什么是谷歌？我亲自测试了 safari，插件根本没用；By the way，safari 看斗鱼真的不行，斗鱼程序员根本没认真适配 Safari，看2个小时内存占用飙到 5G，是我脱坑safari的最大原因（其次就是广告屏蔽了）
2 下载 Adblock 插件
需要科学上网：插件地址；官网地址。
实在不行的，百度云地址 https://pan.baidu.co...]]></description><category></category></item><item><title><![CDATA[[iOS 理解] 程序加载过程]]></title><link>https://blog.youkuaiyun.com/m0_38076563/article/details/104851212</link><guid>https://blog.youkuaiyun.com/m0_38076563/article/details/104851212</guid><author>m0_38076563</author><pubDate>Sat, 14 Mar 2020 01:38:16 +0800</pubDate><description><![CDATA[点击 app 按钮
IOKit 封装 event，通过 mach port 发给 SpringBoard
这部分是响应者链，在另一篇写过了，省略
SpringBoard 在处理函数中，先调用 fork
linux 0.1 中 fork 大致实现是：
fork()
	_syscall 宏
	int 0x80, 子功能号（int 是中断指令）
	跳转到 0x80 对应的中断描述符记录的处理函数
	调用...]]></description><category></category></item><item><title><![CDATA[UICollectionView 插入后滑动到最底部]]></title><link>https://blog.youkuaiyun.com/m0_38076563/article/details/79996538</link><guid>https://blog.youkuaiyun.com/m0_38076563/article/details/79996538</guid><author>m0_38076563</author><pubDate>Sat, 07 Mar 2020 19:07:35 +0800</pubDate><description><![CDATA[UICollectionView的坑]]></description><category></category></item><item><title><![CDATA[[iOS 理解] block]]></title><link>https://blog.youkuaiyun.com/m0_38076563/article/details/104696860</link><guid>https://blog.youkuaiyun.com/m0_38076563/article/details/104696860</guid><author>m0_38076563</author><pubDate>Sat, 07 Mar 2020 16:49:58 +0800</pubDate><description><![CDATA[第一步，初步理解
网上博客千篇一律的内容，我找了一篇质量还不错的
看完那篇其实就差不多够了，但我这还有一些补充的东西。
第二步 对照源码自己看
官网链接不是 Xcode 项目，如果想看的舒服需要自己配 Xcode 关键字高亮、点击跳转
我这有配好的链接
block 核心文件只有一个，只有几百行，就是几个函数，可以自己分析，over。
（必须先完成第一步）
下面是我的分析。。。

现在都是 ARC，...]]></description><category></category></item></channel></rss>