iOS逆向 Hopper

前言

iOS逆向中使用Hopper可以帮助我们分析目标APP的方法地址来实现动态调试,本文只是简单介绍一个Hopper的基本用法

下载Hopper

Hopper目前在最新的Mac系统上没有破解版,每次可以试用半小时,不过对于一般的分析也是够用了,这里贴一下Hopper的官网Hopper
)

分析目标APP

这里主要是用自己新建的Demo用来分析,我Demo里就写了两个方法
image.png

工程编译之后把.app文件拖到Hopper的窗口
image.png
然后点击OK就行了
hopper_add

然后就可以进行分析了,我首先是在viewdidload里加了断点
b_viewdidload
可以先用image list 打印文件的基地址,由于iOS的ASLR特性,需要用基地址来计算其他地址,上图第一条就是可执行文件加载的基地址
image.png

上图右边Hopper选中的部分是say方法的地址,不过这里自己新建的工程拉到Hopper里面Hopper也有一个基地址0x100000000
可以在控制台用p/x指令计算一下say方法的实际地址,计算方法是(可执行文件的基地址+Hopper中方法的偏移-Hoper加载的基地址),计算出结果后用b指令下断点,可以看到已经对say方法下了断点了,这时候让程序继续执行就会断到say方法了
截屏2020-03-04下午5.02.28.png

Hopper展示的都是汇编,我们也可以让xcode展示汇编,xcode_dis
选中Always Show Disassembly之后就可以看到汇编代码了
xcode_show_dis
Xcode的汇编代码和Hopper的汇编代码相差的就是基地址了

Hopper和MachOView

MachO文件是iOS的可执行文件,里面的地址也可以跟Hopper反汇编出来的对应
截屏2020-03-04下午5.10.07.png
截屏2020-03-04下午5.15.02.png
Hopper还有很多用法,我这里只是做个基本的介绍。我是逆向初学者,如果文中有什么不对的地方,欢迎各位提出宝贵意见。