什么是逆向工程
是一种产品设计技术再现过程,即对一项目标产品进行逆向分析及研究,从而演绎并得出该产品的处理流程、组织结构、功能特性及技术规格等设计要素。
简而言之,通过反编译等途径获取app的源码结构,进行分析或修改等从而达到某种目的。
应用场景
安全相关
- 评定安全等级
- 逆向恶意软件
- 检查软件后门
- 去除软件使用限制
开发相关
- 逆向系统API
- 借鉴别人的软件
步骤
1. 敲壳
上传到App Store的app都会经过苹果的一系列复杂的加密,不能直接对下载的文件进行解析,需要绕过app文件的加密机制。
iOS APP的签名原理
iOS开发者账号类别
个人开发者 | 公司开发者 | 企业开发者 |
---|---|---|
账号申请速度快,无需公司注册信息 | 账号申请速度慢,需要公司注册信息 | 账号申请速度慢,需要公司注册信息 |
产品可以上架APP到App Store | 产品可以上架到App Store | 开发的app可以不经过苹果审核,直接分发给用户安装使用,不能上架App Store |
产品开发者信息显示为个人信息,对公司和开发团队起不到宣传作用 | iTunes里可以查到公司信息及相关产品,宣传效果不错 | 通过官网、PP助手等三方渠道分发软件 |
无法创建团队,添加团队成员至开发者账号 | 可以创建团队,邀请成员共同管理账号信息 | 可以创建团队,邀请成员共同管理账号信息 |
99$ /year
|
99$ /year
|
299$ /year
|
敲壳步骤
-
在mac终端上通过ssh进入iPhone控制台
-
查找到要砸壳软件的目录
iOS中的文件夹是封闭的,程序运行在系统文件夹,是不能被查看到的
-
将可执行文件导出到电脑上
iOS 软件在运行时是解密的
Mach-O文件包含了程序的基本信息和源码
dumpdecrypted
可以在应用在运行时将Mac OS
和iOS
中的可执行文件Mach-O
文件导出,Mach-O
文件包含了软件的头文件和具体的执行代码。
2. 反编译
获取软件头文件
以OC语言开发的iOS程序,代码结构分为声明文件(头文件)和执行文件
使用class-dump
命令可以对出砸壳出的解密文件进行解析,得到软件代码结构中的头文件,从而能了解到代码的结构框架和对外声明的方法。
还原源代码
以伪代码的形式最大程度的还原源代码
3. 修改源码
4. 重签名
iOS App在安装到手机的时候会进行证书签名认证
在之前的操作过程中,app的加密已经被破坏,这时候再重新打包是不能成功安装到手机中的,需要对app使用新的开发者证书重新签名。
这种重签名的机制被广泛应用于各大APP助手平台以及破解软件中
5.打包
软件开发过程中,在打包时会将对软件包进行签名