-
上一篇文章地址: iOS逆向之FRAMEWORK/DYLIB调试
-
如果瘦身是一种美,我们可以吃到美味的水果;如果瘦身是一种水,我们可以喝到甘甜的清水.
-
我们本篇文章介绍iOS逆向应用瘦身.
-
我们如何把一个胖应用进行瘦身,通过本篇文章进行详细介绍.
-
应用瘦身是针对iOS逆向的应用进行瘦身,这里与正向开发进行瘦身还存在区别.
-
请持续关注iOS逆向文章.

1.应用瘦身
1.
大多数情况下,如果你的应用中引用了很多的库,资源文件,也有可能无用的代码,开发的应用就会变成胖应用.
2.
我们应该对应用包进行优化了.优化的目的是 节省用户流量,提高用户下载速度.
注意
苹果规定如果应用包大小超过150MB必须使用WiFi环境下载,手机流量则不能再下载应用.
3.
千万级别的应用,一般吧应用包大小优化到最低限制.项目中业务层次比较多,应用包含有的内容就会比较多,比普通应用优化更困难.
4.
如果应用包过大,用户体验不会太好,由于下载慢,也影响升级效率.如果我们不进行优化,用户可能错过你开发的应用.
这里,只是引了一个应用瘦身的话题,正向开发的你,可是要考虑一下开发应用瘦身优化问题.
本篇文章不过多介绍瘦身优化,我会重新开一片专栏进行介绍iOS优化系列的文章.
本篇文章主要介绍iOS逆向应用如何瘦身调试,加快逆向开发调试效率.
2.瘦身小故事
我曾经开发过一款 广告拦截
项目.如果你还没有接触过,我就在这里介绍一下.
我们正向开发应用,从应用开发到上线流程,想必你应该是知道的.
笔者进行应用打包的时候,发现这个架构只支持RM64,也就是只支持iPhone5s以上设备,也就是广告拦截的框架不再支持iPhone5s以下设备.
这样架构减少了,你的应用包大小也会减少一半.
苹果把你的应用包上传应用再次压缩,就是上传到AppStore下载的应用.
3.如何瘦身调试
我们还用以前的代码demo TEST项目
1.
我把源码贴在这里
viewController.m
#import "ViewController.h"
@interface ViewController ()
@property (nonatomic,strong)UIButton *revealBtn;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
[self.view addSubview:self.revealBtn];
}
-(UIButton*)revealBtn{
if (!_revealBtn) {
_revealBtn = [UIButton buttonWithType:UIButtonTypeCustom];
_revealBtn.frame = CGRectMake(100,100, 100,40);
_revealBtn.backgroundColor = [UIColor redColor];
[_revealBtn setTitle:@"测试" forState:UIControlStateNormal];
[_revealBtn setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
[_revealBtn addTarget:self action:@selector(revealClick) forControlEvents:UIControlEventTouchUpInside];
}
return _revealBtn;
}
-(void)revealClick{
NSLog(@"hello");
}
@end
2.
我们进行打包生成ipa包,大家应该知道如何打包,这里不过多的描述.
3.
找到TEST.ipa包

4.
解压ipa包,找到TEST可执行文件

5.
我们通过查看TEST的架构

我们可以看到TEST架构有armv7 和 arm64两种架构模式.
6.
我们通过Hopper查看一下TEST可执行文件描述

我们可以看到两种模式,一种
ARM v7
,一种AArch64
.
7.
TEST可执行文件的大小为169KB

我们通过架构瘦身,看一下TEST文件大小会不会减少.
8.
我们对TEST进行瘦身

9.
瘦身后的TEST架构文件大小

10.
如果你是大项目的可执行文件调试,加载的内容比较多,所以需要你把文件进行瘦身后加载,会加快文件的读取速度.
注意
其实这是应用到了lipo 命令,如果大家有时间可以了解一下lipo的具体使用方式.
4.总结
1.
本篇文章主要介绍的是:我们平常开发中要进行应用瘦身,通过应用瘦身会提高用户的体验.
2.
文章没有过多的篇幅介绍如何正向开发瘦身优化,主要介绍逆向应用瘦身调试.
3.
lipo命令的使用,通过lipo命令我们可以实现其他更有用的功能.
4.
如果大家喜欢文章,欢迎持续关注 ~_~
网友评论