安卓逆向(OLLVM)

好,我们先来简单了解一下编译的过程,再讲一下 LLVM 怎么解决编译中的问题。

编译的过程就像是翻译:

  1. 前端(Frontend):就像你写的文章,它会先被检查有没有语法错误(就像老师检查你的作文有没有拼写错误、句子不通顺),然后会变成一种更简单的语言,这种语言就是中间代码(好比是翻译成了一种大家都能懂的语言,方便后面的步骤处理)。

  2. 优化(Optimizer):这一步就像是你检查自己写的文章,看看有没有可以删掉的部分,或者有没有能合并的句子。目标是让文章更加简洁明了,省时间。就像程序代码中删掉没用的部分,合并冗余的代码,提升运行速度。

  3. 后端(Backend):这一步是把你翻译的文章(代码)转化成机器能直接执行的语言(也就是计算机能读懂的代码)。比如你写的是 x86 语言的代码,计算机能直接跑。但如果要生成 ARM 语言的代码(比如给手机的处理器用),那就得换一种生成方法了。

问题来了:

你看,传统的编译器就是这样直接把代码转换成机器语言。如果我今天想让它运行在不同类型的计算机上(比如电脑和手机),就需要重新做一套不同的转化方式。比如用 x86 的机器语言做的代码,跑不了 ARM 的手机处理器;而且每次想用不同编程语言(比如 C 或 Fortran)时,前端也需要重新写一遍。

这个问题怎么办?

就像在网络中,电脑和手机想要互相通信,但它们之间需要中转站。直接连在一起太复杂了,于是我们引入了交换机来管理信息的传输,这样电脑和手机不用直接互相连接,而是通过交换机来连接不同的设备。这样连接就更简单、清晰了。

LLVM 如何解决这个问题?

LLVM 就像一个中转站,它把编译过程分成了几个层次:

  1. 前端(Frontend):它负责理解你写的程序,检查语法,生成中间代码。这个阶段你可以选择不同的语言来写,比如 C 或 Fortran。

  2. 优化(Optimizer):优化阶段会帮你把代码优化得更高效。

  3. 后端(Backend):不同的计算机(比如 x86 电脑和 ARM 手机)需要不同的机器码,LLVM 提供了一种方法,让我们可以根据不同的硬件生成不同的机器码,后端只需要接收中间代码,生成适合不同设备的代码。

所以,通过 LLVM 的设计,我们可以解决前面提到的问题,不需要每次编译不同的语言时都重新做一遍,LLVM 的中间代码就像一个标准的“语言”,让不同的设备都能理解。

OLLVM 的原理

OLLVM 是在 LLVM 的基础上增加了 混淆(obfuscation)的功能。简单来说,混淆就是让程序的代码变得更加难以理解,从而增加破解的难度。

为什么混淆加在优化阶段?

在 LLVM 中,优化阶段处理的是中间代码(LLVM IR)。这是一个非常适合做混

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

aaiier

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值