macOS软件逆向练习笔记(一)

之前都是一直在学习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来练练手。发现跟之前做的东西还是有相通的地方,但是路才刚刚开始。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 172,870评论 25 708
  • 1、通过CocoaPods安装项目名称项目信息 AFNetworking网络请求组件 FMDB本地数据库组件 SD...
    阳明AGI阅读 16,003评论 3 119
  • 一、温故而知新 1. 内存不够怎么办 内存简单分配策略的问题地址空间不隔离内存使用效率低程序运行的地址不确定 关于...
    SeanCST阅读 7,865评论 0 27
  • 52017.07.13日作辑 文 / 白永祥 在那时光穿梭的市区某一条街道 我走过一个个烈日回眸的地...
    白永祥2017阅读 739评论 3 4
  • 姓名:沈琴英 公司:宁波浙商报关有限公司 【日精进打卡第26天】 【知~学习】 听语音 【行~实践】 一、修身: ...
    沈琴英阅读 187评论 0 0