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

Pas*_*uoq 3 obfuscation x86 assembly antivirus machine-code

这个问题是该问题的后续问题。

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

IA32 和 x86-64 指令集,其可变长度指令没有特定的对齐方式,允许任务 B 的指令在执行任务 A 的现有指令流内的偏移处进行解码。该技术在个人计算的早期(20 世纪 80 年代)为了节省空间。

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

Guf*_*ffa 5

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

\n

我自己在尺寸编码比赛中使用过几次,并在其他人的条目中看到了几个例子。

\n

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

\n

一些资源:

\n

跳到指令中间 - 在 IA-32 中
\n什么是 \xe2\x80\x9coverlapping instructions\xe2\x80\x9d 混淆?
\n一种新的指令重叠技术,用于 x86 二进制文件的反汇编和混淆

\n