>俺要开始学习逆向工程啦,逆向工程对AppStore开发者的帮助啥啥的就不说了,你想拿来干嘛这些都不说了,写一篇文章记录下学习过程。今天先来说说逆向工程工具----class-dump class-dump利用runtime的特性来dump出工程的class信息,也就是还原出.h文件。 # 安装 # 你需要到http://stevenygard.com/projects/class-dum 下载最新的class-dump,运行dmg文件后,你需要将class-dump复制到'/usr/bin'目录下。 我将class-dump复制到了桌面上,所以我打开命令行,执行以下命令: ``` sudo cp /Users/xlx/Desktop/class-dump '/usr/bin' ``` 原本以为这样就可以了,偏偏终端提醒我“该操作不允许”·········· 然后我就百度咯(请原谅我不到万不得已不使用Google),原来OS X 10.11 加入了Rootless,也就是就算你是root那也不允许对bin文件夹进行操作,这其实对系统的安全性有了很大的提升,但是同样的对许多合法软件也造成了很大的限制,所以我们必须关闭Rootless。 关闭ROOTLESS 重启你的电脑,开机过程中按住command+r进入恢复模式,在恢复模式中打开终端,执行命令csrutil disable,这样你就关闭了 rootless,同样你如果想要重新打开的话只需要执行命令csrutil enable,再次重启你的电脑,重新执行命令: ``` sudo cp /Users/xlx/Desktop/class-dump '/usr/bin' ``` 你终于将class-dump复制到了‘usr/bin’目录下。然后你需要给class-dump操作权限,执行命令 ``` sudo chmod 777 /usr/bin/class-dump ``` 双击你的class-dump,你可以看到执行成功等字样和一些class-dump的基本参数。 # 使用class-dump # 我们来试验一下class-dump,你需要一个app可执行文件来作为实验,你可以用你自己的工程来导出一个ipa文件(如何导出ipa文件请自行查询),将ipa文件后缀改为‘zip’以后你可以直接解压这个ipa文件(现在已经是一个zip文件了),在解压后的文件夹里就包括了app执行文件。(如果你有工程文件的话,工程里是包括了可执行文件的) 你需要在Terminal中找到你的可执行文件并进入他,我的可执行文件叫做“EBusiness.app”,所以我是这样操作的: ![](/static/images/essay/6.jpeg)进入可执行文件以后你就可以利用class-dump来解析他了,你可以将解析后的头文件放置到你想放置的地方,我讲解析后的头文件放到了桌面上的Ebusiness文件及,所以我是这样操作的: ![](/static/images/essay/7.jpeg) 执行完命令以后,我们找到你刚才输出的文件夹,果然我们发现了密密麻麻的许多头文件,我打开了其中一个来和原本的文件进行比较,这是比较结果: ### 欢迎加入iOS交流群537774852 ![](/static/images/essay/8.jpeg)我们可以看到并没有太大的区别,class-dump逆向出了所有的属性和方法,只不过方法的参数名称变成了arg1、arg2,但是这个对我们并没有什么太大的影响。 我们使用的可执行文件是我们自己用自己的工程生成的,但是从appstore下载下来的app是通过加密的,class-dump并不能直接处理这样的文件。 >我学习参考的书籍《iOS 应用逆向工程》