iOS安全使用私有framework

获取私有framework中某subview对象

博客:using private iOS APIs safely
深度递归查找子view,修改其属性:
You are not prevented from modifying a view that is part of a UIKit object, you just need to do it publicly. The [UIView subviews]method is public, and you can use this to dig through the view hierarchy looking for a private view to change, no private method calls required

1. [UIView subviews]
NS_INLINE UIView *UIFindSubview(UIView *view, Class viewClass)
{
    for (UIView *subview in view.subviews)
    {
        if ([subview isKindOfClass:viewClass])
        {
            return subview;
        }
        else
        {
            UIView *rect = UIFindSubview(subview, viewClass);
            if (rect) {
                return rect;
            }
        }
    }
    return nil;
}

调用此方法获取一个subView

UIView *view = findSubview(picker.view, [NSClassFromString(@"CMKVideoPreviewView") class]);
2.[[subview class] description]

博客:Removing reorder cell shadows from a UITableView

我们无法直接使用私有类的声明,但是我们可以用[[subview class] description]来获取class的信息。
[[[subview class] description] isEqualToString:@”UIShadowView”]
You don’t have a class declaration for the private classes, but that’s fine, instead you can evaluate that it is correct based on class string description, [[[subview class] description] isEqualToString:@”UIShadowView”]

//    iOS7
    for(UIView* subview in wrapperView.subviews)
    {
        if([[[subview class] description] isEqualToString:@"UIShadowView"])
            [subview setHidden:YES];
    }
私有头文件

You can use a tool like class-dump or a private class reference to see every Objective-C method each class in iOS has – the truth is nothing in Objective-C is truly ‘private’, you can see any method compiled into the binary.

我们可以用class-dump o 或者 private class reference这些工具看到iOS中所有class的方法.但是私有头API会随时下掉,所以建议用
respondsToSelector:performSelector:来检查一下该方法是否可以用

访问实例变量

如何访问类中私有变量?
比如下面,[xxxx valueForKey:@”_internal”] 可以返回 private变量 _internal 。

NS_CLASS_AVAILABLE_IOS(2_0) @interface UIWebView : UIView  {
 @private
    UIWebViewInternal *_internal;
}

但是如果,我们 请求的变量不存在(根据我们输入的key值没有找到相应的value),程序会 crash。为了防止这种情况,我们可以在 NSObject的categorise中或者 写一个子类继承该类,并重写valueForUndefinedKey方法。

- (id) valueForUndefinedKey:(NSString *)key
{
    //    No crashes please...
    return nil;
}

我们有时候改变只读属性的实例变量的值,就可以这样用。我之前试过
强制设置orientation属性值。

Method Swizzling

Method Swizzling
Method Swizzling
Method Swizzling lets you inject code in the middle of two existing classes, which can be a lot more beneficial compared to a subclass that will only add your code on top of one class that must be subclassed.
example

访问私有枚举变量

私有枚举变量,本质上就是一些数字。比如下面的例子,返回的按钮UIButtonType的值是101, 私有不公开。我们可以直接设置:

UIButton* back = [UIButton buttonWithType:101];
[back sizeToFit];
[back setTitle:@"Back" forState:UIControlStateNormal];

image

C方法

One half of Objective-C is pure C, and with that all the tricks to incorporate private C APIs into your app, such as defining external functions。
例子:截屏并保存图片

CGImageRef screenshot = UIGetScreenImage();
UIImage* image = [UIImage imageWithCGImage:screenshot];

[UIImagePNGRepresentation(image) writeToFile:@"/maybe-change-this.png" atomically:NO];
重写私有方法和类

重写私有方法和类,并不会让app被App store拒绝,但是你的app会变的不稳定。每次版本更新,都需要去检查,你的方法或者类是否正常工作。我们可以重写public或者private 类的私有方法。如果是私有类,直接重写会导致编译错误,但是你可以为它添加一个fake interface,categorise.

例子:重写UIStatusBar类

@interface UIStatusBar : UIView
@end

@interface UIStatusBar (Override)
@end

@implementation UIStatusBar (Override)

- (void) drawRect:(CGRect)rect
{
    NSArray* subviews = self.subviews;

    if(subviews.count < 2)
        return;

    UIView* background = [subviews objectAtIndex:0];
    UIView* foreground = [subviews objectAtIndex:1];

    [UIView animateWithDuration:2 animations:^{

        [self setTransform:CGAffineTransformMakeTranslation(0, 100)];

        [background setTransform:CGAffineTransformMakeTranslation(-160, 0)];
        [foreground setTransform:CGAffineTransformMakeTranslation(160, 0)];
    }];
}

@end


private framework使用
dylib注射
获取私有api
ios逆向工程

时间: 2024-12-06 02:20:14

iOS安全使用私有framework的相关文章

iOS开发之私有API No.1 私有API的查找和生成

最近研究一个应用,可以在un-jailbreak的情况下打开4G功能,是的,就是很火的"移动流量仪",想要知道他是如何做到的,正好我的手机已经jailbreak了,打开SSH通道,然后用find -mmin 1 命令来查看1分钟内改动后的文件,发现是修改了系统的一个配置文件.于是就猜测应该是调用了私有的API.就顺着查下去,先从私有API说起吧: 一.关于苹果API: 1.Published API(公开的API):又称 Documented API(文档中记录的API).是苹果通过

iOS调用WebView私有API的方法

  - (void)modifyUA { id webView = [uiWebViewInstance valueForKeyPath:@"_internal.browserView._webView"]; [webView performSelector:@selector(setCustomUserAgent:) withObject:@"Mozilla/5.0 (Windows; U; Windows NT 5.2) AppleWebKit/525.13 (KHTML

史上最全的iOS开源项目分类汇总

楼主转载的,并未亲自测试 Category/Util  sstoolkit 一套Category类型的库,附带很多自定义控件 功能不错-        BFKit 又一套Category类型的 Kit,还有几个工具类        APUtils 又一套Category类型的 Kit        QSKit 又一套Category类型的 Kit        iOS-Categories 又一套Category类型的 Kit        BlocksKit 将Block风格带入UIKit和F

iOS开发-常用第三方开源框架介绍(你了解的ios只是冰山一角)

图像: 1.图片浏览控件MWPhotoBrowser        实现了一个照片浏览器类似 iOS 自带的相册应用,可显示来自手机的图片或者是网络图片,可自动从网络下载图片并进行缓存.可对图片进行缩放等操作.       下载:https://github.com/mwaterfall/MWPhotoBrowser   目前比较活跃的社区仍旧是Github,除此以外也有一些不错的库散落在Google Code.SourceForge等地方.由于Github社区太过主流,这里主要介绍一下Gith

常用iOS的第三方框架

图像:1.图片浏览控件MWPhotoBrowser       实现了一个照片浏览器类似 iOS 自带的相册应用,可显示来自手机的图片或者是网络图片,可自动从网络下载图片并进行缓存.可对图片进行缩放等操作.      下载:https://github.com/mwaterfall/MWPhotoBrowser 目前比较活跃的社区仍旧是Github,除此以外也有一些不错的库散落在Google Code.SourceForge等地方.由于Github社区太过主流,这里主要介绍一下Github里面流

开源 iOS 项目分类索引大全

mattt大神的发布程序:https://github.com/nomad/shenzhen ----------------Mac完整项目----------电台:https://github.com/myoula/sostart ----------------iOS完整项目----------------1,豆瓣相册 https://github.com/TonnyTao/DoubanAlbum2,voa在线英语 https://github.com/cubewang/NewsReader

微信双开是定时炸弹?关于非越狱iOS上微信分身高危插件ImgNaix的分析

微信双开是定时炸弹? 关于非越狱iOS上微信分身高危插件ImgNaix的分析 作者:蒸米@阿里聚安全 序言 微信作为手机上的第一大应用,有着上亿的用户.并且很多人都不只拥有一个微信帐号,有的微信账号是用于商业的,有的是用于私人的.可惜的是官方版的微信并不支持多开的功能,并且频繁更换微信账号也是一件非常麻烦的事,于是大家纷纷在寻找能够在手机上登陆多个微信账号的方法,相对于iOS,Android上早就有了很成熟的产品,比如360 OS的微信双开和LBE的双开大师就可以满足很多用户多开的需求. 但是在

Xcode6制作动态及静态Framework[repost]

有没有写SDK或者要将一些常用的工具类做成Framework的经历? 你或许自己写脚本完成了这项工作,相信也有很多的人使用 iOS-Universal-Framework ,随着xCode6的发布,相信小伙伴们已经都知道了,xCode6支持做Framework了. 同时iOS-Universal-Framework开发者也宣布不在继续维持此项目的开发,建议开发者使用xCode6制作,目前网上也有很多制作iOS Framework的资料,但大多都不够详细,接下来本文会详情介绍一下在xcode6下制

iOS 各版本中的新特性(What&amp;#39;s New in iOS)- 目录翻译完成

iOS 各版本中的新特性(What's New in iOS) 太阳火神的美丽人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致"创作公用协议 转载请保留此句:太阳火神的美丽人生 -  本博客专注于 敏捷开发及移动和物联设备研究:iOS.Android.Html5.Arduino.pcDuino,否则,出自本博客的文章拒绝转载或再转载,谢谢合作. 介绍 Introduction文档组织结构 Organization of Thi