自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(106)
  • 资源 (2)
  • 收藏
  • 关注

原创 [iOS 理解] Swift Runtime (1) 类

简单介绍 Swift 根类的内存布局;理解 Swift Runtime 和 Objc Runtime 的桥梁,为我们实现无限功能提供了基础。

2023-02-25 15:19:08 866

原创 [iOS 理解] 为什么 objc_msgSend 必须用汇编实现

Runtime 源码,objc_msgSend 使用汇编实现,为什么不使用 C语言 实现?为了解决问题,我们直接复现问题:使用 C 实现一个简化的 objc_msgSend ... #消息机制

2023-02-21 01:43:01 166

原创 iOS CoreAnimation (九) transform

本系列之前的文章或多或少地提到了 transform,本文进行完全解析。transform 直译就是改变形态、变形、变换,用来改变图层的显示效果,我们使用 CoreAnimation 框架,就从它提供的几个类和属性展开介绍。CGAffineTransform常用的变换如 平移 拉伸 旋转等,有一个共同的特点:原坐标系中的两条平行线,经过这类变换,仍然保持平行。于是把这类变换称为“保留平行关系的变换”,英语叫 affine transform,再翻译回来叫 仿射变换(是不是听起来高大上了)。仿射,保留了平

2021-01-30 17:39:54 321

原创 iOS CoreAnimation (八) 拉伸过滤,组透明,magnificationFilter,allowsGroupOpacity,opaque,光栅化 shouldRasterize

啊啊啊

2020-12-29 00:08:52 722 1

原创 [重复造轮子] 输入面板布局

加号面板布局方式:水平方向滑动,水平方向排列,垂直方向换行,水平方向翻页。目标效果是像微信这样:Demo + 实现链接效果:三个按钮:很多按钮 第一页:很多按钮 最后一页:很多按钮 横屏之后,页数发生变化:思路:主要是实现一种布局,重复劳动:import UIKitimport SnapKit /// 加号面板布局:水平方向滑动,item 折行排列////// 内部会自动处理 safeAreaInsets、contentInsets/// 暂不支持多个 secti

2020-12-17 14:55:47 184

原创 iOS Modern Collection Views

本文是对 WWDC 2019、WWDC 2020 引入的 UICollectionView 新特性的理解。关键词:UICollectionViewCompositionalLayoutUICollectionViewDiffableDataSourceUIContentConfiguration背景现有的 Collection Views 用 UICollectionViewFlowLayout 流式布局,局限性太高;自己实现 Layout 子类,代码太繁琐。iOS 13(WWDC 201

2020-10-25 18:34:30 505

原创 macOS 10.15 解决 app 已损坏,打不开。您应该将它移到废纸篓

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

2020-06-10 17:53:36 4142 2

原创 [iOS 逆向 13] 代码混淆

背景经过逆向工程实践,可以发现静态分析在整个过程中是不可缺少的,而且静态分析工具生成的伪代码极大地提高了分析效率。想象一下如果没有静态分析,实现解除会员限制的过程:连接界面调试器 Reveal,找到目标界面,获取按钮地址,打印按钮的响应事件,获取响应方法的 C 函数指针,连接 LLDB 给该函数打断点,但是该函数内有大量的分支语句,每个分支都要通过调试才能判断是不是确定会员权限的函数,分析“一天...

2020-05-29 17:17:18 1869 3

原创 [iOS 逆向 12] 加密与动态保护

前面详细介绍了 App 的逆向过程,可以发现逆向工具层出不穷,使逆向开发的门槛越来越低。回看自己开发的 App,也面临着被分析、解除使用限制等危险。下面介绍几种保护方案。数据加密App 内需要保护的数据主要包括静态字符串、本地存储数据和网络传输数据,一般开发者不会对这些数据加密后使用,而是直接明文保存在本地或网络传输。分析者通过分析本地文件或拦截网络请求就可以轻松读取或修改数据。加密算法根...

2020-05-29 17:15:38 786

原创 [iOS 逆向 7] Hook

概述Hook,钩子,用来改变程序执行流程。iOS 中有以下几种方式:Method Swizzling:利用 runtime 特性,进行 OC 方法重排。fishhook:利用 Mach-O 格式程序加载原理,对动态库中 C 函数重排。Cydia Substrate:一个框架,提供多种函数 hook 方式。详解Method Swizzling原理比较简单,大致就是:OC 函数 = ...

2020-05-29 16:46:39 618

原创 [iOS 逆向 6] 分析与调试

获取 AppiTools越狱后,iTools 软件内可以看到手机安装了哪些应用,选中某个应用,点导出即可。注意:.ipa 文件实际就是 .zip 文件,直接改后缀、解压即可。获取到 某.app,查看包内容,找到里面的可执行文件:nm 命令查看目标文件中的符号信息file 命令查看文件状态,比如可重定位/可执行 等otool 命令观察 app 包内容,包含:可执行文件、库文件、配置文...

2020-05-29 16:46:14 966

原创 [iOS 逆向 5] 逆向储备

本文主要介绍一些 iOS / Mac OS X 操作系统的东西,比如 DYLD,Mach-O,ARM 汇编。内容很枯燥,可以跳过。dyld

2020-05-29 16:45:49 790

原创 [iOS 逆向 4] 开发储备

1 iOS 基础这部分简述。视图树Xcode 可以点击 Debug View Hierarchy 查看视图树,例如:明确地展示了视图层级关系。点击某个视图可以查看非常详细的属性。内存图Xcode 可以点击 Debug Memory Graph 查看对象引用关系、内存申请情况等,例如:1 可以十分明确地看出对象间引用关系:图中的 UINavigationController 通过...

2020-05-29 16:44:54 746

原创 [iOS 逆向 3] 应用砸壳

iOS 逆向工程的流程大致如下:1 解密、导出应用程序、class-dump 导出头文件,为后续工作做准备。2 分析界面,获取当前界面布局及控制器。3 hook 发现的一些相关类,记录输出调用顺序及参数。4 找到关键函数,查看调用堆栈,hook 测试效果。5 静态分析加动态调试分析关键函数的实现逻辑。6 模拟或篡改函数调用逻辑。7 制作插件,或者移植到非越狱机器。整体流程虽然很清晰...

2020-05-29 16:41:43 1031

原创 [iOS 逆向 2] 越狱介绍

介绍越狱,就是利用 iOS 系统中的漏洞,对系统安全权限进行破解,获取 Root 权限,然后就可以为所欲为了。越狱分三种:1 引导式越狱重启后无法开机,需要用工具重新引导2 不完美越狱重启后回到未越狱状态,需要重新越狱3 完美越狱重启后仍然保持越狱状态至于如何寻找漏洞并利用漏洞,肯定不是初学者能搞的;至于如何越狱,电脑端下载爱思助手,打开软件应该就能看见一键越狱了。备注1 历...

2020-05-29 16:41:07 1869

原创 [iOS 逆向 1] 系统安全架构

iOS逆向系列文章系统安全架构iOS系统的安全架构,包含以下几个点:1 安全启动链系统启动过程中每一步包含的组件都已经过苹果签名,只有签名验证成功才会执行:关于上图中的签名验证,需要先介绍一些加密知识。每段程序都含有一个数字签名,数字签名是什么?对于一段程序,苹果先选用某个哈希函数计算出一个摘要,这个摘要也称为指纹,这个哈希函数也称为指纹算法。然后利用非对称加密算法,用苹果的私钥对指纹...

2020-05-29 16:40:36 637

原创 屏蔽广告方法(Adblock 插件)

方法一(推荐)1 下载谷歌浏览器为什么是谷歌?我亲自测试了 safari,插件根本没用;By the way,safari 看斗鱼真的不行,斗鱼程序员根本没认真适配 Safari,看2个小时内存占用飙到 5G,是我脱坑safari的最大原因(其次就是广告屏蔽了)2 下载 Adblock 插件需要科学上网:插件地址;官网地址。实在不行的,百度云地址 https://pan.baidu.co...

2020-04-11 00:42:37 1704

原创 [iOS 理解] 程序加载过程

点击 app 按钮IOKit 封装 event,通过 mach port 发给 SpringBoard这部分是响应者链,在另一篇写过了,省略SpringBoard 在处理函数中,先调用 forklinux 0.1 中 fork 大致实现是:fork() _syscall 宏 int 0x80, 子功能号(int 是中断指令) 跳转到 0x80 对应的中断描述符记录的处理函数 调用...

2020-03-14 01:38:16 577

原创 UICollectionView 插入后滑动到最底部

UICollectionView的坑

2020-03-07 19:07:35 2985

原创 [iOS 理解] block

第一步,初步理解网上博客千篇一律的内容,我找了一篇质量还不错的看完那篇其实就差不多够了,但我这还有一些补充的东西。第二步 对照源码自己看官网链接不是 Xcode 项目,如果想看的舒服需要自己配 Xcode 关键字高亮、点击跳转我这有配好的链接block 核心文件只有一个,只有几百行,就是几个函数,可以自己分析,over。(必须先完成第一步)下面是我的分析。。。现在都是 ARC,...

2020-03-07 16:49:58 204

原创 [iOS 理解] weak

前面内存管理的文章写了其他的修饰符,__weak 单独在本文写除了 __weak 之前,还有一些修饰符与内存管理有关:__block 要单开一篇文章;Core Foundation 对象 与 OC 对象间的强制转换与内存管理问题先介绍一下(ARC)。

2020-03-05 02:55:56 221 1

原创 [iOS 理解] 内存管理 自动释放池

ARC 无需显式调用 retain release autorelease编译器在正确的位置加上管理对象引用计数的函数。对象的所有权修饰符__strong:赋值时,旧的 release,新的 retain__weak:需要操作 weak 表,单独分析__unsafe_unretained:当作是纯C语言指针的赋值__autoreleasing:会把对象加入自动释放池,文章最后有一个经典案例内存管理核心思想:谁创建谁释放最底层函数实现。

2020-03-04 17:12:21 449 1

原创 [iOS 理解] RunLoop

理解 runloop 步骤1 下载源码2 让 Makefile管理的 C/C++ 项目使用Xcode阅读时源码高亮、支持跳转3 先学习这篇博客建议第一天看一遍这篇文章,不求理解第二天再结合源码看,同时追求理解第三天只看没理解的地方,并且自己悟这类东西最好不要一天学完结束自己总结核心逻辑通知要进入循环开始循环 通知要执行 timer 回调 通知要执行 source 回调...

2020-03-04 13:45:30 183

原创 [iOS 理解] instanceSize

class_ro_t 中的 instanceSize编译器把某个类的 OC 代码转为 C 代码时,子类结构体第一个变量,是父类结构体:struct Child { struct Parent parent_ivars; int child_ivar; }; 所以在内存布局上相当于把父类变量及当前类变量都放在一起,然后按照C结构体大小规则计算:1 结构体每个成员相对于起始...

2020-03-01 17:21:26 393

原创 [iOS 理解] 消息机制 & NSProxy

消息机制是什么?NSProxy 意义何在?二者有何关联?下面会深入每一个调用发现其中的奥秘。

2020-03-01 02:05:31 395 1

原创 使用 swizzling

现在考虑用一个工具类。考虑:vc 中调用 viewWillAppear(SEL)时,它的 IMP 实际指向 swizzle_viewWillAppear,因此会进入 Tool 类的这个函数。此时的 self 指针本质上是 vc,给 vc 发这条消息会走到 vc 类的 swizzle_viewWillAppear,而不是目的地 viewWillAppear。每个类都有自己的方法列表,一个 Method = SEL + IMP + 方法签名,SEL = 方法名称字符串,IMP = 一个函数的起始地址。

2019-12-25 12:20:22 383 1

原创 [iOS 理解] copy

NSObject 有 copy 和 mutableCopy 两个成员。这两个函数是分别直接返回 copyWithZone 和 mutableCopyWithZone 的返回值。(注意,不是这个:+ (id)copyWithZone:(struct _NSZone *)zone OBJC_ARC_UNAVAILABLE;这个是 MRC 项目可用,ARC 下直接无视该函数;若涉及到 Zon...

2019-12-23 19:03:48 878 1

原创 [iOS 理解] 响应者链

本文将会解析从触摸到屏幕开始,发生了什么;响应者怎么获得事件,响应者是什么,事件是什么,让谁响应,怎么响应?交互方式目前有(未来可能有其他方式):Touch 触摸Press 按压,物理按钮Motion 运动,摇一摇Remote-Control 远程控制,AirPods以上交互,都会产生用户事件。本文仅以第一种作例子,触类旁通。触摸屏幕当前 App 的所有用户事件,都放入该 ...

2019-12-05 18:15:16 510

原创 UIFontTextStyle 样式图

方便用的时候查表。

2019-08-19 22:15:05 831

原创 python 与子进程通信

本文出发点我个人需求是:在一个py文件里,想获得另一个 py文件某函数的输出。(当然,直接 import 该函数,调用不就行了吗 ! )(扩展,子进程没有限制,任意可执行文件皆可 )详细例子假设现在 A 里面有一个循环:获取用户输入调用 B 中 函数返回值到 A 程序A 主程序import osfrom subprocess import PIPE, Popen# ...

2019-05-04 20:32:12 1920

原创 Scrapy 使用示例:从 Xpath 到 Webdriver

本文用于以后快速创建爬虫项目准备pip install scrapypip install selenium下载 chrome webdriver,放在环境变量里scrapy shell 或 控制台打开要爬取的网站,命令行输入scrapy shell your-url如果爬取的是动态页面、QQ空间一类需要登陆的网站,则打开浏览器的控制台。命令行使用:response.xpath(...

2019-04-30 15:57:54 273

原创 从零开始 Vue.js 笔记

安装 on macOSbrew install npmnpm install -g vue-cli安装完成,即可打开 IDEA,安装 Vue plugin,开始创建第一个 Vue 项目,此过程省略。备忘命令命令行创建项目:npm install cnpm -g # 可以不用 cnpmnpm install -g vue-cli # 所有项目安装一次即可vue init web...

2019-04-21 02:56:53 241

原创 计算机视觉 实验二 opencv 课程实验 (高斯滤波,联合双边滤波)

实验2-1:实现图像的高斯滤波处理实验要求:1)通过调整高斯函数的标准差(sigma)来控制平滑程度;给定函数:void Gaussian(const MyImage &input, MyImage &output, double sigma);2)滤波窗口大小取为[6*sigma-1]/2 *2+1,[.]表示取整;3)利用二维高斯函数的行列可分离性进行加速: 先对每行...

2019-04-08 19:40:00 1680

原创 计算机视觉 实验一 opencv 课程实验(显示,合成)

实验1-1:图像显示实验要求:1)利用图像库的功能,实现从文件加载图像,并在窗口中进行显示的功能;2)利用常见的图像文件格式(.jpg; .png; .bmp; .gif)进行测试。实验1-2:图像合成实验要求:1)现有一张4通道透明图像a.png:2)从其中提取出alpha通道并显示;3)用alpha混合,为a.png替换一张新的背景(bg.png)。实验要求实验核心内容不允...

2019-04-08 19:13:28 1872

原创 OpenCV4 打开 gif (FreeImage)

准备FreeImage 库,自己编译或下载我自己编译的静态库链接总是失败,无奈找了一个编译好的。macOS上开发有利有弊,目前我感觉到的最大的弊端就是 编译、链接真的恶心。macOS版的静态库点击这里下载。密码:p2lb。代码:现在仅支持读取 CV_8UC3 / CV8UC4 的 gif 图。#include <opencv2/opencv.hpp>#include "Fr...

2019-03-14 20:51:59 2114 2

原创 NSMutableArray 遇到的坑

描述写了如下排序有关的类(这里只展示了.h文件):@interface SortBaseClass : NSObject <Sorter, Comparable>@property (assign) SortOrder sortOrder;@end///线性(底层为数组)排序的基类,继承自Base,内部有一个数组@interface LinearSort : ...

2018-04-18 21:50:58 4728 1

原创 [2022] Mac 下搭建 opencv 开发环境

进入官网: https://opencv.org/releases.html 找到最新版,点 source 开始下载。建议下载开始后复制链接到迅雷。下载cmake : https://cmake.org/files/v3.11/cmake-3.11.0-rc4-Darwin-x86_64.dmg 双击安装打开终端,配置cmake环境变量: vim .bash_profile 进去 按...

2018-03-27 10:56:25 4890 1

原创 .obj重定义解决方法

个人经常写 .h 或 .hpp 文件 且把声明和定义写一起,虽然大多情况下不报错,也正常跑,但是 一旦IDE死脑子转不过来 报了重定义 你就别指望 #pragma once 或者 #ifndef 了,根本不行。 (如果你连pragma once或 ifndef都没声明,那你拉倒吧)这次遇到的错误:在 .h 文件里声明实现的通用的函数,两次include 编译时候报重定义。(之前看别人...

2018-03-16 18:52:30 1744

原创 [超简单] lambda做函数参数,C++ lambda表达式,闭包超简单使用!

## 写过别的语言的 比如kotlin objective-C swift 应该都熟悉函数式编程。lambda表达式,也就是闭包,C++11里终于来了。最简单使用:#include <iostream>using namespace std;int v1 = 0, v2 = 1;int result = 0;template <typename F...

2018-03-14 14:54:36 8035

原创 实现 titleview 居中 navigationItem

viewDidLoad里: let width: CGFloat = 100 let ScreenWidth = UIScreen.main.bounds.width //第一步,设置titleView为一个空白UIView(作背板) navigationItem.titleView = UIView(frame: Rect(0, 0, ScreenWidth, 44)) //第二步,这是目标

2017-12-02 16:24:51 2265

CSDN-markdown编辑器模版

方便不熟悉markdown的同学使用。CSDN-markdown编辑器模版代码示范

2017-07-20

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除