- 博客(290)
- 收藏
- 关注
原创 iOS汇编入门教程
前言对于应用层开发人员而言,仅仅掌握Objective-C和系统框架即可较好的完成开发,但在涉及到应用加固、逆向分析等内容时仅有应用层开发技能就会显得非常的无力,因此掌握汇编对于突破iOS开发水平的瓶颈十分有效。一个例子以反调试为例,我们知道,通过调用ptrace函数可以阻止调试器依附。ptrace(31, 0, 0, 0)这种方式能够被函数hook轻易破解,例如使用f...
2018-03-16 21:45:09 694
原创 iOS端JSON转Model链式编程框架SuperKVC用法与原理
背景在客户端编程中,字典转模型是一个极为常见的问题,苹果提供了KVC来实现NSDictionary到Model的注入,但是KVC只能进行单层浅注入,且无法处理类型转换、key与属性名不对应、深度注入等问题,笔者从Masonry得到启发,开发了一个通过链式配置注入器实现深度注入、类型转换、key-属性名映射等功能的轻量级注入框架SuperKVC。目前已经开源到GitHub,点击这里前往,欢迎Star和
2017-04-16 10:36:32 2502
原创 iOS控制反转(IoC)与依赖注入(DI)的实现
背景最近接触了一段时间的SpringMVC,对其控制反转(IoC)和依赖注入(DI)印象深刻,此后便一直在思考如何使用OC语言较好的实现这两个功能。Java语言自带的注解特性为IoC和DI带来了极大的方便,要在OC上较好的实现这两个功能,需要一些小小的技巧。控制反转和依赖注入控制反转简单来说,将一个类对象的创建由手动new方式改为从IOC容器内获取,就是一种控制反转,例如我们现在要创建一个Class
2016-08-21 22:37:23 6138 5
原创 基于AOP的iOS用户操作引导框架设计
背景有一种现象,App设计者觉得理所当然的操作方式,却常常被用户所忽视,为了防止这种现象发生,就要为App设计一个帮助,一种低成本的方案是将帮助文档写成HTML然后展示给用户,这样的方式常常不能带来好的效果,一种较好的方式是高亮用户应该点击的区域,对其他部分进行遮盖,并用说明文字提醒用户,如下图所示。点击这里观看动画演示 下载框架SGUserGuide已经上传到github,点击前去github下
2016-07-06 17:58:36 2894
原创 iOS图形手势识别框架SGGestureRecognizer
简介苹果官方为我们提供了简单手势的识别器,但对于图形手势,例如五角星、三角形等的识别,就需要自己实现了。通过识别这些手势,可以去执行特定的操作,或是输入公式、释放魔法等,可以为App增光添彩。下载与使用该框架已经上传到github,点击这里前去下载,欢迎Star! 有关该框架的使用在github上已经写明,这里不再赘述,本文主要介绍的是图形手势识别的实现原理与框架的结构。框架的结构一个图形手势是一
2016-07-03 17:56:38 4411 1
原创 WiFi文件上传框架SGWiFiUpload
背景在iOS端由于文件系统的封闭性,文件的上传变得十分麻烦,一个比较好的解决方案是通过局域网WiFi来传输文件并存储到沙盒中。简介SGWiFiUpload是一个基于CocoaHTTPServer的WiFi上传框架。CocoaHTTPServer是一个可运行于iOS和OS X上的轻量级服务端框架,可以处理GET和POST请求,通过对代码的初步改造,实现了iOS端的WiFi文件上传与上传状态监听。下载与
2016-06-30 13:14:51 4620 7
原创 使用Ettercap filter进行流量监听和数据篡改
简介Ettercap是一个综合性的中间人攻击工具,使用它可以进行ARP欺骗、拦截器、DNS欺骗等操作,本文将介绍使用ettercap的文本模式进行流量监听和代码注入的方式和注意点。
2017-06-26 00:10:11 11271 3
原创 iOS端执行包含外部引用的js并相互通信
背景某些情况下,需要调用js的一些代码来执行一些操作,并且将处理结果回传到OC。概述为了执行一段包含外部引用的js,需要使用UIWebView,通过fileURL去加载一个js或者HTML页面,为了方便的在两个语言之间通信,需要借助一个第三方框架WebViewJavascriptBridge,它可以实现跨语言的请求与回调。实现本文讨论的是,从OC调用WebView加载的js的某个方法来处理数据,并且
2016-12-06 14:03:47 1730
原创 [LeetCode]Unique Paths
题目链接Unique Paths题目内容A robot is located at the top-left corner of a m x n grid (marked ‘Start’ in the diagram below).The robot can only move either down or right at any point in time. The robot is tryin
2016-09-04 20:14:47 572
原创 iOS开源照片浏览器框架SGPhotoBrowser的设计与实现
简介近日在制作一个开源加密相册时附带着设计了一个照片浏览器,在进一步优化后发布到了GitHub供大家使用,该框架虽然没有MWPhotoBrowser那么强大,但是使用起来更为方便,操作更符合常规相册习惯,自定义和修改源码也十分简单。 本文主要介绍这个照片浏览器框架的技术要点,如果要深入研究和使用,可以在下面的链接中下载源码。如果你对这个框架有兴趣,可以点击这里前去GitHub下载源码,欢迎Star
2016-07-29 21:43:42 6420
原创 iOS开源加密相册Agony的实现(七)
简介虽然目前市面上有一些不错的加密相册App,但不是内置广告,就是对上传的张数有所限制。本文介绍了一个加密相册的制作过程,该加密相册将包括多密码(输入不同的密码即可访问不同的空间,可掩人耳目)、WiFi传图、照片文件加密等功能。目前项目和文章会同时前进,项目的源代码可以在github上下载。 点击前往GitHub概述上一篇文章主要介绍了图片浏览器原图浏览、缩放和滑动切换图片的实现细节。本文主要介绍
2016-07-18 19:06:26 3132
原创 iOS开源加密相册Agony的实现(六)
简介虽然目前市面上有一些不错的加密相册App,但不是内置广告,就是对上传的张数有所限制。本文介绍了一个加密相册的制作过程,该加密相册将包括多密码(输入不同的密码即可访问不同的空间,可掩人耳目)、WiFi传图、照片文件加密等功能。目前项目和文章会同时前进,项目的源代码可以在github上下载。 点击前往GitHub概述上一篇文章主要介绍了照片的保存、删除批处理的实现。这篇文章将介绍图片浏览器原图浏览
2016-07-16 22:45:54 3411
原创 iOS开源加密相册Agony的实现(五)
简介虽然目前市面上有一些不错的加密相册App,但不是内置广告,就是对上传的张数有所限制。本文介绍了一个加密相册的制作过程,该加密相册将包括多密码(输入不同的密码即可访问不同的空间,可掩人耳目)、WiFi传图、照片文件加密等功能。目前项目和文章会同时前进,项目的源代码可以在github上下载。 点击前往GitHub概述上一篇文章主要介绍了照片浏览器的缩略图预览界面设计,本文主要介绍照片的保存、删除批
2016-07-15 21:17:48 3402
原创 iOS开源加密相册Agony的实现(四)
简介虽然目前市面上有一些不错的加密相册App,但不是内置广告,就是对上传的张数有所限制。本文介绍了一个加密相册的制作过程,该加密相册将包括多密码(输入不同的密码即可访问不同的空间,可掩人耳目)、WiFi传图、照片文件加密等功能。目前项目和文章会同时前进,项目的源代码可以在github上下载。点击前往GitHub概述上一篇文章主要介绍了相册管理界面的设计与实现。本文主要介绍图片浏览器设计的技术细节。图
2016-07-14 17:47:02 3617
原创 iOS开源加密相册Agony的实现(三)
简介虽然目前市面上有一些不错的加密相册App,但不是内置广告,就是对上传的张数有所限制。本文介绍了一个加密相册的制作过程,该加密相册将包括多密码(输入不同的密码即可访问不同的空间,可掩人耳目)、WiFi传图、照片文件加密等功能。目前项目和文章会同时前进,项目的源代码可以在github上下载。 点击前往GitHub概述上一篇文章主要介绍了登录与注册页面的设计。这一篇文章将会介绍相册的设计与实现。相册
2016-07-11 15:52:38 4222
原创 iOS开源加密相册Agony的实现(二)
简介虽然目前市面上有一些不错的加密相册App,但不是内置广告,就是对上传的张数有所限制。本文介绍了一个加密相册的制作过程,该加密相册将包括多密码(输入不同的密码即可访问不同的空间,可掩人耳目)、WiFi传图、照片文件加密等功能。目前项目和文章会同时前进,项目的源代码可以在github上下载。 点击前往GitHub概述上一篇文章主要介绍了账户存储类与工具类的设计,这一篇将通过工具类,实现登陆与注册的
2016-07-10 14:34:51 1990 2
原创 iOS开源加密相册Agony的实现(一)
简介虽然目前市面上有一些不错的加密相册App,但不是内置广告,就是对上传的张数有所限制。本文介绍了一个加密相册的制作过程,该加密相册将包括多密码(输入不同的密码即可访问不同的空间,可掩人耳目)、WiFi传图、照片文件加密等功能。目前项目和文章会同时前进,项目的源代码可以在github上下载。 点击前往GitHub概述本文主要介绍加密相册的登录验证与注册模块的实现。注册时只需要密码,每个密码对应一个
2016-07-09 23:54:59 3113
原创 基于Nginx服务器和iOS9的HTTPS安全通信
简介在网络通信中,使用抓包软件可以对网络请求进行分析,并进行重放攻击,重放攻击的解决方案一般是使用一个变化的参数,例如RSA加密的时间戳,但考虑到网络传输时延,时间戳需要有一定的误差容限,这样仍然不能从根本上防止重放攻击。想要较好的解决重放攻击问题,应考虑使用HTTPS通信,HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比HTTP协议安全。实现对于用浏览器访问的网站
2016-03-02 17:08:22 2679 2
原创 利用BBRSACryptor实现iOS端的RSA加解密
背景RSA这种非对称加密被广泛的运用于网络数据的传输,但其在iOS上很那直接实现,BBRSACryptor框架通过移植openssl实现了iOS端的RSA,本文将介绍如何使用BBRSACryptor生成证书,加载公钥,以及后端如何用php读取证书,加载私钥。iOS加密新建工程并集成BBRSACryptor这个框架自带的demo将工程文件与框架放在了同一目录,因此在配置Header Search Pa
2016-01-17 21:21:02 2102
原创 利用CocoaHTTPServer实现wifi局域网传输文件到iphone
背景近日在做一个代码阅读器,其中涉及到代码文件的上传,之前看到过许多app支持局域网传文件,因此就通过查询和研究实现了此功能,我是用的框架是CocoaHTTPServer。原理CocoaHTTPServer框架能够在iOS上建立起一个本地服务器,只要电脑和移动设备连入同一热点,即可使用电脑访问iOS服务器的页面,利用POST实现文件的上传。实现CocoaHTTPServer没有现成的向iOS设备传输
2015-12-20 19:10:34 6823 7
原创 在OC代码中创建Swift编写的视图控制器
背景近日在和一群朋友做项目,我和另一位同学负责iOS客户端,我是一直使用OC的,而他只会Swift,因此在我们分工协作之后,就需要把代码合在一起,这就牵扯到如何在TabbarController中添加一个Swift创建的子控制器的问题。解决首先在一个OC项目中新建一个Swift类,继承自UITableViewController,并且修改其view背景色,方便后续测试。import UIKitcl
2015-12-06 10:33:40 1955
原创 UIScrollView实现图片轮播器的无限滚动
简介在现在的一些App中常常见到图片轮播器,一般用于展示广告、新闻等数据,在iOS内并没有现成的控件直接实现这种功能,但是通过UIScrollView的允许分页设置,可以实现滚动轮播的功能。轮播原理UIScrollView对象有pagingEnable成员,如果设置为YES,那么每一个scrollView尺寸这么大的区域就会被当作一页,在滚动时会根据滚动的比例自动计算应该切换到哪一页。无限滚动原理要
2015-11-30 18:00:38 5809 1
原创 [LeetCode]Additive Number
题目链接:Additive Number题目内容:Additive number is a positive integer whose digits can form additive sequence.A valid additive sequence should contain at least three numbers. Except for the first two numbers,
2015-11-23 14:34:30 1982
原创 [LeetCode]Range Sum Query - Mutable
题目链接:Range Sum Query - Mutable题目内容:Given an integer array nums, find the sum of the elements between indices i and j (i ≤ j), inclusive.The update(i, val) function modifies nums by updating the element
2015-11-20 14:58:33 3812
原创 [LeetCode]Linked List Cycle II
题目链接:Linked List Cycle II题目内容:Given a linked list, return the node where the cycle begins. If there is no cycle, return null.Note: Do not modify the linked list.Follow up: Can you solve it without usi
2015-11-13 14:24:23 596
原创 [LeetCode]Perfect Squares
题目链接:Perfect Squares题目内容:Given a positive integer n, find the least number of perfect square numbers (for example, 1, 4, 9, 16, ...) which sum to n.For example, given n = 12, return 3 be
2015-11-11 15:41:01 723
原创 [LeetCode]Populating Next Right Pointers in Each Node
题目链接:Populating Next Right Pointers in Each Node题目内容:Given a binary tree struct TreeLinkNode { TreeLinkNode *left; TreeLinkNode *right; TreeLinkNode *next; }
2015-11-07 13:32:39 634
原创 [LeetCode]Serialize and Deserialize Binary Tree
题目链接:Serialize and Deserialize Binary Tree题目内容:Serialization is the process of converting a data structure or object into a sequence of bits so that it can be stored in a file or memory buffer
2015-11-06 14:36:51 744
原创 [LeetCode]Binary Tree Zigzag Level Order Traversal
题目链接:Binary Tree Zigzag Level Order Traversal题目内容:Given a binary tree, return the zigzag level order traversal of its nodes' values. (ie, from left to right, then right to left for the next le
2015-11-04 15:12:40 707
原创 [LeetCode]Longest Increasing Subsequence
这是一道典型的动态规划问题,通常有两种解法,一种自然的思想时间复杂度为O(n^2),而另一种巧妙地思路可以利用二分查找把时间复杂度降低到O(nlogn)。下面分别介绍这两种做法。
2015-11-03 17:22:37 1607
原创 [LeetCode]Bulls and Cows
题目描述题目要求对secret和guess进行比对,找出bull和cow,bull指的是位置相同且字符相同的情况,cow指的是guess中的数在secret中出现过,但是位置不同。需要特别注意的是多个重复字符的情况,在匹配出一个bull后,那个字符就不能再被cow匹配了,因此需要计数当前还剩下多少个secret字符未被bull匹配。并且bull匹配优先于cow匹配。
2015-11-02 14:47:39 842
原创 (一三〇)UITextField的光标操作扩展
简介在iOS开发中,有时候需要完全自主的定义键盘,用于完整的单词输入,例如计算机应用中,需要一次性的输入sin(,在移动光标时要完整的跳过sin(,在删除时也要完整的删除,这就需要对光标的位置进行精确控制,而iOS并没有相关的函数可以直接操作光标,只给出了选择某个区域的功能,本文将介绍基于区域选择设计的UITextField扩展,用于获取光标位置以及移动光标。实现原理光标位置的获取。
2015-10-03 20:18:27 5531
原创 (一二九)获取文件的MineType、利用SSZipArchive进行压缩解压
MineType简介文件在网络上以二进制流的方式传播,为了区分不同的文件类型,用MineType来标明。为什么要获取文件的拓展名较短,比较好记,但是MineType是很长的,比如docx拓展名的MineType是application/vnd.openxmlformats-officedocument.wordprocessingml.document,因此比较合适的方案是根据拓展名直接得到Mine
2015-09-25 16:54:46 2273
原创 (一二八)使用POST上传文件
简介上传文件到服务器是一个比较常用的操作,最基本的方式是通过POST上传,文件以二进制形式,作为一个参数传递,但是这个POST的结构相当复杂,且必须完全符合HTTP标准。文件上传的POST格式该POST主要由下面几个部分构成。请求头 1.Content-Length(请求体的二进制大小)注意这里的二进制大小应该根据请求体计算2.Content-Type multipart/form-data;
2015-09-16 22:53:28 1974
原创 (一二七)NSURLSession的基本用法 下载与数据获取
简介NSURLSession是苹果官方提供的一系列网络接口库,使用他们可以轻松实现下载和数据获取等任务。在上一篇文章中,我们介绍了使用NSURLConnection下载文件和断点续传的功能,实现起来比较麻烦,对于文件的操作也比较繁琐,如果使用NSURLSession,这一切都将变得极为容易。用法数据请求 1.获取URLSession单例对象,并利用该对象创建一个dataTask,使用结构体回调。
2015-09-15 22:23:11 2413 1
原创 1103. Integer Factorization (30)
本题考察了DFS的回溯剪枝。为了顺应题目找到最大系数和或者最大系数列,我们从小到大进行枚举,这样即使碰到了和相等的情况,由于是递增着枚举的,因此直接覆盖原来的系数列,得到的就是最终满足条件的系数列。我们利用DFS来从小到大的枚举,DFS函数的参数如下:dfs(long long N, int cur, vector<int>& factors);
2015-09-15 13:09:27 1911
原创 (一二六)单线程文件下载与断点续传
本文讨论单线程的文件下载和断点续传,通过从本地服务器下载一个较大的文件,实现显示进度、中途暂停与断点续传。下载过程大致如下:①通过NSURL创建指向特定下载地址的请求,本文中下载的文件位于网站根目录的lesson1下的nav.dmg,因此URL应为http://127.0.0.1/lesson1/nav.dmg。②通过NSURL创建URLRequest,为了能够更改HTTP请求头,实现
2015-09-14 22:36:05 1994
原创 1101. Quick Sort (25)
题目要求找出序列中的所有x,使得x满足≥前面所有的数,≤后面所有的数,这样的x称为快排中的主元。为了快速的判断,显然我们需要x左侧的最大值和右侧的最小值,而且他们一直在变动,一个思路是用两个vector或者数组记录每个位置之前最大值、之后最小值,称为maxBefore和minBehind,它们的实现逻辑如下:①第一个元素没有左侧元素,因此maxBefore[0]=-1作为初始化条件,这样就保证了必然满足。②最后一个元素没有右侧元素,因此minBehind[N-1]=INF(注意INF>10的9次方)。
2015-09-14 13:29:16 1081
原创 1100. Mars Numbers (20)
这道题来自2015年9月12号刚考完的PAT甲级考试第一题,本人表示被虐成狗T T,第一次考试就碰到这种坑题。好了不吐槽了,来说一下这道题的正确做法。首先最重要的是第一句,火星上的人以13进制计数,因此如果要将数字转化为火星进制,首先要进行除13取余法进制转换,例如样例中的29在13进制下为23,然后再拿高位和低位分别去查表。最容易犯的错误是13的整倍数输出问题,例如39,应该输出maa而不是maa tret。
2015-09-13 21:07:51 1526
原创 对LCS算法及其变种的初步研究
LCS的全称为Longest Common Subsequence,用于查找两个字符串中的最大公共子序列,这里需要注意区分子序列与子串,所谓子序列,指的是从前到后,可以跳跃元素筛选,而字串则必须连续筛选。例如AB##!C!@#E和AB123CC321E两个字符串,如果找最长公共字串,只能是AB;如果是找最长公共子列,则是ABCE。还有一种变种的LCS,允许元素重复,这样找到的子列将会是AB
2015-09-09 16:00:34 694
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人