iOS-0基礎(chǔ)逆向簡(jiǎn)單玩一玩

本篇博客,主要是講述普通的開發(fā)人員如何在毫無(wú)逆向知識(shí)的前提下,利用插件進(jìn)行簡(jiǎn)單的方法攔截修改動(dòng)態(tài)調(diào)試,以達(dá)到自己想要的目的。
比如:
分析競(jìng)品App所使用的框架技術(shù)
攔截一些App的功能 達(dá)到去廣告或者去除紅點(diǎn)提示等等各種目的
了解攻擊手段,提升自己App的安全性

工具:一臺(tái)越獄的iPhone 不知道怎么越獄的點(diǎn)我
插件:Flex3
步驟:
-首先打開Cydia-編輯-添加-輸入源地址http://getdelta.co/-安裝成功后,如下圖

image.png


安裝成功后,打開Flex3 Beta點(diǎn)擊右上角+號(hào)就可以導(dǎo)入你想要的App,導(dǎo)入前需要先運(yùn)行該App,導(dǎo)入成功后如下圖


image.png

下面我們來(lái)看看抖音,簡(jiǎn)單的截了幾個(gè)圖

image.png

從上面圖我們可以獲得以下的信息:
-抖音的設(shè)計(jì)模式是MVVM+RAC
-抖音自己的類全部以AWE為前綴
-抖音也用了一些常用第三方,如YY
-抖音含直播,并且接入了聲網(wǎng)的SDK Agora的音視頻
等等,如果你愿意玩玩,還可以試著搜搜login,room,vip等等這類關(guān)鍵字,或許能發(fā)現(xiàn)些有意思的東西。

這個(gè)功能是非常有意思的,比如你老板讓你分析競(jìng)品用的什么技術(shù),什么框架,正常情況下如果你沒(méi)有逆向的知識(shí),你可能會(huì)一臉懵逼,不知道該怎么下手,但現(xiàn)在不一樣了,你也可以通過(guò)插件輕而易舉的來(lái)獲取到關(guān)鍵信息。再比如說(shuō)老板讓你選擇某家SDK,比如直播類SDK,即構(gòu)和聲網(wǎng),老板讓你調(diào)研到底這倆哪個(gè)好用呢?你當(dāng)然不能只聽(tīng)他們技術(shù)銷售的一面之詞,拿出插件,把市面上的App都裝一下,分析一波,你就知道到底哪個(gè)SDK是大家都在用的,哪個(gè)SDK是吹的。再比如說(shuō),你可能想了解一下大廠App究竟用了哪些技術(shù),以前你可能只能從網(wǎng)上的只言片語(yǔ)上了解,現(xiàn)在不一樣了,你可以用插件來(lái)搞明白,到底現(xiàn)在大廠多少App在用Swift 多少在用OC 多少在用OC+Swift混編 多少在用Weex RN Flutter等等。用事實(shí)說(shuō)話,而不是在用聽(tīng)別人吹的牛逼。

以上是Flex3的第一層大殺器。下面我們來(lái)看看它的第二層大殺器。動(dòng)態(tài)攔截修改參數(shù)方法,達(dá)到某些目的。下面我們來(lái)看一組最簡(jiǎn)單的代碼。

#import "ViewController.h"

@interface ViewController ()

@property (nonatomic, strong) UILabel *label1;
@property (nonatomic, strong) UILabel *label2;
@property (nonatomic, strong) UILabel *label3;
@property (nonatomic, strong) UILabel *label4;
@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    [self initUserInterface];
}

- (void)initUserInterface{
    [self.view addSubview:self.label1];
    [self.view addSubview:self.label2];
    [self.view addSubview:self.label3];
    [self.view addSubview:self.label4];
    [self changeLabel1ByDict:@{@"txt":@"我是正常的label1"}];
    [self changeLabel2ByBool:NO];
    [self changeLabel3ByString:@"我是正常的label3"];
    [self changeLabel4ByIndex:1];
}


- (void)changeLabel1ByDict:(NSDictionary *)dict{
    self.label1.text = dict[@"txt"];
}

- (void)changeLabel2ByBool:(BOOL)isVIP{
    if (!isVIP) {
        self.label2.text = @"我是正常參數(shù)為NO的Label2 不帶VIP";
    }else{
        self.label2.text = @"我是被篡改過(guò)參數(shù)為YES的Label2 帶VIP";
    }
}

- (void)changeLabel3ByString:(NSString *)text{
    self.label3.text = text;
}

- (void)changeLabel4ByIndex:(NSInteger)index{
    self.label4.text = [NSString stringWithFormat:@"我是label4————%ld",index];
}

- (UILabel *)label1{
    if (!_label1) {
        _label1 = [[UILabel alloc] initWithFrame:CGRectMake(0, 100, [UIScreen mainScreen].bounds.size.width, 20)];
        _label1.textColor = [UIColor redColor];
        _label1.font = [UIFont systemFontOfSize:14];
        _label1.textAlignment = NSTextAlignmentCenter;
    }
    return _label1;
}

- (UILabel *)label2{
    if (!_label2) {
        _label2 = [[UILabel alloc] initWithFrame:CGRectMake(0, 200, [UIScreen mainScreen].bounds.size.width, 20)];
        _label2.textColor = [UIColor greenColor];
        _label2.font = [UIFont systemFontOfSize:14];
        _label2.textAlignment = NSTextAlignmentCenter;
    }
    return _label2;
}

- (UILabel *)label3{
    if (!_label3) {
        _label3 = [[UILabel alloc] initWithFrame:CGRectMake(0, 300, [UIScreen mainScreen].bounds.size.width, 20)];
        _label3.textColor = [UIColor brownColor];
        _label3.font = [UIFont systemFontOfSize:14];
        _label3.textAlignment = NSTextAlignmentCenter;
    }
    return _label3;
}

- (UILabel *)label4{
    if (!_label4) {
        _label4 = [[UILabel alloc] initWithFrame:CGRectMake(0, 400, [UIScreen mainScreen].bounds.size.width, 20)];
        _label4.textColor = [UIColor blackColor];
        _label4.font = [UIFont systemFontOfSize:14];
        _label4.textAlignment = NSTextAlignmentCenter;
    }
    return _label4;
}
@end

上面代碼很簡(jiǎn)單,就是普通的4個(gè)Label,4種賦值方式而已。運(yùn)行后的效果如下圖:


正常運(yùn)行效果.png

下面我們來(lái)開始進(jìn)行攔截篡改??????
Flex3導(dǎo)入App成功后,如圖


Flex3導(dǎo)入App后.png

我們對(duì)changeLabel1ByDict,changeLabel2ByBool,changeLabel3ByString,changeLabel4ByIndex 這四個(gè)方法進(jìn)行篡改替換。

image.png

第一個(gè)方法changeLabel1ByDict 參數(shù)置空
第二個(gè)方法changeLabel2ByBool 將代碼賦值的NO改為TRUE
第三個(gè)方法changeLabel3ByString 將代碼賦值的String替換掉
第四個(gè)方法changeLabel4ByIndex 將代碼傳的Index=1 替換成100


image.png

最后勾選運(yùn)行插件,運(yùn)行結(jié)果如下圖:


image.png

以上展示了Flex3 兩個(gè)很強(qiáng)大的功能,聰明的你應(yīng)該能聯(lián)想到像之前網(wǎng)上傳的什么朋友圈步數(shù)999999了,無(wú)非就是找到對(duì)應(yīng)的方法,把參數(shù)替換成999999,還有一些說(shuō)去掉什么小紅點(diǎn)了,什么破解VIP功能的等等原理都類似。插件的強(qiáng)大之處當(dāng)然不止以上這些,后面還會(huì)再寫篇文章專門詳細(xì)介紹下,如何利用一些漏洞,并且更重要的是我們作為開發(fā)者如何防止這些插件,避免被黑客破解。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容