520coding/confuse

GitHub: 520coding/confuse

一款 macOS 平台的 iOS 多语言项目源码混淆与差异化工具,通过模拟人工重构方式实现深度代码改造以降低重复率。

Stars: 2075 | Forks: 267

# ![china-2.png](https://cdn.nlark.com/yuque/0/2023/png/213807/1682377811568-62430f6e-2085-4044-b2c0-f372851ef03c.png#averageHue=%23eac4c2&clientId=u7a05b3c8-bd4d-4&from=paste&height=50&id=u3b8a15b3&originHeight=100&originWidth=100&originalType=binary&ratio=2&rotation=0&showTitle=false&size=10497&status=done&style=none&taskId=u04a94635-1d8b-40b7-98eb-efe61c6e631&title=&width=50) ### English | [中文](/README_ZH.md) # 前言 机缘巧合下,我接触到了 iOS [马甲包业务](https://www.yuque.com/docs/share/7e70244c-5dea-4035-b634-65cc082097da?translate=en)。早期我也使用过市场上的其他工具,但实际效果并不理想。经过大量实践,我开发了一款功能齐全的[混淆工具](https://github.com/520coding/confuse)。该工具已被打包成一个 Mac 应用程序,支持多种编程语言,如 OC、C++、Swift。更多功能仍在封装中,敬请期待。 # 提示 为了让大家快速上手并对比混淆效果,新建了一个测试项目 [**confuse_test**](https://github.com/520coding/confuse/tree/master/confuse_test)。如果在实际使用中遇到问题,欢迎扩展该测试项目。请在项目中注明 bug 详情,会有奖励。 ### 测试工程说明: 可以随意修改源码以验证实际效果。建议使用不同的工具对上述测试项目或第三方开源库项目进行混淆,以对比效果。 # 自述文件 ### 马甲包的本质: 1. 第一阶段降低重复率。我开发的初始版本与目前市面上的其他工具基本相似,主要是类名、方法名和变量名的全局替换基础功能。 2. 第二阶段降低相似度(相同元素的正态分布)。目前该工具经过优化和不断重构后有了大幅提升,在这方面基本满足了要求。详情见下文功能介绍。凡事都有两面性,功能越强大,混淆所需的时间就越长。如果你的项目较大,可能会混淆几个小时,请不要见怪,后续还会继续优化。 ### 区分工具的优劣 其实,要识别一个工具的优劣,只需看以下几点: 1. 能否修改所有属性、方法以及方法的所有参数名 2. 修改成员(属性、方法)名时,能否按类区分,还是简单的全局替换 3. 能否修改带 block 参数的方法,典型的网络请求 3. 方法名和属性名改名后的长度(本工具可保证 60~80% 的改名是常用单词,如 name、title 等,并确保不与系统冲突。~~完全摒弃了依靠大量词汇库来保证命名唯一性的简单做法~~,真正模拟人工开发) 4. 修改布局(Frame、Masonry、SDAutoLayout) 5. 插入的代码还是不是“垃圾”(本工具创建自定义控件、封装网络请求,并使用 MVC 模式建立文件间的关联,彻底告别“垃圾”,真假混杂)。 6. 更不用说“还有谁...”能识别宏、区分继承链等上下文内容,并智能识别不可修改的部分 7. 正常项目(或第三方库)混淆后基本不报错(除了一些个别[语法不当](https://www.yuque.com/docs/share/4a87ec96-80fe-4d25-873d-93cb428b3e15#iz0Zi)引起的混淆报错外) # 功能 confuse 是一款[混淆工具](https://github.com/520coding/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 恶意软件~~](https://juejin.cn/post/6936535178118430733) 1. ~~'UUID 后缀',病毒会随机插入固定后缀的 UUID,支持正则扫描~~ 2. ~~'脚本路径特征',病毒编译前会执行可疑脚本,支持正则扫描~~ 3. ~~'运行脚本代码标志',病毒编译前会执行可疑脚本代码,支持正则扫描~~ 3. [资源替换],指定混淆前需要替换的资源文件夹,自动替换同名文件,方便快捷 4. [修改 sks],修改 SpriteKit 中 sks 文件的布局和节点名称 1. '运行拼接名',用于运行时通过拼接字符串生成的图片名 5. [移除注释],识别单行、多行注释 6. [修改图片],各子功能均可独立运行 1. '自定义路径',方便调试和针对性混淆 2. '自定义 RGBA','RGBA 偏移',指定随机颜色修改 3. '主题色',生成统一的色彩风格 4. '色相偏移','饱和度偏移','亮度偏移',细节调整 5. '像素点',局部像素微调 6. '质量调整','尺寸偏移',整体控制 7. '模式修改',支持多种模式 7. [干扰图片],AI 感知哈希对抗扰动,图标分流处理 8. [修改 Lottie],模拟真实的 Lottie 文件结构,对源文件进行修改和扩展,基本不影响实际效果 9. [修改文件属性],如创建时间、访问时间、修改时间 10. [修改工程],无需删除 Cocoapods 11. 可设置'修改 UUID',彻底焕然一新 12. 自定义'修改 Target'名称,关联信息会同步更新 13. [文件对比],对比混淆前后文件修改百分比 1. ‘引用路径’,自定义原始工程 2. ‘最大限制’,超出限制则跳过对比 14. 自动备份源码 ### 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. '百分比控制' 2. 可设置'Model 后缀',按类名后缀进行过滤,目的:避免 Model 归档或数据传输 Model 失效 3. 可多次执行,索引 x2 增加 8. [重命名方法],类似 Xcode 的 Rename 功能,优点: 1. 语法相关、识别类型、继承关系,支持**多参数修改,方法名混淆与类名(包含继承链)和类型关联** ,自动识别系统方法 9. [作用域拆分],允许将作用域拆分封装成方法,可多次拆分 10. [修改闭包],提取方法体中的闭包内容,封装成方法并调用 11. [提取方法],提取部分方法体代码封装成方法 12. [拆分方法],拆分方法体,打乱函数栈结构,可多次拆分 13. [插入方法],插入并调用与上下文相关的方法,告别“垃圾代码”,优点: 1. 根据方法的返回值类型,在 category 中创建相应方法。同时,封装并使用(局部变量、属性、形参)原方法的返回值。 2. 可多次执行,索引 x2 增加 14. [插入控制流],改变代码执行顺序 15. [合并方法],穿插合并代码,并改变函数栈结构 16. [修改方法],模拟人工封装调用,优点: 1. **拆分**对原方法的**调用**,并根据参数类型在**局部进行调整(支持继承)** 。详情请见[支持的参数类型汇总表。](https://www.yuque.com/docs/share/315b72d9-28f9-4fa6-bf20-c40d94f2253a?translate=en) 2. 支持'交换参数',随机交换参数位置,主要用于多参数方法 3. 可多次执行,索引 x2 增加 17. [重命名全局变量],智能名词替换 18. [修改全局变量],替换全局变量名,**将全局变量转换为全局函数** ,并混淆字符串变量值 19. [插入局部变量],单行复合调用变为简单的多行调用,改变执行顺序 20. [修改局部变量],模拟人工封装调用,变量名关联类型,优点: 1. 局部变量值在运行期间保持不变,详情请见[支持的类型汇总表](https://www.yuque.com/docs/share/90444065-4f4e-49c8-9e1a-5bd3d3b4f84d?translate=en) 2. 可多次执行,索引 x2 增加 21. [重命名多语言],使用系统直接或间接方法 **NSLocalizedString** 、 **NSLocalizedStringFromTable** 修改多语言,[自定义封装方法需手动处理]() 22. [修改字符串],支持任意字符串,加密处理(硬代码 -> 内存),原始字符串保留在注释中方便检查 1. 设置'最小长度'过滤 2. 还可设置“有效数量”配合使用 23. [修改 xib、storyboard],自动插入视图,并修改内部结构属性 24. [修改字体],随机微调项目中使用的字体,并识别宏 25. [修改颜色],随机偏移项目中 UI 控件的颜色,并识别宏 26. [UI 布局偏移],支持 Frame、Masonry、SDAutoLayout 常见布局的微调 27. [插入文件],生成其他文件(结合网络、存储和 MVC,确保代码具有高相关性和实际意义),在项目中进行自动高相关调用 ; **注意:**(在工程根路径下,会生成一个名为“ **other_xxx_file** ”的文件夹,子选项 **Target** 控制 Import 方式,如果为空,则需手动导入,将生成的文件夹拖入工程即可;否则自动导入) 28. [插入文本],生成 json、txt、plist 等常见文本文件,在项目中进行自动高相关调用 ; **注意:**(在工程根路径下,会生成一个名为“ **other_xxx_text** ”的文件夹,并**自动导入**生成的文件) 29. [修改类],修改成员变量、属性、方法声明和定义的顺序 30. [重命名类],类名不受限制(例如:my、My),可指定添加前缀,支持类和 category 名称|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.5,SPM 包管理工程尚未测试 1. [修改控制流],将 if 条件语句中的逻辑运算和可选绑定替换为等价值 2. [重命名全局方法] 自动识别系统方法 1. 可设置'参数标签',支持隐藏参数标签和尾随闭包用法 2. 可设置'前缀' 3. [重命名图片],智能名词替换,自动处理二进制 sks 文件,并自动纠正图片名与 xcassets 文件夹名不对应的情况 1. 可设置'运行拼接名',用于运行时通过拼接字符串生成的图片名 2. 可设置'指定忽略长度',图片名长度小于指定长度为危险名称,将被忽略 3. 可设置'忽略危险',与字典 key 同名将被忽略 4. 可设置'关联文件',其他包含图片名的文件 4. [重命名 lottie] 适应各种场景 1. 可设置'运行拼接名',用于运行时通过拼接字符串生成的 lottie 名 2. 可设置'指定忽略长度',lottie 名长度小于指定长度为危险名称,将被忽略 3. 可设置'忽略危险',与字典 key 同名将被忽略 5. [插入图片],自动插入图片,并根据上下文和类型模拟人工调用,可指定插入数量 6. [重命名 enum],识别关联值和原始值 1. 可设置'原始值'以细化控制范围 7. [重命名属性],基础功能,不再过多描述,优点: 1. 类似 OC [重命名属性],识别继承链和嵌套类型,支持存储和计算属性、观察者、包装器、类属性 2. 可设置'Model 后缀',按类名后缀进行过滤,方便过滤 Model 3. 可设置'Model 映射',自动插入映射关系,匹配后台数据 8. [插入属性],使用计算属性包装调用并替换原始属性 1. 支持存储和计算属性、观察者、包装器、类属性 2. 可设置'Model 后缀',按类名后缀进行过滤,目的:避免 Model 归档或数据传输 Model 失效 9. [重命名方法],基础功能重命名类似于其他工具,不再过多描述,优点: 1. 可设置'参数标签',支持隐藏参数标签和尾随闭包用法 2. 识别继承链嵌套类型,支持(类、struct、enum)的静态方法和实例方法,以及可选链等 10. [修改 Property],支持对 lazy 属性的修改 11. [修改闭包],提取方法体中的闭包内容,封装成方法并调用 12. [提取方法],提取部分方法体代码封装成方法。 13. [拆分方法],拆分方法体,打乱函数栈结构,可多次拆分 14. [插入方法],封装原方法的返回值并利用上下文调用额外的相关方法,告别“垃圾代码” 15. [修改方法],利用重载技术修改函数原型并调用修改后的参数,支持交换参数 1. 支持'交换参数',随机交换参数位置,主要用于多参数方法 2. ‘Dynamic dispatch’,改变方法调用方式 16. [重命名全局变量],智能名词替换 17. [修改字体],随机微调项目中使用的字体,并识别宏 18. [修改颜色],随机偏移项目中 UI 控件的颜色 19. [UI 布局偏移],支持 Frame、SnapKit 常见布局的微调 20. [插入局部变量],拆分单行复合调用,改变执行顺序 21. [修改局部变量],模拟人工封装调用,变量名关联类型(支持嵌套),优点: 1. 局部变量值在运行期间保持不变。详情请见支持的类型汇总表。 2. 可多次执行,索引 x2 增加 22. [重命名多语言],支持自定义方法的多语言处理 23. [修改字符串],识别单行、多行、字符串插值和扩展字符串。修改后可通过加密和拆分字符组等多种方式自由组合,并保留原始字符的注释以方便检查 1. 设置'最小长度'过滤 2. 还可设置“有效数量”配合使用 24. [修改 xib、storyboard],自动插入视图,并修改内部结构属性 25. [插入文件],贴近实际开发(结合网络、存储、MVC、xib 等,确保代码具有高相关性和实际意义),加强上下文相关性。可设置'文件名前缀',设置'Target 导入'的方式与 OC 相同 26. [插入文本],生成 json、txt、plist 等常见文本文件,并在项目中进行自动高相关调用(引入属性、初始化、自动销毁等)。注意:(在工程根路径下,会生成一个名为“other_xxx_text”的文件夹,并自动导入生成的文件) 27. [重命名类],类名不受限制(例如:my、My),识别嵌套类型和 typealias,支持 class|struct|enum|protocol 1. 可设置'重命名同名文件' 2. 可设置'前缀' ## 规划 将按以下顺序进行更新迭代 1. Objective-C (95%),主要是提升工具的通用性和稳定性,强化功能 1. 音视频文件使用较少,后续添加 2. Swift (95%),开发中... 1. 性能增强 3. C++ (60%),开发中... 1. 方法:插入 2. 属性:修改 3. 全局变量:修改 4. Lua (0%) 过于小众,暂时关闭。如果用户有此需求,我们将重构这部分 5. C# (0%),在实际项目中使用不多,所以排在最后,视用户需求再决定 6. 其他功能: 1. 快速混淆模式 # 图文介绍 运行 APP 效果图,使用前请详细阅读[工具使用教程](https://www.yuque.com/docs/share/cd0968ac-9c7e-415f-9e7c-1460b85e80e8)
![image.png](https://cdn.nlark.com/yuque/0/2021/png/213807/1623167266244-4978d5ed-0b2c-42b5-80c4-1b44e4ff7f96.png#averageHue=%233a9b1d&clientId=u4ef53c93-4376-4&errorMessage=unknown%20error&from=paste&height=877&id=ufbdd65fd&originHeight=1754&originWidth=2532&originalType=binary&ratio=2&rotation=0&showTitle=false&size=443560&status=error&style=none&taskId=ue83d9a90-392f-4558-9b46-f06320d2c45&title=&width=1266) # 更新日志

v8.3.7 (2026.07.13) 热修复

1. 优化 OC [控制流修改]:增加了对在类方法中注入 `self.` 依赖的支持。 2. 优化 OC [方法拆分]:规范了 `strongify(__strong … typeof)` 宏“危险区域”的标记;现禁止在此区域之前或其中进行拆分。 3. 修复 OC [方法插入]:解决了注入 `self.` 赋值依赖时引起的无限递归问题;修复了对只读属性的漏检问题;修复了由 C 数组返回类型(如 `void *[1]`)引起的编译错误。 4. 修复 Swift [方法拆分]:防止了 `inout` 参数与尾部代码段中重新赋值的冲突。 5. 优化 `xcodebuild -workspace` 编译:将扫描范围限制在顶层目录,以避免无意中扫描到第三方库。 [查看更多历史更新记录](https://www.yuque.com/docs/share/39f2f60e-b6a8-443b-b005-b9364fb79b95?translate=en) # 感谢反馈 [shizu2014](https://github.com/shizu2014)、[myhonior](https://github.com/myhonior)、[imbahong](https://github.com/imbahong)、[tabier008](https://github.com/tabier008) # 链接导航 1. [工具使用教程](https://www.yuque.com/docs/share/cd0968ac-9c7e-415f-9e7c-1460b85e80e8) 2. [软件问答 (Q&A)](https://www.yuque.com/docs/share/4a87ec96-80fe-4d25-873d-93cb428b3e15?translate=en) 3. [OC[修改方法] 参数类型汇总表](https://www.yuque.com/docs/share/315b72d9-28f9-4fa6-bf20-c40d94f2253a?translate=en) 4. [OC[修改局部变量] 修改局部变量-支持的类型汇总表](https://www.yuque.com/docs/share/90444065-4f4e-49c8-9e1a-5bd3d3b4f84d?translate=en) 5. [OC[重命名多语言] 处理自定义封装方法](https://520coding.yuque.com/docs/share/de45751a-c629-4737-84ad-251fb2502123?translate=en) 6. [Swift[修改方法] 参数类型汇总表](https://520coding.yuque.com/docs/share/cd70e83b-4ab4-40e5-b719-70f214e869c8)
标签:CVE监控, DNS 反向解析, iOS, Objective-C, Swift, 云资产清单, 代码混淆, 应用合规过审, 逆向工程, 马甲包