OSX逆向分析基础

文章目录

    • 前言
    • OSX基础
    • 工具
    • 方法
    • 动态调试
    • 参考链接

前言

如果你想真正成为软件高手,就得了解底层运作机制。逆向,不会让你成为扎克伯格或张一鸣,但或许能让你成为安全专家。

OSX基础

Mac OS X下二进制可执行文件的动态链接库是dylib文件。 所谓dylib,就是bsd风格的动态库。基本可以认为等价于windows 的dll和linux的so。mac基于bsd,所以也使用的是dylib。

工具

包括反汇编工具、调试器等

  • xcode自带的工具:/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin
  • IDA Pro:是目前最棒的一个静态反编译软件,为众多0day世界的成员和ShellCode安全分析人士不可缺少的利器!IDA Pro Disassembler and Debugger是一款交互式的,可编程的,可扩展的,多处理器的,交叉Windows或Linux WinCE MacOS平台主机来分析程序, 被公认为最好的花钱可以买到的逆向工程利器。IDA Pro已经成为事实上的分析敌意代码的标准并让其自身迅速成为攻击研究领域的重要工具。它支持数十种CPU指令集其中包括Intel x86,x64,MIPS,PowerPC,ARM,Z80,68000k,c8051等等。它的优点是可以更好的反汇编和更有深层分析。可以快速到达指定的代码位置;可以看到跳到指定的位置的jmp的命令位置;可以看参考字符串;可以保存静态汇编等。
  • Hopper Disassembler:分析工具,Hopper 3.11.5, HDS,Hopper 是一种适用于 OS X 和 Linux 的逆向工程工具,可以用于反汇编、反编译和调试 32位/64位英特尔处理器的 Mac、Linux、Windows 和 iOS 可执行程序!
  • otx反汇编:brew install otx
  • MachOView
  • otool(object file displaying tool) :查询依赖库, 针对目标文件的展示工具,用来发现应用中使用到了哪些系统库,调用了其中哪些方法,使用了库中哪些对象及属性,它是Xcode自带的常用工具
  • Interface Inspector允许我们研究任何Mac App运行时候的UI结构和属性
  • 动态观察程序运行,那就得要调试器,就用Xcode自带的gdb吧
  • 编辑二进制文件,系统自带的vim就可以,hex 编辑器
  • class-dump:可以从面相对象编程的OC二进制文件中提取类的信息。这就是搜集信息的第三个层面,程序代码中蕴含的信息。otx反汇编时其实已经包含零零碎碎的信息啦,只不过class-dump的信息是按面向对象的思想整理过的。
  • offset:目标代码不好定位,offset可以方便地把otx中的内存地址转换成二进制文件中的偏移。
  • 找到目标函数的虚拟内存地址。工具: hopper 或 otx 都可以满足。

方法

界面分析 -> 动态分析 -> 静态分析 -> 动态库注入 -> …

  • 界面分析:在Mac上面也有类似iOS Reveal的工具叫做Interface Inspector。
  • 动态分析: 动态跟踪的方法有多种,除了iOS逆向中使用的Frida, lldb , Mac上面还可以使用Dtrace。
    通过执行了一些操作去分析问题。
  • 静态分析: 根据假设的某个条件(因素)静止不变去分析。
  • 动态库注入: 动态库注入可以通过DYLD_INSERT_LIBRARIES注入,也可以直接注入到可执行文件的Load Command。
  • 动态调试,主要工具 gdb
    首先,ps -ax|grep “要破解的程序名”,得到其进程 id,如 1234
    接着,使用 gdb,用 attach “进程 id”
    然后,bt 查看函数调用栈,找到可疑函数后,使用 up
    继续,用 si 等命令单步跟踪,set 等命令改变参数的值
    再来,使用 disassemble 命令,查看确认要修改的二进制字符串
    最后,用十六进制编辑器查找并修改二进制字符串
    2. 动静结合,主要工具 otool + gdb
    a. otool -tV “目标程序” > dis.asm
    b. 文本编辑器打开 dis.asm,查找可疑的函数
    c. 使用 gdb 打开目标程序,并在可疑的函数中设置断点,如 b *0x00001234
    d. run 运行程序,断点处,si 等跟踪, set 设置关键参数值
    e. 用计算器计算需要修改的序列偏移,或 disassemble 命令
    f. 用十六进制编辑器查找并修改二进制字符串

常用的命令:

attach 1234
b *0x1234
clear *0x1234
bt
disassemble
si
finish
set $eaxgcc test.c -o test
otool -tV target > dis.asm

动态调试

工具:Hopper+LLDB+Radare2

lldb /Applications/Camtasia\ 2020.app 

参考链接

  • 《macOS软件安全与逆向分析》随书源码
  • MacOS逆向技术基础-第一版

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/701163.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Windows安装HBuilderX

下载 HBuilderX下载地址: 下载地址 解压安装包 HBuilderX,Windows为zip包,解压后才能使用。 首先,选中下载的zip包,点击右键菜单,点击解压到当前文件夹进入解压后的文件夹,找到HBuilderX.exe&#xff0…

计算机组成原理(13)-----硬件多线程

目录 1.细粒度多线程 2.粗粒度多线程 3.同时多线程(SMT) 在不支持硬件多线程的处理器中,若要进行线程的切换,就需要保存和恢复线程的运行环境(否则会出现数据覆盖引起的错误)。 但在支持硬件多线程的处…

Android java中包的使用

一.包的使用 为了更好的实现项目中类的管理,提供包的概念。 package语句作为Java源文件的第一条语句,指明该文件中定义的类所在的包。(若缺省该语句,则指定为无名包)。 它的格式为:package 顶层包名.子包名 ; 二.java中主要的包…

算法分析-面试1-字符串

文章目录 前言一、分类:看看就行了二、字符串API:创建和初始化:查询操作:比较操作:修改操作:截取操作:分割操作:格式化操作:连接操作(Java 8 及以后&#xff…

Delphi 11 安卓的蓝牙权限申请

上一篇博客里面的代码,演示如何申请安卓的权限。 如何申请安卓的蓝牙权限? 本博客之前有一篇文章写过。 现在 Google 要求 Android API Level 必须是 33。对于 BLE 的权限申请,有了一些新的要求。 以下描述,基于 Delphi 11。 …

React Context的使用方法

背景:在某些场景下,你想在整个组件树中传递数据,但却不想手动地在每一层传递属性,你可以直接在React中使用强大的contextAPI 解决上述问题 在一个典型的React 中,数据通过Props属性自下而上(由父及子&…

vue页面基本增删改查

练手项目vue页面 新手前端轻喷: 效果如下 1、2两个部分组成: 对应代码中 element-ui中的 el-form 和 el-table 照着抄呗,硬着头皮来! 建议:认真读一遍你用的组件 那上边简单得列表举例: 建议大家手敲一个…

Unity与Android交互通信系列(5)

在前述文章中,已经使用了AndroidJavaProxy代理接口,本节我们将详细的介绍AndroidJavaProxy代理的用法。正如其名,AndroidJavaProxy是一个代理,它在Android端代码与Unity端代码交互中起一个桥接作用。其一般用法为在Java代码中定义…

【深度学习】主要提出者【Hinton】中国大会最新演讲【通往智能的两种道路】

「但我已经老了,我所希望的是像你们这样的年轻有为的研究人员,去想出我们如何能够拥有这些超级智能,使我们的生活变得更好,而不是被它们控制。」 6 月 10 日,在 2023 北京智源大会的闭幕式演讲中,在谈到如…

一键生成PDF即刻呈现:轻松创建无忧体验

在信息爆炸的时代,我们每天都在与各种文件、资料打交道。无论是工作中的报告、合同,还是学习中的笔记、论文,如何高效、安全地管理这些珍贵的资料,成为了我们迫切的需求。幸运的是,随着科技的发展,我们不再…

SpringBoot Admin 详解

SpringBoot Admin 详解 一、Actuator 详解1.Actuator原生端点1.1 监控检查端点:health1.2 应用信息端点:info1.3 http调用记录端点:httptrace1.4 堆栈信息端点:heapdump1.5 线程信息端点:threaddump1.6 获取全量Bean的…

4、全球资产配置策略

2022年06月23日 传统的资产配置就是在债券类资产和国内股票类资产间以一定的比例进行调整。但是这类资产配置模式往往缺乏一类风险收益特征和国内资产接近但相关性较低、并且还可以有效分散国内市场风险的资产,而进行境外资产投资则可以很好地弥补这一空缺。实际上全…

Java学习——正则表达式

正则表达式是一种强大的文本处理工具,用于搜索、匹配、替换文本。它们定义了字符串的搜索模式,可以快速地检查一个字符串是否与某个模式匹配,提取匹配字符串,或者执行替换操作。正则表达式在文本编辑器、编程语言和数据库管理中广…

R3F(React Three Fiber)基础篇

之前一直在做ThreeJS方向,整理了两篇R3F(React Three Fiber)的文档,这是基础篇,如果您的业务场景需要使用R3F,您又对R3F不太了解,或者不想使用R3F全英文文档,您可以参考一下这篇&…

【Python笔记-设计模式】享元模式

一、说明 享元模式是一种结构型设计模式,它摒弃了在每个对象中保存所有数据的方式,通过共享多个对象所共有的相同状态,让你能在有限的内存容量中载入更多对象。 (一) 解决问题 旨在减少大量相似对象创建时的内存开销 (二) 使用场景 大量…

AI:136-基于深度学习的图像生成与风格迁移

🚀点击这里跳转到本专栏,可查阅专栏顶置最新的指南宝典~ 🎉🎊🎉 你的技术旅程将在这里启航! 从基础到实践,深入学习。无论你是初学者还是经验丰富的老手,对于本专栏案例和项目实践都有参考学习意义。 ✨✨✨ 每一个案例都附带关键代码,详细讲解供大家学习,希望…

github 笔记: fatal: Could not read from remote repository.

git clone 包时出现这两行报错 gitgithub.com: Permission denied (publickey). fatal: Could not read from remote repository.这意味着 SSH 认证失败了,通常是因为本地机器的 SSH 密钥未被 GitHub 账户识别/未正确设置。在终端中使用 ssh -T gitgithub.com 可以…

微服务三十五关

1.微服务有什么好处? 微服务优点很多,但是我们通常说一个东西好肯定会跟另一个东西比较, 通常说微服务好会和单体项目进行比较。以下是微服务相对于单体项目的一些显著好处: 首先,让我们讨论单体项目的一些主要缺点&a…

STM32_LCD1602_2_液晶屏初始化

HD44780的指令集及其设置说明 共11条指令: 清屏指令 指令功能指令编码执行时间/msRSR/WDB7DB6DB5DB4DB3DB2DB1DB0清屏00000000011.64 功能: 清除液晶屏,即将DDRAM的所有内容都写为“空”的ASCII的20H;光标归位,即将光…

多态与代码屎山

到底什么是多态呢?多态是面向未来的,比如企业采购为例: 一般分为线上合线下两种, 我们设计一个父类叫做"采购", 里面做一些共通的处理: 申请, 承认, 支付, 购买方式. 然后让各自的子类(线上,线下)实现自己的方法.实际调用过程中传入不同的对象就可以.到此为止项目开…