iOS系统私有功能

开关系统当前VPN

设置app,从Reveal可以看到,VPN设置页面当前ViewController 是VPNController

VPNController 是属于 /System/Library/PreferenceBundles/VPNPreferences.bundle/VPNPreferences

可以看到此Bundle里的文件如下:

PSHeaderFooterView.h 
UIAlertViewDelegate.h
UIApplicationDelegate.h
VPNBundleController.h 
VPNCiscoImageHeader.h
VPNConnection.h 	
VPNConnectionStore.h
VPNController.h 	
VPNPreferences-Structs.h 	
VPNPreferences-Symbols.h 
VPNPreferences.h 	
VPNPrimaryTableCell.h 	
VPNSetupController.h 	
VPNSetupListController.h 	
VPNSetupTableCell.h 	
VPNTableCell.h 	
VPNToggleCell.h

初步推测

VPNConnection.h
VPNConnectionStore.h
VPNController.h
VPNBundleController.h 这几个文件是比较重要的。 

最终发现VPNConnectionStore里有我们想要的功能。 还有一个方便的sharedInstance单例,太明显了.

用cycript折腾了一小段时间之后终于锁定两组个我们需要的方法。

@interface VPNConnectionStore : NSObject 
+(id)sharedInstance;
-(VPNConnection *)currentConnectionWithGrade:(unsigned long long)arg1 ;//经实际测试,这个参数传0就可以了
@end


@interface VPNConnection : NSObject 
-(BOOL)connected;
-(BOOL)disconnected;
-(void)connect;
-(void)disconnect;
-(void)setEnabled:(BOOL)arg1 ;
-(BOOL)enabled;
@end

从SpringBoard里动态加载系统私有库

直接用dlopen就可以了

    dlopen("/System/Library/PreferenceBundles/VPNPreferences.bundle/VPNPreferences",RTLD_NOW);
    
   VPNConnectionStore* _vpnStore =  [NSClassFromString(@"VPNConnectionStore") sharedInstance];

这些私有库是放在dyld_shared_cache里的。

关于Dyld_shared_cache的两个链接 www.theiphonewiki.com iphonedevwiki.net

自动连接指定WiFi

    dlopen("/System/Library/PreferenceBundles/AirPortSettings.bundle/AirPortSettings",RTLD_NOW);
    
    WiFiManager