OSX逆向分析基础

news/2024/12/21 22:28:35/

文章目录

    • 前言
    • 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.ppmy.cn/news/1365052.html

相关文章

Flink Catalog

1.Flink侧创建 按照SQL的解析处理流程在Parse解析SQL以后,进入执行流程——executeInternal。   其中有个分支专门处理创建Catalog的SQL命令 } else if (operation instanceof CreateCatalogOperation) {return createCatalog((CreateCatalogOperation) operatio…

通过一个例子演示golang调用C语言动态链接库中的函数

本例提供了cgo调用C函数的示例,也演示了如何将C函数打印内容保存到golang的变量中 目录和源码 目录结构 adminhpc-1:~/go/my_stdout$ tree . ├── include │ ├── mylibrary.c │ └── mylibrary.h ├── lib └── main.go2 directories, 3 files a…

Android 框架设计模板

不同项目在使用该模板时多少会有出入,应以项目实际情况作为依据。 (该文档可以 .md 格式存放于项目根目录,或编写到readme 中) 项目描述 涉及如下方面 项目背景 (可引用项目立项书)项目需求 &#xff08…

【kubernetes】关于k8s集群的声明式管理资源

目录 一、声明式管理方法 二、资源配置清单管理 1、导出资源配置清单 2、修改资源配置清单并应用 2.1离线修改 2.2在线修改 三、通过资源配置清单创建资源对象 获取K8S资源配置清单文件模板? 关于配置清单常见的字段 方案一:手写yaml配置文件 …

QT C++实践|超详细数据库的连接和增删改查操作|附源码

0:前言 🪧 什么情况需要数据库? 1 大规模的数据需要处理(比如上千上万的数据量)2 需要把数据信息存储起来,无论是本地还是服务上,而不是断电后数据信息就消失了。 如果不是上面的原因化,一般…

学习JAVA的第四天(基础)

目录 方法 方法的定义 方法的调用 参数 注意事项 方法的重载 练习 面向对象 类和对象 定义类的注意事项 封装 private关键字 this关键字 构造方法 标准的Javabean类 创建一个对象时,虚拟机做了什么? 方法 方法含义:方法是程序…

Node.js+vue校内二手物品交易系统tdv06-vscode前后端分离

二手物品交易系统采用B/S架构,数据库是MySQL。网站的搭建与开发采用了先进的nodejs进行编写,使用了vue框架。该系统从三个对象:由管理员和用户、店铺来对系统进行设计构建。主要功能包括:个人信息修改,对用户、店铺、二…

【面试题】在浏览器地址栏输入URL后会发生什么

1. 地址栏输入后的本地操作 当我们在浏览器的地址栏中,输入xxx内容后,浏览器的进程首先会判断输入的内容: 如果是普通的字符,那浏览器会使用默认的搜索引擎去对于输入的xxx生成URL。如若输入的是网址,那浏览器会拼接…