iOS 审核 4.3a【二进制加固】

我们应该知道,面对iOS 上架 遇到4.3a的问题或者制作马甲包.最基础的操作就是混淆代码

尤其是我们专业做上架的,需要对各种语言的编译模式,产物,以及ipa构成都需要非常了解, 每种语言开发的App的编译产物不同,针对不同的编译产物做不同的处理方式

有一些经验的开发者, 应该知道 目前的混淆方式大概可以分为是三种


1: 源代码混淆

顾名思义, 就是通过处理源代码,让代码达到翻新的效果, 比如修改一些静态特征,代码结构

难度:  低

优点: 效率高,限制低

缺点:

1: 难以维护最难级别,  源代码改动之后,难以辨别, 对维护多个项目造成非常大的工作量

2: 需要针对各种语言分别开发,比如当前开发iOS的app 的语言有iOS , swift, c++, 需要针对各种不同的语言开发不同的混淆工具, 这个工作量太大, 能够开发iOS的app 的语言高达十几种, 制作十几种语言的混淆工具 根本不现实

2: 编译器混淆

这种混淆方式不需要处理源代码, 直接通过xcode在编译时混淆,也就是在xcode将源代码编译成.o的时机接入混淆,替换符号

难度: 中

优点: 不需要改动源代码, 不涉及到维护难度,不区分语言, 可混淆各种语言的代码

缺点:

1: 处理范围小, 只能对一些符号进行替换, 比如你想改变一些代码结构, 这个基本无法实现.
2: 能力有限,比如一些静态库在xcode编译前就已经被编译好, 所有静态库无法替换符号 ,也就是说他只能处理编译列表的文件

3: 替换符号可能会造成闪退,因为有些访问是通过kvc来完成的,如果符号被替换了, kvc还是使用原来的字符串去访问就会造成闪退或者功能异常

3: 直接修改二进制-加固

你是否听到了熟悉的词语-"加固", 我们这行把直接修改二进制的方法喜欢叫成" 加固", 直接修改二进制,达到混淆的效果,也就是说我们直接最终编译的ipa中的可执行文件

举个例子, 比如我们正在考试.

1: 修改源代码的方式相当于,你勤勤恳恳的学习,然后提交试卷后,等待老师审查
2: 编译器的方式相当于, 你在考试的提交试卷的时候替换了别人的考卷,等到老师审查

3: iOS加固的方式相当于, 直接修改考试分数

我们简单的了解加固的概念后,进入正题:

难度指数:满级

优点:非常多,不需要关注源代码,不需要打开xcode, 你只需要给我一个ipa, 我返回给你一个ipa

我们先简单了解什么是二级制: 

我们通过拆解ipa, 你往往会看到一个黑色的小盒子, 这就是一个可执行文件 ,我们简称二进制,当然这个文件不能直接打开或者双击执行


这个可执行文件的大小, 往往取决于你的代码量, 代码量越大, 这个文件越大,这个里面是什么东西呢? 


机器码

没错这个二进制里面全是机器码,我们使用xxd命令查看最原始的内容

没错这个就是二进制的最原始的内容,但是这种机器码我们根本无法阅读, 

汇编代码

这些原始的机器码(十六进制字节)正是由汇编代码(Assembly Code)转换(“汇编”)而来的。这个转换过程由汇编器(Assembler) 完成。

我们使用otool -tV 命令进行反汇编查看内容


是不是发现了一些带语义的符号了?  但是仍然难以阅读, 我们来翻编译更高级的语言


高级语言

反编译的目标是将机器码/汇编代码转换回更抽象、可读性更高的伪代码, 还需要一个解析的过程,不同语言所在二进制的位置不同,  解析方式也不同,这里不过多介绍, 我们直接来看解析后的结果

这个是不是就是你最熟悉的oc代码了? 

它们的层级关系是:


高级语言 (C/C++/Swift) -> 编译器 -> 汇编代码 (Assembly) -> 汇编器 -> 机器码 (Machine Code)

我们继续关注二进制里面的结构,看看它内部是怎么划分的, 我们使用size-m 查看二进制的概览情况

我们发现内容非常多, 非常乱, 不过像我看多了就习惯了, 大致就是分为几个段, 段里面又被分成了各种小的节

三大段

1: __LINKEDIT (符号表主要存放位置)

2: __TEXT (代码主要存放位置)

3: __DATA (静态变量主要存放位置)

我们发现text段中的text节 占据了主要的体积 , 没错, 这就是你的源代码主要存放的位置, 我们加固重点就是处理这个text节 

了解了以上之后你对iOS加固应该有了一个简单的了解, 我们下片文章正式开始进行加固 

下片文章 : 尝试直接修改text段,的 text节


遇到4.3a就找到我

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/94951.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/94951.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用Python脚本执行Git命令

说明:本文介绍如何使用Python脚本在某个目录下执行Git命令 编码 直接上代码 import os import subprocessdef open_git_bash_and_run_command(folder_path, git_command):# 检查文件夹路径是否存在if not os.path.exists(folder_path):print(f"错误&#xff1a…

2025docker快速部署Nginx UI可视化管理平台

1、nginx-ui简介 Nginx UI 是一个开源项目,旨在为著名的 Web 服务器和反向代理软件 Nginx 提供一个基于网页的图形化用户界面(GUI)。它的核心目标是让 Nginx 的配置和管理变得可视化、简单化和自动化,从而降低其使用门槛&#xf…

数据防泄与最小可见:ABP 统一封装行级安全(RLS)+ 列级脱敏

数据防泄与最小可见:ABP 统一封装行级安全(RLS) 列级脱敏 TL;DR:把“谁能看到哪些行、字段可见到哪一位”下沉到数据库强制层(PostgreSQL:RLS 安全视图;SQL Server:RLS DDM&#x…

网络编程 04:TCP连接,客户端与服务器的区别,实现 TCP 聊天及文件上传,Tomcat 的简单使用

一、概述 记录时间 [2025-08-29] 前置文章: 网络编程 01:计算机网络概述,网络的作用,网络通信的要素,以及网络通信协议与分层模型 网络编程 02:IP 地址,IP 地址的作用、分类,通过 …

最小生成树——Kruskal

标题什么是生成树? 对于一张无向图,由nnn个顶点和n−1n-1n−1条边构成地联通子图,叫做这个无向图 生成树 最小生成树就是指边权之和最小的生成树 如何求最小生成树? Kruskal 介绍: 存图时只存每条边地起点、终点,…

ADFS 和 OAuth 的区别

ADFS 和 OAuth 的区别 ADFS(Active Directory Federation Services)和 OAuth 都是身份认证与授权领域的技术,但它们的设计目标、应用场景和实现方式有显著区别。以下从核心定义、技术特性、应用场景等方面详细对比: 核心定义与设计目标 技术 核心定义 设计目标 ADFS 微软…

神经网络参数量计算详解

1. 神经网络参数量计算基本原理 1.1 什么是神经网络参数 神经网络的参数主要包括: 权重(Weights):连接不同神经元之间的权重矩阵偏置(Bias):每个神经元的偏置项批归一化参数:BatchNo…

手写链路追踪

1. 什么是链路追踪 链路追踪是指在分布式系统中,将一次请求的处理过程进行记录并聚合展示的一种方法。目的是将一次分布式请求的调用情况集中在一处展示,如各个服务节点上的耗时、请求具体到达哪台机器上、每个服务节点的请求状态等。这样就可以轻松了解…

从零开始的python学习——常量与变量

ʕ • ᴥ • ʔ づ♡ど 🎉 欢迎点赞支持🎉 个人主页:励志不掉头发的内向程序员; 专栏主页:python学习专栏; 文章目录 前言 一、常量和表达式 二、变量类型 2.1、什么是变量 2.2、变量语法 (1&a…

基于51单片机环境监测设计 光照 PM2.5粉尘 温湿度 2.4G无线通信

1 系统功能介绍 本设计是一套 基于51单片机的环境监测系统,能够实时采集环境光照、PM2.5、温湿度等参数,并通过 2.4G无线模块 NRF24L01 实现数据传输。系统具备本地显示与报警功能,可通过按键设置各类阈值和时间,方便用户进行环境…

【Flask】测试平台开发,产品管理实现添加功能-第五篇

概述在前面的几篇开发文章中,我们只是让数据在界面上进行了展示,但是没有添加按钮的功能,接下来我们需要开发一个添加的按钮,用户产品功能的创建和添加抽公共数据链接方法添加接口掌握post实现和请求数据处理前端掌握Button\Dilog…

循环高级(2)

6.练习3 打印九九乘法表7.练习3 制表符详解对齐不了原因:name补到8zhangsan本身就是8,补完就变成16解决办法:1.去掉zhangsan\t,这样前后都是82.name后面加2个\t加一个\t,name\t就是占8个,再加一个\t,就变成…

盒马生鲜 小程序 逆向分析

声明 本文章中所有内容仅供学习交流使用,不用于其他任何目的,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关! 逆向分析 部分python代码 params {&…

【Linux系统】线程控制

1. POSIX线程库 (pthreads)POSIX线程(通常称为pthreads)是IEEE制定的操作系统线程API标准。Linux系统通过glibc库实现了这个标准,提供了创建和管理线程的一系列函数。核心特性命名约定:绝大多数函数都以 pthread_ 开头&#xff0c…

【Spring Cloud Alibaba】前置知识

【Spring Cloud Alibaba】前置知识1. 微服务介绍1.1 系统架构的演变1.1.1 单体应用架构1.1.2 垂直应用架构1.1.3 分布式架构1.1.3.1 SOA架构1.1.4 微服务架构1. 微服务介绍 1.1 系统架构的演变 随着互联网的发展,网站应用的规模也在不断的扩大,进而导致…

2025互联网大厂Java面试1000道题目及参考答案

Java学到什么程度可以面试工作? 要达到能够面试Java开发工作的水平,需要掌握以下几个方面的知识和技能: 1. 基础扎实:熟悉Java语法、面向对象编程概念、异常处理、I/O流等基础知识。这是所有Java开发者必备的基础,也…

记录:HSD部署(未完成)

建数据库 相关文档:Confluence准备:CA文件和备份用的aws key。 CA文件:在namespace添加trust-injectionenabled的标签,会自动生成。 aws key:生成cnpg-backup-creds的secret。安装: 从git仓库获取values模…

【AI】提示词与自然语言处理:从NLP视角看提示词的作用机制

提示词与自然语言处理:从 NLP 视角看提示词的作用机制在人工智能快速发展的今天,大模型成为了人们关注的焦点。而要让大模型更好地理解人类意图、完成各种任务,提示词扮演着关键角色。从自然语言处理(NLP)的角度来看&a…

2025.8.29机械臂实战项目

好久没给大家更新了,上周末大学大四开学,所以停更了几天,回来后在做项目,接下来的几篇文章,给大家带来几个项目,第一个介绍的是机械臂操作,说是机械臂操作,简单来说,就是…

【机器学习基础】机器学习的要素:任务T、性能度量P和经验E

第一章 机器学习的本质与理论框架 机器学习作为人工智能领域的核心支柱,其理论基础可以追溯到20世纪中叶的统计学习理论。Tom Mitchell在其1997年的经典著作《Machine Learning》中给出了一个至今仍被广泛引用的学习定义:"对于某类任务T和性能度量P,一个计算机程序被认…