iOS-代码混淆

基本概念

什么是加固

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

常见的加固方式有
  • 数据加密(字符串、网络数据、敏感数据等)
  • 应用加壳(二进制加密)
  • 代码混淆(类名、方法名、代码逻辑等)
  • ......(不同平台还有不同的做法)

代码混淆

iOS程序可以通过class-dump、Hopper、IDA等获取类名、方法名、以及分析程序的执行逻辑,如果进行代码混淆,可以加大别人的分析难度。

iOS的代码混淆方案
源码的混淆 - 通过宏定义混淆方法名、类名



注意点

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

建议

  • 给需要混淆的符号加上了一个特定的前缀

小工具参考
https://github.com/CoderMJLee/MJCodeObfuscation

ios-class-guard

第三方工具

用法

  • brew install ios-class-guard
  • ios-class-guard [options] <mach-o-file>

常用参数

  • --sdk-root <path>:用于指定SDK路径,如果是模拟器SDK,一般路径就是
  • /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk
  • --sdk-ios:相当于指定SDK路径为真机设备SDK
  • -X <path>:用于指定xib、storyboard所在目录,它会递归搜索
  • -O <path>:生成的混淆头文件路径
  • -m <path>:符号映射表(默认是symbols.json)
字符串加密
  • 很多时候,可执行文件中的字符串信息,对破解者来说,非常关键,是破解的捷径之一
  • 为了加大破解、逆向难度,可以考虑对字符串进行加密
  • 字符串的加密技术有很多种,可以根据自己的需要自行制定算法
  • 这里举一个简单的例子
  • 对每个字符进行异或(^)处理
  • 需要使用字符串时,对异或(^)过的字符再进行一次异或(^),就可以获得原字符
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 讲代码混淆我们先来理解加固: 加固 什么是加固 加固是为了增加应用的安全性,防止应用被破解、盗版、二次打包、注入、...
    程序员学哥阅读 1,701评论 0 3
  • app风靡的时代,总有一些奇葩的需求。为了刷量,刷排名,制作壳包,为了通过苹果爸爸审核,想到代码混淆,垃圾代码等策...
    二斤寂寞阅读 23,157评论 11 52
  • 对于IOS来说,由于系统是封闭的,APP上架需要通过App Store,安全性来说相当高。但是对于大厂和知名APP...
    it彭于晏阅读 1,226评论 0 1
  • 目的 为了进一步增加应用的安全性,防止我们的应用程序很容易的被攻击者分析、破解、重打包,提高攻击者逆向分析应用的难...
    miracle洛洛阅读 4,456评论 3 21
  • 技 术 文 章 / 超 人 对于IOS来说,由于系统是封闭的,APP上架需要通过App Store,安全性来说相当...
    树下敲代码的超人阅读 10,901评论 47 77

友情链接更多精彩内容