自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 iOS攻防-实战(2)-反重签与反注入

前言:上一篇我们讲了如何通过重签名目标ipa文件以及修改Math-O来实现动态注入。知道如何攻击,是为了找出攻击细节来实现防御。这一篇我们来讨论下如何防御动态注入。相信了解了动态注入过程的同学都会有这样的体会:动态注入的核心步骤有2点:重签名 添加自己的framework反重签之前在讲重签名时,我留了一个伏笔:重签名时,打包的证书不是原始ipa开发团队的,证书变了,bun...

2019-12-05 11:47:21 1124 1

原创 iOS攻防-实战(1)-动态注入

前言:之前几篇讲了一些背景知识,这一篇进入正题,来讲一下动态注入的基本理论和流程。我们这里通过动态添加运行库的方式来实现动态注入。ipa包结构还记得我们之前介绍Math-O文件时,提到了Load commands嘛?其中有一部分是加载第三方库的:注意其中的:LC_LOAD_DYLIB(AFNetworking)。那么,能否通过修改Math-O文件来加载我们需要动态注入的库呢?答...

2019-12-03 19:25:26 1089

原创 iOS攻防-序章(2)-签名机制

前言:对于一个iOS开发入门来说,一定会被一堆诸如:csr文件、私钥、Provisioning Profile、p12等名词搞的一头雾水。当年我也如此,但相信我,iOS的签名机制其实并不复杂,而了解这套机制对于iOS攻防的研究有很大帮助何为签名假设A和B进行通讯,A向B发送了一个讯息,B收到后,会有一个问题?如何证明这个信息来自于A?了解过非对称加密算法的同学应该不难想出解决方法,...

2019-11-27 00:13:15 259

原创 iOS攻防-序章(1)-Mach-O文件结构解析

前言:最近因为工作需要,一直在研究iOS的逆向工程。说起来,这个方面涉及到的的知识面实在太广,所以想开一个系列,从基础知识到实战攻防,系统的总结一下最近的所思所学。第一篇,先从一个基础知识开始:Mach-O文件。说起Mach-O文件,很多开发人员应该不陌生。即使你没有听过Mach-O,但你也肯定知道exe文件是什么。每个操作系统都有自己的可执行文件,比如Linux下的ELF,Windo...

2019-11-22 11:15:38 524

原创 iOS 和 Android:UITableView与RecycleView的重用机制比较

引言:iOS和Android各有自己的列表组件。众所周知,列表组件一直都是移动端各个端中,组件重用、内存优化的重点。今天就来分析下iOS和Android各自的重用机制。Android:RecyclerView的缓存机制先来熟悉下ViewHolder的几个状态isInvalid:表示当前ViewHolder是否已经失效。通常来说,在3种情况下会出现这种情况:1.调用了Adapter...

2019-11-10 21:25:52 525

原创 移动端网络安全-密钥交换的前世今生(4)-番外篇

前言:上一篇提到了https依旧会有受到中间人攻击的风险,这一篇就来讲一下中间人攻击和相关的应对方法:ssl-pinning中间人攻击中间人攻击(Man-in-the-Middle Attack, MITM)是一种由来已久的网络入侵手段,常见的方式如SMB会话劫持、DNS欺骗等攻击都是典型的MITM攻击等。这里就部展开细讲,主要讲一下在https环境下,如何实现中间人攻击。记得上一...

2019-11-05 21:33:59 363

原创 移动端网络安全-密钥交换的前世今生(3)

前言:之前的两篇,主要讲了DH和ECDH两种交换协议。今天来讲一个比较古老,但却使用很广泛的密钥交换方式:RSA非对称加密算法:RSA相信熟悉加密算法的同学对RSA这个词并不陌生,RSA是一种比较知名的非对成加密算法。那么,它和密钥交换协议有什么关系呢?实际上,早期的SSL/TLS使用的,就是RSA的密钥交换方式。首先,我们先来回顾一下RSA算法:摘录百度的一段话:R...

2019-10-29 23:34:36 388

原创 移动端网络安全-密钥交换的前世今生(2)

前言:前文讲了DH密钥交换协议,DH的数学基础是离散对数,而一个算法在数学上逆运算越困难,其本身被破解的难度越大。而我们今天要讲的椭圆曲线算法,在数学上,就复杂的多。 椭圆曲线的数学概念 椭圆曲线是由下面的方程描述的曲线:y² = x³ + ax + b4a³ + 27b² !=0比如,y² = x³ -x + 1的图像是:椭圆曲线有这样的两个性质:...

2019-10-24 13:48:50 253

原创 移动端网络安全-密钥交换的前世今生(1)

前言:在那个https还没有普及的黑暗年代,混沌的大地充斥着各种危险的明文传输(抱歉,中二了)。相信很多软件开发人员都遇到过通信加密的问题,早期的一些做法,只是简单的将对称加密的密钥写死在客户端中,通过对称加密的方式进行数据传输加密。然而这样的方案问题也十分明显,一旦客户端被反编译,密钥泄露,那么几乎所有客户端都暴露在了风险中。既然不适合将对称加密的密钥写死在客户端,那是否可以动态生成密钥...

2019-10-19 17:15:47 332

原创 网络基础及协议

OSI七层模型OSI中的层 功能 TCP/IP协议族应用层 文件传输,电子邮件,文件服务,虚拟终端 TFTP,HTTP,SNMP,FTP,SMTP,DNS,Telnet表示层 数据格式化,代码转换,数据加密 没有协议会话层 解除或建立与别的接点的联系 没有协议传输层 提供端对端的接口 TCP,UDP网络层 为数据包选择路由 IP,ICMP,RIP,OSPF,BGP,IGMP...

2019-08-19 17:42:29 452

原创 算法及密码学

密码起源密码学(在西欧语文中,源于希腊语kryptós“隐藏的”,和gráphein“书写”)是研究如何隐密地传递信息的学科。在现代特别指对信息以及其传输的数学性研究,常被认为是数学和计算机科学的分支,和信息论也密切相关。著名的密码学者Ron Rivest解释道:“密码学是关于如何在敌人存在的环境中通讯”,自工程学的角度,这相当于密码学与纯数学的异同。密码学是信息安全等相关议题,如认证、访问控...

2019-08-19 17:11:04 1090

原创 Android事件分发机制研究

引言:相信不少Android开发都遇到过这样一个问题:“给一个控件写了setOnClickListener,结果View.OnClickListener怎么都不相应,查了半天,发觉原来这个控件有添加setOnTouchListener,一旦View.OnTouchListener中的onTouch返回true,那么View.OnClickListener是绝对不会响应的”。bug好解决,但是背后的...

2019-08-19 16:54:27 98

原创 Android动态代理解析

前言:做过Android开发的一般都使用过Retrofit这个三方框架,初一使用,会觉得很神奇:为什么把各个请求定义在一个接口里,通过几行代码就能实现网络请求?答案就是“动态代理”!何为代理?简单来说代理是一种软件设计模式,某些情况下,我们不希望修改已有对象的功能,但是我们又想在不改变调用者调用方法的情况下,改变调用后的具体实现逻辑,因此,我们会采用间接访问来实现目的。比如A类...

2019-08-16 18:34:47 870

原创 移动端开发规范

移动端开发规范引言:最近得空,整理一些平时工作中要求的开发规范,浅薄之处还请大家多指教。目录移动端开发规范代码规范基本原则代码清晰一致性通用规范类命名方法命名变量命名常量命名枚举类型命名图片命名通用规范通用设计规范开屏页版本号版本检查开屏页广告推送通用测试用例及处理规范规范用例数据埋点规范...

2019-08-16 10:13:23 2759

原创 移动端混合开发(1):和H5的javascript交互

最近公司项目开发中涉及到了大量的混合开发,这里开一个系列,把开发中的经验和遇到的问题和大家分享下讲到移动端的混合开发,绕不开的一个话题就是原生和Js的交互,关于iOS、Android怎么和js交互,网上的资料很多,这里先简单介绍几个方法。js部分<!DOCTYPE html><html> <head> <meta charset="UTF-8"> <tit

2017-11-03 11:50:28 4316

原创 移动端Jenkins持续集成攻略(3)

前一篇讲了iOS的持续集成,虽然fastlane工具集也有支持Android的部分,但力度明显不及iOS强大。更何况,Android有gradle这样的脚本话工具,何须第三方?Gradle关于gradle,这里就不多介绍了,相信Android开发都比较熟悉了,gradle默认为开发者设置好了很多清理、打包、测试的任务(clean、assemble、test等),我们只需要配置好Jenkins就行了

2017-08-23 13:03:11 881

原创 移动端Jenkins持续集成攻略(2)

上一篇讲了持续集成的一些概念,以及Jenkins的安装和配置,这一篇开始,主要讲一下iOS怎么使用Jenkins进行持续集成iOS的持续集成,必然涉及到脚本打包的相关内容,这里推荐使用一套工具集:fastlane。FastLane什么是Fastlane? 官方自己的定义是这样的: fastlane is a tool for iOS, Mac, and Android developers

2017-08-22 13:43:56 794

原创 移动端Jenkins持续集成攻略(1)

引言: 关于“持续集成”这个词,相信移动端开发的小伙伴们工作中听到不少。但什么是持续集成?为什么要持续集成?恐怕能讲讲清楚的小伙伴并不多。碰巧最近因为工作需要,为公司的移动端搭建了持续集成的环境,借此机会,用三篇的篇幅,为大家简单梳理一下持续集成的概念,以及环境搭建、版本发布中的各种坑。什么是持续集成?持续集成指的是,频繁地将代码集成到主干。 它有几个好处: 1. 快速发现错误。每完成

2017-08-21 18:46:19 1956

原创 数据结构与算法-动态规划(2)

继续讲上次的故事: 皇帝回到宫中,越想心里越没底,“这帮老官僚,又不知道要怎么糊弄朕”,于是,他叫来了两个贴身宦官,小周子,小俊子。 “小俊子,你给朕算算,这10座金矿的事,要是每种情况都去算,要派多少人去算啊” “启禀陛下,10座金矿,每座矿有两种可能(挖或者不挖),那就是2的10次方,一共1024种可能性” “小周子,那你给朕算算,如果用朕的方法,这帮官僚要动用多少人啊” “启禀陛下,

2017-03-03 14:22:50 356

原创 数据结构与算法-动态规划(1)

先来讲个故事: 从前有个皇帝,某一天在他的国境内发现了10座金矿,这10座金矿大小不同,开采需要的人力和能挖出来的金子各有不同。考虑到民力有限,皇帝只能征调10000民夫开采这10座金矿,于是问题来了:10座金矿全部去挖,民夫肯定不够,如何选择呢? 皇帝来到10号金矿视察,此时探子来报: “启禀陛下,这座金矿需要1500人开采,能挖出8500金字”。 皇帝听到报告,突然灵机一动,叫来了手下的

2017-03-02 17:24:14 895

原创 Core Image研究

Core Image研究demo git地址 说起Core Image,恐怕不少人会觉得陌生,毕竟和Core Data、Core Animation、Core Graphics比起来,Core Image使用频率还是比较低的。不过,如果你的工作涉及到图像处理,除了一些第三方的框架(GPUImage之类)Core Image还是相当不错的选择。基本概念CoreImage是一个图

2016-12-15 11:35:03 366

原创 IOS数组排序整理

IOS数组排序整理demo git地址 说起ios的排序,方法有很多种,最近正好有时间,做了一次整理,顺便测试了一下各种排序方法的效率,有不对的地方,望大家指正测试的排序方法主要有以下几种:插入排序(自己实现)快速排序(自己实现)swift array.sorted(by: {(Any, Any) -> Bool})oc nsarray sortedArray(comparator:

2016-12-12 11:56:44 1237

原创 CoreAnimation研究(2)

CoreAnimation研究(2)demo git地址 在第一篇提到了CoreAnimation水很深,之所以着么说,是因为它除了普通的动画效果外,还有很多很高级的玩法。CAShapeLayer如果你厌倦了动画只是简单的对uiview的各种属性操作,想自己画点图形怎么办?CAShapeLayer是一个不错的选择!一言不合上代码://画圆 let bPath = UIBezierP

2016-12-05 13:39:01 282

原创 CoreAnimation研究(1)

CoreAnimation研究(1)demo git地址 关于ios动画,之前只是简单地用过UIView,对于CoreAnimation,大名虽然早就有耳闻,但一直没机会研究。最近因为项目原因,深入接触了下CoreAnimation,真是一入豪门深似海啊!相比于UIView,CoreAnimation的功能实在强大太多(貌似UIView的动画 就是基于CoreAnimation封装的)基本概念C

2016-12-05 11:03:23 266

原创 Swift3.0 gcd学习(3)

Swift3.0 gcd学习笔记(3)Deadlock 死锁之前提到过gcd死锁:两个线程因为互相等待对方完成而都被卡住。第一个不能完成是因为它在等待第二个的完成。但第二个也不能完成,因为它在等待第一个的完成。怎么理解呢?先看个例子,一言不合上代码://block1{ print("1"); let m = DispatchQueue.main; //b

2016-11-26 20:02:45 332

原创 Swift3.0 gcd学习(2)

Swift3.0 gcd学习(2)上一篇简单梳理了下gcd的基础概念和一些基本的使用方法。这一篇希望再深入研究下gcd的一些玩法,有错误希望大家指正。barrier有时会在一个并发的队列里读写一个数据对象。如果只是读操作还好,但如果有写入操作,那数据就可能会有意料之外的问题。之前使用dispatch_barrier_async来解决这个问题,在swift3.0,被搬到了Dispatch

2016-11-23 11:04:58 427

原创 Swift3.0 gcd学习(1)

Swift3.0 gcd学习(1)最近机缘巧合花了点时间研究了下IOS的多线程,这里做个总结,算是学习笔记,不足之处,还请大家多指正。废话不多,这就开始! demo git地址多线程概述IOS多线程的方案,基本有四条路: gcd NSOperation NSThread Pthreads 说起IOS多线程解决方案,gcd基本是第一选择。不过让oc程序员比较纠结的事情是

2016-11-21 14:44:02 302

空空如也

空空如也

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

TA关注的人

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