iOS混淆工具

简介: 简介: 争取做一款最好的代码混淆工具,模拟人工手动混淆,识别上下文 ,支持继承链、类型识别、方法多参等复杂高级混淆。

中文 | English

前言

机缘巧合偶遇iOS马甲包业务,前期也使用过目前市面上其他得工具,实际效果不太理想。经过大量实践,开发出一款功能齐全的混淆工具。工具的主要功能OC、C++、Swift已封装成Mac应用,其他功能还在封装中,敬请期待。

提示

为了让大家快速上手及对比混淆效果,新建了测试工程confuse_test,大家在实际使用过程中如果遇到问题,欢迎扩展测试工程,请在工程中请注明bug细节,有奖励。

测试工程说明:

confuse_test:包含oc、c++、swift及一些第三方用例,快速验证整体效果
confuse_test_oc:只包含oc,方便验证每个功能的效果
confuse_test_oc_fast:只包含oc,方便快速验证部分功能的效果
confuse_test_swift:只包含swift,代码来源于Apple官方实例代码,方便验证每个功能的效果

可任意修改源码来验证实际效果,建议用不同工具混淆以上测试工程或者第三方开源库项目,对比效果。

1.2.0之前的老版本说明:
简介:不涉及语法及编译要求,但是混淆后可能出现局部漏改或者改错,请自行添加至黑名单过滤。
适用项目:RN等还未适配的混合项目。
使用条件:暂时没法使用,后期重新开放

自述

马甲包的本质:

  1. 阶段一减低重复率 ,本人开发初期的版本和目前市面上的其它工具基本相似,主要是‘名称’全局替换这一个基本的功能
  2. 阶段二减少相似度(相同元素的正态分布),目前该工具经过优化及不断重构已经有了很大的改善,目前基本符合这方面要求,详情见以下功能介绍。事物都有两面性,功能越强大混淆耗时越长,如果你的项目很大,混淆几个小时也是有可能的,请不要见怪,后续持续优化中。

区分工具优劣

其实识别一个工具的优劣,只需看看以下几点:

  1. 能否修改所有的属性、方法,及方法的所有参数名
  2. 修改成员(属性、方法)名称,能否按类区分,还是简单的全局替换
  3. 带block的参数的方法,典型的网络请求

    例如:+ (BOOL)post:(NSString )url parameters:(NSDictionary )parameters success:(HttpRequestResponse)success error:(HttpRequestResponse)error;

  4. 方法名和属性名改后的名字的长短(本工具能够保证60~80%的改后名称是常见的一个单词,例如:name、title等且保证不与系统冲突,完全摒弃简单的靠大量单词库堆砌以保证命名的唯一性的做法,真正模拟人工开发)
  5. 修改布局(Frame、Masonry、SDAutoLayout)
  6. 插入的是代码还是‘垃圾’(本工具通过封装网络请求,创建自定义控件,文件之间使用MVC模式关联,彻底告别‘垃圾’,实现以假乱真)。
  7. 更别说“还有谁...”能识别宏、区分继承链等上下文关联内容,智能识别不可修改部分

    例如:+ (void)init;- (void)reloadData;基本能改,做到的有几个呢?”

  8. 正常项目(或者第三方库)混淆完基本不报错(除了一些个别语法不严谨造成混淆后报错)

功能

confuse是一款混淆工具,尽可能模拟人工开发,仿照Xcode部分功能,避免机核4.3、2.1、2.3.1、账号调查等。
目标:模拟人工修改一切能改的地方,这也是为什么本工具只有黑名单没有白名单的原因
详细功能如下(基本功能不做描述,详见其他工具):

已完成

以下功能均支持:

  1. 黑名单(二级)过滤,自由控制每个功能的混淆内容,几乎适应所有项目。
  2. 混淆百分比控制,可以结合自己项目的实际需求,自由调整
  3. 智能名词替换:
    1. 重命名时使用关联类型已有信息+相近语义+类型+部分旧词汇等组合,并且过滤敏感词汇,同时用户也可以自定义敏感词,弃用‘随机单词无脑组合’
    2. 异类同名成员->异类异名成员,异类异名成员->异类同名成员,模拟正常开发。成员指的是方法、属性、函数
  4. 智能识别不可修改部分:通过类型及继承链方式识别系统、第三方、Pod方法,并不是‘简单’的相等判断,例如:
    1. 类方法:+ (void)init;原则上任何地方都能改
    2. 对象方法:- (void)reloadData;不是UITableView的子类是可以改的
    3. 属性:@property (readonly) NSUInteger length;如果不是NSString的子类也是可以改的

通用部分

  1. [项目配置],只要选择项目路径,自动完成其他默认配置
    1. 全局设置‘忽略路径’,支持正则,配合黑名单使用更佳
    2. ‘xcodeproj’设置,针对多xcodeproj项目和xx.xcodeproj不在项目根目录的情况
    3. ‘Scheme’混淆,与Xcode保持一致
    4. ‘Debug模式’,便于在源文件中查看修改前后对比,同时插入一些特殊注释标识便于定位bug
    5. ‘混编模式’,该模式用于处理混编项目中swift调用oc部分,保证混淆后维持调用关系
    6. ‘proto’设置,用于protobuf文件单独混淆
    7. ‘环境检查模式’设置,方便提前纠正不规范代码
    8. ‘参考项目根路径’设置,读取参考项目的单词、UUID
    9. ‘敏感词’过滤
    10. ‘关闭输出’,注释NSLog、print等调试语句
    11. 版本迭代混淆’,过审后迭代更新,沿用上一次(也可以任意选择版本)混淆记录增量混淆,保持版本连续性,模拟正常开发。优势:做到开发和混淆同步且各自独立。目前主要功能均支持更新混淆
  2. [杀病毒],Xcode中毒,XCSSET Malware
    1. ‘UUID后缀’,病毒会随机插入UUID,会带有固定后缀,正则扫描
    2. ‘脚本路径特征’,病毒编译前会执行一个可疑脚本,支持正则扫描
    3. ‘运行脚本代码标志’,病毒编译前会执行一个可疑脚本代码,支持正则扫描
  3. [资源替换],混淆前指定需要替换的资源文件夹,自动进行同名文件替换,方便快捷
  4. [修改sks],修改SpriteKit中sks文件的布局和节点名称
    1. ‘运行拼接名称’,用于运行时通过字符串拼接生成的图片名
  5. [删除注释],识别单行、多行注释
  6. [修改图片],每个子功能都可以单独运行
    1. ‘自定义路径’,方便调试和针对性混淆
    2. ‘自定义RGBA’、‘RGBA偏移’,指定随机颜色修改
    3. ‘主题色’,生成统一颜色风格
    4. ‘色调偏移’、‘饱和度偏移’、‘明暗度偏移’,细节调整
    5. ‘像素点数’,局部像素微调
    6. ‘质量调整’、‘大小偏移’,整体控制
    7. ‘模式修改’,多种模式支持
  7. [修改Lottie],模拟真实Lottie文件结构,修改和扩充源文件,基本不影响实际效果
  8. [修改文件属性],如创建时间、访问时间、修改时间
  9. [修改项目],无需删除Cocoapods
    1. 可设置‘修改uuid’,彻底翻新
    2. 自定义‘修改target’名称,相关联信息同步更新
  10. [文件对比],对比混淆前后文件修改百分比
    1. ‘参考路径’,自定义设置原始项目
    2. ‘最大限制’,超过部分跳过对比
  11. 自动备份源码

Objective-C

  1. [修改控制流],if条件语句中的逻辑运算进行等价替换
  2. [重命名全局方法],可设置‘前缀’
  3. [重命名图片],智能名词替换,自动处理二进制sks文件,自动纠正图片名和xcassets文件夹名不对应的情况
    1. 可设置‘运行拼接名称’,用于运行时通过字符串拼接生成的图片名
    2. 可设置‘重命名关联字符串’,用于修改字符串与图片名相等的情况
    3. 可设置‘指定忽略长度’,图片名长度小于指定长度为危险名称,将忽略
    4. 可设置‘忽略危险’,与字典key同名,将忽略
    5. 可设置‘关联文件’,其他包含图片名的文件
  4. [插入图片],自动插入图片,同时根据上下文及类型模拟人工调用,可指定插入个数
  5. [重命名成员变量],支持synthesize和箭头语法识别
  6. [重命名属性],支持@property的所有类型,支持Protobuf,优势:
    1. 识别语法,识别类型、继承关系,属性名混淆和类名(包含继承链)关联,自动识别系统属性
    2. 可设置‘Model后缀’,按类名的后缀过滤,方便过滤Model
    3. 可设置‘Model映射’,自动插入映射关系(已自定义,自动补齐其他属性),确保匹配后台数据
  7. [插入属性],创建、赋值、修改都关联已有类型,智能名词替换
    1. ‘Model后缀’,按类名的后缀过滤,目的:避免Model归档或者数据转模型失败
    2. 可多次执行,指数x2递增
  8. [重命名方法],近似Xcode的Rename功能,优势:
    1. 语法相关,识别类型、继承关系,支持多参修改,方法名混淆和类名(包含继承链)及类型关联,自动识别系统方法
  9. [修改闭包],提取方法体中的闭包内容封装为方法并调用
  10. [拆分方法],拆分方法体,打乱函数堆栈结构,可多次拆分
  11. [插入方法],插入并调用上下文关联方法,告别“垃圾代码”,优势:
    1. 根据方法的返回值类型,在分类中创建相应的方法。同时封装原方法的返回值并利用(局部变量、属性、形参)调用。
    2. 可多次执行,指数x2递增
  12. [合并方法],穿插合并代码,改变函数堆栈结构
  13. [修改方法],模拟人工封装调用,优势:
    1. 对原方法进行拆分调用并根据参数类型(支持继承)局部调整,详情见支持参数类型汇总表
    2. 支持‘交换参数’,随机交换参数位置,主要用于多参方法
    3. 可多次执行,指数x2递增
  14. [重命名全局变量],智能名词替换
  15. [修改全局变量],替换全局变量名、全局变量转化为全局函数、混淆字符串变量值
  16. [插入局部变量],单行复合调用变为简单多行调用,改变执行顺序
  17. [修改局部变量],模拟人工封装调用,变量名关联类型,优势:
    1. 局部变量值运行时保持不变,详情见支持类型汇总表
    2. 可多次执行,指数x2递增
  18. [重命名多语言],对直接或间接使用系统方法NSLocalizedStringNSLocalizedStringFromTable的多语言进行修改,自定义封装方法需要手动处理
  19. [修改字符串],支持任意字符串,加密处理(硬编码->内存),原始字符串保留在注释中方便检查
    1. 设置‘最少长度’过滤
    2. 也可设置‘有效个数’搭配使用
  20. [修改xib、storyboard],自动插入视图,并修改内部结构属性
  21. [修改字体],对项目中使用的字体随机微调,识别宏
  22. [修改颜色],对项目中UI控件颜色随机偏移,识别宏
  23. [UI布局偏移],支持Frame、Mansonry、SDAutoLayout常见布局微调
  24. [插入文件],生成其它文件(结合网络、存储、MVC,保证代码具有高关联度和实际意义),项目中自动高关联调用;注意:(在项目根路径下,会生成"other_xxx_file"的文件夹,子选项Target控制导入方式,若为空,则需要手动导入,将生成的文件夹拖入工程即可;反之,自动导入)
  25. [插入文本],生成json、txt、plist等常用文本文件,项目中自动高关联调用;注意:(在项目根路径下,会生成"other_xxx_text"的文件夹,生成的文件会自动导入
  26. [修改类],修改成员变量、属性、方法声明及定义的顺序
  27. [重命名类],类名不限制(例如:my、My),可指定添加前缀,支持class及分类名、struct、protocol,优势:
    1. 智能名词替换
    2. 可设置‘重命名同名文件’
    3. 可设置‘重命名相似字符串’,(忽略|相等|包含)三种设置
    4. 新增‘纠正非标准点语法’,针对非标准的点语法调用(方法当做属性调用)

C++

  1. [重命名属性],支持所有类型属性,识别语法,识别类型、继承
  2. [插入属性],插入属性(成员变量)并相互调用修改,自动初始化、销毁、并在其他方法中赋值修改等类似人工操作,支持‘百分比控制’
  3. [重命名方法],近似Xcode的Rename功能,识别类型、模板、重载、重写、继承等关系
  4. [修改方法],利用重载技术修改函数原型并调用修改形参
  5. [修改字符串],支持任意字符串,加密处理(硬编码->内存),原始字符串保留在注释中方便检查
    1. 设置‘最少长度’过滤
    2. 也可设置‘有效个数’搭配使用
  6. [重命名类],支持模板等类型
    1. 可切换旧模式
    2. 前缀设置
    3. 可设置‘重命名同名文件’

Cocos2d-x

该部分功能整合至C++中,支持cocos2dx自动过滤

Swift

适配Swift5.10,SPM包管理项目暂未测试

  1. [重命名全局方法],自动识别系统方法
    1. 可设置‘参数标签’,支持隐藏参数标签和尾随闭包用法
    2. 可设置‘前缀’
  2. [重命名图片],智能名词替换,自动处理二进制sks文件,自动纠正图片名和xcassets文件夹名不对应的情况
    1. 可设置‘运行拼接名称’,用于运行时通过字符串拼接生成的图片名
    2. 可设置‘指定忽略长度’,图片名长度小于指定长度为危险名称,将忽略
    3. 可设置‘忽略危险’,与字典key同名,将忽略
    4. 可设置‘关联文件’,其他包含图片名的文件
  3. [重命名Lottie],适配多种场景
    1. 可设置‘运行拼接名称’,用于运行时通过字符串拼接生成的lottie名
    2. 可设置‘指定忽略长度’,lottie名长度小于指定长度为危险名称,将忽略
    3. 可设置‘忽略危险’,与字典key同名,将忽略
  4. [插入图片],自动插入图片,同时根据上下文及类型模拟人工调用,可指定插入个数
  5. [重命名枚举],识别关联值和原始值
    1. 可设置‘原始值’,细化控制范围
  6. [重命名属性],基本功能,不做过多描述,优势:
    1. 类似OC[重命名属性],识别继承链及嵌套类型,支持存储和计算属性、观察器、包装器、类属性
    2. 可设置‘Model后缀’,按类名的后缀过滤,方便过滤Model
    3. 可设置‘Model映射’,自动插入映射关系,匹配后台数据
  7. [插入属性],利用计算属性对原属性包装及调用替换
    1. 支持存储和计算属性、观察器、包装器、类属性
    2. 可设置‘Model后缀’,按类名的后缀过滤,目的:避免Model归档或者数据转模型失败
  8. [重命名方法],基本功能改名字类似其他工具,不做过多描述,优势:
    1. 可设置‘参数标签’,支持隐藏参数标签和尾随闭包用法
    2. 识别继承链嵌套类型,支持(class、struct、enum)的静态方法和实例方法,及可选链等
  9. [修改闭包],提取方法体中的闭包内容封装为方法并调用
  10. [插入方法],封装原方法的返回值并利用上下文调用额外关联方法,告别“垃圾代码”
  11. [修改方法],利用重载技术修改函数原型并调用修改形参
    1. 支持‘交换参数’,随机交换参数位置,主要用于多参方法
    2. ‘动态派发’,改变方法调用方式
  12. [重命名全局变量],智能名词替换
  13. [修改字体],对项目中使用的字体随机微调
  14. [修改颜色],对项目中UI控件颜色随机偏移
  15. [UI布局偏移],支持Frame、SnapKit常见布局微调
  16. [插入局部变量],拆分单行复合调用,改变执行顺序
  17. [修改局部变量],模拟人工封装调用,变量名关联类型(支持嵌套),优势:
    1. 局部变量值运行时保持不变,详情见支持类型汇总表
    2. 可多次执行,指数x2递增
  18. [重命名多语言],支持自定义方法多语言处理
  19. [修改字符串],识别单行、多行、字符串插值、及扩展字符串,改后由加密和拆分字符组等多种方式自由组合,并保留原有字符的注释,方便检查
    1. 设置‘最少长度’过滤
    2. 也可设置‘有效个数’搭配使用
  20. [修改xib、storyboard],自动插入视图,并修改内部结构属性
  21. [插入文件],接近实际开发(结合网络、存储、MVC、xib等,保证代码具有高关联度和实际意义),强化上下文关联。可设置‘文件名前缀’,设置‘Target导入’方式和OC相同
  22. [插入文本],生成json、txt、plist等常用文本文件,项目中自动高关联调用(引入属性、初始化、自动销毁等)。注意:(在项目根路径下,会生成"other_xxx_text"的文件夹,生成的文件会自动导入
  23. [重命名类],类名不限制(例如:my、My),识别嵌套类型及typealias,支持class、struct、enum、protocol
    1. 可设置‘重命名同名文件’
    2. 可设置‘前缀’

      注意:目前Swift和OC混编项目,OC调用Swift部分暂不处理,后续将优化。

规划中

更新迭代将按照以下顺序依次进行

  1. Objective-C(95%),主要提高工具的通用性和稳定性,及强化功能
    1. 音频、视频文件使用少,后续添加
  2. Swift(95%),开发中...
    1. 强化性能
  3. C++(60%),开发中...
    1. 方法:插入
    2. 属性:修改
    3. 全局变量:修改
  4. Lua(10%)的针对性太强了,暂时不开放,暂时不打算重构有需要在说吧
  5. C#(0%),本人实际项目使用不多,故排在最后,看用户需求再决定
  6. 其他功能:
    1. 快速混淆模式

图文介绍

运行APP效果图,使用前请详细阅读工具使用教程
image.png

更新日志

v7.8.0(2024.07.05)热更新

  1. 新增OC[拆分方法],拆分方法体,可多次拆分
  2. 优化OC[合并方法],适配闭包以及避免对self直接赋值
  3. 优化[修改工程],兼容不同的uuid格式
  4. 还原[宏展开]的#include处理
  5. 新增Swift[重命名方法]的预检查

查看更多历史更新记录

感谢反馈

shizu2014myhoniorimbahongtabier008

链接导航

  1. 工具使用教程
  2. 软件使用问答(Q&A)
  3. OC[修改方法]参数类型汇总表
  4. OC[修改局部变量]修改局部变量-支持类型汇总表
  5. OC[重命名多语言]自定义封装方法处理
  6. Swift[修改方法]参数类型汇总表
目录
相关文章
|
4月前
|
移动开发 安全 数据安全/隐私保护
iOS 全局自动化代码混淆工具!支持 cocoapod 组件代码一并混淆
iOS 全局自动化代码混淆工具!支持 cocoapod 组件代码一并混淆
|
4月前
|
Dart 数据安全/隐私保护 Swift
iOS代码混淆工具推荐:IPA Guard详细介绍
iOS代码混淆工具推荐:IPA Guard详细介绍
180 0
|
4月前
|
移动开发 前端开发 安全
最强大的 iOS 应用源码保护工具:Ipa Guard,保护你的商业机密代码
最强大的 iOS 应用源码保护工具:Ipa Guard,保护你的商业机密代码
|
2月前
|
Java Android开发 iOS开发
探索安卓与iOS开发的差异性:平台、工具和用户体验的对比分析
【7月更文挑战第30天】在移动应用开发的广阔天地中,安卓和iOS两大平台各自占据着不可忽视的地位。本文将深入探讨这两大平台在开发环境、工具选择以及最终用户体验上的根本差异,并分析这些差异如何影响开发者的策略和用户的偏好。通过比较安卓的开放性与iOS的封闭性,我们将揭示不同平台下的开发哲学及其对生态系统的影响。
33 4
|
2月前
|
开发工具 Android开发 数据安全/隐私保护
探索iOS与安卓应用开发的异同:技术、工具和市场趋势
在移动操作系统的广阔舞台上,iOS和安卓两大主角各自演绎着怎样的精彩?本文将深入剖析这两大平台在应用开发过程中的技术差异、开发工具的选择以及面对的市场环境。通过数据支撑和案例分析,我们将一窥这两个系统如何影响开发者的决策,并探讨它们未来的发展方向。
|
2月前
|
监控 开发工具 Android开发
探索安卓与iOS开发的差异:平台特性、工具和市场趋势
在移动应用开发的广阔舞台上,安卓与iOS两大操作系统扮演着主角。它们各自拥有独特的平台特性、开发工具和市场定位,这些差异深刻影响着开发者的决策和产品的最终形态。本文将深入分析这两大平台的关键技术差异,探讨各自的开发环境和工具集,以及它们在市场上的表现和未来的趋势,为开发者提供一个全面的视角,帮助他们在这两个平台上做出更明智的开发选择。
|
3月前
|
监控 Android开发 iOS开发
探索Android与iOS开发的差异:平台、工具和用户体验的比较
【6月更文挑战第25天】在移动应用开发的广阔天地中,Android和iOS两大平台各领风骚,它们在开发环境、工具选择及用户体验设计上展现出独特的风貌。本文将深入探讨这两个操作系统在技术实现、市场定位和用户交互方面的关键差异,旨在为开发者提供一个全景式的视图,帮助他们在面对项目决策时能够更加明智地选择适合自己项目需求的平台。
|
3月前
|
开发工具 Android开发 iOS开发
探索安卓与iOS开发的差异:从工具到用户体验
【6月更文挑战第20天】在移动应用开发的广阔天地中,安卓和iOS两大平台各自占据半壁江山。本文将深入探讨这两个操作系统在开发环境、编程语言、用户界面设计以及性能优化等方面的关键差异。我们将通过比较分析,揭示各自平台的独特优势和面临的挑战,为开发者提供决策参考,并为最终用户提供更深层次的用户体验洞察。
|
2月前
|
测试技术 Android开发 iOS开发
IOS手机自动化一些工具的简单有哪些?
IOS手机自动化一些工具的简单有哪些?
|
4月前
|
JSON 前端开发 数据安全/隐私保护
【教程】iOS 手机抓包工具介绍及教程
📱 最近又发现APP Store一款宝藏软件,克魔助手抓包工具,app刚上架,功能不断迭代中,目前18软妹币实惠价可享受终身版!现在是下手的最好时机。