iOS
文章平均质量分 87
hursing
我不会告诉你他是一只葵鼠哒 O(∩_∩)O
展开
-
Mac Safari VS Mobile Safari开启的宏
宏Mac OS X 10.7 Safari Mobile Safari iOS6.1模拟器版Mobile Safari开了Mac Safari没开的声明位置原创 2013-03-26 13:49:39 · 3031 阅读 · 0 评论 -
xcode反汇编调试iOS模拟器程序(六)函数出入口处的处理与局部变量
引用第二节的例子:函数的入口处,通常都是把esp的值传给ebp保存,然后下面的操作以ebp为基准做偏移量引用。因为esp作为栈指针,push和pop都会自动修改其值,所以用ebp可以不受影响。还有的常见情形是开头和结尾对应着subl $8, %espaddl $8, %esp这里体现着所谓的“局部变量在栈上分配”原则,说明本函数需要用8字节作为局部变量的保存空间。同时因为ebp已原创 2013-04-07 11:09:28 · 4688 阅读 · 0 评论 -
iOS伪亮度调节/控制
iOS 5.0之前的版本并没有开放控制系统亮度的接口,所以app能做到的只是比系统设置的亮度更暗,具体做法就是在整个app的keywindow之上再放一个window,设置黑色背景,通过控制alpha值来达到明暗变化。- (void)installBrightnessWindow{ m_brightnessWindow = [[UIWindow alloc] initWithFr原创 2013-03-26 14:33:09 · 4102 阅读 · 0 评论 -
UIWebView下各种手势识别器的协作处理方案
前置阅读:1. iOS私有API(二) UIGestureRecognizerDelegate的两个函数2. iOS私有API(三) UIWebView下的手势识别器gestureRecognizerUIWebView下有很多的手势,它是怎么管理的呢?主要是两种途径:自管理和委托,即1. 继承自UIGestureRecognizer或其子类,重载以下两个函数// same beha原创 2013-03-18 20:30:56 · 6806 阅读 · 1 评论 -
iOS私有API(三) UIWebView下的手势识别器gestureRecognizer
首先,UIWebView本身之上并没有手势识别器(gesture recognizer,下面简称手势),而是其子view有。通过gdb或lldb,我们很容易看到UIWebView的subviews层级关系,下面是使用一个UIWebView打开百度首页时的情况:(lldb) po [g_webView recursiveDescription] $0 = 0x0ab202e0 >原创 2013-03-18 20:30:54 · 13660 阅读 · 1 评论 -
iOS私有API(二) UIGestureRecognizerDelegate的两个函数
UIGestureRecognizerDelegate有两个没公开的函数,只要重载了就会被调用。即所有的UIGestureRecognizer子类.delegate = someInstance; 经过set以后,只要这个delegate实例里有这两个函数,就会被调用进入。经过验证,这两个api是可以通过apple审查上app store的。- (BOOL)gestureRecognize原创 2013-03-18 20:30:48 · 12997 阅读 · 0 评论 -
iOS私有API(一) -[UIApplication _cancelAllTouches]
这个api会令当前的所有手指操作失效,即令所有的UITouch变成cancelled状态,所有的UIView和UIGestureRecognizer都会触发touchesCancelled:withEvent:事件。使用场景:1. 模拟UIPopoverController时的行为,当popover弹出时,其他手势都应该被cancelled掉,从而保证popover弹出后继续移动手指不会再原创 2013-03-18 20:30:46 · 2623 阅读 · 0 评论 -
Mac上命令行获取iPhone/iPad的Identifier(UUID) 的方法
命令行(shell)获取 已通过USB连接到Mac Mini的iPhone/iPad的Identifier(UUID) 的方法:system_profiler SPUSBDataType | grep "Serial Number:.*" | sed s#".*Serial Number: "## 实用点:自动化测试的脚本不用每换一台机器就要修改待测试的iDevice的uuid了。 输原创 2013-03-18 20:30:52 · 9846 阅读 · 1 评论 -
gdb的info functions和lldb的image lookup的区别
两个命令都是搜索函数的。gdb的info functions是在内存中的symbol table查找,结果中的地址是内存里的地址,所以得到结果后,直接b(break,添加断点)这个地址,即可正确加断点。lldb的image lookup -s是在库文件中查找,结果中的地址是在library中的偏移地址,b这个地址是不能正确break的。正因为这个区别,gdb会比lldb更快得到结果。原创 2013-04-01 10:30:41 · 6116 阅读 · 0 评论 -
xcode反汇编调试iOS模拟器程序(五)调试objc_msgSend函数
反汇编调试objective-c,遇到最多的就是objc_msgSend这函数了,本节主要讲讲它的实现以及调试过程的一些技巧。以UIWebView为例子,看看它在loadRequest时做了什么。首先必须明白,原始代码中调用[uiWebViewInstance loadRequest:request]的实质是调用了objc_msgSend(uiWebViewInstance, "loa原创 2013-04-03 15:23:08 · 9860 阅读 · 4 评论 -
利用IDA和LLDB探索WebCore的C++类的继承关系
开刀的类名叫 PluginWidgetIOS,利用lldb可以得到:(lldb) image lookup -r -s PluginWidgetIOS7 symbols match the regular expression 'PluginWidgetIOS' in /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSim原创 2013-05-02 17:54:57 · 4590 阅读 · 0 评论 -
UIWebView体系结构(一)概貌
UIWebView属于UIKit,封装了WebKit.framework的WebView;WebView组合管理了WebCore.framework的Page,并提供了各种Clients;Page管理了Main Frame,Main Frame管理了sub Frame(FrameTree)。UIWebView层(点击图片查看全图):WebView层(点击图片查看全图原创 2013-04-08 12:49:27 · 9311 阅读 · 1 评论 -
UIWebView体系结构(七)WebView
在《iOS WebCore的wak目录》中证实了iOS的WebKit是想尽可能复用Mac上的代码,所以WebView在iOS和Mac上差不多。Mac WebView的参考文档:https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/WebKit/Classes/WebView_Class/Referenc原创 2013-06-06 12:21:59 · 7957 阅读 · 0 评论 -
IDA反汇编/反编译静态分析iOS模拟器程序(九)block
在第三节 函数表示与搜索函数 提到block函数和普通的OC函数不同。反汇编分析前需要理解block的实现原理,故推荐先看看这几篇文章及其所引用的参考资料:Block介绍(一)基础Block介绍(二)内存管理与其他特性block介绍(三)揭开神秘面纱(上)block介绍(四)揭开神秘面纱(下)block函数的命名与上文提到类似。函数内部定义的block会以sco原创 2013-06-04 17:18:00 · 8386 阅读 · 5 评论 -
IDA反汇编/反编译静态分析iOS模拟器程序(八)IDA for Mac
iOS多用OC(Objective-C)编程,Mac也类似,所以IDA for Mac对OC的支持似乎强些。Windows的IDA在反汇编某些SDK库文件时会识别不出OC的函数名,而且对OC运行时的结构体也没识别出来。当然,因为我用的是6.1版的windows IDA, Mac上用的是6.4版,不知道是不是windows IDA 6.1的bug了。总之在界面操作流程上,感觉Mac IDA是对O原创 2013-06-04 10:23:17 · 29860 阅读 · 10 评论 -
IDA反汇编/反编译静态分析iOS模拟器程序(七)识别类的信息
C++类的实质是个结构体。先举个例:class TestClass{ int m_val1; int m_val2;public: int getVal1(); int getVal2();};int TestClass::getVal1(){ return m_val1;}int TestClass::getVal2(){原创 2013-05-31 11:35:26 · 11793 阅读 · 0 评论 -
IDA反汇编/反编译静态分析iOS模拟器程序(六)交叉引用
交叉引用cross reference是指 这个地址的 数据或代码 引用了哪个地址 以及 被哪些地址的代码所引用。引用了哪个地址,在反汇编就能看出来,一行汇编代码自然只会引用一个地址。但被引用是一对多的关系,正如一个函数可以被很多函数在内部调用。查看“被引用”是静态分析中得到堆栈的方法,当然,因为一对多的关系,还需要猜。这主要是看分析的目的是什么,与运行时动态分析相比各有好处,静态分析能得到完整的原创 2013-05-30 14:43:10 · 20919 阅读 · 2 评论 -
IDA反汇编/反编译静态分析iOS模拟器程序(二)加载文件与保存数据库
启动windows版的IDA,在Quickstart界面点击New,弹出一个对话框选择文件。也可以按取消后再把文件拖进IDA。由于Mac版的IDA没注册,没有save功能,所以只好先把Mac上的东西拷贝到windows再打开了。能拖进IDA的文件可以是静态库、动态库、可执行程序等。对ios而言,可执行程序通常是build出来的.app包里的同名文件,当然,也可以是系统自带的程序。库文件主要是S原创 2013-05-14 09:56:39 · 14172 阅读 · 0 评论 -
IDA反汇编/反编译静态分析iOS模拟器程序(四)反汇编的符号信息与改名
首先看看windows IDA和xcode的反汇编有什么不同。因为不确定直接分析UIKit的代码会不会有法律问题,还是自己写个例子吧。分析UIKit的时候因为没有完整的debugging symbols,所以得到的反汇编信息会比自己写的代码较少。一个在命名空间ANameSpace的类DataInternal,一个DataModel的C++类,一个继承自UIButton的TestButton。演原创 2013-05-16 11:34:45 · 9687 阅读 · 2 评论 -
xcode反汇编调试iOS模拟器程序(八)反汇编自己的代码来掌握规则
掌握了基本技巧后,基本上已不难理解所有的反汇编结果。授之以鱼不如授之以渔:通过观察自己写的代码的反汇编来掌握各种代码的反汇编结果,从而逆向推测系统代码的源码。调试自己写的代码时,可以不断切换查看源码和反汇编来定位代码执行到何处这里分别用两个很简单的C++和Objective-C类来做示例:class TestC { int m_var; public:原创 2013-04-07 16:20:54 · 8859 阅读 · 0 评论 -
lldb的alias别名功能
之前老是得输入image lookup -r -s来搜索函数,好烦,认真看了下lldb Tutorial,学到不少方便的好东西,至少alias就满足我了。输入command alias il image lookup -r -s %1然后就可以这样il "UIWebView"来搜索UIWebView的函数了。不过用了别名后,必须得输入双引号,暂未发现怎么把这个也搞掉。已经少打好多字原创 2013-05-14 15:09:24 · 3421 阅读 · 1 评论 -
谈谈iOS的Safari和UIWebView
打开iOS4.3上的iPad Safari,再跟iOS6.1上的对比,也许你会觉得4.3没有标签栏,不够好用,但那个多窗口的设计却又非常酷。iPhone上的Safari 4.3也和iPad差不多。这个多窗口的设计,影响了那个年代的第三方浏览器,UC啊,QQ啊都这么学。可是后来呢,iPad上的诸多第三方浏览器都是有标签栏的,Safari估计是被骂多了,在iOS5开始也这么干。可是其实原创 2013-05-09 10:56:54 · 8436 阅读 · 0 评论 -
iOS的WebThread
当用到UIWebView、UITextField、UITextView等类时,就会看到WebThread线程:在lldb中搜索(lldb) image lookup -r -s [wW]ebThread会有超过一百个结果。对于普通开发者而言,WebThread最有意义的东西恐怕是UIWebView的私有API- (void)_setDrawInWebThread:(BO原创 2013-05-08 11:23:45 · 11943 阅读 · 2 评论 -
iOS的QuickTime Plugin
当UIWebView播放视频时,可以看到view hierarchy里有FigPluginView的身影。这个类来自于QuickTime Plugin,plugin的路径为:/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator6.1原创 2013-05-07 18:13:57 · 6435 阅读 · 9 评论 -
Xcode4.6创建和使用iOS的dylib动态库
此为xcode4的方法,xcode3的方法请查看 Xcode3创建和使用iOS的dylib动态库找到两个目录,最好用两个finder窗口分别打开:目录一:/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/Xcode/Specifications/原创 2013-05-20 19:51:47 · 22870 阅读 · 16 评论 -
Xcode3创建和使用iOS的dylib动态库
此文真正写于2011年4月,当时是xcode3.X版本。xcode4的路径会不同,方法请查看 Xcode4.6创建和使用iOS的dylib动态库。文中提到的压缩文件在此下载http://download.csdn.net/detail/hursing/51593521. 用Xcode同时打开两个文件“/Developer/Platforms/MacOSX.platform/De原创 2013-03-18 20:30:42 · 11117 阅读 · 6 评论 -
用xcode和excel整理类的成员函数和成员变量
这个是以前情况才实用:1. 没有debug symbol的类2. 类被很多宏隔开了,都说不清楚那些宏的启用的3. Category和Extension隔开了整理函数:1. 把程序运行起来,点击调试工具的暂停。 (或者调试中进断点break住)2. 使用gdb搜索。其中C++的类是info functions MyClass::Objective-C类是原创 2013-03-29 16:33:40 · 2274 阅读 · 0 评论