最近我问了一个关于检测 UPX 压缩的问题。0xC0000022L想知道它是否是普通的 UPX。然而,在那之前我只知道普通的 UPX。所以我的问题是:
- 存在哪些 UPX 版本/修改?
- 它们有何不同?他们有什么特点?
最近我问了一个关于检测 UPX 压缩的问题。0xC0000022L想知道它是否是普通的 UPX。然而,在那之前我只知道普通的 UPX。所以我的问题是:
首先,让我们看看UPX结构。
序幕
用于 DLL 参数检查的 CMP / JNZ
Pushad,设置寄存器
可选的 NOP 对齐
解压算法
呼叫/跳跃恢复
进口
重置部分标志
结语
有关详细信息,这里是一个UPX-ED PE的评论IDA(免费版)美洲开发银行。
像序言/尾声这样的简单部分很容易修改,因此经常被修改:
像解压、调用恢复、导入加载这样的复杂部分通常保持不变,因此通常会在它们之间插入自定义代码:
由于序言并没有做太多事情,因此将其复制到非 UPX 封装的 PE 的入口点,以欺骗标识符和伪造 UPX 封装也很简单。
我将忽略 UPX 中有多种压缩算法以及 UPX 的多个版本。
通常,当人们询问它是普通的 UPX 还是普通的 UPX 时,这是因为恶意软件和其他软件喜欢采用 UPX 并对其稍作修改,因此无法使用标准 UPX 可执行文件对其进行解压缩,从而使反病毒软件难以解压缩。它在抵制逆向工程方面不是很有效。
我不确定这是否是您要问的,但 UPX 有多种压缩给定格式的方法。例如,一个 ELF - 可以直接解压缩到内存中 - 可以解压缩到 /tmp 并从那里执行
默认情况下首选第一个选项,但我认为它不是强制性的。有关详细信息,请参阅UPX 手册。