企业微信 私有化版本是否使用了 Apple 的私有 API

主题 : 如何确定代码是否用了私有api?
级别: 骑士
UID: 157406
可可豆: 930 CB
威望: 733 点
在线时间: 819(时)
发自: Web Page
来源于&&分类
如何确定代码是否用了私有api?&&&
如题,各位同学,你们都是如何确定是否用到了私有api的是否是私有api这个问题一直让我很懵逼终于我以身试法,AppStore给了我当头一棒
[[NSUserDefaults standardUserDefaults] setInteger:2 forKey: @&WebKitCacheModelPreferenceKey&];
    [[NSUserDefaults standardUserDefaults] setInteger:1 forKey: @&WebKitMediaPlaybackAllowsInline&];
    id webView = [self.webView valueForKeyPath:@&_internal.browserView._webView&];
    id preferences = [webView valueForKey:@&preferences&];
    [preferences performSelector:@selector(_postCacheModelChangedNotification)];
曾经我看着这代码很像私有api,但是我查了些资料,没有明确的答复,我就存在了侥幸心理,然后就被教训了。。[ 此帖被txjust在 10:37重新编辑 ]
不积跬步,无以至千里
级别: 骑士
UID: 496710
可可豆: 866 CB
威望: 689 点
在线时间: 787(时)
发自: Web Page
iOS App Icon生成器:/Kito0615/AppIconAutoMaker
级别: 新手上路
UID: 516346
可可豆: 90 CB
威望: 71 点
在线时间: 269(时)
发自: Web Page
mark一下 新的项目准备上线但一直有这个困惑
级别: 版主
UID: 559669
可可豆: 1781 CB
威望: 1562 点
在线时间: 1012(时)
发自: Web Page
没有什么事情是一台GUNDAM解决不了的,如果有,那就两台.
级别: 侠客
UID: 518987
可可豆: 113 CB
威望: 124 点
在线时间: 897(时)
发自: Web Page
回 楼主(txjust) 的帖子
这个代码是用来webview后退时不刷新的吧,你可以用wkwebview就好了,
我是一个经不起嘲讽的人,如果你嘲讽我,我就骂你
级别: 侠客
UID: 501328
可可豆: 389 CB
威望: 325 点
在线时间: 481(时)
发自: Web Page
以身试法,精神可嘉.CocoaChina 有你更精才
编程时要保持这种心态:就好象将来要维护你这些代码的人是一位残暴的精神病患者,而且他知道你住在哪。---Martin Golding
关注本帖(如果有新回复会站内信通知您)
发帖、回帖都会得到可观的积分奖励。
按"Ctrl+Enter"直接提交
关注CocoaChina
关注微信 每日推荐
扫一扫 关注CVP公众号
扫一扫 浏览移动版Apple如何知道你用私有API?
发表于 15:21|
来源CSDN整理|
作者徐玲玲
摘要:导读:我只提交给Apple二进制文件。我没有提交给苹果公司任何的源代码,除了被使用过的手动检查。但是Apple是如何知道你正在使用私有API?苹果是怎么知道的呢?这是一位名叫Anurag协作编辑在stackoverflow网站上提出的问题,以下是一些专业人士和程序员爱好者就以上问题的回答。 1. KennyTM 因为我没有在苹...
导读:&我只是提交给了Apple二进制文件,我没有提交给Apple任何的源代码,且不说被&您&使用人工审查。Apple是如何知道&您&正在使用私有API?Apple是如何知道的呢?&这是一位名叫Anurag协作编辑在stackoverflow网站上提出的问题,以下是一些专业人士和程序员爱好者就以上问题的回答。
因为我没有在苹果审查小组工作过,以下只是我猜测的三种方式:
1)otool -L
将应用程序的名单链接到所有的库中,清楚您不应该使用的,像IOKit和WebKit就可以通过这个库可以检测出来。
列出所有的应用程序链接符号。你可以检测到:
无证C函数,如:UIImageWithName;
Objective-C类,如:UIProgressHUD;
Ivars类,如:UITouch._phase(这可能就是前几个月拒绝其基于Three20应用程序的原因。)
3)Objective-C选择器位置,或者串
Objective-C选择器是存储二进制的一个特殊区域。所以,Apple可以从那里提取内容,并且进行检测你是否使用了一些无证的Objective-C的方法,如-[UIDevice setOrientation:]。
由于选择器是你的信息的单独类,所以即使您的自定义类的定义setOrientation:UIDevice无关,这将会是被拒绝的可能性。
你还可以使用去检测是否由于(误报)潜在拒绝私有API。
(如果你是真的想要这些检查的解决办法,你可以使用运行库等功能:
dlopen, dlsym
objc_getClass, sel_registerName, objc_msgSend
-valueForKey:; object_getInstanceVariable, object_getIvar, etc.
去得到私有库、类、方法和ivars。)
我猜想他们正在试图导入所有二进制符号(毫无疑问,他们会很容易获得符号表中的信息),并且将这些符号建立在自己的&私有API列表&中。所以事实上,实现自动化,其实很简单。
一个可执行文件不完全是一个黑盒子。如果你调用了一个库,它会很容易的发现。这就是我为什么感叹现代CS教育的汇编语言的损失。
比方说你想要使用一些私有API;objective C允许你从一个字符串构造任何的SEL:
SEL my_sel = NSSelectorFromString([NSString stringWithFormat:\ @&%@%@%@&, &se&,&tOr&,&ientation:&]);
[UIDevice performSelector:my_sel ...];
如何能让机器人或者库赶上扫描?他们将不得不使用一些私人访问时运行监视的工具。即使他们构造这样一个运行工具,但是它还是很难赶上,因为这个调用可能隐藏在一些很少行驶的路径中。
即使你是静态链接,最坏也就是,他们从他们的私有API名单中抽取样本代码,对他们的二进制进行搜索(相对来说容易实现自动化)。
对于Apple的了解,我敢打赌,他们有一个全面的、自动化系统,任何不确定性的可能都会被拒绝或者被人工审查。
他们的桌面应用程序,可以通过拉开Mach-O二进制文件扫描为私有API使用的.app文件。更何况,如果你可以做到的话,那么Apple当然也可以做到!
推荐阅读相关主题:
网友评论有(0)
CSDN官方微信
扫描二维码,向CSDN吐槽
微信号:CSDNnews
相关热门文章主题信息(必填)
主题描述(最多限制在50个字符)
申请人信息(必填)
申请信息已提交审核,请注意查收邮件,我们会尽快给您反馈。
如有疑问,请联系
CSDN &《程序员》研发主编,投稿&纠错等事宜请致邮
你只管努力,剩下的交给时光!
如今的编程是一场程序员和上帝的竞赛,程序员要开发出更大更好、傻瓜都会用到软件。而上帝在努力创造出更大更傻的傻瓜。目前为止,上帝是赢的。个人网站:。个人QQ群:、
个人大数据技术博客:IOS开发之苹果私有API的使用
查看苹果所有的API
首先要导入 import
NSString *className = NSStringFromClass([UIView class]);
这里是uiview,可以改成自己想要的
const char *cCl
//查看苹果所有的API
//首先要导入#import
NSString *className = NSStringFromClass([UIView class]);
//这里是uiview,可以改成自己想要的
const char *cClassName = [className UTF8String];
id theClass = objc_getClass(cClassName);
unsigned int outC
Method *m =
class_copyMethodList(theClass,&outCount);
NSLog(@"%d",outCount);
for (int i = 0; i<outC i++) {
SEL a = method_getName(*(m+i));
NSString *sn = NSStringFromSelector(a);
NSLog(@"%@",sn);天下风云出我辈, 一入江湖岁月催. 皇图霸业笑谈中, 不胜人生一场醉.
最近在做企业级程序,需要搞设备的udid等信息,但是ios7把udid私有化了,不公开使用。所以研究了一下ios的私有api。
调查了一下文章,发现这方面的文章不多,国内更是不全,高手们都懒得写基础教程哈,我就在此说一下如何调用ios的私有api吧。
首先要使用class-dump 和dumpFrameworks.pl 工具 将ios的framework导出来。
以下是工具的下载地址:
class-dump下载地址
DumpFrameworks.pl原来的下载地址不能用了,我在github上的别人的越狱程序里面找到的。
下载地址:/shuhongwu/HackSpringDemo/blob/master/DumpFrameworks.pl
将下载好的 class-dump 放入usr/local/bin 下.&
&&&如果 &/usr/local/bin& 不知道在哪里,可以在terminal 下输入 &open -a Finder /usr/local/bin& 以便打开目录.
这个bin文件夹 &就是所有命令行的可执行文件所在地,并不一定是这个目录,要看各自的系统。&
因为dumpFrameworks.pl中对ios库的版本路径可能不一定正确了,所以要自己手动改正。
用terminal直接执行dumpFrameworks.pl就可以了。
会将所有到处的头文件,放到user/Headers文件夹下。
将想用的头文件,组成xxx.framework/Headers的样式。导入工程。
但是bulidsetting 设置framework的search path 时要设置真实的私有库路径,因为我们要用它的可执行文件,只有头文件是不行的。
例如:/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.0.sdk/System/Library/PrivateFrameworks
这样就可以调用ios的私有库了
成功用他的私有库 &调取了 机器的udid。
---------------------------------更新
网友对我提问,我就又写了一个demo,结果udid &读出来是null。最后在stackoverflow上查到是苹果做过处理了,据说是验证机制,系统和越狱用户可以实现这个方法,其他得不到结果,目前还不知道通过其他方式获取。如果有知道的看到了能回复一下,万分感谢。
---------------demo------------------------------
/hikoming/TestPrivate
阅读(...) 评论()
为窥探到宇宙的神秘而窃喜

我要回帖

更多关于 企业微信 私有化版本 的文章

 

随机推荐