iOS代码混淆(MJ)

蹲街弑〆低调 提交于 2019-12-05 05:53:00
  • iOS程序可以通过class-dump、Hopper、IDA等获取类名、方法名、以及分析程序的执行逻辑

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

  • iOS代码混淆方案

          源码的混淆                           类名  方法名  协议名 ……

          LLVM中间代码IR的混淆(容易产生bug)     自己编写Pass

              ollvm:  https://github.com/obfuscator-llvm/obfuscator


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

注意点

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

建议  

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

小工具,李明杰的

https://github.com/CoderMJLee/MJCodeObfuscation


ios-class-guard

第三方工具

https://github.com/Polidea/ios-class-guard

它是基于class-dump的扩展

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

用法

brew install ios-class-guard

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

常用参数

--sdk-root <path>:用于指定SDK路径

如果是模拟器SDK,一般路径就是/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulor.platform/Developer/SDKs/iPhoneSimulor.sdk

--sdk-ios:相当于指定SDK路径为真机设备SDK

-X <path>:用于指定xib,storyboard所在目录,他会递归搜索

-O <path>:生成的混淆头文件路径

-m <path>:符号映射表(默认是symbols.json)


字符串加密

很多时候,可在还行文件中的字符串信息,对破解者来说,非常关键,是破解的捷径之一

为了加大破解,逆向难度,可以考虑对字符串进行加密

字符串加密技术有很多种,可以根据自己的需要自行定制算法

 

可以对每个字符进行异或处理(^)

 

 

 

 

 

 

 

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!