最近看了几篇关于 APP 安全方面的文章,其实网上关于 iOS 反编译相关内容的文章都大同小异,这篇博客也就是对这方面内容做一个整理。
需要两种工具:class-dump 和 Hopper Disassembler
class-dump
作用:导出应用的头文件,算是逆向工程的入门级工具
安装:打开 .dmg 文件,将 class-dump 文件拉到 /usr/local/bin 目录下,这样就可以在终端使用 class-dump 命令了。
Hopper Disassembler
- 作用:二进制反汇编器,反编译和调试,可以拆开任何二进制。
演示项目
- 新建项目,在 ViewController 的 .h 和 .m 文件中写如下代码,然后运行项目
- 获取APP包(资源库/Developer/Xcode/DerivedData/刚刚运行的APP/Build/Products/Debug-iphonesimulator/APP包)-> 显示包内容 -> 将二进制文件拿到桌面新创建的文件夹中
- 进入终端,在文件夹目录下执行
class-dump -H 反编译app
,在文件夹中就会导出头文件
- 打开 Hopper Disassembler,将二进制文件拉入,点击工具栏中间的
if(b) f(x);
切换成伪代码模式,这样方法里面的逻辑就展示出来了(这里有个问题是,别人的 NSLog 中打印的文字可以显示出来,我的就不显示)
总结
iOS 反编译技术最重要的是细心加耐心,我也是关注 APP 的安全性,从而发散学习一下,没有深入去研究。首先我在工作中并没有运用到反编译技术,其次也不想把太多时间浪费其中。
还有好多方便实用的工具没有一一介绍,比如和 Hopper Disassembler 差不多的 IDA、UI 层解析工具 Reveal 等等,以后有时间或者工作需要再深入研究。
最最主要的是,以后开发要把重要逻辑封装到静态库里,大大降低被反编译的可能。