Skip to content

CodeObfuscation

ShenYj edited this page Apr 18, 2022 · 1 revision

代码混淆

.

基本概念

加固

加固是为了增加应用的阿暖性,防止应用被破解、盗版、二次打包、注入、反编译等

常见的加固方式

  • 数据加密(字符串、网络数据、敏感数据等)
  • 应用加壳(二进制加密,如上架 App Store 的应用都有加壳)
  • 代码混淆(类名、方法名、代码逻辑等)
  • ...(不同平台的一些特殊处理)

iOS 代码混淆

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

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

  • iOS 的代码混淆方案
    • 源码的混淆
    • LLVM 中间代码 IR 的混淆 (容易产生 BUG)obfuscator

实现

  • 源码混淆

    • 宏定义,替换类名、协议名、方法名
    • 在源码中注入一些垃圾代码(可以对代码逻辑造成混淆)

    借助工具,批量处理

  • 字符串加密

    • 将字符串拆分成每个字符
    • 对每个字符与指定值进行异或操作
    • 遍历字符再次异或指定值恢复后重新拼接起来即可还原

注意点

  • 不能混淆系统方法
  • 不能混淆 init 开头的初始化方法,否则会报错
  • 混淆属性时需要额外注意 set 方法
  • 如果 xibstoryboard 中用到了混淆的内容,需要手动修正
  • 混淆过多可能会被 AppStore 拒绝上架,需要说明用途

建议

  • 给需要混淆的符号加上了一个特定的前缀,跟系统自带的符号进行区分
  • 核心的内容进行混淆,不要全部都混淆

Getting Started

Social

Clone this wiki locally