class-dump获取部分iOS app头文件信息

前言

前几天在网上无意间看到了class-dump这个词语,出于好奇就查了下,没想到挺有意思的:简单来说,就是可以将objc编译后程序中的声明信息导出查看,有点类似于源程序的.h头文件。

这个有什么用呢?国内搜索class-dump能看到一些使用class-dump导出Apple Framework私有API的教程。我对这个没什么兴趣。既然class-dump是根据objc语言特性来实现的,那么在理论上应该也可以对ios的app使用吧。之前对Appstore的一款App实现方式感兴趣,这次可以试试看个究竟了。

那么,我们的目标分析是一款唱歌软件,具体名字就不公布了,这里就以sing代替吧。

下面我们需要一台iOS系统的已越狱真机一台(例如itouch、iphone),mac系统主机一台。软件若干(稍后会介绍)

一、Frist try

我的思路很简单:尝试直接调用class-dump程序对sing app导出头文件。那么我们得做三件事:

  1. 安装class-dump。
  2. 获得sing app的程序文件。
  3. 执行命令class-dump singapp,导出头文件。

先安装class-dump吧。class-dump大概有三个版本(它们之间的区别和详细介绍在此),我们直接下载class-dump-z 0.2a,解压后将mac_x86目录中的class-dump-z程序文件拷贝至/usr/local/bin目录。这样就算安装完成啦。

然后找到Sing app的主程序文件。确保我们的真机已经安装了Sing app后。直接使用iExploer(或iFunbox)打开真机的应用程序目录,打开ktv.app子目录,按照Size(文件大小)排序,你会看到一个与父目录同名的程序文件ktv,这个就是编译后的主程序了(如下图),将它导出到桌面吧。

iexplorer

激动人心时刻到啦!使用命令class-dump-z ktv,what?!这都是神马东西……

想想也觉得不会这么一帆风顺。看上去这些类名和属性名都被加密了。网上搜索后才知道从AppStore下载到本地的App是做了加密处理的。所以我们直接想要直接获得程序信息是不行滴~

那么——有解决办法吗?

二、Try again

老外的牛牛们已经写好解密工具了,它就是Clutch!这个工具只能在iOS上运行,并且需要真机越狱。
恩,首先越狱机器已经准备好了,使用Cydia搜索并安装Clutch。安装完后怎么使用呢?这是一个命令行工具,所以我们得用bash之类的工具才行。

再使用Cydia安装Openssh,然后电脑端使用ssh连接真机(默认密码是alpine),输入命令Clutch后会看到一个App列表,找到sing在列表中的序号是3,执行命令Clutch 3,这时它就真的开始运行了,运行后的结果是将原Appstore App转换为ipa文件(文件保存位置如下图);最重要的是,它被解密了~

iExploere_path

使用iExplorer将ipa文件下载到电脑端,修改后缀名为zip解压,找到其中的主程序文件,再次使用命令class-dump-z ktv,是不是看到头文件信息啦~

简单摘录一小部分:

通过这些代码我们已经了解到一些信息了:

  1. 录音部分使用的是AudioQueue相关技术。
  2. 项目使用了Crashlytics服务保存并分析Crash信息。
  3. 图片加载使用了EGOImage第三方开源库。

这只是分析文件的很小一部分,以此可以说明这种方式是有效的。

后记

在写本文的时候,我看到最近关于支付宝插件分析的文章中,Allen兄也使用到了class-dump,不妨看看。传送门

突然发现将文章写的过于过程、步骤化,不带一丝的情感的文章看上去会感觉很生硬,所以以后我会在写文的时候加入一些自己的思考,虽然没什么文采,但可以慢慢锻炼嘛。

原创文章,版权声明:自由转载-非商用-非衍生-保持署名 | Creative Commons BY-NC-ND 3.0
转载请注明:转载自Tony's blog,原文网址:http://itony.me/200.html
Date转自:http://itony.me/tag/class-dump-z参考:http://zhiwei.li/text/2010/11/objective-c-class-dump/
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值