App脱壳
在iOS开发中,有时候想看下其他App里面用了哪些开源库,这时候就可以通过工具导出它的头文件来看。
从AppStore下载的App( 以下简称StoreApp) 是被苹果加密过的( 从其他渠道下载的一般没有加密) , 可执行文件被套上了一层保护壳, 而class-dump无法作用于加密过的App。 在这种情况下, 想要获取头文件, 需要先解密App的可执行文件, 俗称“砸壳”。 dumpdecrypted就是由越狱社区的知名人士Stefan Esser( @i0n1c) 出品的一款砸壳工具, 被越狱社区广泛运用在iOS逆向工程研究中。 引自 《iOS应用逆向工程第二版》
当然前提是你有一台越狱的设备哦。
这里就记录下,本人脱壳的步骤。
前提条件
- 越狱设备
- dumpdecrypted:用于脱壳
下载地址:https://github.com/stefanesser/dumpdecrypted/archive/master.zip
下载后,解压运行make编译,就会在当前目录下生成dumpdecrypted.dylib文件

注:如果出现“make: Nothing to be done for ‘all’”,说明目录下已经有dumpdecrypted.dylib了。
3.class-dump:用于导出头文件
下载地址:http://stevenygard.com/
下载后,把class-dump放到/usr/bin,这样在终端就可以使用class-dump命令了。
步骤
上传dumpdecrypted.dylib到目标APP的Documents下
我们可以使用iFunBox或scp都可以。

确定APP的可执行文件的路径

把目标应用运行起来,然后通过SSH连接到设备上,运行ps -e来打印所有进程信息。(设备上要先安装Open SSH,在Cydia里面查找安装)


你也可以用91助手查看具体应用的安装目录:

执行命令脱壳
定位到Documents下,执行如下命令


此时就会在Documents下,生成一个xxx..decrypted的文件,这就是脱壳的文件了。
使用class-dump导出头文件
把xxx.decrypted复制到mac上执行命令
![]()
就会在outHeader目录里面,生成出App的所有头文件。
之前由于没有加–arch armv7,而导致没有生成头文件。原因可能是APP里面包含了多个架构的可执行文件,因此需要针对架构导出头文件。
我们也可以用MachOView来查看下加密标志位。
App是有两个架构:armv7和arm64

脱壳前:

脱壳后:

arm64下的加密标志为1,说明arm64的架构是没有脱壳的。

我们使用命令,是得不到头文件的。
![]()
是因为我使用的是iPhone 5c,它的架构是arm7s。
后来我是了一台iPhone6的话,使用–arch arm64这个命令是可以的,反而用–arch armv7就不行了。
因此,初步断定要使用你APP安装的设备一样的架构才可以。
最后在总结下:
- 上传dumpdecrypted.dylib文件到设备上
- ssh上设备,执行DYLD_INSERT_LIBRARIES=dumpdecrypted.dylib命令
- 用class-dump工具导出头文件
参考资料
- 如何实现远程连接(SSH)iPhone/iPad?
- 用dumpdecrypted给App砸壳
- class-dump 和 iOSOpenDev 的使用
- 使用MachOView辅助破解AppStore应用
Apple移动设备默认指令集
- armv6 设备: iPhone, iPhone2, iPhone3G, 第一代、第二代 iPod Touch
- armv7 设备: iPhone3GS, iPhone4, iPhone4S
- iPad, iPad2, iPad3(The New iPad), iPad mini
- iPod Touch 3G, iPod Touch4
- armv7s设备: iPhone5, iPhone5C, iPad4(iPad with Retina Display)
- arm64 设备: iPhone5S, iPad Air, iPad mini2(iPad mini with Retina Display)
ipa破解
使用工具:
- 一台越狱设备(本人的是iOS 8 iPhone5c)
- Clutch
- MobileTerminal(用SSH连接也可以)
破解步骤
在Cydia 里面添加数据源
http://apt.so/brian0817 安装MobileTerminal和Clutch.

打开Terminal,输入su, 密码:alpine

输入Clutch, 这时候会出现很多选项。很多都是默认,直接return即可。
NumberBaseMenu这个输入YES,这个是数字破解方式。
ListWithDisplayName这个列表上显示的应用名称


然后会列出可以破解的APP列表:

要破解哪个应用,只需要输入Clutch 加上应用前面的数字即可。
例如:
破解Clips(这个是我从AppStore上下载的)
![]()
结果:

破解的ipa就在/User/Documents/Cracked里面

这时候你可以解压里面的应用出来,通过MachOView查看加密标志位,已经是无加密了。通过class-dump也可以导出头文件了。
注意点
如果发现输入Clutch命令后,提示”There no xxxx”(具体忘了,意思就是没有可破解的应用),说明Clutch版本低,或者版本不匹配。
破解的应用,是正版的,如果是从91助手等商店下载的,就不需要破解了。
文章出处:Mottoin











暂无评论内容