iOS逆向系列-脱壳
2024-09-05 19:57:35
概述
通过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后缀名去掉。
最新文章
- JS作用域及call
- centos6升级python2.7
- git代码库误操作还原记录
- python AES 双向对称加密解密
- JDK中常见的package
- Differential Geometry之第三章曲面的局部理论
- .NET操作JSON
- VS2010与QT的集成开发环境
- 『重构--改善既有代码的设计』读书笔记----Introduce Foreign Method
- 微信企业号 出现redirect_uri unauthorized 50001 解决办法
- CentOS 通过yum安装web环境
- vue-router.esm.js:1905 TypeError: Cannot convert undefined or null to object
- poj 3080 Blue Jeans (暴力枚举子串+kmp)
- 小程序升级实时音视频录制及播放能力,开放 Wi-Fi、NFC(HCE) 等硬件连接功能
- [UE4]结构体
- KubeletNotReady runtime network not ready: NetworkReady=false reason:NetworkPluginNotReady message:docker: network plugin is not ready: cni config uninitialized
- node模块加载机制。
- Java编程思想学习笔记——接口
- Codeforces Round #426 (Div. 2)A B C题+赛后小结
- Zeal - 开源离线开发文档浏览器