美文网首页
iOS-代码混淆

iOS-代码混淆

作者: e297b14c9e53 | 来源:发表于2020-03-09 21:39 被阅读0次

    基本概念

    什么是加固

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

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

    代码混淆

    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)
    字符串加密
    • 很多时候,可执行文件中的字符串信息,对破解者来说,非常关键,是破解的捷径之一
    • 为了加大破解、逆向难度,可以考虑对字符串进行加密
    • 字符串的加密技术有很多种,可以根据自己的需要自行制定算法
    • 这里举一个简单的例子
    • 对每个字符进行异或(^)处理
    • 需要使用字符串时,对异或(^)过的字符再进行一次异或(^),就可以获得原字符

    相关文章

      网友评论

          本文标题:iOS-代码混淆

          本文链接:https://www.haomeiwen.com/subject/xwvmdhtx.html