自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 音视频 | 项目中导入FFmpeg

导入FFmpeg1.用Xcode创建一个用Swift语言开发的Mac项目。2.在项目中创建两个文件夹。mkdir includemkdir libs3.将FFmpeg项目中的include和lib文件内容拷贝到刚刚创建的文件夹中。cp -r /usr/local/ffmpeg/include/* ./include/cp -r /usr/local/ffmpeg/lib/* ./lib/4.将需要用到的动态库添加到项目中。按住command可以多选。5.设置include文

2020-08-21 11:16:54 235

原创 音视频 | Mac安装 FFmpeg

Mac如何安装FFmpeg?1.通过brew下载安装,这种是固定的FFmpeg。2.通过源码下载安装,这种是可定制的FFmpeg。brew安装FFmpegbrew的安装请自行百度。查询vim工具:brew search FFmpeg下载vim工具:brew install FFmpeg删除vim工具:brew remove FFmpeg源码安装地址http://ffmpeg.org/download.html可以选择Download Snapshot直接下载,也可以选择复制

2020-08-19 14:21:33 405

原创 音视频 | 环境基础

音视频的应用1.互动直播系统2.娱乐直播系统3.音视频特效4.音视编辑音视频常用工具ffmpeg、ffplay、vlcLinux基础操作ls 查看当前目录下的所有文件ls -l 查看当前目录下的所有文件信息ls -al 查看当前目录下的所有文件,包括隐藏的文件cd xxx 进入子目录cd .. 退出子目录cd ~ 返回根目录mkdir xxx 创建文件夹touch xxx 创建文件cp x

2020-08-19 00:28:57 143

原创 iOS 性能优化总结

参考https://ke.qq.com/course/314526CPU优化1.尽量用轻量级的对象,比如用不到事件处理的地方,可以考虑使用 CALayer取代 UIView。2.不要频繁地调用 UIView的相关属性,比如fame,,bounds,transform等属性,尽量减少不必要的修改。3.尽量提前计算好布局,在有需要时一次性调整对应的属性,不要多次修改属性。4.Autolayout会比直接设置 framer消耗更多的CPU资源。5.图片的size最好跟 UIImageView的siz

2020-07-29 12:03:33 202

原创 iOS 内存管理总结

OC对象的内存管理在iOS中,使用引用计数来管理OC对象的内存。一个新创建的OC对象引用计数默认是1,当引用计数减为0,OC对象就会销毁,释放其占用的内存空间。调用retain会让OC对象的引用计数+1,调用release会让OC对象的引用计数-1。内存管理经验总结当调用alloc、new、copy、mutableCopy方法返回了一个对象,在不需要这个对象时,要调用release或者autorelease来释放它。想拥有某个对象,就让它的引用计数+1;不想再拥有某个对象,就让它的引用计数-1。

2020-07-28 15:36:31 161

原创 iOS 多线程安全方案

文件读写安全方案本质就是多读单写,单位时间内读写操作只允许存在一种。多读单写同一时间,只能有一个线程进行写的操作。同一时间,允许有多个线程进行读的操作。同一时间,不允许既有写的操作,又有读的操作。读写锁 -> pthread_rwlock读写锁使用起来非常简单,属于互斥锁,等待锁的线程会进入休眠。导入#import <pthread.h>声明@property (assign, nonatomic) pthread_rwlock_t lock;初始化锁pthr

2020-07-28 15:35:10 395

原创 iOS 多线程总结

什么情况下会产生死锁?使用sync函数往当前串行队列中添加任务,会卡住当前的串行队列,必定会产生死锁。同步和异步的区别同步和异步的区别在于能不能开启新的线程。同步(dispatch_sync):在当前线程中执行任务,不具备开启新线程的能力。异步(dispatch_async):在新的线程中执行任务,具备开启新线程的能力。并发和串行的区别并发和串行的区别在于任务的执行方式。并发:多个任务同时执行。串行:一个任务执行完毕后,再执行下一个任务。不同队列的执行效果1.同步函数:不管是并发队列

2020-07-28 15:33:29 109

原创 iOS RunLoop总结

RunLoop基本作用1.保持程序的持续运行。2.处理App中的各种事件,如触摸事件、定时器事件等。3.节省CPU资源,提高程序性能:该做事时做事,该休息时休息。RunLoop对象在iOS中RunLoop有两套API来使用,一套开源的C语言的CFRunLoopRef,一套OC的NSRunLoop,NSRunLoop是基于 CFRunLoopRef的一层OC包装。获取RunLoop对象:1.当前线程RunLoop对象NSRunLoop *runloop = [NSRunLoop current

2020-07-21 14:55:46 99

原创 iOS block总结

block的本质block是封装了函数调用以及函数调用环境的OC对象。源码实现有封装isa,函数地址等。block的变量捕获机制block只能捕获局部变量,不能捕获全局变量。全局变量随时可以访问,而局部变量不知道什么时候会被销毁,所以需要捕获。局部变量的类型auto:离开范围作用域就会自动销毁,访问方式是值传递,block内部无法修改auto变量值,默认修饰局部变量。static:一直在内存中,访问方式是指针传递,block内部可以修改static变量值。block的类型NSGlob

2020-07-20 14:46:22 138

原创 iOS Category底层实现

参考https://ke.qq.com/course/314526Category是什么?Category是Objective-C 的语言特性。分类、类别都是指的Category。Category的主要作用是为已经存在的类添加方法。Category实现原理Category编译之后的底层结构是struct category_t,里面存储着分类的对象方法、类方法、属性、协议信息。在程序运行的时候,runtime会将Category的数据,合并到类对象,元类对象中。Category和Exten

2020-07-07 15:49:04 122

原创 iOS KVC底层实现

参考https://ke.qq.com/course/314526KVCKVC,俗称“键值编码”,可以通过一个key来访问某个属性。-(void)setValue: (id)value forKeyPath: (NSString *)keyPath-(void)setValue: (id)value forKey: (NSString *)key;-(id)valueForKeyPath: (NSString *)keyPath;-(id)valueForKey: (NSString *)ke

2020-07-04 21:06:12 2201

原创 iOS KVO底层实现

参考https://ke.qq.com/course/314526KVOKVO,俗称“键值监听”,可以用于监听某个对象属性值的改变。问题1.新建一个Person类,设置一个age属性。2.创建两个Person的实例对象,对第一个Person实例对象的age属性设置KVO进行监听。3.打印设置监听后的两个Person实例对象的isa,发现第一个person对象的isa是NSKVONotifying_Person,第二个person对象的isa是Person。4.为什么第一个person对象的i

2020-07-04 21:05:37 168

原创 iOS isa与superclass详解

参考https://ke.qq.com/course/314526isa1.实例对象,类对象,元类对象的内部都有一个isa指针。2.实例对象的isa指针,指向它的类对象。3.类对象的isa指针,指向它的元类对象,当调用类方法时,通过类对象的isa找到。4.元类对象,最后找到类方法的实现进行调用。5.所有元类对象的isa指针,都指向基类的元类对象。superclass1.类对象,元类对象的内部都有一个superclass指针。2.类对象的superclass指针,指向它的父类对象。3.元

2020-07-03 17:46:08 296

原创 iOS 签名机制流程

参考https://ke.qq.com/course/314070iOS签名机制的作用保证安装到用户手机上的APP都是经过 Apple官方允许的。iOS签名机制流程基本介绍Mac设备有自己的公钥和私钥,Apple后台充当CA机构,有自己的Apple私钥,每一个iOS设备都有对应的App公钥。流程1.编译项目,利用Mac的私钥进行签名,生成一个ipa包。2.利用钥匙串->证书助理->请求证书,生成Mac的公钥,也就是Certificatesigningrequest.certsi

2020-07-03 13:50:56 593

原创 iOS OC对象详解

OC的实现OC的对象、类主要是基于C、C++的结构体来实现的。编写的 OC代码,底层实现其实都是C、C++代码。OC对象的本质// NSObject对象在源码的实现struct NSObject_IMPL { Class isa;};一个NSObject对象占用多少内存?NSObject对象内部只有一个isa指针,在64bit的环境下,指针占用8个字节,所以NSObject对象实际只使用了8个字节,但是在ios的64bit操作系统中,分配内存规则是16的倍数,所以一个NSObjec

2020-07-02 12:38:55 352

原创 iOS Xcode集成Reveal

前提条件已经下载并安装好Reveal。集成方法通过CocosPod集成。在 Podfile 中加入如下内容,然后运行 pod install就可成功。configurations设置表示只在 Debug模式下开启。pod 'Reveal-SDK', :configurations => ['Debug']因为新版的 Reveal支持USB连接,各设备不用在同一Wifi网络环境下工作,所以Reveal运行后就能看到可以选择的目标App了。...

2020-07-01 18:17:20 432

原创 iOS逆向 | 代码混淆注意事项

参考来源https://ke.qq.com/course/314070为什么要代码混淆代码混淆是为了増加应用的安全性,防止应用被逆向、盗版、二次打包、注入、反编译等。代码混淆通过宏定义混淆方法名、类名。如下图代码混淆注意事项1.不能混淆系统方法2.不能混淆init开头的等初始化方法3.混淆属性时需要额外注意set方法4.如果xib、 storyboard中用到了混淆的内容,需要手动修正5.可以考虑把需要混淆的符号都加上前缀,跟系统自带的符号进行区分6.混淆过多可能会被 Appsto

2020-07-01 18:16:48 284

原创 iOS逆向 | 数字签名与证书

参考来源https://ke.qq.com/course/314070什么是数字签名数字签名(又称公钥数字签名)是只有信息的发送者才能产生的别人无法伪造的一段数字串,这段数字串同时也是对信息的发送者发送信息真实性的一个有效证明。它是一种类似写在纸上的普通的物理签名,但是使用了公钥加密领域的技术来实现的,用于鉴别数字信息的方法。一套数字签名通常定义两种互补的运算,一个用于签名,另一个用于验证。数字签名是非对称密钥加密技术与数字摘要技术的应用。数字签名的作用1.确认消息的完整性。2.识别消息是否被篡

2020-07-01 18:16:12 251

原创 iOS逆向 | 单向散列函数

参考来源https://ke.qq.com/course/314070什么是单向散列函数单向散列函数,又被称为消息摘要函数,哈希函数。可以根据根据消息内容计算出散列值,可以理解为是每个消息的身份证。单向散列函数的特点1.根据任意长度的消息,计算出固定长度的散列值。2.计算速度快,能快速计算出散列值。3.消息不同,散列值也不同。4.具备单向性。常见的几种单向散列函数1.MD4、MD5产生128bit的散列值,MD就是Message Digest的缩写,目前已经不安全。2.SHA-1

2020-06-28 11:12:10 164 1

原创 iOS逆向 | 密码学介绍

参考来源https://ke.qq.com/course/314070密码的类型1.对称密码(DES,3DES,AES)2.公钥密码(RSA)对称密码1.在对称密码中,加密、解密时使用的是同一个密钥。2.常见的对称密码算法有DES,3DES,AES。3.目前最好的对称密码算法就是AES。DES1.DES是一种将64bit明文加密成64bit密文的对称密码算法,密钥长度是56bit。2.规格上来说,密钥长度是64bit,但每隔7bit会设置一个用于错误检查的bit,因此密钥长度实质上是5

2020-06-28 11:11:42 126

原创 iOS逆向 | 如何通过LLDB规避ASLR

参考来源https://ke.qq.com/course/314070什么是ASLR?Address Space Layout Randomization<地址空间布局随机化>ASLR技术是一种针对缓冲区溢出的安全保护技术,通过对堆、栈、共享库映射等线性区布局的随机化,通过增加攻击者预测目的地址的难度,防止攻击者直接定位攻击代码位置,达到阻止溢出攻击的目的的一种技术,从iOS4.3开始引入。ASLR的作用简单的说,就是让可执行文件在内存中每次运行的初始地址不一样,提高逆向的难度。规

2020-06-28 11:10:25 294

原创 iOS逆向 | 动态调试常见问题

在配置动态调试的过程中,遇到几个问题,特此记录。参考资料http://www.iosre.com/t/ios12-debugserver-lldb/14429问题一执行debugserver附加进程的时候报错,如下debugserver *:端口号 -a 进程 Failed to get connection from a remote gdb process. Exiting.解决方式删除debugserver 的以下权限,重新签名。com.apple.security.networ

2020-06-22 14:07:11 826

原创 iOS逆向 | 如何通过LLDB实现动态调试

Xcode动态调试的原理Xcode动态调试的原理,涉及到两个工具,LLDB以及debugserver。debugserver一开始存放在 Xcode里面,当 Xcode识别到手机设备时, Xcode会自动将 debugserver安装到 iphone上,然后通过LLDB与debugserver的交互,来实现真机动态调式。如何做到动态调试任意APP手动给任意APP增加debugserver,使用终端的LLDB与之交互。实现流程1.连接越狱的手机。2.使用iFunBox在/Developer/us

2020-06-22 14:06:39 289

原创 iOS CocoaPods注意事项

参考资料https://www.cnblogs.com/iyuanxiaojun/p/4465850.htmlCocoaPods的安装和使用,相信大家都很熟悉了,下面为大家介绍使用CocoaPods的一些注意事项。关于.gitignore当执行pod install之后,除了Podfile外,CocoaPods还会生成一个名为Podfile.lock的文件,这个文件不应该加入到.gitignore中。因为Podfile.lock会锁定当前各依赖库的版本,之后如果多次执行pod install 也不

2020-06-15 23:37:43 85

原创 iOS 实现音频caf转mp3

实测音频大小录音1分钟:caf格式用了2.6MBmp3格式用了227KB 录音10分钟:caf格式用了26.5MBmp3格式用了2.3MB 操作流程1.导入lamegitbub地址:https://github.com/hedgehogIda/caf-mp32.声明头文件#import "lame.h"3.实现代码我的博客中实现录音功能的这篇文章(https://www.jianshu.com/p/fea0cbe42cb2),里面有获取tmpUrl的代码/** caf转

2020-06-15 14:03:38 485 1

原创 iOS 实现录音功能

参考资料https://www.jianshu.com/p/fb7dfb033989音频文件相关知识文件格式wav:特点:音质最好的格式,对应PCM编码适用:多媒体开发,保存音乐和音效素材mp3:特点:音质好,压缩比比较高,被大量软件和硬件支持适用:适合用于比较高要求的音乐欣赏caf:特点:适用于几乎iOS中所有的编码格式编码格式PCMPCM:脉冲编码调制,是一种非压缩音频数字化技术,是一种未压缩的原音重现,数字模式下,音频的初始化信号是PCMMP3AACAAC:其实是“

2020-06-15 14:02:55 321

原创 iOS逆向 | 如何在Tweak项目中添加图片资源

参考来源https://ke.qq.com/course/314070实现方式1.在Tweak项目的Makefile路径下,新建一个layout文件,放在layout文件下的资源等同于放在项目的根目录下。2.新建一个Library文件,然后在Library文件中新建一个Caches文件,这样就模拟出项目的缓存文件路径。3.新建一个带有自己前缀的文件,可以有效防止和其他插件的图片重名,最后将图片资源放入前缀文件中就可以了。调用方法在Tweak.x中通过imageWithContentsOfFi

2020-06-12 14:51:17 290

原创 iOS逆向 | 实现Tweak项目的多文件开发

参考来源https://ke.qq.com/course/314070实现方式1.在Tweak项目的Makefile路径下,新建一个专门用来存放文件的文件夹src,将Tweak.x放进去。2.在Xcode中创建好需要开发的插件类,放入到src的自定义文件夹test中。3.将Tweak项目用Sublime打开,目录结构如下。4.修改Makefile中的文件路径,不同的文件之间用空格隔开,只有文件名可以用*代替,文件夹名不可代替。5.在Tweak.m中导入想要使用的插件类,文件路径写清楚,

2020-06-12 14:50:12 266

原创 iOS 解决LaunchScreen图片不显示问题

问题在LaunchScreen启动页中设置图片,模拟器运行可以显示,真机运行无法显示。解决方法1.将图片从 Assets 中拿出来,直接拖拽到项目资源目录中。2.重新运行到真机,可以显示。补充说明这个问题网传是Xcode的一个bug。...

2020-06-12 11:56:25 2404

原创 iOS 删除AFNetWorking中UIWebView分类

从2020年4月开始,苹果将停止接受使用UIWebView API的应用。参考资料https://www.jianshu.com/p/32a0717366b2解决方式1.手动拖入AFNetWorking的同学,需要手动删除UIWebView,这里不做讲解。2.使用pod导入AFNetWorking的同学,需要在Podfile文件中做出如下修改,然后重新在终端执行pod install。// 在之前的基础上,加上这句代码。// :subspecs => ['Reachability',

2020-06-12 11:55:24 1097

原创 iOS逆向 | theos-tweak的实现过程

参考来源https://ke.qq.com/course/314070操作指令解析make:编译Tweak代码为动态库(*.dylib)。make package:将dylib打包为deb文件。make install:将deb文件传送到手机上,通过Cydia安装deb。原理分析1.当打开APP时,Cydia Substrate会让APP加载对应的dylib,然后修改APP内存中的代码逻辑,执行dylib中的函数代码。2.theos的tweak并不会对APP原来的可执行文件进行修改,只会修改

2020-06-11 10:03:01 354

原创 iOS逆向 | theos中make常见错误

我在使用theos的过程中遇到的问题,特此记录下解决方式。问题1因为多个 xcode导致路径(有可能安装了好几个 Xcode)。解决方法需要指定 Xcode版本。问题2执行make install报错command not found。后来发现是因为make package出错导致make install报错。解决方法修改deb.mk文件第6行压缩方式为gzip,重启终端。重新make && make package && make install就没

2020-06-11 10:01:37 516

原创 iOS逆向 | dumpdecrypted脱壳失败解决方法

我在使用dumpdecrypted脱壳的过程中,遇到三个问题,特此记录下解决方式。问题1dylib所在的文件夹权限不够。解决方法将dylib放在用户所在文件夹:如果是root用户,请将dylib放在/var/root目录。如果是 mobile用户,请将dylib放在/var/ mobile目录。问题2dumpdecrypted.dylib未签名导致。dyld: could not load inserted library 'dumpdecrypted.dylib' because no

2020-06-11 09:58:44 1301

原创 iOS逆向 | 解决终端的中文乱码问题

参考来源https://ke.qq.com/course/314070问题来源默认情况下,iOS终端不支持中文输入和显示,这会带来很多困扰。解决方式1.通过Cydia安装一个vim。2.登录SSH,进入到root#的路径。3.新建一个~/.inputrc文件。4.保存以下四条命令。// 不将中文字符转化为转义序列set convert-meta off // 允许向终端输出中文set output-meta onset meta-flag on set input-meta on

2020-06-11 09:57:38 404

原创 iOS逆向 | 如何通过usbmuxd实现SSH登录

参考来源https://ke.qq.com/course/314070为什么要使用usbmuxd?因为通过usbmuxd可以使用USB来进行SSH登录,这样传输速度有显著提升!操作流程1.下载usbmuxd安装包。https://cgit.sukimashita.com/usbmuxd.git/snapshot/usbmuxd-1.0.8.tar.gz2.新建一个文件夹,命名usbmuxd,将下方两个python文件放入usbmuxd文件夹。3.通过终端进入到usbmuxd文件的路径,执行

2020-06-11 09:56:49 606

原创 iOS逆向 | 如何通过OpenSSH实现免密码登录

参考来源https://ke.qq.com/course/314070基本介绍ssh-2提供了2种常用的客户端认证方式:1.基于密码的客户端认证,使用账户密码认证。2.基于秘钥的客户端认证,免密码认证,是最安全的一种认证方式。3.ssh-2会优先尝试秘钥认证,如果失败,才会尝试密码认证。免密码登录的完整流程输入 ssh-keygen(生成公钥和私钥)一路空格输入 cd ~/.ssh(进入到ssh路径)输入 ssh-copy-id root@手机主机地址(将公钥内容追加到授权文件尾部)

2020-06-11 09:55:55 266

原创 iOS逆向 | 如何通过OpenSSH实现远程登录

参考来源https://ke.qq.com/course/314070操作流程1.通过Cydia安装OpenSSH工具。2.Mac与iPhone连接同一个wifi。3.在Mac终端输入ssh root@手机主机地址。补充说明1.第一次登录需要保存服务器传来的公钥,所以输入yes,后续就不会出现这个显示。2.初始密码是alpine。3.出现root#就代表登录成功。4.iOS下有两个常用账户,分别是root和mobile,root是最高权限,mobile是普通权限,mobile不能操作系

2020-06-11 09:54:33 363

原创 iOS 常见的代码规范

参考资料:https://github.com/raywenderlich/objective-c-style-guide1.常量使用类型常量,少用宏定义。static NSString * const STMProjectName = @"GCDFetchFeed"2.变量变量名应该明确体现出功能,加上类型做后缀。在使用之前,需要先对变量做初始化,并且初始化的地方离使用它的地方越近越好。不要滥用全局变量,尽量少用它来传递值,通过参数传值可以减少功能模块间的耦合。NSString *na

2020-06-10 23:28:29 138

原创 iOS MVC和MVP详解

常规MVC优点:1.Model可复用2.View可复用3.耦合性低缺点:1.控制器臃肿2.View控件暴露在外,不安全,封装性差Model的实现#import <Foundation/Foundation.h>NS_ASSUME_NONNULL_BEGIN@interface MVCModel : NSObject/** url */@property (nonatomic, copy) NSString *photoUrl;/** title */@pro

2020-06-10 23:26:12 138

原创 iOS 启动页实现方案

启动页的定位1.由于每次打开都能看到,因此启动页常用于广告位,为产品带来盈利。2.用来判断是跳转主页面还是登陆界面。3.用来缓冲app的加载时间。实现思路在didFinishLaunchingWithOptions里面创建两个Window,一个是主Window,一个是启动页Window,启动页用来判断是跳转主页面还是登陆界面。如果是登录状态,那么在规定时间内销毁启动页window,展示主Window。如果不是登录状态,那么就从引导页跳转登录界面,登录成功后在销毁启动页Window。优点1.

2020-06-10 23:24:17 2236

空空如也

空空如也

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

TA关注的人

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