之前都是一直在学习Android,最近因为意外接触到了苹果系统,打算跟着非虫大大的书学习下这方面的知识。
编译环境就不介绍了,我自己使用的是macOS Hign Sierra。
一、自己第一个 macOS 程序
代码很简单,就是输入字符,如果等于123就输出Hello world,否则提示错误。
接下来使用clang编译程序,编译成功后会在当前目录生成一个可执行文件:
运行一下可以看到功能ok,自己的第一个Mac“应用”诞生啦。
二、分析可执行文件
这里工具我使用的是Hopper,因为查了查资料,这款应用对mac软件的支持较好。但也有介绍说其反汇编出来的逻辑存在缺陷。不过我们的目的是快速上手练习,还不到纠结于工具的时候。
等待分析完成,可以看到和IDA类似的UI界面。代码比较少,我们直接拖动就能找到位置。
之前的学习中,已经接触过一些arm汇编指令。虽然这里有所不同,但我们凭借经验还是很容易就会注意到以下几行。
首先调用了scanf方法,然后和0x7b也就是十进制的123的进行比较,最后通过je来控制跳转流程。跳转的目标地址正好是输出hello world的代码段。
三、修改逻辑
前面我们找到了控制跳转的地方,现在想要实现的是无论我们输了什么,程序都会输出Hello world!。
有几种方式,这里只用最简单的一种。让程序直接跳转至输出Hello world的代码段。然后保存为新的可执行文件cm02。
四、验证
运行一下我们新生成的可执行文件cm02,然后输入任意的字符,修改过的程序顺利的输出了Hello world!。
五、小结
万事开头难,第一次接触Mac平台的软件,写一个简单的crackme来练练手。发现跟之前做的东西还是有相通的地方,但是路才刚刚开始。