我有一个ELF文件,想知道它是否是UPX打包的。如何在GNU / Linux中检测UPX压缩?

评论

香草UPX或UPX的任何可能的修改?

我认为这是香草UPX-

#1 楼

好的,假设使用香草UPX,可以通过检测字符串UPX!UPX0来解决问题。据我所知,它在Windows上也可以使用。

所以它是一个外壳式的一线式,例如:

grep UPX\! <filename>




grep UPX0 <filename>


...假设此处是grep的GNU版本。


另一种方法,但使用相同的原理:

$ hexdump -C <filename> |grep -C 1 UPX
000000a0  00 00 00 00 00 00 00 00  00 00 20 00 00 00 00 00  |.......... .....|
000000b0  c3 af e9 18 55 50 58 21  20 08 0d 16 00 00 00 00  |....UPX! .......|
000000c0  a0 fd 16 00 a0 fd 16 00  38 02 00 00 c6 00 00 00  |........8.......|
--
0000cf60  fe 61 03 83 78 b5 54 03  67 8b 85 2d ca a8 12 3c  |.a..x.T.g..-...<|
0000cf70  44 ad bc 12 ab 7e 86 55  50 58 30 0e 01 ee 7c 64  |D....~.UPX0...|d|
0000cf80  00 f7 d1 80 4a 11 03 58  6e ac 0d 01 ff 92 83 e8  |....J..Xn.......|
--
000544e0  73 20 66 69 6c 65 20 69  73 20 70 61 63 6b 65 64  |s file is packed|
000544f0  20 77 69 74 68 20 74 68  65 20 55 50 58 20 65 78  | with the UPX ex|
00054500  65 63 75 74 61 62 6c 65  20 70 61 63 6b 65 72 20  |ecutable packer |
00054510  68 74 74 70 3a 2f 2f 75  70 78 2e 73 66 2e 6e 65  |http://upx.sf.ne|
00054520  74 20 24 0a 00 24 49 64  3a 20 55 50 58 20 33 2e  |t $..$Id: UPX 3.|
00054530  30 38 20 43 6f 70 79 72  69 67 68 74 20 28 43 29  |08 Copyright (C)|
--
00054e40  7d 24 24 92 b7 0c 7f 12  01 a8 24 49 92 ff 00 00  |}$$.......$I....|
00054e50  00 00 55 50 58 21 00 00  00 00 00 00 55 50 58 21  |..UPX!......UPX!|
00054e60  0d 16 08 07 80 44 b5 80  b9 9a 8a d9 a0 08 00 00  |.....D..........|


评论


您也可以尝试在其上运行upx -l。

–伊戈尔·斯科钦斯基♦
13年3月23日在3:16

#2 楼

我不建议您依赖可能会找到的字符串或节名称。通常,它将指示该文件与UPX打包在一起,但是,特别是如果您在分析恶意软件,则可能为了欺骗您而这样做。我的建议是看一下入口点,然后找到类似于此的模式:

0x00023b60 ; FUNCTION start
0x00023b60 (01) 60                     PUSHA 
0x00023b61 (05) be00904300             MOV ESI, 0xHARDCODED_VIRTUAL_ADDRESS
0x00023b66 (06) 8dbe0080fcff           LEA EDI, [ESI-0x38000] 
0x00023b6c (01) 57                     PUSH EDI 
0x00023b6d (02) eb0b                   JMP 0x00023b7a   ; 1 


基本上,找到PUSHA,MOV ESI,VIRTUAL_ADDRESS,LEA和JMP。

#3 楼

在Linux / Unix变体中,字符串命令帮助我识别了一些打包程序,例如UPX,Aspack,NSPack,NTKrnl,PeCompact,Themida等。所有这些打包程序都倾向于将嵌入式字符串保留在打包的可执行文件中,这有助于识别类型封隔器。当然,elf文件的作者可以故意引入相同的字符串,从而使您的分析偏离轨道。我将以此为起点进行分析。

以下一些标识字符串可帮助我识别包装机类型。
UPX-UPX0,UPX1,UPX2
Aspack-aspack,adata
NSPack-NSP0,NSP1,NSP2
NTKrnl-NTKrnl安全套件
PECompact-PEC2,PECompact2
Themida-Themida,aPa2Wa

另外,file命令也可以识别一些常见的打包程序格式。

如果您怀疑文件肯定是由UPX打包的,那么我建议使用0xC0000022L的建议。

#4 楼


获取UPX

制作带有不同选项(LZMA,NRV等)的自己的UPX包装的ELF,
由于UPX易于修改,而且经常被修改,已修补或伪造的代码,
开始比较代码即可轻松检查目标
是否确实是UPX打包的,以及这是否确实是原始UPX版本
或是否在UPX中进行了修改任何方式。


评论


这实际上是一个很好的观点,但是它使它变得非常乏味,因为即使是香草UPX也有这么多版本。仍然+1

– 0xC0000022L♦
13年3月26日在20:06

您是对的,但仍然可以管理:香草UPX有很多版本,但是它们的流程几乎没有变化,因此它们不是字节相同的,但是结构确实很相似。通常,一个不错的UPX hack在主要部分之间有一些额外的代码,例如解压缩和导入加载。我重新上传了我的旧评论UPX IDB,也许会有所帮助。

–天使
13年3月27日在7:56