iOS砸壳操作教程

在教程开始前,简单说下为什么要砸壳,砸壳后我们能做什么。

在 App Store 看到感兴趣的 APP ,我们会希望了解它是如何实现的,可以从技术角度进行源码剖析。比如研究该 APP 的优点、游戏是什么引擎开发的、编码风格如何、用到了哪些三方库等等。但从 App Store 获取的应用都是经过加壳保护的,要想着手进行分析,必须先跨过第一道门槛:砸壳。

所以说,砸壳是对 APP 脱壳的逆向操作。为了深入解析想了解的 APP ,让我们开始砸壳之旅吧。


一、第一步,为手机越狱

1、先下载一个checkra1n,下载链接:https://checkra.in/

2、连接苹果手机,确保手机被识别后点击开始按钮

3、根据checkra1n的指示开始操作,越狱成功后,可以在手机上看到checkra1n的App(在越狱完成之前,不要断开手机与MAC的连接)

4、打开checkra1n,安装cydia


二、配置手机环境

在cydia中搜索并安装OpenSSH、Cycript,在cydia中搜索添加frida源(https://build.frida.re),并安装Frida插件,用于后续的砸壳(frida要根据手机系统选对应的版本)

三、下载需要的APP

去App Store下载你看好的,美丽的APP,并且启动它

四、关键操作,对APP砸壳

网上可以砸壳的库有好几个,下面介绍dumpdecrypted、frida这两个库

方法

优点

缺点

dumpdecrypted

环境配置简单

操作步骤较多,生成 .decrypted文件,需手动替换

frida

一键砸壳,生成ipa包

1、环境配置复杂

2、砸壳过程如果中断,需从头开始

【dumpdecrypted】方式介绍

下载地址:https://github.com/stefanesser/dumpdecrypted

(ps:源代码只脱壳包的可执行的文件,没有砸framework中的库,可参考这个版本修改代码https://github.com/AloneMonkey/dumpdecrypted.git

1、生成dumpdecrypted.dylib并签名

(注意:生成的dylib要匹配手机的系统版本,否则会砸壳失败。 直接在终端make,会根据电脑上的xcode版本生成对应版本的dylib;若是要生成其他版本,可以用源代码新建动态库,自定义最低版本。)

1.1打开终端,进⼊dumpdecrypted目录,输入make,生成dumpdecrypted.dylib

1.2 获取电脑上的签名证书,对dumpdecrypted.dylib进⾏签名

securityfind-identity -v -p codesigning

codesign--force --verify --verbose --sign "iPhone Developer: xxxxxxx" dumpdecrypted.dylib

2、找到应用砸壳并保存到本地(步骤中需要输入密码地方,默认密码是alpine)

2.1连接iPhone(ip为手机链接的网络的ip)

ssh root@

2.2 iPhone启动“待砸壳应⽤用”,最大化终端窗⼝口,打印iPhone当前所有进程

ps -e

2.3找到“待砸壳应⽤”所在进程(自己安装的App路径一般以/var/开头)

以下图为例,可以看到,进程编号: 7219,应⽤路径为/var/containers/Bundle/Application/6F77740B-4DD3-4508-8F54-0F407B47EC8D/Strategy click ejection.app/Strategy click ejection

2.4根据进程编号找到应⽤沙盒路路径(快捷键"control+D"退出cycript

cycript -p 7219 #执⾏行行之后命令⾏行行会以cy#开头

cy# [[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask][0]

找到沙盒路径: /var/mobile/Containers/Data/Application/64DA79D7-D0F3-4F67-B15D-328EE91EE64C/Documents/

2.5新建终端窗⼝,将dumpdecrypted.dylib拷⻉至应⽤沙盒中

scpdumpdecrypted.dylib root@:/var/mobile/Containers/Data/Application/64DA79D7-D0F3-4F67-B15D-328EE91EE64C/Documents/

2.6回到链接iPhone的终端,查看应⽤沙盒中是否存在dumpdecrypted.dylib文件

2.7使⽤dumpdecrypted.dylib动态库对应用进行破壳(若应用路径中有空格,需用双引号,否则会失败),破壳成功后,会在应⽤沙盒⽬目⽣生成.decrypted文件

DYLD_INSERT_LIBRARIES=dumpdecrypted.dylib /var/containers/Bundle/Application/6F77740B-4DD3-4508-8F54-0F407B47EC8D/"Strategy click ejection".app/"Strategy click ejection"

2.8拷⻉沙盒文件和应⽤文件⾄本地 (需新开一个窗口)

scp-r root@:/var/containers/Bundle/Application/6F77740B-4DD3-4508-8F54-0F407B47EC8D/* <存放应用文件的本地路径>

scp-r root@:/var/mobile/Containers/Data/Application/64DA79D7-D0F3-4F67-B15D-328EE91EE64C/* <存放沙盒文件的本地路径>

2.9拿到了ipa和已砸壳的xxx.decrypted文件,需手动替换掉ipa中Mach-O文件,生成新的ipa包

otool-l <Mach-O文件> | grep cryptid #判断mach-O文件是否脱壳了,1代表有壳

【frida-ios-dump】方式介绍

下载地址:https://github.com/AloneMonkey/frida-ios-dump

1、电脑安装frida环境(安装的版本要和手机的对应)、安装frida-ios-dump所需的依赖

pip3 instanll frida

sudo pip3 install -r requirements.txt --upgrade

1.1根据手机连接的网络修改dump.py中的host和port

2、找到应用砸壳

2.1 显示手机上的应用

python3 dump.py -l


2.2用应用的名字或者包名砸壳

python3 dump.py [app name]/[app bundle]

四、Dump二进制文件

使⽤用class-dump提取破壳应⽤用Mach-O文件中存储的头文件信息。

下载地址:http://stevenygard.com/projects/class-dump/

1、安装class-dump,赋予class-dump执⾏权限

sudo chmod 777 class-dump

2、提取头文件信息

class-dump -H -o <文件夹保存路径>

五、常见问题与解决方法

1、连接手机时报错


原因:known_hosts是记录远程主机的公钥的文件,之前重装个系统,而保存的公钥还是之前系统的系统公钥,在ssh链接的时候首先会验证公钥,如果公钥不对,那么就会报错

解决:使用shh-keygen 命令把对应的ip公钥信息清除

ssh-keygen-R

2、dumpdecrypted砸壳时报错Abort trap: 6

原因:dumpdecrypted.dylib版本跟手机系统版本不匹配

解决:用dumpdecrypted源码新建动态库,自定义最低版本

3、安装frida依赖报错

解决:在pip命令中加入–use-feature=2020-resolver参数就可以了, 比如

pip3install xxx --use-feature=2020-resolver

4、frida执行dump.py报错

(1)报错1

needgadget to attach; its default location is: .cache/frida/gadget-ios.dylib

解决:下载对应版本的dylib放到缓存位置(https://github.com/frida/frida/releases/)

mkdir -p ~/.cache/frida

cp <下载的dylib> ~/.cache/frida/gadget-ios.dylib

(2)报错2

File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/frida/core.py", line 383, in _on_message

callback(message,data)

File"dump.py", line 119, in on_message

scp.get(scp_from,scp_to)

......

解决:修改dump.py脚本

- #!/usr/bin/env python

+ #!/usr/bin/env python3

#-*- coding: utf-8 -*-

(3)报错3

1、failed to get the task for process <进程编号>

2、unable to attach to the specified process

原因:cydia没有安装frida或者安装的版本和手机版本不匹配


来源-微信公众号:三七互娱技术团队

出处:https://mp.weixin.qq.com/s/--DG1-Gk_ppi0KjTSbYwIg

展开阅读全文

页面更新:2024-05-03

标签:脱壳   终端   进程   命令   原因   版本   操作   环境   文件   教程   系统   手机

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号

Top