iOS逆向系列-脱壳
概述
通过iOS逆向系列-逆向App中使用class-dump工具导出App的Mach-O文件所有头文件、Hopper工具分析App的Mach-O文件代码大概实现。但是这些前体是App的Mach-O没有被加壳的。通过pp助手下载安装的App都是经过脱壳的如果我们从Appstore下载安装的App都是苹果加壳的。
加壳就是利用特殊的算法,对可执行文件的编码进行改变(比如压缩、加密),以达到保护程序代码的目的。
我们编写的程序的Mach-O文件上传到苹果后台,苹果会对我们的程序的Mach-O文件进行做加密处理并且外部添加一个壳程序。
机加载App时外部的课程序会对加密的应用的Mach-O文件进行解密,然后执行。

判断程序是否加壳
通过otool命令:otool -l 可执行文件 | grep crypt
查看Load Commands -> LC_ENCRYPTION_INFO-> Crypt ID的值,
0代表未加密

脱壳方式
"脱壳"就是摘掉壳程序,将未加密的可执行文件还原出来(有些人也称为“砸壳”)。
脱壳主要有2种方法:硬脱壳、动态脱壳。
动态脱壳的原理:是当程序加载进内从外部的壳程序会对加密的执行文件解密,这个时候我们从内从导出这个解密的执行文件。这个比较复杂,我们下面介绍通过硬脱壳的方式。
硬脱壳就的原理:是直接就是通过解密算法进行解密。
iOS中有很多的脱壳工具AppCrackr、Crackulous都已经过时了,下面我们使用最新的常用脱壳工具Clutch、dumpdecrypted。
Clutch方式脱壳
- 下载最新的ClutchRelase版本:https://github.com/KJCracks/Clutch/releases

- 将下载下来的Clutch的文件名版本号去掉。将Clutch拷贝到IPhone的/usr/bin/目录下。可以行命令拷贝
scp -P 端口 Clutch文件路径 root@localhost:/usr/bin/Clutch。

- 最好在IPhone上给Clutch添加权限
chmod +x /usr/bin/Clutch - 列出手机当前安装的需要脱壳的应用

- 输入APP序号或者Bundle Id进行脱壳操作:
Clutch -d APP序号或BundleId

dumpdecrypted方式脱壳
- GitHub下载dumpdecrypted源码。然后在源代码目录执行
make指令进行编译,获得dylib动态库文件

- 将dylib文件拷贝到iPhone上(如果是root用户,建议放/var/root目录
- 使用环境变量
DYLD_INSERT_LIBRARIES将dylib注入到需要脱壳的可执行文件(可执行文件路径可以通过ps -A查看获取)
DYLD_INSERT_LIBRARIES=dumpdecrypted.dylib可执行文件路径

生成的脱壳的可执行文件在dumpdecrypted.dylib所在的目录下,也就是/var/root

可将生成脱壳的.decrypted后缀名去掉。
iOS逆向系列-脱壳的更多相关文章
- iOS逆向系列-逆向APP思路
界面分析 通过Cycript.Reveal. 对于Reveal安装配置可参考配置iOS逆向系列-Reveal 通过Reveal找到内存中的UI对象 静态分析 开发者编写的所有代码最终编译链接到Mach ...
- iOS逆向系列-tweak补充
tweak加载资源 开发自己的deb插件需要加载自己的资源,比如图片资源.iOS中常用的两种加载图片资源的方式: + (nullable UIImage *)imageNamed:(NSString ...
- iOS逆向系列-Mach-O文件
概述 Mach-O是Mach object的缩写,是Mac\iOS上用于存储程序.库的标准格式. 常见的Mach-O文件 属于Mach-O格式的文件类型有. 可以在xnu源码中,查看到Mach-O格式 ...
- iOS逆向系列-Reveal
概述 Reveal是一款调试iOS程序UI界面的神器. 官网地址:https://revealall.com 下载:https://revealapp.com/download/ 建议下载Reveal ...
- iOS逆向系列-Cycript
概述 Cycript 是Objective-C++.ES(JavaScript).Java等语法的混合物. 可以用来探索.修改.调试正在运行的Mac\iOS App. 通过Cydia安装Cycript ...
- iOS逆向系列-动态调试
Xcode调试App原理 Mac安装了Xcode Xcode的安装包中包含了debugserver 可执行类型的Mach-O文件,iPhone第一次连接Xcode调试会将Xcode中的debugser ...
- iOS逆向系列-theos
概述 theos是GitHub开源的一个项目,通过nic.pl创建tweak项目.通过编写我们注入代码,然后执行编译.打包.安装等操作将代码注入iPhone安装的制定程序. theos环境配置 安装签 ...
- 我的iOS开发系列博文
之前目录性的总结了发表过的关于OC方面的文章,今天在目录性的总结一下有关iOS开发的文章.走过路过不要错过哦,今天的博文也全都是干货.写技术博客与大家交流一下思想也是不错的. 下面是我的技术博客中有关 ...
- iOS 逆向之ARM汇编
最近对iOS逆向工程很感兴趣. 目前iOS逆向的书籍有: <Hacking and Securing IOS Applications>, <iOS Hacker's Handboo ...
随机推荐
- PHP PDO 大对象 (LOBs)
应用程序在某一时刻,可能需要在数据库中存储"大"数据. "大"通常意味着"大约 4kb 或以上",尽管某些数据库在数据达到"大&q ...
- usb基础知识以及枚举过程介绍
一个USB设备有一个设备描述符,设备描述符里面决定了该设备有多少种配置,每种配置描述符对应着配置描述符:而在配置描述符中又定义了该配置里面有多少个接口,每个接口有对应的接口描述符:在接口描述符里面又定 ...
- JZOJ5153:树形图求和
Description Input Output HINT 题解: 一种很直观的想法是通过矩阵生成树求树形图方法数ans以及不包含某一条边i的树形图方法数ans[i],则答案为Σ(ans-ans[i] ...
- DELPHI 让子窗体显示在任务栏上
重载 CreateParams 方法即可 声明: procedure CreateParams(var Params: TCreateParams);override; procedure TForm ...
- Annotation详解
转自:http://www.doc88.com/p-995532241886.html 首先我们定义一个简单的注解 package com.qjy.annotation; import java.la ...
- QTableWidget学习
一.这次项目需要用到,可以在tablewidget中添加item,并且可以通过鼠标的右键选项进行一些打开.删除等操作. 1.在构造函数中定制右键菜单选项 ui.tableWidget_2->se ...
- css中的zoom的作用
1.检查页面的标签是否闭合不要小看这条,也许折腾了你两天都没有解决的 CSS BUG 问题, 却仅仅源于这里.毕竟页面的模板一般都是由开发来嵌套的,而 他们很容易犯此类问题.快捷提示:可以用 Drea ...
- 史上最全Html和CSS布局技巧
单列布局水平居中 水平居中的页面布局中最为常见的一种布局形式,多出现于标题,以及内容区域的组织形式,下面介绍四种实现水平居中的方法(注:下面各个实例中实现的是child元素的对齐操作,child元 ...
- idea中项目发布到svn服务器
1. 在svn上创建仓库 https://5VY9MN7OCQV7B9N/svn/KH75-myhouse 2. 将idea的项目上传至svn服务器 项目变红 上传完成项目变成绿色 查看svn服务有文 ...
- 2019-5-8-WPF-绑定命令在-MVVM-的-CanExecute-和-Execute-在按钮点击都没触发可能的原因...
title author date CreateTime categories WPF 绑定命令在 MVVM 的 CanExecute 和 Execute 在按钮点击都没触发可能的原因 lindexi ...