有没有通过阻碍arm平台上的代码流分析来保护软件的资源?

Posted

技术标签:

【中文标题】有没有通过阻碍arm平台上的代码流分析来保护软件的资源?【英文标题】:is there any resource upon software protection by obstructing code flow analysis on arm platform? 【发布时间】:2021-12-22 03:26:46 【问题描述】:

在x86的世界里,提前返回是一种很常见的效果方式 来迷惑伪装者。 http://www.ouah.org/linux-anti-debugging.txt

Jacob Baines 使用 jmp 实施了最先进的提前返回技术来阻止代码流分析,这对于欺骗 IDA pro 或radare2 非常有效。 https://github.com/antire-book/antire_book

但是,将这种 x86 技术(在 asm 中)移植到 arm 似乎是不可能的。

我想知道有什么反调试技术可以对抗静态分析吗?

【问题讨论】:

您能解释一下“提前返回”是什么意思吗?该短语未出现在您链接的任何一个文档中。 确实不能跳到指令的中间,因为ARM64指令的长度都是一样的,必须对齐。 (可以想象,Thumb2 有机会在 32 位模式下使用。)如果您要求所有可能的反调试技术,我认为这太宽泛了。 @NateEldredge “提前返回”是返回指针滥用。简而言之,将地址压入堆栈并立即返回。 【参考方案1】:

我想这会很容易,因为您可以使用您想要的任何值加载程序计数器 (R15)。所以不妨试试这个:

adr r1,goHere  @I believe this loads the address "goHere"
mov pc,r1      @this is our JMP command


goHere:

【讨论】:

具有恒定目标的间接跳转不会使像objdump -d 这样的天真的反汇编程序绊倒,也不会阻止调试器单步执行此代码。如果它没有意识到该指令唯一可能的r1 值是goHere,它可能会减慢像IDA 这样的东西,它为带有箭头连接它们的代码块制作流控制图。这很漂亮,但它不是什么。不过,您应该准确地解释这在减慢逆向工程方面能做什么/不能做什么。 公平地说,问题中提到的一半不是静态分析,它们是运行时检测或调试器阻塞。但无论如何,Thumb 模式下的 ARM 应该能够跳转到 32 位指令的中间并愚弄objdump。这值得一票。 (我没有投反对票,那是别人)

以上是关于有没有通过阻碍arm平台上的代码流分析来保护软件的资源?的主要内容,如果未能解决你的问题,请参考以下文章

Azure 流分析 - ARM 模板中的“继承分区”

iOS代码加密的几种方式

ARM裸机开发:蜂鸣器实验

免流高级混淆用啥软件

如何估计 ARM 平台上的程序消耗的能量? [关闭]

Linux时间子系统(十七) ARM generic timer驱动代码分析