【iOS逆向】如何让Mac和iPhone建立安全连接
写在前面本文主要是记录一下在iOS逆向过程中,Mac是如何和iPhone建立安全连接来实现在Mac上可以通过命令行操作iPhone的。
SSH 和 OpenSSHSSH:Secure Shell的缩写,意思为“安全外壳协议”,是一种可以为【远程登录】提供安全保障的协议,使用SSH可以把所有的数据加密,防止中间人攻击等欺骗。
OpenSSH:是SSH的免费开源实现。
拓展:
SSL:Secure Socket Layer的缩写,是为网络通信提供安全及数据完整性的一种安全协议,在传输层对网络连接进行加密。
OpenSSL:SSL的开源实现。
绝大部分的https请求等价于http + OpenSSL。
OpenSSH是用来保证登录安全性的,而这个安全由OpenSSL来具体实现。
Mac如何远程登录到iPhone方式一:通过网络连接iOS下有两个常用的账户:root、mobile。
root账户拥有最高权限,mobile是普通权限账户。
现在我们来看如何在Mac上远程登录iPhone:
1.首先在Cydia中下载插件OpenSSH
2.保证Mac和iPhone在同一个局域网下(连接同一 ...
【iOS重学】关联对象的底层原理
写在前面本文主要探究一下iOS中如何给分类添加属性以及关联对象的底层原理是什么,建议大家看本篇文章的时候参考objc4源码一起看会更好。
如何给分类添加属性// Person + Test 类@interface Person (Test)@property (nonatomic, copy) NSString *name;@end@implementation Person (Test)- (void)setName:(NSString *)name { objc_setAssociatedObject(self, @selector(name), name, OBJC_ASSOCIATION_COPY_NONATOMIC);}- (NSString *)name { return objc_getAssociatedObject(self, @selector(name));}@end
解释:
objc_setAssociatedObject(id object, const void *key, id value, objc_ ...
【iOS逆向】一键越狱教程
写在前面本文主要是记录一下如何越狱,博主这里指的是不完美越狱,博主这里越狱的手机是:iPhone5s iOS12.5.6。
首先,你需要有:iPhone手机、Mac电脑,保证Mac和手机上都有爱思助手。
越狱的简单介绍什么是越狱?越狱:iOS jailbreak,利用iOS系统的漏洞获取iOS系统的最高权限,解开之前的各种限制。
越狱的优点:
1、可以打造个性化、与众不同的iPhone
2、可以修改APP的一些默认行为
3、可以自由安装非App Store来源的App
4、灵活管理文件系统,让iPhone可以像U盘那么灵活
5、给开发者提供了逆向功能的环境
越狱的缺点:
1、越狱的手机不予保修
2、比较耗电,越狱之后的手机会常驻一些进程,耗电速度约提升10%
3、不再受iOS系统默认的安全保护,容易被恶意软件攻击,个人隐私有被窃取的风险
4、如果安装了不稳定的插件,容易让系统不稳定、变慢或者出现“白苹果”现象
完美越狱和不完美越狱完美越狱:手机在越狱之后可以正常关机和重启。
不完美越狱:手机不能关机或重启,关机之后可能会出现越狱软件Cydia等无法打开需要重新越狱,严重甚至出现“ ...
【iOS重学】一篇文章讲清楚+load和+initialize
写在前面本文主要从底层源码上来分析一下+load和+initialize方法的调用顺序以及它们之间的区别。
+load+load方法会在Runtime加载类、分类的时候调用,每个类、分类的+load方法在程序运行过程中只会调用一次。
+load的基本使用// Person 类@interface Person : NSObject@end@implementation Person+ (void)load { NSLog(@"%s", __func__);}@end // Person + Test1 类@interface Person (Test1)@end @implementation Person (Test1)+ (void)load { NSLog(@"%s", __func__);}@end// Person + Test2 类@interface Person (Test2)@end @implementation Person (Test2)+ (void)load ...
【iOS重学】Category的底层原理
写在前面本文博主将从Category的基本使用和底层原理来窥探一下Runtime下的Category 是如何实现的。博主这里参考的苹果源码版本是:objc4_838版本。
Category的基本使用// Person 类@interface Person : NSObject- (void)run;@end@implementation Person- (void)run { NSLog(@"%s",__func__);}@end// Person + Test 分类@interface Person (Test)- (void)test;@end@implementation Person (Test)- (void)test { NSLog(@"%s",__func__);}@end
使用命令:xcrun -sdk iphoneos clang -arch arm64 -rewrite-objc Person+Test.m -o Person+test.cpp将Person+Test.m文 ...
【 iOS重学】class_rw_ext_t结构详解
写在前面在iOS重学之窥探Class的结构这篇文章中,我们分析Class的结构时提到了一个结构class_rw_ext_t,本文主要就这个结构来展开做个详细的分析,以及苹果为什么要这么做。
class_rw_ext_t结构简单介绍在WWDC2020中苹果介绍对类的修改时出现了一个新的结构:class_rw_ext_t,这个结构主要是Runtime在内存上做的一些优化而出现的,在苹果源码objc4_781版本开始出现class_rw_ext_t,大家也可以对照源码来阅读本文。
clean memory 和 dirty memoryclean memory:加载后不会再发生变化的内存。
dirty memory:指的是在进程运行时会发生更改的内存。
提示:
dirty memory会比clean memory更加消耗性能和内存,dirty memory是只要进程在运行,它就必须一直存在,而clean memory可以在内存吃紧的时候移除来节省更多的内存空间,在需要的时候再次从磁盘中进行加载。
class_rw_t 和 class_ro_t在class_rw_ext_t结构之前,整体Cl ...
【iOS重学】窥探Class的结构
写在前面本文主要探究Class的内部结构,博主这里使用的objc4的源码版本是objc4-838,建议大家在看的时候可以下载最新源码。
Class的结构在前面关于isa和superclass文章中,我们提到了类对象和元类对象的类型都是Class,内存里面保存的是:
. isa指针
. superclass指针
. 属性信息
. 对象方法信息
. 协议信息
. 成员变量信息
今天我们就来剖析一下Class的内部结构,验证一下是不是存放的这些信息,废话不多说了,我们现在就开始吧。
Class是个objc_class类型的结构体,如下:
typedef struct objc_class *Class;
在objc4源码objc-runtime-new.h文件中,对objc_class定义如下:
因为objc_class结构体中数据太多,我这里提炼出来对我们分析结构有用的数据,如下:
struct objc_class : objc_object { Class isa; // isa Class superclass; // superclass cache_t ca ...
【iOS重学】KVC详解
KCV的基本使用// 设值- (void)setValue:(id)value forKey:(NSString *)key;- (void)setValue:(id)value forKeyPath:(NSString *)keyPath;// 取值- (id)valueForKey:(NSString *)key;- (id)valueForKeyPath:(NSString *)keyPath;
// Student类@interface Student : NSObject@property (nonatomic, copy) NSString *name;@end// Person类@interface Person : NSObject@property (nonatomic, assign) int age;@property (nonatomic, strong) Student *student;@end// 具体使用Person *person = [[Person alloc] init];person.student = [[Student alloc] in ...
【iOS重学】KVO详解
KVO的基本使用基本使用KVO:Key Value Observing(键值监听),用来监听某个对象属性值的改变。
// Person类@interface Person : NSObject@property (nonatomic, assign) int age;@end@implementation Person@end// KVOViewController@interface KVOViewController ()@property (nonatomic, strong) Person *person1;@property (nonatomic, strong) Person *person2;@end@implementation KVOViewController- (void)viewDidLoad { [super viewDidLoad]; self.person1 = [[Person alloc] init]; self.person1.age = 10; self.person2 = [[Person alloc] i ...
【 iOS重学】详细分析isa和superclass
写在前面本文将从源码上来详细剖析OC对象的分类、isa、superclass,带大家重新认识iOS。
苹果源码下载:
1.https://opensource.apple.com/releases/ 搜索objc4找到最新资源进行下载
2.https://opensource.apple.com/source/objc4/
3.https://opensource.apple.com/tarballs/objc4/ (这个是其他博文提到的下载路径 但是在博主这里会提示404了)
OC对象的分类OC对象可以分为三种:instance对象(实例对象)、class对象(类对象)、meta-class对象(元类对象),我们现在来一一分析这三种对象。
实例对象instance对象是调用alloc的对象,每次调用alloc都会产生新的instance对象。
NSObject *object1 = [[NSObject alloc] init];NSObject *object2 = [[NSObject alloc] init];NSLog(@"object1:%p,object2: ...