前语:
提到代码混杂,很多iOS开发的小伙伴想必都不会生疏。无论是为了APP的安全或许经受Apple review team
的百般糟蹋后,iOS代码混杂就变得尤为重要。
什么是代码混杂
以下是关于iOS代码混杂的简单解说:
iOS代码混杂是一种技能,用于添加使用程序的安全性,使其更难以逆向工程或破解。混杂会对代码进行变换,使其难以了解,但在运行时保持其功能不受影响。以下是一些常见的iOS代码混杂技能:
- 命名混杂:经过将变量、办法和类的称号更改为无关紧要的称号,来混杂代码。例如,将
loginButton
重命名为a1b2c3
,使代码更难以了解。- 操控流混杂:经过修改代码的操控流程,如刺进无用的条件分支、跳转和循环,来混杂代码逻辑。这样能够添加剖析的难度。
- 字符串加密:将使用程序中的字符串加密,只有在运行时才能解密。这能够保护灵敏信息,如API密钥和密码。
- 常量混杂:将常量值(如数字、枚举值)更改为不透明的表达式,使它们不再显着。
- 办法混杂:经过更改办法的称号和签名来混杂代码。这能够添加了解代码的难度。
- 反调试技能:在代码中嵌入检测和反制调试东西的逻辑,以避免歹意用户测验在使用程序中进行调试。
- 代码优化:对代码进行优化,以使其更加复杂,难以剖析,并且在运行时保持高性能。
- 虚拟化:将部分代码转换为虚拟机字节码,以添加剖析的难度。这通常用于对高度灵敏的代码部分进行保护。
- 资源混杂:混杂资源文件(如图片、音频文件),以使它们不容易被提取和重用。
- 运行时检测:在使用程序运行时检测反向工程测验,如检测
办法交流
、Hooking
和注入攻击
。
特别说明
本文首要讲述针对苹果审阅的混杂,假如想要了解使用加固的会在后续的文章中继续更新!
在iOS的混杂中,我们通常使用命名混杂、操控流混杂、字符串加密、常量混杂、办法混杂、资源混杂等6种办法。
具体操作
接下来我们将会以Objective-C简单解说一下以上6种办法的不同之处和具体操作。
- 命名混杂
#import "ViewController.h"
@interface ViewController ()
@property (nonatomic, copy) NSString *propertyA;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
}
/// 办法A
-(void)func_methodA {
NSString *string = @"A";
string = [string stringByAppendingPathComponent:@"B"];
NSLog(@"%@", string);
}
@end
在ViewController.m
中,存在一个属性:propertyA
,以及一个办法:func_methodA
,