首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >iOS混淆探索

iOS混淆探索

原创
作者头像
confuse
修改2021-07-12 11:05:55
1.6K0
修改2021-07-12 11:05:55
举报
文章被收录于专栏:iOS混淆iOS混淆

自述

马甲包的本质:

  1. 阶段一减低重复率 ,本人开发初期的版本和目前市面上的其它工具基本相似,主要是‘名称’全局替换这一个基本的功能
  2. 阶段二减少相似度(相同元素的正态分布),目前该工具经过优化及不断重构已经有了很大的改善,目前基本符合这方面要求,详情见以下功能介绍。事物都有两面性,功能越强大混淆耗时越长,如果你的项目很大,混淆几个小时也是有可能的,请不要见怪,后续持续优化中。区分工具优劣其实识别一个工具的优劣,只需看看以下几点:
  3. 能否修改所有的属性、方法,及方法的所有参数名
  4. 修改成员(属性、方法)名称,能否按类区分,还是简单的全局替换
  5. 带block的参数的方法,典型的网络请求例如:+ (BOOL)post:(NSString )url parameters:(NSDictionary )parameters success:(HttpRequestResponse)success error:(HttpRequestResponse)error;
  6. 方法名和属性名改后的名字的长短(本工具能够保证60~80%的改后名称是常见的一个单词,例如:name、title等且保证不与系统冲突,完全摒弃简单的靠大量单词库堆砌以保证命名的唯一性的做法,真正模拟人工开发)
  7. 修改布局(Frame、Masonry、SDAutoLayout)
  8. 插入的是代码还是‘垃圾’(本工具通过封装网络请求,创建自定义控件,文件之间使用MVC模式关联,彻底告别‘垃圾’,实现以假乱真)。
  9. 更别说“还有谁...”能识别宏、区分继承链等上下文关联内容,智能识别不可修改部分例如:+ (void)init;- (void)reloadData;基本能改,做到的有几个呢?”
  10. 正常项目(或者第三方库)混淆完基本不报错(除了一些个别语法不严谨造成混淆后报错)

也欢迎大家使用不同工具混淆测试工程confuse_test或者第三方开源库项目,对比效果。

功能

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. ‘参考项目根路径’设置,读取参考项目的单词、UUID
    5. ‘敏感词’过滤
    6. 版本迭代混淆’,过审后迭代更新,沿用上一次(也可以任意选择版本)混淆记录增量混淆,保持版本连续性,模拟正常开发。优势:做到开发和混淆同步且各自独立。目前主要功能均支持更新混淆
  2. 杀病毒,Xcode中毒,XCSSET Malware
    1. ‘UUID后缀’,病毒会随机插入UUID,会带有固定后缀,正则扫描
    2. ‘脚本路径特征’,病毒编译前会执行一个可疑脚本,支持正则扫描
    3. ‘运行脚本代码标志’,病毒编译前会执行一个可疑脚本代码,支持正则扫描
  3. 资源替换,混淆前指定需要替换的资源文件夹,自动进行同名文件替换,方便快捷
  4. 修改图片,质量修改、大小偏移、局部像素微调、RGBA偏移、模式修改(支持热更新)
  5. 修改文件属性,如创建时间、访问时间、修改时间
  6. 修改项目,无需删除Cocoapods
    1. 可设置‘修改uuid’,彻底翻新
    2. 自定义‘修改target’名称,相关联信息同步更新
  7. 自动备份源码

Objective-C

  1. 删除注释,可‘保留空格’‘保留pragma’设置,利于测试阶段查看
  2. 重命名图片,智能名词替换,自动纠正图片名和xcassets文件夹名不对应的情况
    1. 可设置‘运行拼接名称’,用于运行时通过字符串拼接生成的图片名
    2. 可设置‘重命名关联字符串,用于修改字符串与图片名相等的情况
    3. 可设置‘忽略危险名称’开关
  3. 插入图片,自动插入图片,同时根据上下文及类型模拟人工调用,可指定插入个数
  4. 重命名属性,支持@property的所有类型,优势:
    1. 识别语法,识别类型、继承关系,属性名混淆和类名(包含继承链)关联,自动识别系统属性
    2. 可设置文件名Model后缀过滤
  5. 插入属性,创建、赋值、修改都关联已有类型,智能名词替换
    1. ‘百分比控制’
    2. ‘Model后缀’开关,目的:避免Model归档或者数据转模型失败
    3. 可多次执行,指数x2递增
  6. 重命名方法,近似Xcode的Rename功能,优势:
    1. 语法相关,识别类型、继承关系,支持多参修改,方法名混淆和类名(包含继承链)及类型关联,自动识别系统方法
  7. 插入方法,插入并调用上下文关联方法,告别“垃圾代码”,优势:
    1. 根据方法的返回值类型,在分类中创建相应的方法。同时封装原方法的返回值并利用(局部变量、属性、形参)调用。
    2. 可多次执行,指数x2递增
  8. 修改方法,模拟人工封装调用,优势:
    1. 对原方法进行拆分调用并根据参数类型(支持继承)局部调整,详情见支持参数类型汇总表
    2. 可多次执行,指数x2递增
  9. 重命名全局变量,智能名词替换
  10. 修改全局变量,替换全局变量名、全局变量转化为全局函数、混淆字符串变量值
  11. 修改局部变量,模拟人工封装调用,变量名关联类型,优势:
  12. 局部变量值运行时保持不变,详情见支持类型汇总表
  13. 可多次执行,指数x2递增
  14. 重命名多语言,对直接或间接使用系统方法NSLocalizedStringNSLocalizedStringFromTable的多语言进行修改
  15. 修改字符串,支持任意字符串,加密处理(硬编码->内存),原始字符串保留在注释中方便检查
    1. 设置‘最少长度’过滤
  16. 也可设置‘有效个数’搭配使用
  17. 修改xib、storyboard,自动插入视图,并修改内部结构属性
  18. 修改字体,对项目中使用的字体随机微调,识别宏
  19. 修改颜色,对项目中UI控件颜色随机偏移,识别宏
  20. UI布局偏移,支持Frame、Mansonry、SDAutoLayout常见布局微调
  21. 插入文件,生成其它文件(封装网络请求,创建自定义控件,模拟正常开发),项目中自动调用;注意:(在项目根路径下,会生成"other_xxx_file"的文件夹,子选项Target控制导入方式,若为空,则需要手动导入,将生成的文件夹拖入工程即可;反之,自动导入)
  22. 插入文本,生成json、txt、doc、plist等文本文件,项目中自动调用;注意:(在项目根路径下,会生成"other_xxx_text"的文件夹,生成的文件会自动导入
  23. 重命名类,类名不限制(例如:my、My),可指定添加前缀,优势:
    1. 智能名词替换
    2. 可设置‘重命名同名文件’
    3. 可设置‘重命名相似字符串’,(忽略|相等|包含)三种设置
    4. 新增‘纠正非标准点语法’,针对非标准的点语法调用(方法当做属性调用)

C++

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

Cocos2d-x

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

Swift

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

  1. 重命名属性,基本功能,不做过多描述,优势:
    1. 类似OC重命名属性,识别继承链及嵌套类型,支持存储和计算属性、观察器、包装器、类属性
    2. 可设置文件名Model后缀过滤
  2. 重命名方法,基本功能改名字类似其他工具,不做过多描述,优势:识别继承链嵌套类型,支持(class、struct、enum)的静态方法和实例方法,及可选链等
  3. 修改字符串,识别单行、多行、字符串插值、及扩展字符串,改后由加密和拆分字符组等多种方式自由组合,并保留原有字符的注释,方便检查
    1. 设置‘最少长度’过滤
    2. 也可设置‘有效个数’搭配使用
  4. 重命名类,类名不限制(例如:my、My),识别嵌套类型及typealias,支持class、struct,enum、protocol
    1. 可设置‘重命名同名文件’
    2. 可设置‘前缀’注意:目前Swift和OC混合项目,OC和Swift相互调用的部分需要手动加入黑名单,后续将优化。

图文介绍

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

image.png
image.png

更新日志

v4.5.0(2021.07.04)

  1. 修复OC插入文本,小概率插入的属性重名问题
  2. 修复OC重命名属性,子类重写父类(@property)的set属性方法,混淆后可能不一致问题,以及个别运行时问题
  3. 修复OC插入方法,小概率typeof类型作为形参报错问题

查看更多历史更新记录

感谢反馈

shizu2014myhoniorimbahongtabier008

链接导航

  1. 工具使用教程
  2. 软件使用问答(Q&A)

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 自述
    • 马甲包的本质:
    • 功能
      • 已完成
        • 通用部分
        • Objective-C
        • C++
        • Cocos2d-x
        • Swift
        • v4.5.0(2021.07.04)
    • 图文介绍
    • 更新日志
    • 感谢反馈
    • 链接导航
    相关产品与服务
    应用安全开发
    应用安全开发(Application Security Development,下文中也叫 Xcheck)为您提供优质的代码分析服务。Xcheck 凭借优秀的算法和工程实现,能在极低的误报率和漏报率前提下,以极快的速度发现代码中存在的安全漏洞。Xcheck 采用私有化部署的模式,所以产品使用的整个生命周期,源码都不会流出公司网络,杜绝源码泄露风险。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档