设计一个指令序列,以便在使用偏移量解码时执行其他操作

Posted

技术标签:

【中文标题】设计一个指令序列,以便在使用偏移量解码时执行其他操作【英文标题】:Designing an instruction sequence so that it does something else if decoded with an offset 【发布时间】:2014-07-05 12:05:13 【问题描述】:

这个问题是that question的后续问题。

要设置此问题的上下文,请考虑Null-free programming。这是一种将指令序列(shellcode)伪装成字符串的技术。在 C 语言中,字节 0 标志着字符串的结束,因此指令序列必须设计为不包含任何这样的字节,否则会被滥用的字符串操作函数截断。

IA32 和 x86-64 指令集的可变长度指令没有特定的对齐方式,允许任务 B 的指令在执行任务 A 的现有指令流中的偏移处进行解码。这项技术has been used准时在个人计算的早期(1980 年代),以节省空间。

在代码中嵌入代码(从第一条指令中的偏移量开始)的技术是否已经被用作欺骗反病毒检测的一种方法?它有名字吗?如果它有用并且已经被使用过,那么一个例子是什么?如果攻击者开始编写代码,那么任务 A 以一种表面上无害的方式什么都不做就足够了,这可能会留下足够的余地来执行任务 B 可能想做的任何事情。

【问题讨论】:

所有问题的答案都是“是”,但这真的有帮助吗? @KerrekSB “——有什么例子? -是的。”作为一个答案很糟糕,而“——它有名字吗? -是的。”有效,回答者可以在他们的回答中提供所说的名字。这将帮助我在谷歌上搜索更多信息(即使知道它存在,我也很难找到无空程序)。 注意:我不是要关于这个主题的书籍章节。该技术的名称,如果它已经存在,将回答我的问题。 我刚刚当场编造的random internet search暗示“隐写术”,但搜索结果本身似乎包含更多术语。 @KerrekSB 隐写术是计算机科学的一个分支,涉及将任何东西隐藏在任何东西中。这是一个很好的搜索词,可以考虑使用,但它不会将我引导到文档,就像“零编程”引导我到 blackhatlibrary.net/Shellcode/Null-free 【参考方案1】:

是的,这肯定已用于混淆代码的任何情况。不仅用于病毒编程,还用于软件保护和逆向工程预防。

我自己用过几次size coding competitions,并在其他人的条目中看到了几个例子。

这项技术自然已经针对不同的处理器进行了多次发明和再发明,因此您自然会为它找到几个不同的名称。我发现了诸如“重叠指令”和“指令中断”之类的名称。

一些资源:

Jump into the middle of instruction - in IA-32What is “overlapping instructions” obfuscation?A new instruction overlapping technique for anti-disassembly and obfuscation of x86 binaries

【讨论】:

以上是关于设计一个指令序列,以便在使用偏移量解码时执行其他操作的主要内容,如果未能解决你的问题,请参考以下文章

单片机中跳转指令偏移量如何计算?

如何直接滚动到特定的内容偏移量(不显示其他内容)

编写 AT&T 程序集以使用奇偶校验标志和偏移量

如果 fseek 中的给定偏移量超出最后一个字符会发生啥

AWS Athena 上的偏移量

ARM Cortex A9的流水线介绍