前语:

提到代码混杂,很多iOS开发的小伙伴想必都不会生疏。无论是为了APP的安全或许经受Apple review team的百般糟蹋后,iOS代码混杂就变得尤为重要。

什么是代码混杂

以下是关于iOS代码混杂的简单解说:

iOS代码混杂是一种技能,用于添加使用程序的安全性,使其更难以逆向工程或破解。混杂会对代码进行变换,使其难以了解,但在运行时保持其功能不受影响。以下是一些常见的iOS代码混杂技能:

  1. 命名混杂:经过将变量、办法和类的称号更改为无关紧要的称号,来混杂代码。例如,将loginButton重命名为a1b2c3,使代码更难以了解。
  2. 操控流混杂:经过修改代码的操控流程,如刺进无用的条件分支、跳转和循环,来混杂代码逻辑。这样能够添加剖析的难度。
  3. 字符串加密:将使用程序中的字符串加密,只有在运行时才能解密。这能够保护灵敏信息,如API密钥和密码。
  4. 常量混杂:将常量值(如数字、枚举值)更改为不透明的表达式,使它们不再显着。
  5. 办法混杂:经过更改办法的称号和签名来混杂代码。这能够添加了解代码的难度。
  6. 反调试技能:在代码中嵌入检测和反制调试东西的逻辑,以避免歹意用户测验在使用程序中进行调试。
  7. 代码优化:对代码进行优化,以使其更加复杂,难以剖析,并且在运行时保持高性能。
  8. 虚拟化:将部分代码转换为虚拟机字节码,以添加剖析的难度。这通常用于对高度灵敏的代码部分进行保护。
  9. 资源混杂:混杂资源文件(如图片、音频文件),以使它们不容易被提取和重用。
  10. 运行时检测:在使用程序运行时检测反向工程测验,如检测办法交流Hooking注入攻击

特别说明

本文首要讲述针对苹果审阅的混杂,假如想要了解使用加固的会在后续的文章中继续更新!

在iOS的混杂中,我们通常使用命名混杂操控流混杂字符串加密常量混杂办法混杂资源混杂等6种办法。

具体操作

接下来我们将会以Objective-C简单解说一下以上6种办法的不同之处和具体操作。

  1. 命名混杂
#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