
iOS 安全攻防
文章平均质量分 90
Airths
Thinking Coding Sharing
展开
-
FLEX(Flipboard Explorer)简介
目录FLEX给予你自己强大的调试能力(Give Yourself Debugging Superpowers)用法(Usage)功能示例(Feature Examples)安装(Installation)避免将 FLEX 编译到 Release 版本(Excluding FLEX from Release (App Store) Builds)注意事项(Additional Notes)鸣谢(Thanks & Credits)贡献(Contributing)待做(TODO)FLEXFLEX(Fl原创 2022-03-16 16:59:03 · 3986 阅读 · 0 评论 -
Cycript(五):安装与使用
目录Cycript 的安装在非越狱环境中使用 Cycript(通过手动配置)在非越狱环境中使用 Cycript(通过 MonkeyDev 自动配置)在越狱环境中使用 Cycript导入外部的 Cycript 脚本补充:Cycript 和 LLDB 中经常用到的 Objective-C 私有方法补充:其他细节Cycript 的安装① 下载与安装从 Cycript 官网 下载 Cycript SDK,并将其放到 /opt 目录下。Cycript SDK 的目录结构如下所示:/opt/cycript_原创 2022-03-14 23:37:11 · 4104 阅读 · 0 评论 -
Cycript(四):常用脚本
目录MDCycript/MS.cyMDCycript/md.cymjcript/mjcript.cylibcycript.cycycript-utils/utils.cyMDCycript/MS.cygit 地址:https://github.com/AloneMonkey/MDCycript/blob/master/MS.cy(function(ms) { // 获取存储 libcycript.dylib 的目录的路径 let GetLibraryPath = function() {原创 2022-03-12 20:22:18 · 5211 阅读 · 0 评论 -
Cycript(三):使用技巧
目录获取对象(Getting objects)获取成员变量(Getting ivars)获取 BundleID(Getting bundle identifier)获取方法(Getting methods)列出所有子类(List all subclasses)加载框架(Load frameworks)包含其他 Cycript 文件(Include other Cycript files)使用 NSLog(Using NSLog)使用 CGGeometry 函数(Using CGGeometry functi原创 2022-03-10 13:58:26 · 2508 阅读 · 0 评论 -
Cycript(二):使用手册
目录常见问题(General Questions)Cycript 控制台(Cycript Console)JavaScript 解析器(JavaScript Parser)CommonJS 模块(CommonJS Modules)C 类型和指针(C Types and Pointers)C 结构体和数组(C Structs and Arrays)Objective-C 基础(Objective-C Basics)Objective-C 高级(Objective-C Advanced)Java 初始预览版(J原创 2022-03-09 21:26:22 · 1815 阅读 · 0 评论 -
Cycript(一):基础简介
目录Cycript 简介Cycript 附加的特性其他Cycript 简介什么是 Cycript ?Cycript 允许开发者通过具有语法高亮显示和代码补全功能的交互式控制台,使用 Objective-C++ 和 JavaScript 语法的混合体,来探索和修改 iOS 或 macOS 上正在运行的应用程序(Cycript 还可以在 Android 和 Linux 上独立运行,并提供对 Java 的访问,但是不能注入进程)可以将 Cycript 看成是一个理解 Objective-C 语法的 J原创 2022-03-08 19:55:16 · 1245 阅读 · 0 评论 -
LLDB(六):常用命令举例
目录创建符号断点关于 Xcode 底部的调试区域在使用 expression 命令执行方法时,需要将发送的消息强制转换为该方法的返回值类型关于 p 和 po 的输出格式通过 expression 命令读取、设置、操作寄存器的值expression 命令只能在当前线程中执行表达式,expression 命令不能跨线程执行表达式获取 UIButton 的 target 和 action关于渲染服务(backboardd)获取指定镜像当前的 ASLR 偏移量使用 watchpoint 命令监视对指定对象的指定成员原创 2022-03-07 22:53:55 · 2126 阅读 · 0 评论 -
LLDB(五):DerekSelander-LLDB 的安装与使用
目录DerekSelander-LLDB 简介DerekSelander-LLDB 命令详解__generate_scriptbiofcopyzdclassddddpdumpenviapiblogincludeinfojtoolkeychainlbrlookuplsofmsloverlaydbgpframeworkpmodulesbtsclasssearchsectionsnoopiesystobjectivecxrefyoinkDerekSelander-LLDB 简介什么是 DerekSelan原创 2022-03-05 22:17:35 · 924 阅读 · 0 评论 -
LLDB(四):Chisel 的安装与使用
目录Chisel 简介Chisel 命令详解alamborderalamunborderbdisablebenablebinsidebmessagebordercaflushcopydcomponentsdismissfa11yfindinstancesflickerfvfvcheapfromhidemaskmwarningpa11ypa11yipactionspaltracepanimpbcopypblockpbundlepathpcellspclasspcomponentspcurlpdatapdocs原创 2022-03-04 20:36:04 · 1666 阅读 · 0 评论 -
LLDB(三):通用参数类型详解
目录本文所使用的 LLDB 版本addressaddress-expressionalias-namearchboolbooleanbreakpoint-idbreakpoint-id-listbreakpoint-namebreakpoint-name-listbreakpt-idbreakpt-id-listbyte-sizeclass-namecmd-namecmd-optionscolumncommandcommand-optionsconnect-urlcountdescription-verbo原创 2022-03-03 16:42:22 · 1285 阅读 · 0 评论 -
LLDB(二):基础命令详解
目录本文所使用的 LLDB 版本_regexp-attach_regexp-break_regexp-bt_regexp-display_regexp-down_regexp-env_regexp-jump_regexp-list_regexp-tbreak_regexp-undisplay_regexp-upaproposbreakpointbreakpoint clearbreakpoint commandbreakpoint command addbreakpoint command deletebr原创 2022-03-02 23:54:22 · 3022 阅读 · 0 评论 -
LLDB(一):入门指南
目录LLDB 简介LLDB 入门帮助命令与搜索命令:help 与 apropos基础命令总览LLDB 简介什么是 LLDB?LLDB(Low Level Debugger)是新一代高性能调试器,其是一组可重用组件的集合,这些组件大多是 LLVM 项目中的现有库,例如:Clang 表达式解析器,LLVM 反汇编程序,等等LLDB 是 macOS 上 Xcode 中的默认调试器,Xcode 主窗口底部的控制台便是开发者与 LLDB 交互的区域。LLDB 允许开发者在程序运行的特定时刻暂停进程,查看变原创 2022-03-01 22:21:18 · 10344 阅读 · 0 评论 -
MonkeyDev(二):补充
目录MonkeyDev 安装过程中的一些问题OCMethodTrace 官方文档在编译时,MonkeyDev 中的 Logos 代码会转换成 Objective-C++ 代码MonkeyDev 安装过程中的一些问题① 在按照官方文档,远程执行安装脚本 md-install 时:sudo /bin/sh -c "$(curl -fsSL https://raw.githubusercontent.com/AloneMonkey/MonkeyDev/master/bin/md-install)"报原创 2021-12-08 13:55:55 · 1066 阅读 · 0 评论 -
MonkeyDev(一):官方文档
目录前言Home(主页)安装开始使用配置说明非越狱 App 集成CocoaPods非越狱插件 PodMac 插件越狱插件 Xcode 调试更新日志Q & A前言今天(2021.11.03)在查 MonkeyDev GitHub Wiki 的时候,发现其图片资源全部加载不出来,影响阅读因此,根据 MonkeyDev GitHub Wiki 对其官方文档进行了整理,补全了图片资源,供自己和他人参考原文地址:https://github.com/AloneMonkey/MonkeyDev/wiki原创 2021-12-08 13:49:50 · 4405 阅读 · 0 评论 -
CaptainHook 源码分析(七):其他宏接口
目录CHOptimizedMethodCHOptimizedClassMethod用于调试和日志的相关宏接口其他宏接口CHOptimizedMethod宏接口 CHOptimizedMethod 用于针对对象方法生成对宏接口 CHMethod_super_、CHMethod_self_、CHMethod_new_ 的调用,其定义为:// @param.count 对象方法的参数个数// @param.args 可变的参数列表// 注意:宏接口 CHOptimizedMethod 不能生成对宏原创 2021-12-08 13:47:18 · 682 阅读 · 1 评论 -
CaptainHook 源码分析(六):动态地创建类 && 获取与设置成员变量的值 && 动态地添加属性
目录动态地创建类(CHRegisterClass)向动态创建的类中添加成员变量(CHAddIvar)获取与设置实例对象中成员变量的值(CHIvar)动态地添加属性(CHPropertyRetainNonatomic + CHHookProperty)动态地添加属性(CHPrimitiveProperty + CHHookProperty)各种动态添加属性的宏接口的区别与联系访问动态添加的属性动态地创建类(CHRegisterClass)在 CaptainHook.h 中,宏接口 CHRegisterCl原创 2021-12-08 13:36:48 · 787 阅读 · 0 评论 -
CaptainHook 源码分析(五):Hook 对象方法 && 类方法
目录Hook 对象方法(CHMethod + CHHook)Hook 对象方法(CHDeclareMethod)CHMethod 与 CHDeclareMethod 的区别Hook 类方法(CHClassMethod + CHClassHook)Hook 类方法(CHDeclareClassMethod)CHClassMethod 与 CHDeclareClassMethod 的区别调用被 Hook 的方法的原始实现(CHSuper)Hook 对象方法(CHMethod + CHHook)在 Cap原创 2021-12-08 13:33:56 · 1462 阅读 · 0 评论 -
CaptainHook 源码分析(四):交换 Objective-C 方法实现的核心代码(使用 Cydia Substrate)
目录计算方法的类型编码(CHDeclareSig0_ ~ CHDeclareSig9_)生成交换 Objective-C 方法实现的核心代码(CHMethod_)生成交换 Objective-C 方法实现的核心代码(CHMethod_super_)生成交换 Objective-C 方法实现的核心代码(CHMethod_self_)宏接口:CHMethod_ 、CHMethod_super_、CHMethod_self_ 的区别生成添加 Objective-C 方法的核心代码(CHMethod_new_)计原创 2021-12-08 13:28:16 · 395 阅读 · 0 评论 -
CaptainHook 源码分析(三):交换 Objective-C 方法实现的核心代码(使用 RunTime API)
目录计算方法的类型编码(CHDeclareSig0_ ~ CHDeclareSig9_)生成交换 Objective-C 方法实现的核心代码(CHMethod_)生成交换 Objective-C 方法实现的核心代码(CHMethod_super_)生成交换 Objective-C 方法实现的核心代码(CHMethod_self_)宏接口:CHMethod_ 、CHMethod_super_、CHMethod_self_ 的区别生成添加 Objective-C 方法的核心代码(CHMethod_new_)计原创 2021-12-08 13:16:39 · 595 阅读 · 0 评论 -
CaptainHook 源码分析(二):构造函数 && 类的声明 && 类的加载
目录一个最简单的 CaptainHook 代码生成构造函数(CHConstructor)生成类的声明(CHDeclareClass)生成类的加载(CHLoadLateClass、CHLoadClass)其他常用的宏接口(CHClass、CHMetaClass、CHSuperClass、CHAlloc、CHSharedInstance、CHIsClass、CHRespondsTo)一个最简单的 CaptainHook 代码在 .m 文件中单纯地导入 CaptainHook.h 头文件:#import "原创 2021-12-08 13:15:53 · 746 阅读 · 0 评论 -
CaptainHook 源码分析(一):前导知识
目录CaptainHook 简介宏定义相关知识的补充LLVM 相关知识的补充源码分析前的准备:自定义 HcgPerson 类CaptainHook 简介什么是 CaptainHook?CaptainHook 是 Objective-C 2.0 运行时的通用 Hook 框架,旨在简化对 Objective-C 方法的 HookCaptainHook 的全部源码其实只是一个拥有近 760 行代码的 CaptainHook.h 头文件。(CaptainHook.h 头文件)通过使用(大量的宏定义)将(原创 2021-12-08 13:14:50 · 1226 阅读 · 0 评论 -
8086 汇编(十二)
目录用 C语言 写一个 Objective-C 的数组对象(链式存储结构)注意用 C语言 写一个 Objective-C 的数组对象(链式存储结构)分析 Objective-C 中 NSMutableArray 的属性与方法,规划线性表对象1.属性方面:容量(capacity)、长度(length)、指向存储线性表元素的堆内存的指针(value)2.方法方面:创建线性表、销毁线性表、清空线性表、获取线性表的属性(capacity、length)、对线性表的增、删、改、查、删除特定值,打印线性表原创 2020-12-13 22:48:36 · 676 阅读 · 0 评论 -
8086 汇编(十一)
目录C 语言的条件编译(Conditional Compile)Objective-C 中的 __bridge、__bridge_retained、__bridge_transfer初识 LLDBHCGLinearList 封装LLDB 内存分析 与 逆向初步NSMutableArray 扩容分析HCGLinearList 扩容C 语言的条件编译(Conditional Compile)一般编译器的预编译指令,分为以下4类:文件包含:例如 #include,是一种最为常见的预处理,用于文件的引用原创 2020-12-13 22:47:04 · 661 阅读 · 0 评论 -
8086 汇编(十)
目录cmp指令、jne指令 与 flags寄存器cmp指令、jne指令 与 flags寄存器flags寄存器(标记寄存器):CPU 中专门用于存储 逻辑判断 结果的寄存器。不同型号的 CPU,flags寄存器 的位数可能不同(8bit、16bit、32bit、64bit),每种型号的 CPU 都会提供一张 结果状态表,用于说明 flags寄存器 每个bit 所代表的含义。cmp(compare)指令:用于比较两个操作数的大小,并将结果状态记录到 flags寄存器 中。cmp指令 通过对两个操作数做减原创 2020-12-13 22:45:17 · 1004 阅读 · 0 评论 -
8086 汇编(九)
目录函数的局部变量函数调用函数 & 现场保护注意函数的局部变量定义高级语言函数如下int SunFunc(int a, int b){ int c = 1; int d = 2; return a + b + c + d; }则调用函数 SunFunc 的汇编代码为函数调用函数 & 现场保护注意bp + 是取参数,取形参函数内部取参数,是bp指针+,函数内部取局部变量,是bp指针-这里只是打个比方,具体分配多少个字节作为局部变量的内原创 2020-12-13 22:43:50 · 820 阅读 · 1 评论 -
8086 汇编(八)
目录call指令 和 ret指令call指令 和 ret指令call指令:将 call指令 的下一条指令的偏移地址入栈跳转到定位的地址执行指令ret 指令:将栈顶的值 pop 给 IP寄存器call指令 和 ret指令 结合起来 ,一般用于函数调用; call指令格式:; call 标号 或者 call 物理地址(地址偏移量); 标号在编译器编译后,也会变成地址偏移量; 实际上 call使用的是 cs:标号 ; xcode演示部分记录下来原创 2020-12-13 22:41:41 · 678 阅读 · 0 评论 -
8086 汇编(七)
目录loop 指令loop 指令loop指令 和 cx寄存器 配合使用,用于执行循环操作,类似高级语言的for、while、do-while高级语言的 for、while、do-while 底层大部分是通过 loop指令 来实现的(小部分是通过跳转来实现的)使用格式 mov cx, 循环次数标号: 循环执行的程序代码(可多行) loop 标号loop指令 ...原创 2020-12-13 22:40:13 · 476 阅读 · 0 评论 -
8086 汇编(六)
目录栈Push操作Pop操作空栈栈顶超界push 和 pop 汇编指令的格式栈段段总结(代码段,数据段,栈段)练习注意栈栈:是一种具有特殊的访问方式的存储空间(先进后出 First In Last Out,FILO)8086会将CS作为代码段的段地址,将CS:IP指向的指令作为下一条需要取出执行的指令8086会将DS作为数据段的段地址,mov ax,[address]就是取出DS:[a...原创 2020-12-13 22:38:36 · 978 阅读 · 0 评论 -
8086 汇编(五)
目录编写一个完整的汇编语言伪指令(assume,segment,ends,end)退出汇编程序中断DOS系统功能调用emu8086常用快捷键编写一个完整的汇编语言汇编语言由2类指令组成:1.汇编指令 :有真实对应的机器指令,编译时可以被编译为机器指令,最终被CPU执行,如 mov、add、sub 等2.伪指令:没有真实对应的机器指令,由编译器解析,最终不被CPU执行,如 assume、...原创 2020-12-13 22:36:54 · 617 阅读 · 0 评论 -
8086 汇编(四)
目录DS 和 [address]字型数据的传递(2个字节)大小端练习mov 指令add 和 sub 指令注意DS 和 [address]CPU要读写一个内存单元时,必须要先给出这个内存单元的地址。在8086中,内存地址由段地址和偏移地址组成8086中有一个DS段寄存器,通常用来存放要访问数据的段地址8086不支持将数据直接送入段寄存器(CS、DS、SS、ES),即 mov ds, 100...原创 2020-12-13 22:34:50 · 1044 阅读 · 0 评论 -
8086 汇编(三)
目录8086的寻址方式段地址和偏移地址有多种组合内存分段管理段寄存器代码段CS和IP指令的执行过程指令和数据jmp指令jmp指令练习代码段8086的寻址方式CPU访问内存单元时,要给出内存单元的地址,所有的内存单元都有唯一的地址,叫做物理地址8086有20根地址总线,可以传送20位的地址,具有1M(2^20)的寻址能力但是同时,8086又是16位结构的CPU,它内部能够一次性处理、传输、...原创 2020-12-13 22:31:03 · 690 阅读 · 0 评论 -
8086 汇编(二)
目录总线概述地址总线数据总线控制总线总线练习内存寄存器通用寄存器字和字节注意总线概述每一个CPU芯片都有许多管脚,这些管脚和总线相连,CPU通过总线跟外部器件进行交互总线:一根根导线的集合总线的分类地址总线数据总线控制总线微型计算机基本结构举个例子地址总线地址总线的宽度决定了CPU的寻址能力8086的地址总线宽度是20,所以其寻址能力是1M(2^2...原创 2020-12-13 21:28:51 · 1530 阅读 · 0 评论 -
8086 汇编(一)
目录编程语言的发展机器语言汇编语言(assembly language)高级语言代码在终端设备上的转换过程汇编语言的特点汇编语言的用途汇编语言的种类几个必要的常识注意编程语言的发展机器语言由0和1组成的机器指令如:0101 0001 1101 0110汇编语言(assembly language)使用符号代替机器语言,因此也称为符号语言如:mov ax, bx高级语言C | C++ | Java | C# | Objective-C | Swift,更加接近人类的自然语言如:i原创 2020-12-13 21:25:51 · 694 阅读 · 0 评论 -
Theos(七):常见问题
目录Theos 故障排除(Theos/Troubleshooting)空的 $THEOS 环境变量或者损坏的符号链接(Empty $THEOS or corrupt symlink)缺少 SDK(Missing SDK)SDK 体积过小(Small SDK)默认设置(Default settings)缺少 Substrate 头文件(Missing Substrate header)缺少 Substrate 符号(Missing Substrate symbols)缺少 Substrate 动态库(Miss原创 2021-11-03 10:59:48 · 1472 阅读 · 0 评论 -
Theos(六):官方文档
目录Home(主页)Installation(安装)Installation iOS(iOS 平台上的安装)Installation macOS(macOS 平台上的安装)Installation Linux(Linux 平台上的安装)Installation Windows(Windows 平台上的安装)Upgrading from legacy Theos(从 legacy 版的 Theos 升级)Features(特性)NICSwiftTechnical(技术实现)Structure(目录结构)Hel原创 2021-11-03 10:46:06 · 2415 阅读 · 0 评论 -
Theos(五):.deb 与 dm.pl
目录Linux 免费发行版本:Ubuntu、CentOS、Debian.deb 文件结构dpkg 与 APTCydia 安装和卸载 .deb 包的过程Theos 的 dm.pl 脚本Linux 免费发行版本:Ubuntu、CentOS、DebianLinux 有非常多的发行版本,从性质上划分,可以分为:由商业公司维护的商业版本由开源社区维护的免费版本商业版本以 RedHat 为代表,免费版本以 Debian 为代表。绝大多数 VPS(Virtual Private Server,虚拟专用服务器原创 2021-11-03 10:45:05 · 362 阅读 · 0 评论 -
Theos(四):Logos 与 logify.pl
目录Logos 语法简介Block LevelTop LevelFunction LevelLogos 补充关于 logify.plLogos 语法简介Logos 语法简介Logos 是 Theos 开发套件中的一个组件,它允许使用一组特殊的预处理器指令,轻松且清晰地编写 hook 代码Logos 提供的语法极大地简化了 MobileSubstrate 插件(即 Tweak)的开发。MobileSubstrate 插件可以在整个操作系统中 hook 其他方法。在这种情况下,hook 是指一种用于原创 2021-11-03 10:38:10 · 768 阅读 · 0 评论 -
Theos(三):GNU Make
目录GNU MakeMake 的功能Make 的规则(Rule)和目标(Target)GNU Make 的优势编写 makefile 的约定下载 Make文档邮件列表参与进来Licensing(许可)GNU MakeGNU Make 是一个工具,用于控制从程序的源文件生成程序的可执行文件和程序的其他非源文件Make 从一个名为 makefile 的文件中获取有关如何构建程序的知识, makefile 列出了每个非源文件、以及如何从其他文件中计算它。当您编写一个程序时,您应该为它编写一个 makefil原创 2021-11-03 10:37:00 · 370 阅读 · 0 评论 -
Theos(二):NIC(New Instance Creator)
目录NIC 简介nic.pl 如何工作补充NIC 简介NIC 全称叫 New Instance Creator(也叫 Nicolas!),是一个项目模板系统。它提供了一种基于模板创建项目(即 Instance)的方法,为不同的目的创建可立即构建的空项目。Theos 附带了一些有用的模板,而其他的模板也可以从社区中的各种开发者那里获得本文参阅以下文档:Theos GitHub Wiki:Features - NICiPhone Dev Wiki:NICiPhone Dev Wiki:N原创 2021-11-03 10:31:34 · 632 阅读 · 0 评论 -
Theos(一):简介 && 安装
目录Theos 简介Theos 安装Theos 的目录结构Tweak 工程的目录结构Tweak 插件加载图片资源Tweak 插件的实现原理补充:Q & A其他注意点Theos 简介相关链接Theos(iphonedev)Theos GitHub Wiki - Installation - Installation macOSTheos GitHub Wiki - Technical - Structure什么是 Theos?Theos 是一个跨平台的开发工具套件,用于在不使用原创 2021-11-03 10:23:20 · 5571 阅读 · 1 评论