前言
今天主要想说的是iOS的代码混淆,为什么想做代码混淆?为了APP的安全,为了防止别人破壳轻易破解我们代码;还有就是做马甲包了,我们知道马甲包的市场需求很大,但是不能花费过多的精力在开发上,毕竟只是个马甲,没必要花费太多的成本!
混淆工具
网上搜了一下,开源免费的混淆都在转载念茜大姐大的sh脚本的混淆方法,或者在念茜的脚本基础上二次开发,大家去看过就知道念茜的这篇博客是在14年写的,那时我刚做iOS没多久?,而且那时候中国区审核还没有那么严格,若果你现在还使用那种方法进行混淆,你肯定会收到苹果的2.3.1 大礼包?,所以我们还是探索别的混淆方法吧,不要再挖坟了!
ZFJObsLib主要是通过Python写的混淆工具,具体功能有方法混淆、属性混淆、类名混淆、添加垃圾代码、自动创建垃圾类、删除注释、修改资源文件Hash值、加密字符串、翻新资源名、模拟人工混淆、混淆文件名、混淆文件目录、混淆词库、混淆日志、映射列表、敏感词过滤、图片压缩、爬虫服务、修改项目名、翻新项目UUID、自动备份混淆项目、自定义忽略属性、自定义忽略函数、自定义忽略类名、界面颜色魔改、APP图片主题色替换,具体的如下:
下载地址
ZFJObsLib混淆工具全面支持OC与Swift语言开发的项目!!!
(1)下载地址:
https://gitee.com/zfj1128/ZFJObsLib_dmg(主更新地址)
https://github.com/zfjsyqk/ZFJObsLib(备更新地址)
(2)使用问答:
http://zfjobslib.top/qahelp.html
混淆日志
进行混淆的部分日志,混淆的时候会自动生成混淆日志《ZFJ混淆日志.log》,便于开发者修改部分报错,在混淆界面下方的《打开混淆日志》按钮打开:
忽略路径
我们在混淆的时候,我们可以根据自己的实际情况选择需要忽略混淆的文件或者文件夹,所以我添加了混淆忽略文件和忽略文件功能,如下图:
特别说明:多级目录混淆情况,如果想忽略的目录在多个文件夹中有重名的,比如你想忽略Home下面的Models文件夹,但是在Home文件夹和Mine文件夹都有个Models文件夹,你可以这样设置'Home/Models'就OK了!So Easy!☝️☝️☝️
如果想过滤拥有相同前缀的类,比如ZFJ_TouchClass.h/ZFJ_TouchClass.m/ZFJ_MyButton.h/ZFJMyButton.m,可以设置‘ZFJ+’就可以对以‘ZFJ_’开头的类进行过滤忽略;
如果想过滤拥有相同后缀的类,比如ZFJName.h/ZFJName.m/ABCName.h/ABCName.h,可以设置‘+Name’就可以对以‘Name’结尾的类进行过滤忽略。
注意:很多人都在问,为什么我明明设置了忽略,为什么右边的日志还会打印被忽略的文件或者文件夹?需要注意的是,忽略只针对属性混淆、函数混淆、类名混淆才有用,忽略是不回去读取混淆原有的属性、函数、类名,但是并不意味着不去跑一边了!
还有就是pod是无法混淆的,因为pod需要管理员权限才能修改,所以软件没有权限修改,如果想混淆,把pod里面的库拖进工程中! 使用问答
在使用的时候要是有什么问题,可以先看看《ZFJObsLib-iOS代码混淆软件使用问答(Q&A)》
在软件可以在系统栏-帮助-使用问答查看,如下图:
软件功能
✍️✍️✍️ZFJObsLib有很多功能,大家可以根据自己的实际使用情况自行选择!✍️✍️✍️
在此附上一些过包大佬常用的功能截图,仅供参考,这些大佬最牛逼的一个月过了三四十个,还有人一天一份代码混淆五次过了四个,一个是因为bug: