0%

自从 Swift 发布,就有一个很重要的特性:Optional,提供了更严格的类型检查,使得在编译时就能发现更多空变量问题。同时我们知道的是 Swift 可以与 Objective-C 混合编译,那么 Swift 中的 Optional 特性如何与 Objective-C 兼容呢?同时 Nullability 给 Objective-C 带来哪些改进?

0x00 全新的修饰符

苹果在 Xcode 6.3 中引入了 Nullability 特性,这一新特性的核心就是两个新的修饰符:__nullable__nonnull,顾名思义前者为可空修饰,后者为不可空修饰,在编译时编译器会对此规则进行检查,并对未遵守规则的代码给出警告(在 Swift 中是无法通过编译的)。

阅读全文 »

Multicast Delegate?

传统 Delegate 大家都知道是一对一关系,一个对象只能给对应 Delegate 对象做回调,而 Multicast Delegate 顾名思义就是能向多个 Delegate 对象进行回调。

Multicast Delegate 与 KVO

对于某些属性值我们可以采用 KVO 的方法进行监听获得最新值(比如 contentOffsetcontentSize 等)。但某些属性值却无法进行 KVO (比如 isDraggingisTracking 等),原因很简单,可以参考下 KVO 的实现原理,对 readonly 的属性,即不带有 setter 的属性进行 KVO 是无效的。因此 Multicast Delegate 可以很好地解决这种情况。

阅读全文 »

0x01 How

在通常情况下,假如元素是对象类型的话,集合类型会强引用其元素,而 struct 或者是其它基础数据类型如 StringInt 等则是值类型,直接复制并没有引用。所以为了打破强引用我们需要为元素创建一个包装:

1
2
3
4
5
6
final class WeakBox<A: AnyObject> {
weak var unbox: A?
init(_ value: A) {
unbox = value
}
}
阅读全文 »

当将一个 String 转换为 Data 时,返回值是可选类型 Optional的,举个例子:

1
let cafe: Data? = "Café".data(using: .utf8) // non-nil

所以强制解包这个 Optional Value 是否安全呢?或者说它有没有可能返回空值 nil?这取决于你使用的编码类型,当使用 Unicode 编码(如 utf8 或者 utf16)的时候,你可以安全地强制解包。

阅读全文 »

关于 iOS 开发环境的问题,曾经遇到过融云SDK美恰SDK在 Cocoapods 1.0.1 以上的版本安装的时候会发生冲突,因此在该项目中只能用 1.0.1 以下版本的 Cocoapods…… 又或者是团队中每个人本机的 Cocoapods 版本不一致,那么每次同步项目的时候都会提示需要 pod install,同时 git commit 中会出现许多 Podfile.lock 的修改记录,因此 iOS 团队开发中环境统一的小细节需要做好。

阅读全文 »

自从做了两个Tweak:WeChatTweak-macOSQQTweak-macOS,发现了都存在一个共同问题:由于以上两个应用都采用了 macOS 的沙盒机制,同时插入动态库时签名被移除,导致了沙盒失效,拖延症的我终于在国庆期间修复,并记录一下过程。

0x00 举个例子

以下应用在安装完 Tweak 之后,会导致沙盒失效,因此会导致聊天记录等文件无法加载,同时文件路径会出现错乱。囧rz……

  1. WeChat
    • 无法加载历史聊天记录等
    • ~/Documents 目录下出现 MMappedKV 文件夹。参考 #19
    • ~/Documents 目录下出现 JietuSDKStat.plist。参考 #21
    • ~/Documents 目录下出现 .rdq 文件夹。
  2. QQ
    • 无法加载历史聊天记录等
    • ~/Documents 目录面目全非
阅读全文 »

Alfred 作为 macOS 平台上的效率神器,Dash、Evernote等应用配合 Alfred 能够有很好的效率提升与体验,然而还是有很多应用未能支持得,比如 Telegram、微信等经常使用的一些应用。既然原生未能支持,那么自己来动手搞一个了~

0x00 相关回顾

阅读全文 »

继上一次的 微信 macOS 客户端拦截撤回功能实践 之后,有热心网友给我提了个 issue :macOS微信客户端的多开问题,才发现原来在 macOS 上微信客户端是不能多开的,于是接受挑战~

0x00 传统多开方法

在 macOS 平台上,大部分应用都是支持多开的,比如:

  1. ⌘ + N 大法:适用于 QQ
  2. open -n /Applications/xxx.app 大法:适用于大部分的应用

那么对于微信客户端来说,以上两种方法都是无效的。其中第一种只能新建新的聊天对象),第二种直接什么反应都没有。

阅读全文 »

最近接触 iOS 逆向开发,看了各式各样的自动抢红包 Tweak之后,于是自己也来动手实践一下 Tweak:WeChatTweak-iOS

0x01 准备

  1. 越狱手机一台 - 主要用于脱壳(32Bit 最佳,Hopper Disassembler能直接看伪代码)
  2. Hopper Disassembler - 反编译工具,能够将二进制执行文件反编译出伪代码
  3. ldid - 签名工具
  4. chisel - LLDB 增强
  5. class-dump - 导出可执行文件的 Header
  6. dumpdecrypted - 脱壳工具
  7. Clutch - 高级脱壳工具
  8. theos - 越狱开发工具包,安装与配置可参考Theos 安装与配置
阅读全文 »

尝试 iOS 逆向开发,由于 iOSOpenDev 已停止维护且坑太多,于是使用 theos ,网上充斥各种老旧教程,还是自己按照官方文档配置并填坑靠谱。

0x01 安装依赖

首先你要安装有 Homebrew

执行命令:brew install ldid dpkg


0x02 安装 theos

安装非常简单,安装路径随个人喜好,只需要几行命令:

1
2
3
4
git clone https://github.com/theos/theos.git ~/.theos
cd ~/.theos
git submodule init
git submodule update
阅读全文 »