macOS逆向-如何分析macOS软件

macOS逆向-如何分析macOS软件

目录macOS逆向-如何分析macOS软件0x00 前言:0x01 分析环境搭建:安装Clang安装Radare2关于HT Editor什么是Radare2Radare2的手动安装测试radare2是否安装成功0x02 第一个macOS程序0x03 破解Crackme打补丁je->jne用radare2修改0x04 验证crackmePwn菜鸡学习小分队

macOS逆向-如何分析macOS软件

0x00 前言:

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

0x01 分析环境搭建:

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

安装Clang

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

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

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

安装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

测试radare2是否安装成功

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

0x02 第一个macOS程序

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

#include

int main()

{

int secret = 0;

printf("Please input the secret number:");

scanf("%d",&secret);

if(secret != 123)

{

printf("error secret number!\n");

return 0;

}

printf("Success!");

}

然后我们用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 #查看当前地址所在的汇编代码

从箭头处我们可以看到,他是从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。

用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 #打补丁

修改前后对比:

0x04 验证crackme

最后运行crackme来验证下。

Pwn菜鸡学习小分队

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

相关推荐

【官方】PGC2022
啤酒品牌排行榜,啤酒什么牌子好
羞辱/Dishonored 中文成就攻略
尚品宅配的整装云到底是个啥? 今天在雪球上看到两位大佬,围绕 尚品宅配 整装云业务隔空论战,其中@无智名2018 的观点让我惊出一身冷汗,按照大佬说法...
蚂蚁怎么吃食物:揭秘蚂蚁的觅食、进食和食物消化全过程!
《我的世界》恐龙创造与孵化全解析
假病历屡禁不绝,全行业统一联网防伪刻不容缓
张淑英:家人在哪,年就在哪
为什么群文件满了