自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(60)
  • 收藏
  • 关注

原创 状态寄存器

概述状态寄存器又称cpsr,是cpu运算器的一部分。主要存放两类信息:1、存放当前指令执行结果的各种状态或条件码,结果是否为负、是否为0、是否进位、是否溢出;2、存放控制信息,有终端标志位、跟踪标志位。cpsr寄存器为32位寄存器,低8位为控制位,高4位为条件标志位。具体功能如下:位数标识描述31N符号标志位 当两个有符号整数运算时,结果为负N=1,结果为正N=030Z零标志位 表示运算结果是否为零,如果为零 Z=1,不为零Z=029C

2021-06-07 00:21:23 6969

原创 debugserver+lldb使用

一、概述debugserver、lldb是协同工作的,debugserver依附在APP上,时刻监听APP的运行状态,并有控制APP执行的能力;lldb是在APP外部的,可以和debugserver建立连接,通过debugserver获取APP运行状态,并且能通知debugserver对APP做一些事情。在真机调试的时候,Xcode将debugserver加入到APP中,通过lldb来调试APP...

2020-03-16 21:43:28 2366

原创 从汇编看函数

一、简介CPU中央处理器,内部主要包括寄存器、运算器、控制器。寄存器:存储数据运算器:处理数据控制器:控制硬件IO口的高低电平。常用寄存器pc:程序计数器,确定指令位置sp:在任意时刻都会保存栈顶的地址,调用函数就会开辟栈空间(通过操作sp寄存器来开辟栈空间)fp:也称为x29寄存器属于通用寄存器,在某些时刻利用它来保存栈底的地址x30寄存器x30寄存器存放当前调用...

2020-01-12 12:58:29 1084

原创 fishhook-动态修改MachO文件

学习hook,不是要攻击别人,破坏别人的应用场景,而是为了更好的防护,让自己的应用更坚固更安全。一、动态库注入回顾在 《动态库注入》中使用了yololib对自定义动态库在WX应用中插入,既然能插入自定义库,我们就利用hook技术做了小小的改动,替换了登录按钮的方法,并拦截了微信步数上传的方法,修改了步数。hook是改变程序执行流程的技术,能够修改其他应用,也能对自己应用做防护。通常替换...

2019-10-30 23:27:37 712

原创 动态库注入

一、前言二、注入思路三、动态库注入实现四、分析实现按钮监听五、实战修改微信步数一、前言在文章《应用签名-脚本签名》中介绍了如何在真机上运行破壳应用(抖音、微信、支付宝等ipa包),来观察应用视图的层级结构,方法调用,类名称等,以便学习参考。应用主要与后台进行数据交互展示(数据拉取及提交数据),既然能对破壳应用重签名并在真机上运行,那么能不能修改应用数据和页面展示呢,如监听微信登录按...

2019-10-20 22:59:55 982

原创 Mach-O

一、什么是Mach-O文件?Mach-O是Mach Object文件格式的缩写,是mac以及iOS上可执行文件的格式。Mach-O文件对应有多种格式:目标文件.o库文件:.a静态库文件.dylib动态库文件.framework系统级为动态库文件,自己创建的为静态库文件可执行文件及MDW.app内部的MDW文件(通用二进制文件)dyld动态链接器将依赖的动态库加载到内存.dsy...

2019-10-02 08:42:52 444

原创 Category-初探

参考:objc4-750源码编译什么是Category?分类是Objective-C 2.0之后新加的语言特性,一个特殊类,主要有一下作用:在不改变原有类的前提下为已存在的类扩展新方法拆分类文件做功能分类,便于管理引用即用有多继承的效果分类不能添加成员变量,可以添加属性,但是系统不会生成属性对应的getter、setter方法,因此属性是无效的,需要我们手动添加getter、se...

2019-09-09 15:54:06 683

原创 POP-面向协议编程

什么是面向协议编程?面向协议 = 协议 + 扩展 + 继承通过协议、扩展做功能划分,降低模块间的耦合,增强代码的可扩展性。iOS中有一个不足之处就是多重继承,而协议正好能够解决多重继承的问题。在Swift中结构体变的更加强大了,不仅能定义属性,还能定义方法,还能多重继承协议,这是OC所不提供的。下面通过一个实列,感受一下面向协议的魅力。网络请求封装1、协议声明-baseprotocol...

2019-08-30 18:25:12 623

原创 Alamofire-安全策略

在web服务器和服务器通信的时候,使用https连接是非常重要的,能够对数据加密传输、身份认证。https协议需要到ca申请证书,部署到服务器,应用端连接都是对该链接受信任的。证书可申请也可以自签,自签证书需要客户端验证通过才能访问。一、HTTP协议HTTP是互联网的基础协议,默认端口80,为满足应用需求HTTP也在不断的版本升级改进,从0.9版本到1.1版本功能不断的强大起来。HTTP演...

2019-08-29 15:22:27 621

原创 Alamofire-使用

所有类型请求,Alamofire都直接提供,通过Alamofire直接调用,配置相关参数即可。示例如下:1、GET请求let urlStr = "http://onapp.yahibo.top/public/?s=api/test/list"Alamofire.request(url).responseJSON { (response) in switch response.resu...

2019-08-26 18:31:00 10675

原创 Alamofire-Response

response为数据请求响应结果,封装了URLRequest、时间轴、请求错误信息,请求成功的数据等信息,方便开发人员取用。一、业务层获取响应数据Alamofire.request(url,method: .post,parameters: nil) .response{ response in print("response:\(response)")}respo...

2019-08-25 14:22:20 803

原创 Alamofire-Request补充

一、回顾在前面源码探索中,SessionManager管理Request和SessionDelegate的创建,并通过task绑定Request和SessionDelegate对象;Request负责请求的参数的配置,以及task不同任务的创建,创建连接外部(发送请求对象)和TaskDelegate的方法,通过闭包参数,获取TaskDelegate代理事件的内容;TaskDelegate代理事...

2019-08-24 18:37:16 724

原创 Alamofire-Request

一、简述在Alamofire中为了方便管理,明确分工,Alamofire对整个请求过程做了明确划分,并统一交由SessionManager来管理。SessionManager负责SessionDelegate、URLSession、URLRequest等对象创建与管理。先看一段请求示例:let urlStr = "http://onapp.yahibo.top/public/?s=api/t...

2019-08-21 19:24:02 884

原创 Alamofire-后台下载

上一篇文章提到了后台下载,下面看看在Alamofire中是如何处理后台下载的。首先使用原生写法来实现一个后台下载任务,在使用Alamofire来实现,通过对比来看看Alamofire的优势。数据源地址:http://onapp.yahibo.top/public/videos/video.mp4一、URLSession后台下载首先需要创建会话并设置会话参数://1、配置请求参数let ...

2019-08-20 12:30:38 685

原创 Alamofire-初探

对于iOS开发者来说,AFNetworking是我们大家所熟知的,而Alamofire呢?Alamofire框架其实就是AFNetworking兄弟,出自于同一个作者。既是同一个作者,那么他们的使用方法,框架结构上应该也是保持一致的。AFNetworking、Alamofire一、体验发起一个请求:func responseData() { let url = "http://on...

2019-08-19 11:46:46 2632

原创 RxSwift-MVVM

MVVM核心在于数据与UI的双向绑定,数据的变化会更新UI,UI变化会更新我们的数据。那这种绑定操作谁来做呢?当然是我们的RxSwift。学习RxSwift框架以来,似乎并没有真正使用过这个框架,下面就来看看,RxSwift具体能带来哪些便利。一、登录页面先看看效果:UI页面代码省略,下面只看数据UI是如何绑定的。1、UISwitch和UILabel的绑定switch1.rx.isOn...

2019-08-15 19:07:36 1487

原创 RxSwift调度者scheduler

RxSwift的核心非常简单,无非就是以下四点:可观察序列 Observalbe观察者 Observer调度者 Scheduler销毁者 Dispose可观察序列、观察者,在《RxSwift核心源码探索》中有讲,下面就来看看调度者Scheduler具体做了哪些事情。调度者scheduler主要用于控制任务在哪个线程或队列运行,而scheduler是对GCD的封装,GCD我们很熟悉,通...

2019-08-15 11:27:57 522

原创 RxSwift-中介者模式

中介者模式顾名思义,通过中介来连接买家和供应商,减少买家和供应商的联系成本。在RxSwift中存在很多中介者来帮我们处理很多事情,如map来帮我们处理数据并转化为新的序列;filter来帮我们筛选数据并产生新序列;zip来帮助我们将多个序列合成为一个序列。这些内部复杂的实现不可能每次在用到时重新实现一边,通过中介者达到一个很好的复用及管理。mapObservable<Int>.o...

2019-08-13 12:20:50 206

原创 RxSwift-deallocating探索

在RxSwfit中,有两个特殊序列deallocating序列deallocated序列在RxSwift中deinit等价于dealloc,在上面两个序列被订阅时,那么当deinit调用时会触发上面两个序列发送信号。执行顺序:deallocating -> deinit -> deallocated。看一段代码:override func viewDidLoad() { ...

2019-08-11 17:47:05 199

原创 RxSwift-内存管理

在iOS中采用的引用计数来管理内存的,ARC中,编译阶段,系统会自动向代码中插入内存管理代码,无非就是对对象的引用做计数。在RxSwift中也仿造了系统引用计数实现了自己的一套引用计数功能。 init() {#if TRACE_RESOURCES _ = Resources.incrementTotal()#endif} deinit {#if TRACE_RESOUR...

2019-08-09 14:26:20 596

原创 RxSwift-dispose源码解析

任何对象都有生命周期,有创建就要销毁。 OC中有init和dealloc,swift有init和deinit,RxSwift也不例外,RxSwift有create和dispose。下面就看看dispose是如何管理序列销毁的。一篇没有配图的文章是没有灵魂的通过前面了解了RxSwift的两种清除方式:订阅产生的可清除资源(Disposable)对象,调用dispose方法清除通过清除包D...

2019-08-06 20:31:08 191

原创 iTerm2 + oh-my-zsh + agnoster

开发中终端命令会使用很多,一个舒适的视觉效果是会带来更好的开发体验。下面看一下我们将要修改的效果:Mac自带有终端命令框,但功能单一,通常会使用iTerm2。1、下载iTerm2官网下载:https://www.iterm2.com下载完成直接将iTerm拖入到应用程序,每次使用直接在应用中点击打开。Mac系统默认shell类型为bash类型,而iTerm2则对应zsh类型。通过ca...

2019-08-06 09:57:47 681

原创 RxSwift-map源码解析

map操作符为每一个序列元素提供转换,并返回到原序列。看一段代码示例:Observable<Int>.of(1,2,3,4,5,6) .subscribe(onNext: { (val) in print(val) }).disposed(by: disposeBag)输出:1,2,3,4,5,6Observable<Int>...

2019-08-04 20:05:37 198

原创 RxSwift特征序列

一、概述二、Single三、Completable四、Maybe五、Driver六、Signal七、ControlEvent一、概述任何序列都可以用Observable描述,创建序列 -> 订阅序列 -> 信号发送 -> 信号接收。Observable<Any>.create { (observer) -> Disposable in ...

2019-07-31 18:44:02 892

原创 RxSwift核心源码探索

响应式编程是RxSwift的核心思想,统一思想快速开发。同样在ReactiveX系列中其他语言也都使用了这一思想,当我们掌握了RxSwift运用,那么RxJava,RxPHP,RxJs等等都能够快速上手。那么RxSwift是如何响应的呢?下面就来看一下源码都做了哪些事情。RxSwift核心流程1、创建序列2、订阅序列3、发送信号先看一下是如何使用的,代码如下://1、创建序列let...

2019-07-29 09:23:44 527 1

原创 RxSwift核心逻辑

一、Observable二、Observer三、Subject四、Operator五、Disposable六、Schedulers七、Error Handling凡事物皆序列一、ObservableObservable为可监听序列,是用来描述一个对象异步生产的序列,任何事务都可以用Observable来标识。万事万物都为序列,每个个体都是观察者,观察周围事物的变化。页面开...

2019-07-26 18:37:26 796 1

原创 函数响应式编程思想 & RxSwift 核心逻辑

函数响应式编程 = 函数式编程 + 响应式编程一、函数式一种编程范式,如y=f(x),y=f(f(x))(高阶函数),不同的输入对应不同结果,f(x)对应具体的数据处理流程,可以是简单的常量值,也可以是复杂的计算或其他函数调用,x即为因变量,输入不同的x会输出不同的y。C中的函数调用,OC中的方法调用,这种写法就叫做函数式编程。特点:代码简洁(复用)、易于理解(接近自然语言)、便于代码管理。...

2019-07-22 12:52:31 247

原创 Flutter_iOS混合开发

iOS项目最终是要打包上线的,上线后的代码我们动都不敢动,可能是动不了吧,尴尬……。然而Flutter应用是可以的,带有Flutter工程的iOS项目,上线后是可以对Flutter业务做热更新的。下面就简单的完成一个iOS-Flutter交互项目。1、创建一个flutter_module工程2、创建混合开发的iOS工程3、引入pod,创建Podfile文件添加内容platform :io...

2019-07-19 15:54:24 666

原创 Swift UI控件

swift是对OC语法的简化,使用函数式编码方式,编码更简洁灵活。使用let来声明常量,var来声明变量。一些类方法的调用可以直接使用点来获取类方法,省去类名,编译器会自动识别对应的类。下面是对一些控件的初始化及展示的写法。import UIKitimport WebKitimport MapKitclass ViewController: UIViewController,UITabl...

2019-07-18 13:13:07 1102

原创 Swift闭包

闭包(Closures)是自包含的功能代码块,可以在代码中使用或者用来作为参数传值。类似于OC中的block,js中的匿名函数以及其他一些编程语言中的匿名函数。1、全局函数:有名字但不能捕获任何值;2、嵌套函数:有名字,也能捕获封闭函数内的值;3、闭包表达式:无名闭包,可以根据上下文环境捕获值。一、语法定义{(paraments)->return type in sta...

2019-07-18 13:12:36 123

原创 Theos-tweak工程

1、查看《iOS逆向 开发工具》 Theos的使用方法做准备工作;2、创建tweak工程,实现在屏幕上添加弹框(越狱手机);3、Logos语法。完成该工程,我们可以实现在任意地方添加我们想要的功能。任性,吼吼。###一、给屏幕添加弹框项目目录:/Users/yanghaibo/Documents/iOS逆向/Theos/1、创建tweak工程,进入工程目录执行命令:/opt/theo...

2019-07-17 12:09:33 489

原创 逆向插入动态库

向越狱手机中已有项目插入一个动态库,动态库中添加功能代码,下面只插入一个NSLog打印代码,用来观察是否为插入成功。一、注意事项1、准备越狱的苹果设备;2、创建动态库,选择越狱手机;3、动态库证书与工程证书选择保持一致,如果默认,生成的.framework动态库需要对其签名。二、创建动态库1、创建一个工程,点击General下方加号添加动态库,选择framework工程2、注意创...

2019-07-17 12:04:15 367

原创 iOS逆向 开发工具

1、Class-dump作用:利用OC的runtime特性将存储在Mach-O文件中的@interface、@protocal信息提取出来并生产对应的.h文件,通过该文件可查看应用所有的类,及类的属性、成员变量、方法。Mach-O:它是可执行文件、目标代码、动态库、内核转储的文件格式,具有很强的扩展性。class-dump-z:使用方法同class-dump,是class-dump的改进版...

2019-07-17 12:03:22 531

原创 Runloop

Runloop本质就是一个Event Loop的do while循环,接收->等待->处理。目的:1、保持程序不退出;2、负责监听事件,时钟,网络,触摸等。RunLoop是一个对外的接口在CoreFoundation里边关于RunLoop有5个类:CFRunLoopRefCFRunLoopModeRefCFRunLoopSourceRefCFRunLoopTimerRe...

2019-07-17 12:00:38 162

原创 简易图片选择器

主要使用PhotoKit框架包含了与photos相关的文件。一下为常用的几个类:1、PHPhotoLibraryphphotolibrary提供对用户照片库中照片、视频和相关内容的元数据和图像数据的访问,包括来自相机卷、iCloud共享、照片流、导入和从iTunes同步的内容。获取当前的访问权限有一下方法:+ (PHAuthorizationStatus)authorizationStat...

2019-07-17 11:59:49 517

原创 iOS图片处理

一、图片大小二、强制解压缩三、灰度图片四、图片调色五、设置马赛克一、图片大小位图:由一个个像素点组成的图像图片像素点个数:就是图片宽高乘积一个像素点的大小:4个字节(存放RGBA值,每一分量占1个字节)图片大小:像素点个数乘以4,就是 size = w * h * 4下面打印一下看看图片的大小是否和计算的一致://图片大小-(void)picSize{ _i...

2019-07-11 18:13:43 290

原创 GCD部分总结

一、概述多线程任务管理,基于C语言的底层API,采用闭包形式与外界通讯,代码简洁高效;充分利用多核CPU,自动管理线程的生命周期,我们只负责任务的创建。二、队列和任务1、队列常用的数据结构之一,具有先进先出(FIFO)的特性,是一种受限制的线性表,只允许在表头删除任务,在表尾部插入。队列的这种特点生活中很常见,例如学校餐厅排队就餐,银行取号排队办理业务等,先到先得,后来的要在队尾排队。1...

2019-07-05 19:16:52 425

原创 Flutter环境配置

参考官网:https://flutterchina.club/setup-macos一、Flutter环境配置1、使用镜像mac终端编辑.bash_profile:vi ~/.bash_profile加入镜像路径:export PUB_HOSTED_URL=https://pub.flutter-io.cnexport FLUTTER_STORAGE_BASE_URL=https:...

2019-07-02 17:29:56 520

原创 objc4-750源码编译

OC的一个主要特性Runtime运行时特性,在日常开发中我们使用到的都是不可见的,还好官方提供了Runtime(objc4)源码供开发者研究,我是小白,下面就开始迈出源码探索的第一步。源码地址:https://opensource.apple.com/tarballs/一、下载objc4-750,编译解决报错问题1、进入源码区,搜索objc4并下载同时下载objc4相关依赖dyld、la...

2019-07-01 11:22:57 1667 1

原创 应用签名-脚本签名

签名原理熟悉了,又能够手动对应用签名,那么就可以将手动签名部分写成脚本,通过脚本,一步步实现手动签名过程。脚本签名中xcode会对.ipa做权限管理,因此不需要做权限签名。新建xcode工程,在工程文件中新建两个文件夹tool、app。1、tool文件存放签名脚本;2、app文件存放要启动的.ipa应用。签名脚本:需要安装的应用:启动后安装:Xcode调试:通过这种方法,是...

2019-07-01 11:10:33 536

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除