首页 14-代码混淆
文章
取消

14-代码混淆

基本概念

  • 什么是加固
    • 加固是为了增加应用的安全性,防止应用被破解、盗版、二次打包、注入、反编译等。
  • 常见的加固方式有
    • 数据加密(字符串、网络数据、敏感数据)。
    • 应用价格(二次加密)
    • 代码混淆(类名、方法名、代码逻辑)

代码混淆

  • iOS程序员可以通过class-dumpHopperIDA等获取类名、方法名、以及分析程序的执行逻辑

    • 如果进行代码混淆,可以加大别人的分析难度
  • iOS的代码混淆方案

    • 类名
    • 方法名
    • 协议名
  • LLVM中间代码IR的混淆(容易产生Bug)

  • 源码的混淆

    • 通过宏定义混淆方法名、类名

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      
      @interface JVPerson: NSObject
      - (void)run;
      - (void)setupName:(NSString *)name no:(int)no age:(int)age;
      @end
          
      @implementation JVPerson
      - (void)run {
        NSLog(@"%s", __func__);
      }
      - (void)setupName:(NSString *)name no:(int)no age:(int)age {
        NSLog(@"%s -- %@ %d %d", __func__, name, no, age);
      }
      @end
      
      1
      2
      3
      4
      5
      
      #define JVPerson rerere
      #define run xdsds
      #define setupName sgwefwef
      #define no gersdfw
      #define age stwe4r
      
    • 注意点:

      1. 不能混淆系统方法
      2. 不能混淆init开头的等初始化方法
      3. 混淆属性时需要额外注意set方法
      4. 如果xib、storyboard中用到了混淆的内容,需要手动修正
      5. 可以考虑把需要混淆的符号都加上前缀,跟系统自带的符号进行区分
      6. 混淆过多可能会被AppStore拒绝商家,需要说明用途
    • 建议

      • 给需要混淆的符号加上了一个特定的前缀
      • 小工具
  • ios-class-guard

    • 第三方工具

      • https://github.com/polidea/ios-class-guard

      • 它是基于class-dump的扩展

      • 用class-dump扫描出可执行文件中的类名、方法名、属性名等并做替换,会更新xib和storyboard的名字。

    • 用法

      • $ brew install ios-class-gaurd
      • $ ios-class-guard [options] <mach-o-file>
    • 常用参数

      • ios-class-guard --sdk-root <path>: 用于指定SDK路径,如果是模拟器SDK,一般路径就是/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator
      • --sdk--ios: 相当于指定SDK路径为真机设备SDK
      • -X <path>: 用于指定xib、storyboard所在目录,它会递归搜索
      • -O <path>: 生成的混淆头文件路径
      • -m <path>: 符号映射表(默认是symbols.json)
  • 字符串加密

    • 很多时候,可执行文件中的字符串信息,对于破解者来说,非常关键,是破解的捷径之一。为了加大破解、逆向难度,可以考虑对字符串进行加密。
    • 对每个字符串进行异或(^)处理。
本文由作者按照 CC BY 4.0 进行授权

13-LLVM

ptrace反调试