最近正在尝试逆向App的学习和研究,其中不乏出现一些问题,在此主要是分享一些学习中遇到的问题和解决方法以及部分原理
1.class-dump无法拖入/usr/bin目录(这个问题是大多数人都迈不过去的坎)
原因:Mac当前系统为Mac OS X 10.11 El Capitan,对于Mac OS X 10.11 El Capitan用户,由于系统启用了SIP(System Integrity Protection), 导致root用户也没有权限修改/usr/bin目录。
解决办法:
方法一:
重启Mac,按住command R,进入recovery模式。选择打开Utilities下的终端,输入:csrutil disable并回车,然后正常重启Mac即可。
方法二:
1.打开Terminal,输入mkdir ~/bin,在当前用户根目录下创建一个bin目录;
2.把class-dump.dmg解压缩出来的class-dump拷贝到这个目录里,并赋予其可执行权限; 拷贝class-dump可使用拖拽的方式也可以使用命令的方式,拖拽的方式就不再赘述
命令移动的方式: mv /.../class-dump ~/bin (/.../class-dump是指的class-dump的完整路径)
赋予执行权限:chmod +x ~/bin/class-dump
3.使用命令vi ~/.bash_profile 打开~/.bash_profile文件,配置环境变量; 按 i 键进入编辑模式,写入代码: export PATH=$HOME/bin/:$PATH ;按ESC然后输入冒号(:),然后输入wq,退出即可。
4.在Terminal中执行source命令 source ~/.bash_profile
5.在terminal中执行class-dump实验一下,应该就可以了。
2.class-dump -S -s -H xxxx -o xxxx 时报错 Error: Cannot find offset for address 0x780000000100a489 in stringAtAddress:
如下图所示:
class-dump 报错
经检验和查看该项目是用OC和Swift混编。class-dump是利用Object-C语言的runtime特性,提取头文件,而Swift则不支持该规则。(其他情况会不会出现此错误,我也说不好,如有,请回复告知我哦!大家共同学习进步)。 可使用IDA查看包内容进行分析
经过反复试验证实,在app没有经过砸壳之前,直接使用class-dump进行头文件提取,如果项目中使用了swift这回出现 Error: Cannot find offset for address 0x780000000100a489 in stringAtAddress: 的错误, 但是经过砸壳之后, 再使用class-dump提取头文件,这回提取出相应的头文件, 只是头文件的格式和样式与OC导出的头文件会有一定的差异, 可根据实际情况自行处理导出头文件。