KVO的原理探索
概述 KVO 的全称是 Key Value Observing,俗称 键值监听,可以用于监听某个对象属性值的改变。 基本使用 使用 KVO 监听 person 对象的 age 属性改变: @interface JFPerson : NSObject @property (nonatomic, assign) int age; @end ...
概述 KVO 的全称是 Key Value Observing,俗称 键值监听,可以用于监听某个对象属性值的改变。 基本使用 使用 KVO 监听 person 对象的 age 属性改变: @interface JFPerson : NSObject @property (nonatomic, assign) int age; @end ...
isa指针 instance 的 isa 指向 class。 class 的 isa 指向 meta-class。 meta-class 的 isa 指向基类的 meta-class。 superclass指针 class 的 superclass 指向父类的 class,没有父类(NSObject就没父类)则为 nil。 meta-class 的 s...
参考源码 runtime 的源码:https://opensource.apple.com/tarballs/objc4/ 对象分类 Objective-C 对象简称 OC 对象,可以分为 3 种类型。 instance 对象:实例对象。 class 对象:类对象。 meta-class 对象:元类对象。 instance实例...
OC类转换为C++结构体 OC 代码编译过程:OC -> C/C++ -> 汇编 -> 机器代码 利用 Xcode 自带的 LLVM 编译器前端工具 clang,可以将 OC 代码转成 C++ 代码: clang -rewrite-objc main.m -o main.cpp 一般不会直接使用上面的命...
为什么要动修改器? 有些游戏会检测手机是否安装了 iGG 修改器,如果被检测到有安装,可能会禁止游戏或直接封号。 所以我们可以通过修改 iGG 插件内的一些文件名和包名,从而绕过一些简单检测。 下文这些修改和打包操作,都可以在手机...
原理 在之前笔记中有详细写过越狱机插件开发和执行原理,我们知道插件是依赖 Cydia Substrate 基板运行的。 所以只需要将 Cydia Substrate 基板和 deb 插件内的 dylib 动态库打包进 APP 并加载,然后重签名即可运行在非越狱机上。 我...
Unity版本变化 新版 Unity 打包 iOS 版本后,Unity 编写的代码会编译生成一个名为 UnityFramework.framework 的 Framework,存放在 xxx.app/Frameworks 目录下: 而 Unity 老版本打包的不会: 获取基址 使用 Unity 开发的手游,我们...
功能 还原DLL文件(不包含代码),可用于提取MonoBehaviour和MonoScript 支持ELF, ELF64, Mach-O, PE, NSO和WASM格式 支持Unity 5.3 - 2020.2 生成IDA和Ghidra的脚本,帮助IDA和Ghidra更好的分析il2cpp文件 生成结构体头文件 支持从...
安装 下载地址:https://github.com/tobefuturer/restore-symbol。 编译命令行工具: git clone --recursive https://github.com/tobefuturer/restore-symbol.git && cd restore-symbol && make ./restore-symbol 将...
用到的工具 IDA Pro 7.0:反编译工具 Reveal:UI分析工具 frida-ios-dump:砸壳工具 class-dump:导OC头文件工具 Cycript:命令行调试工具 JFTool:封装Cycript脚本 Theos:Tweak开发工具包 iOS 番茄小说 Ver 4.2.0:测试目标APP 砸...
签名保存位置 iOS的ipa安装包里 Mach-O 文件的签名是在 Mach-o 文件中,其他所有文件的签名都在 xxx.app/_CodeSignature/CodeResources 文件内。 如果我们改动了 Mach-O 文件,或者对安装包内任何资源文件进行了改动,签名验证都会失...
生成汇编文件 将c语言源文件编译成arm64汇编代码: xcrun --sdk iphones clang -S -arch arm64 main.c -o main.s 寄存器 arm64有34个寄存器,包括通用寄存器和fp、lr、sp、pc、cpsr。 有些书上说有 x0~x30 是通用寄存器,有些则把 f...
未使用ASLR的Mach-O内存分布 内存是操作系统建立起来的虚拟内存,和物理内存的地址不一样,是经过操作系统映射的内存!也就是说,虚拟内存的地址可能永远不会变,但是物理地址是随机的。 每个APP都有自己独立的虚拟内存,内存地址是不...
什么叫动态调试 将程序运行起来,通过打断点、打印等方式,查看参数、返回值、函数调用流程等。 Xcode的动态调试原理 LLDB:是一个开源的内置于 Xcode 的具有 REPL(read-eval-print-loop) 特征的 Debugger,其可以安装 C++ 或者 Pyth...
参数接收 命令行工具也是 Mach-O 可执行文件,只是没有 GUI 界面。在终端执行命令行工具的时候,我们可以输入多个参数,而参数就是通过程序入口 main 方法接收的。 int main(int argc, char * argv[]) { return 0; } argc:argume...