本篇博客,主要是講述普通的開發(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/-安裝成功后,如下圖

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

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

從上面圖我們可以獲得以下的信息:
-抖音的設(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)行后的效果如下圖:

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

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

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

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

以上展示了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ā)者如何防止這些插件,避免被黑客破解。