IOS8.12 arm64 电话函数找寻问题~

分析 IDA
1)
TelephonyUtilities
NSURL-Telephony.h
var url = [NSURL telephonyURLWithDestinationID:@“10010”,-1,0,1,0] URLBySettingQueryParameterValue:@“dialer” forKey:@“TelURLOriginatingUIKey”];
#“tel:10010?TelURLOriginatingUIKey=dialer”

UIKit 模块
/System/Library/Frameworks/UIKit.framework/UIKit
cache 中 直接拖入 cache
[UIApplication sharedApplication] openURL:url]
找到
UIApplication openURL:url


找到关键函数
LSApplicationWorkspace openURL:

/System/Library/Frameworks/MobileCoreServices.framework/MobileCoreServices 这个模块上
但是 这个arm64 二进制文件 拖入IDA 后 没有多少符号了? 这个已经是 cache 直接拖入IDA 后的解析了 不能再精确了?
用LLDB 慢慢找 因为有些函数存在 那么

  • (id)operationToOpenResource:(id)arg1 usingApplication:(id)arg2 userInfo:(id)arg3;
  • (id)operationToOpenResource:(id)arg1 usingApplication:(id)arg2 uniqueDocumentIdentifier:(id)arg3 userInfo:(id)arg4;
  • (id)operationToOpenResource:(id)arg1 usingApplication:(id)arg2 uniqueDocumentIdentifier:(id)arg3 userInfo:(id)arg4 delegate:(id)arg5; 这个是1)
  • (id)operationToOpenResource:(id)arg1 usingApplication:(id)arg2 uniqueDocumentIdentifier:(id)arg3 sourceIsManaged:(BOOL)arg4 userInfo:(id)arg5 delegate:(id)arg6;
  • (BOOL)openSensitiveURL:(id)arg1 withOptions:(id)arg2;
  • (BOOL)openURL:(id)arg1;
  • (BOOL)openURL:(id)arg1 withOptions:(id)arg2;
  • (BOOL)openApplicationWithBundleID:(id)arg1; 这个是2)

这个之间的函数都试试
找到了函数

这个函数退出后 5s 手机就进入打电话状态了 但是这里的函数全是 无符号型的
然后又层层深入
最后深入到了 libsystem_kernel.dylib`mach_msg
这个明显是消息机制的应用了 就更不能深入了
虽然 我已经知道了 怎么调用打电话,但是完全看不到哪里调用的 电话窗口显示等等
而且分析的结果都不一样了
问题
1)我测试 CTCallDialWithID(@“10010”,-1) 也能成功打电话 就是不知道怎么探测到这个函数的~~~而且连分析结果都不一样
我的结果是
var url = [NSURL telephonyURLWithDestinationID:@“10010”,-1,0,1,0] URLBySettingQueryParameterValue:@“dialer” forKey:@“TelURLOriginatingUIKey”];
[UIApplication sharedApplication] openURL:url]
CTCallDialWithID(@“10010”,-1) 这个是书上分析出来的
层层分析都没有得到 CTCallDialWithID
2)我得arm64 没有直接的函数调用 而是转而发送消息机制调用函数
这类型的 分析怎么进行?
3) 是不是可以直接分析 armv7 然后里面的函数在 arm64 里都有,只是arm64 不一样的调用方法

1 个赞
  1. 书上的例子是iOS 6,跟iOS 8已经不一样了;iOS 8上的逆向结果就是你得出的结果,没问题;
  2. 动态跟一下,看看LSApplicationWorkspace openURL:的底层调用了什么;或者在CTCallDialWithID上下个断点,看看它的调用者是谁,倒推出整个调用链条;
  3. 是的。
  1. CTCallDialWithID 这个是事先知道的,有没有方法 推出来呢? 搞windows 以前都有消息机制 是能推导出来的,就不知道 iOS 有没有方法?
    2) 可惜只有 arm64的设备 只能先搞搞arm64的了~~555

你不是已经从UIKit跟到MobileCoreServices了吗,继续跟下去,应该就可以找到CTCallDialWithID了。至于为什么在iOS 6里CTCallDialWithID很明显,而iOS 8里藏得这么深,这一系列微博应该可以解释

iOS 8里的电话功能比较复杂,分层较多,不再适合初学者作为练习,因此第二版没有再采用电话作为实战例子

有谁弄出来了吗?或者有相关的资料可以介绍下不,现在在弄这个。希望能找到组织一起交流学习

如果有问题的话可以直接在General Discussion版块发帖问