04-加壳和脱壳

何为加壳?


如前面所介绍的,拿到一个App的ipa包可以通过class-dumpHopper Disassembler等工具进行分析,然而当我们利用这些分析手机里从App Store下载的App安装包时,会发现都是一些经过加密的文件,无法进行分析

这是因为App Store对我们上传的App进行了加壳操作,那么何为加壳呢?其实是利用特殊的算法,对可执行文件的编码进行改变(比如压缩、加密),以达到保护程序代码的目的

  • 加壳前,App可执行文件中的代码会被装载到内存中
  • 加壳后,App可执行文件进行加密,其外部会包一层壳程序。由于壳程序本身也是Mach-O文件,程序执行时,就会将壳程序装载到内存中。紧接着壳程序会使用解密算法对App可执行文件进行解密操作,解密完成之后就会去执行文件,将代码装载进内存中
    在这里插入图片描述

如何判断App可执行文件是否加壳?


想要判断App可执行文件是否加壳,主要是通过Crypt ID(App可执行文件加密类型)是否为0判断,如果为0则代表未曾加密、反之非0就代表加密

可以使用以下两种方式进行判断:

  • 使用otool命令行
# 搜索Load Commands中的crypt关键字
otool -l 可执行文件名称 | grep crypt

在这里插入图片描述

  • 利用MachOView查看可执行文件
    在这里插入图片描述

脱壳


既然无法分析加壳后App可执行文件,那么就需要对程序进行脱壳操作

脱壳方式有两种,硬脱壳和动态脱壳:

  • 硬脱壳,直接将壳程序通过执行解密算法得到解密后的可执行文件(iOS通常做法)
  • 动态脱壳,程序运行之后,可执行文件已经被解密,然后从内存中导出

脱壳工具


clutch

首先下载该工具(点击下载),然后分别执行以下步骤

  • 利用iFunBox将Clutch文件拷贝到手机的/usr/bin目录
  • SSH登录手机,执行Clutch命令,若显示Permission denied,则输入以下命令获取权限
chmod +x /usr/bin/Clutch
  • 执行以下命令,列出当前手机可以脱壳的App
Clutch -i

在这里插入图片描述

  • 通过序号或者bundle ID进行脱壳操作(注意:不完美越狱iOS12以上不可用
Clutch -d 2
Clutch -d com.netease.cloudmusic

在这里插入图片描述

dumpdecrypted
  • 下载源代码,然后在源代码目录执行make指令进行编译,获得dylib动态库文件
    在这里插入图片描述
    在这里插入图片描述
  • 将dylib文件拷贝到iPhone上(如果是root用户,建议放/var/root目录)
  • 终端进入dylib所在位置,使用环境变量DYLD_INSERT_LIBRARIES将dylib注入到需要脱壳的可执行文件(通过ps -A查看可执行文件的完整路径
# 此路径就是ps -A指令打印出来的
DYLD_INSERT_LIBRARIES=dumpdecrypted.dylib /var/containers/Bundle/Application/992C4ACA-4B99-4FC2-8BEE-11A3BDA1E9D0/neteasemusic.app/neteasemusic

在这里插入图片描述

  • 执行完成之后,在/var/root目录下会生成neteasemusic.decrypted文件,这就是脱壳之后的可执行文件,然后使用otool命令查看Load Commands可以发现Crypt ID为0
    在这里插入图片描述
dumpdecrypted脱壳时可能出现的错误

dumpdecrypted.dylib未签名错误:

dyld: warning: could not load inserted library 'dumpdecrypted.dylib' into hardened process because no suitable image found.  Did find:
	dumpdecrypted.dylib: code signature in (dumpdecrypted.dylib) not valid for use in process using Library Validation: mapped file has no cdhash, completely unsigned? Code has to be at least ad-hoc signed.
2020-12-15 22:30:03.444 neteasemusic[3758:559109] [OTRLocation: ../Tweak/Tweak.xm:121] ERROR: logos: nil class SpringBoard
2020-12-15 22:30:03.811 neteasemusic[3758:559109] [SnowBoard Launcher] Loader check passed. Loading SnowBoard...
2020-12-15 22:30:03.859 neteasemusic[3758:559132] [SnowBoard] reloadWithoutExtensions (0) took 0.000333 s
[2020/12/15 22:30:04:035] [NMLLogger:26] ---------- application start, version: 7.3.01 ----------
[2020-12-15 22:30:04:070] file:NELPLocationManager.m line:76)<<<<[NELPLocationManager authorizationStatus] = 0
Abort trap: 6

解决办法就是给dumpdecrypted.dylib签名,输入以下指令(前提在dumpdecrypted.dylib目录下

ldid -S dumpdecrypted.dylib
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值