最近,我问了一个有关检测UPX压缩的问题。 0xC0000022L想知道它是否是纯UPX。但是,直到那时,我才知道普通的UPX。所以我的问题是:


UPX有哪些版本/修改?
它们有何不同?它们具有什么功能?


#1 楼

我将忽略UPX中有多种压缩算法,并且有多个版本的UPX。

通常,当人们问到它是普通的UPX还是普通的UPX时,是因为恶意软件和其他软件喜欢采用UPX并对其进行少量修改,以使其无法与标准的UPX可执行文件一起解压缩,从而防病毒打开它会比较困难。在对抗逆向工程方面不是很有效。

评论


发现。你不会读书吗? ;)

– 0xC0000022L♦
13年3月23日在23:47

您能否提供有关其修改方式的任何示例/网站?这样的信息可能会进一步建立一个强有力的答案。 :)

– Lizz
13年4月6日在5:20

而且,如果将UPX的派生用作保护机制,则可以打赌它将产生假阳性,直到您脸色发青。 UPX已被大多数安全公司有效地归类为恶意软件工具,这是开源库和可执行工具的共同命运。

–达斯塔
13年4月14日在13:17

#2 楼

首先,让我们看一下UPX结构。

UPX结构



序言



CMP / JNZ for DLL参数检查
,设置寄存器
可选的NOP对齐方式



解压缩算法


NRV或LZMA



呼叫/跳转恢复


UPX转换相对调用并跳转为绝对调用,以改善压缩率。



导入


加载库,解析API


重置节标志

结束语


清洁堆栈
跳转到原始的EntryPoint




了解更多详细信息,这是UPX版本的PE的带注释IDA(免费版本)IDB。

修改后的UPX变体

简单的部分(例如序言/结尾)很容易修改,并且因此经常被修改:


基本多态性:用等价的指令代替
用跳转移动它们

复杂的部分,例如减压,调用恢复,导入加载通常保持不变,因此通常在它们之间插入自定义代码:


反调试
额外的xor循环(解压后)
标记,将在解压缩的代码中进一步检查该标记,以便文件知道它已解压缩。

伪造

由于序言并没有做太多,因此对于将其复制到EntryPoi非UPX打包的PE的nt,以欺骗标识符和伪造的UPX打包。

评论


对于PE文件,某些工具还依赖于默认节名称。

– 0xC0000022L♦
13年4月17日在4:44

#3 楼

我不确定这是否是您要的内容,但是UPX有多种压缩给定格式的方法。例如,ELF
-可以直接解压缩到内存中
-可以解压缩到/ tmp并从那里执行

默认情况下,首选第一个选项,但是我不知道认为这不是强制性的。有关详细信息,请参见UPX手册。