• macOS逆向-如何分析macOS软件


    macOS逆向-如何分析macOS软件

    0x00 前言:

    ​ 完事开头难。许多希望学习逆向工程的朋友通常在网上翻看了许多相关的博客和教程之后仍会觉得无从下手,《macOS软件安全与逆向分析》上的第一章将会带我们从头开始搭建一个最简单的分析环境,引导你自己动手写一个简单的CrackMe并破解它。

    0x01 分析环境搭建:

    ​ 首先,我们需要一个编译器来编译代码, 目前在macOS系统上最流行的编译器自然是鼎鼎大名的Clang。

    安装Clang

    Clang是苹果公司开源项目LLVM中的一部分,是属于LLVM的一个前端,其中LLVM的官网为:http://www.llvm.org

    其实我们安装过Xcode的话,就已经自带了LLVM,你可以在命令行中运行clang -v查看是否有安装llvm。

    image-20220329130453736

    假如,你还没有安装那么请在AppStore中安装Xcode即可。

    image-20220329130609527

    安装Radare2

    关于HT Editor

    我这里和书本中的不同,书上写着是让你安装HT Editor,可是我实践下来发现HT Editor一点都不好用,可能作者写这本《macOS软件安全与逆向分析》书本的时候,年代还比较久远,可能那时候流行这个工具,反正结论就是HT Editor不好用,而且有Bug不支持显示中文。

    什么是Radare2

    什么是Radare2?

    Radare2是一个命令行框架工具,他主要用于取证、逆向分析,他里面包含了很多其他的命令行小工具。
    比如他可以进行反汇编、动态调试、Hash计算、Shellcode生成、文件格式查看、文件比较、字符串搜索等等。

    Radare2的手动安装

    radare2的官网是:https://www.radare.org/n/,官网上介绍的安装方式是让你从源码中构建。

    git clone https://github.com/radareorg/radare2
    cd radare2 
    sys/install.sh
    #如果构建失败
    sudo make purge
    rm -rf shlr/capstone
    git clean -xdf
    git reset --hard @~50
    sys/install.sh
    

    image-20220329132749226

    测试radare2是否安装成功

    Radare2 装好后,运行radare2 -h是否安装成功。

    image-20220329133441161

    0x02 第一个macOS程序

    目前我们已经安装好了编译环境,也装好了一个简单逆向分析的环境,那么接下来我们就要和CTF一样,来写一个简单的Crackme来实践了,源码非常简单是用纯C写的检测数字是否正确的程序。

    然后我们用clang crackme.c来进行编译,将程序编译成MachO可执行文件,程序运行后会提示你输入一个数字,如果输入的不是123就会提示你error secret number!,输入是123就会提示Success!

    clang crackme.c -o crackme
    
    ➜ ./crackme
    Please input the secret number:1
    error secret number!
    

    0x03 破解Crackme

    我们需要来破解这Crackme,当我们输入任何数的时候都显示Success!,所以我们需要将它逻辑修改掉。

    这里我们就用Radare2来演示,而切入点就是字符串error secret number!,然后根据字符串再找到对应的判断逻辑的汇编代码,将汇编代码逻辑修改掉即可。具体Radare2的一些用法可以参考此篇文章:https://blog.csdn.net/qq_31507523/article/details/117200476

    ➜ r2 crackme
     -- Are you still there?
    [0x100003ed0]> aaa
    [x] Analyze all flags starting with sym. and entry0 (aa)
    [x] Analyze function calls (aac)
    [x] Analyze len bytes of instructions for references (aar)
    [x] Check for objc references (aao)
    [x] Finding and parsing C++ vtables (avrr)
    [x] Type matching analysis for all functions (aaft)
    [x] Propagate noreturn information (aanr)
    [x] Use -AA or aaaa to perform additional experimental analysis.
    [0x100003ed0]> axt @@ str.*  #这里的命令就是列出crackme里面的所有调用到的字符串。
    
    [0x100003ed0]> s 0x100003f2a #跳转到调用Success这字符串的地址这
    [0x100003f2a]> pdf           #查看当前地址所在的汇编代码
    

    image-20220329220655341

    image-20220329221335257

    从箭头处我们可以看到,他是从je 0x100003f2a,这一处汇编代码中跳过来的,他上面一句是cmp dword [var_8h],0x7b,对应的意思是比较var_8中输入的值是否等于123,如果是则跳转到Success!处,我们要破解的话就可以改成条件不成立也可以调过来即修改je 0x100003f2a -> jne 0x100003f2a

    打补丁

    OK现在我们知道修改哪个地方0x100003f0a,修改成什么汇编代码jne 0x100003f2a,就能达到补丁的目的了,但是直接改汇编好像在IDA中用Keypatch插件可以实现,ps:(IDA后面会介绍,是一款很强大的反汇编、反编译、静态分析软件),那么目前我对radare2掌握还不是很熟悉,我目前只能通过修改OPCODE(机器码)的方式来达到打补丁的效果。

    je->jne

    je改成jne只需要将0x84修改成0x85即可,具体可以查看https://asmjit.com/asmgrid/ 该网站对应指令的opcode。

    image-20220329222509338

    image-20220329222527792

    用radare2修改

    在radare2下要打补丁一个程序,用-w参数打开程序即可。

    ➜ r2 -w crackme
     -- When can we have an official anime mascot for radare2?
    [0x100003ed0]>s 0x100003f0b #跳转需要打补丁出的地址
    [0x100003f0b]>px 10         #用十六进制方式显示当前地址 10个字节数据
    [0x100003f0b]>wx 85         #打补丁
    

    image-20220329223143888

    修改前后对比:

    image-20220329223230153

    image-20220329223252027

    0x04 验证crackme

    最后运行crackme来验证下。

    image-20220329223420177

    Pwn菜鸡学习小分队

    欢迎来PWN菜鸡小分队闲聊:PWN、RE 或者摸鱼小技巧。

    img


    __EOF__

  • 本文作者: VxerLee
  • 本文链接: https://www.cnblogs.com/VxerLee/p/16074231.html
  • 关于博主: 评论和私信会在第一时间回复。或者直接私信我。
  • 版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
  • 声援博主: 如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。
  • 相关阅读:
    uniapp 实现滑动元素删除效果
    sql注入(5), sqlmap工具
    什么是yandex.metrica 目标?
    从电竞男孩到CEO,他如何用电子签实现事业腾飞
    【良品】k8s的sidecar原理及实例妙解
    HOT100自查题集
    初探富文本之CRDT协同算法
    C++ STL标准模板库(一)
    获取本地json文件
    效率倍升:逐浪HMS主题大师1.2-全渠道自动打包、快速传送、锁屏提取、资源审计,移动主题设计辅助利器(全面支持华V米O)
  • 原文地址:https://www.cnblogs.com/VxerLee/p/16074231.html