怎么获取iOS的私有API
Posted 鬼神杀破狼
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了怎么获取iOS的私有API相关的知识,希望对你有一定的参考价值。
前言
作为ios开发人员,相信大多数伙伴都对怎么获取iOS的私有API很有兴趣,最近通过查找资料,总结了以下三种方法,希望对你有用。
第一种(class-dump)
不得不说这是一个很棒的工具,安装和使用都很方便。
安装
去nygard/class-dump 下载工程,编译之后就会获得class-dump,把它放到
"/usr/bin"
文件夹里,注意,这个地址根据系统的不同有所差别,我的系统是
10.10.5
,低版本的系统有些是
"/usr/local/bin"
,这个根据根据自己的系统注意一下即可。
注意:在iOS9之前,即Xcode7之前,可以直接去Class-dump即可,但是iOS9之后用这个版本导出的话会报下错
Input file (/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator9.2.sdk/System/Library/PrivateFrameworks/ChatKit.framework) doesn‘t contain an executable.
这是因为iOS9增加了一个叫
"the __DATA_CONST segment"
的东东。
使用
首先修改class-dump的权限
$ chmod 777 class-dump
注意,这个步骤得在class-dump所在的文件夹的根目录下执行。
然后就可以使用了,具体如下:
class-dump -H /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator9.2.sdk/System/Library/PrivateFrameworks/ChatKit.framework -o <存储地址>
这样就会导出ChatKit.framework框架未公开的头文件到你存储的地方。
第二种(class-dump + DumpFramework.pl)
这个方法比第一种方法强大的地方就是可以通过一条命令把所有的私有API的头文件导出到一个叫
header
的文件夹里。
安装
class-dump的安装见第一种方法,DumpFramework.pl可以去shuhongwu/HackSpringDemo 下载,放在任意目录下都可。
配置
打开DumpFrameworks.pl文件,把下面的地址改成你自己的地址
dump_frameworks(‘/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator9.2.sdk/System/Library/Frameworks‘,
‘Frameworks‘);
dump_frameworks(‘/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator9.2.sdk/System/Library/PrivateFrameworks‘,
‘PrivateFramework‘);
注意:
‘Frameworks‘
一定要换行。还有这里导出的是模拟器的私有API,因为class-dump 作用的对象必须是未经过加密的可执行文件,而从 app store 下载的 app 都是经过签名加密的,所以两个iPhoneSimulator.platform地方不能换成iPhoneOS.platform.
使用
cd到DumpFrameworks.pl的路径,并执行
$ ./DumpFrameworks.pl
如没有问题的话,所有需要的头文件都已经导出到
~/user/header
文件夹里。
第三种方法(clone)
其实这是一种偷懒的办法,可以直接去
nst/iOS-Runtime-Headers
下载就可以了,这里会随时更新。
后话
利用私有API确实很酷,可以根据自己的需要和爱好做出好多很酷的效果,但是如果需要上传AppStore的话,建议不要使用,因为这是苹果官方严令禁止的。如果你觉得可以通过加密的方法躲过审查的话,你可以看看独家工程逆向。
以上是关于怎么获取iOS的私有API的主要内容,如果未能解决你的问题,请参考以下文章
C#-WebForm-★内置对象简介★Request-获取请求对象Response相应请求对象Session全局变量(私有)Cookie全局变量(私有)Application全局公共变量Vi(代码片段