检测和提取操作码序列

问题描述 投票:0回答:1

我可以得到关于什么是操作码序列以及如何在PE32文件中找到它们的解释吗?

我正在尝试从PE32文件中提取它们。

database portable-executable malware opcode
1个回答
0
投票

什么是操作码序列

CPU指令由1到多个字节组成,这些字节中的每个都有不同的含义。

操作码(操作码)是指令的一部分,用于定义指令本身的行为(例如,该指令是'ADD'或'XOR',NOP等)。

对于x86 / x64 CPU(IA-32; Intel linguo中的IA-32e),一条指令至少由一个操作码(1到3个字节)组成,但可以带有多个其他字节(各种前缀,ModR / M, SIB,Disp。和Imm。),具体取决于其编码:

Instructions bytes

操作码通常是“指令”的同义词(因为操作码定义了指令的行为);因此,当您有多条指令时,您将获得一个操作码序列(这是一个误称,因为它实际上是一个指令序列,除非序列中的所有指令仅由操作码组成)。

如何在PE32文件中找到它们?

由于指令的长度可能是多个字节,所以您不能仅从.text节中的随机位置开始(对于PE文件,该位置包含程序的可执行代码)。 PE文件中有一个特定的位置,称为“入口”,它定义了程序的开始。

PE文件的入口点由AddressOfEntryPoint结构的IMAGE_OPTIONAL_HEADER成员(PE标头结构的一部分)给出。请注意,此成员是IMAGE_OPTIONAL_HEADER,而不是“完整” VA。

从那里您知道您正处于教学开始。从这一点开始,您可以按照说明的编码规则开始分解/计数指令(这些规则在Intel和AMD手册中进行了详细说明)。

大多数指令是“失败的”,这意味着一旦执行了一条指令,下一条将执行下一条(这似乎很明显,但是!)。诀窍是当有一条不掉线的指令时,您必须知道该指令的作用以继续拆卸(例如,它可能会跳到某个地方,转到特定的处理程序,等等)

© www.soinside.com 2019 - 2024. All rights reserved.