iOS逆向:App脱壳/ipa破解

App脱壳

在iOS开发中,有时候想看下其他App里面用了哪些开源库,这时候就可以通过工具导出它的头文件来看。

从AppStore下载的App( 以下简称StoreApp) 是被苹果加密过的( 从其他渠道下载的一般没有加密) , 可执行文件被套上了一层保护壳, 而class-dump无法作用于加密过的App。 在这种情况下, 想要获取头文件, 需要先解密App的可执行文件, 俗称“砸壳”。 dumpdecrypted就是由越狱社区的知名人士Stefan Esser( @i0n1c) 出品的一款砸壳工具, 被越狱社区广泛运用在iOS逆向工程研究中。 引自 《iOS应用逆向工程第二版》

当然前提是你有一台越狱的设备哦。

这里就记录下,本人脱壳的步骤。

前提条件

  1. 越狱设备
  2. dumpdecrypted:用于脱壳

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

下载后,解压运行make编译,就会在当前目录下生成dumpdecrypted.dylib文件

1616478-aafb1cc1c7fc2149

注:如果出现“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都可以。

1616478-804296ee40526a00

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

/var/mobile/Containers/Bundle/Application/用于存放StoreApp的应用
/var/mobile/Containers/Data/Application/用于存放StoreApp的应用数据

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

bogon:dumpdecrypted xxxx$ ssh root@192.168.95.3
root@192.168.95.3's password: 
iPhone:~ root# ps -e

1616478-74ff09261ad25101

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

1616478-e7da16668988f588

执行命令脱壳

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

DYLD_INSERT_LIBRARIES=dumpdecrypted.dylib /var/mobile/Containers/Bundle/Application/8F69D649-
B0AE-47EC-9A7C-27E5762FD999/xxx.app/xxx

1616478-835bd81f959fedf0

此时就会在Documents下,生成一个xxx..decrypted的文件,这就是脱壳的文件了。

使用class-dump导出头文件

把xxx.decrypted复制到mac上执行命令

class-dump --arch armv7 -H xxx.decrypted -o outHeader

就会在outHeader目录里面,生成出App的所有头文件。

之前由于没有加–arch armv7,而导致没有生成头文件。原因可能是APP里面包含了多个架构的可执行文件,因此需要针对架构导出头文件。

我们也可以用MachOView来查看下加密标志位。

App是有两个架构:armv7和arm64

1616478-e854f61163654b03

脱壳前:

1616478-2afc8eb6caf7097e

脱壳后:

1616478-dd8c84c98aa906af

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

1616478-4bfa197c0701d8ee

我们使用命令,是得不到头文件的。

class-dump --arch arm64 -H xxx.decrypted -o outHeader

是因为我使用的是iPhone 5c,它的架构是arm7s。

后来我是了一台iPhone6的话,使用–arch arm64这个命令是可以的,反而用–arch armv7就不行了。

因此,初步断定要使用你APP安装的设备一样的架构才可以。

最后在总结下:

  1. 上传dumpdecrypted.dylib文件到设备上
  2. ssh上设备,执行DYLD_INSERT_LIBRARIES=dumpdecrypted.dylib命令
  3. 用class-dump工具导出头文件

参考资料

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破解

使用工具:

  1. 一台越狱设备(本人的是iOS 8 iPhone5c)
  2. Clutch
  3. MobileTerminal(用SSH连接也可以)

破解步骤

在Cydia 里面添加数据源

http://apt.so/brian0817 安装MobileTerminal和Clutch.

1616478-e8eb1f12d5ca7cb0

1616478-4cc6338e7dbd5f6d

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

1616478-869247c8fcec4bd8

输入Clutch, 这时候会出现很多选项。很多都是默认,直接return即可。

NumberBaseMenu这个输入YES,这个是数字破解方式。

ListWithDisplayName这个列表上显示的应用名称

1616478-4a9cf97a825a75ef

1616478-5f6cd588045a91cb

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

1616478-7f74022a455bfa61

要破解哪个应用,只需要输入Clutch 加上应用前面的数字即可。

例如:

破解Clips(这个是我从AppStore上下载的)

Clutch 30

结果:

1616478-e415462e260b56d2

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

1616478-5acee17955e438f3

这时候你可以解压里面的应用出来,通过MachOView查看加密标志位,已经是无加密了。通过class-dump也可以导出头文件了。

注意点

如果发现输入Clutch命令后,提示”There no xxxx”(具体忘了,意思就是没有可破解的应用),说明Clutch版本低,或者版本不匹配。

破解的应用,是正版的,如果是从91助手等商店下载的,就不需要破解了。

参考

原创文章,作者:龙马君,如若转载,请注明出处:http://www.mottoin.com/article/reverse/92530.html

发表评论

登录后才能评论

评论列表(1条)

  • jackiehappy 2018年11月7日 下午2:59

    您好,别人破解过的ipa游戏文件,在安装好后会出现授权弹窗,输入授权码才可以使用这个文件,怎么才能把这个授权弹窗去掉啊?

联系我们

021-62666911

在线咨询:点击这里给我发消息

邮件:root@mottoin.com

工作时间:周一至周五,9:30-18:30,节假日休息

QR code