有没有通过阻碍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平台上的代码流分析来保护软件的资源?的主要内容,如果未能解决你的问题,请参考以下文章