iOS

概述 KVO 的全称是 Key Value Observing,俗称 键值监听,可以用于监听某个对象属性值的改变。 基本使用 使用 KVO 监听 person 对象的 age 属性改变: @interface JFPerson : NSObject @property (nonatomic, assign) int age; @end ...

发布 1 条评论

isa指针 instance 的 isa 指向 class。 class 的 isa 指向 meta-class。 meta-class 的 isa 指向基类的 meta-class。 superclass指针 class 的 superclass 指向父类的 class,没有父类(NSObject就没父类)则为 nil。 meta-class 的 s...

发布 0 条评论

参考源码 runtime 的源码:https://opensource.apple.com/tarballs/objc4/ 对象分类 Objective-C 对象简称 OC 对象,可以分为 3 种类型。 instance 对象:实例对象。 class 对象:类对象。 meta-class 对象:元类对象。 instance实例...

发布 0 条评论

OC类转换为C++结构体 OC 代码编译过程:OC -> C/C++ -> 汇编 -> 机器代码 利用 Xcode 自带的 LLVM 编译器前端工具 clang,可以将 OC 代码转成 C++ 代码: clang -rewrite-objc main.m -o main.cpp 一般不会直接使用上面的命...

发布 0 条评论

为什么要动修改器? 有些游戏会检测手机是否安装了 iGG 修改器,如果被检测到有安装,可能会禁止游戏或直接封号。 所以我们可以通过修改 iGG 插件内的一些文件名和包名,从而绕过一些简单检测。 下文这些修改和打包操作,都可以在手机...

发布 1 条评论

原理 在之前笔记中有详细写过越狱机插件开发和执行原理,我们知道插件是依赖 Cydia Substrate 基板运行的。 所以只需要将 Cydia Substrate 基板和 deb 插件内的 dylib 动态库打包进 APP 并加载,然后重签名即可运行在非越狱机上。 我...

发布 0 条评论

Unity版本变化 新版 Unity 打包 iOS 版本后,Unity 编写的代码会编译生成一个名为 UnityFramework.framework 的 Framework,存放在 xxx.app/Frameworks 目录下: 而 Unity 老版本打包的不会: 获取基址 使用 Unity 开发的手游,我们...

发布 0 条评论

功能 还原DLL文件(不包含代码),可用于提取MonoBehaviour和MonoScript 支持ELF, ELF64, Mach-O, PE, NSO和WASM格式 支持Unity 5.3 - 2020.2 生成IDA和Ghidra的脚本,帮助IDA和Ghidra更好的分析il2cpp文件 生成结构体头文件 支持从...

发布 0 条评论

安装 下载地址:https://github.com/tobefuturer/restore-symbol。 编译命令行工具: git clone --recursive https://github.com/tobefuturer/restore-symbol.git && cd restore-symbol && make ./restore-symbol 将...

发布 0 条评论

用到的工具 IDA Pro 7.0:反编译工具 Reveal:UI分析工具 frida-ios-dump:砸壳工具 class-dump:导OC头文件工具 Cycript:命令行调试工具 JFTool:封装Cycript脚本 Theos:Tweak开发工具包 iOS 番茄小说 Ver 4.2.0:测试目标APP 砸...

发布 0 条评论

签名保存位置 iOS的ipa安装包里 Mach-O 文件的签名是在 Mach-o 文件中,其他所有文件的签名都在 xxx.app/_CodeSignature/CodeResources 文件内。 如果我们改动了 Mach-O 文件,或者对安装包内任何资源文件进行了改动,签名验证都会失...

发布 0 条评论

生成汇编文件 将c语言源文件编译成arm64汇编代码: xcrun --sdk iphones clang -S -arch arm64 main.c -o main.s 寄存器 arm64有34个寄存器,包括通用寄存器和fp、lr、sp、pc、cpsr。 有些书上说有 x0~x30 是通用寄存器,有些则把 f...

发布 0 条评论

未使用ASLR的Mach-O内存分布 内存是操作系统建立起来的虚拟内存,和物理内存的地址不一样,是经过操作系统映射的内存!也就是说,虚拟内存的地址可能永远不会变,但是物理地址是随机的。 每个APP都有自己独立的虚拟内存,内存地址是不...

发布 0 条评论

什么叫动态调试 将程序运行起来,通过打断点、打印等方式,查看参数、返回值、函数调用流程等。 Xcode的动态调试原理 LLDB:是一个开源的内置于 Xcode 的具有 REPL(read-eval-print-loop) 特征的 Debugger,其可以安装 C++ 或者 Pyth...

发布 0 条评论

参数接收 命令行工具也是 Mach-O 可执行文件,只是没有 GUI 界面。在终端执行命令行工具的时候,我们可以输入多个参数,而参数就是通过程序入口 main 方法接收的。 int main(int argc, char * argv[]) { return 0; } argc:argume...

发布 0 条评论