iOS逆向:加壳与脱壳

目录
一,加壳
二,脱壳
三,工具
四,验证

一,加壳

1,介绍
  • App Store会对ipa包中的可执行文件进行加壳操作

  • 加壳就是利用特殊的算法,对可执行文件进行加密,以达到保护程序代码的目的

2,加壳前后
  • 加壳前:可执行文件能够直接在内存中运行
  • 加壳后:壳程序会一同被加载进内存,壳程序会对可执行文件进行解密,这样可执行文件就能够运行了
3,加壳的可执行文件是无法反编译的
  • 从iPhone上导出喜马拉雅的可执行文件
  • class-dump:只导出一个无效.h文件
  • Hopper:看不到类名、方法名等信息

二,脱壳

1,介绍
  • 脱壳就是将壳程序去掉,并将已加密的可执行文件进行解密
2,方法
  • 硬脱壳:直接执行解密算法(常用方法)
  • 动态脱壳:将壳程序加载到内存中,壳程序会对可执行文件进行解密,然后导出可执行文件即可

三,工具

1,用Clutch脱壳(下载地址:https://github.com/KJCracks/Clutch/releases
  • 下载并修改名称
  • Clutch拷贝到iPhone的/usr/bin目录下
  • 赋予Clutch权限:chmod +x /usr/bin/Clutch
  • 查看iPhone上已安装的APP:Clutch -i
  • 开始脱壳:Clutch -d [APP序号]
喜马拉雅-失败
微信-成功
  • 脱壳成功后会生成一个新的ipa
2,用dumpdecrypted脱壳(下载地址:https://github.com/stefanesser/dumpdecrypted
  • 下载并执行make命令,生成dumpdecrypted.dylib动态库
  • 将动态库拷贝到iPhone的/var/root目录下
  • 查看可执行文件路径:先运行APP,然后执行ps -A命令
  • 开始脱壳:DYLD_INSERT_LIBRARIES=dumpdecrypted.dylib [可执行文件路径]
  • 脱壳成功后会生成一个新的可执行文件
3,用frida-ios-dump脱壳
  • 在Mac上配置frida环境:sudo pip install frida
  • 下载frida-ios-dump工具:git clone https://github.com/AloneMonkey/frida-ios-dump.git
  • dump.py文件中的端口号改为10010(跟登录iPhone所用端口号保持一致即可)
  • 查询APP的bundleId./dump.py -l
  • 先启动APP,然后开始脱壳:./dump.py bundleId
  • 脱壳成功后会生成一个新的ipa
4,比较
  • Clutch:很多APP都会失败
  • dumpdecrypted:只能对可执行文件进行脱壳,对于动态库不太好处理,有些APP会将代码封装成动态库
  • frida-ios-dump:能处理动态库且成功率高(推荐使用)
腾讯视频-动态库

四,验证

1,查看是否已脱壳
  • MachOView
未脱壳
已脱壳
  • otool
未脱壳
已脱壳
2,脱壳的可执行文件才能进行反编译
  • class-dump
  • Hopper
本文章仅供学习交流,如有侵权,请联系删除,谢谢!
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容