我有一个 ELF 文件,想知道它是否是 UPX 包装的。如何在 GNU/Linux 中检测 UPX 压缩?
如何检查 ELF 文件是否是 UPX 打包的?
逆向工程
linux
升
2021-07-07 07:36:37
4个回答
好的,假设是普通的 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 打包的,但是,特别是如果您正在分析恶意软件,则可能会这样做以欺骗您。我的建议是查看入口点并找到与此类似的模式:
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。
在 Linux/Unix 变体中,strings 命令帮助我识别了一些打包程序,例如 UPX、Aspack、NSPack、NTKrnl、PeCompact、Themida 等,所有这些打包程序都倾向于在打包的可执行文件中留下嵌入的字符串,这有助于识别类型的包装工。当然,elf 文件的作者可能会故意引入相同的字符串,以使您的分析偏离轨道。我只是将其用作分析的起点。
以下是一些帮助我识别封隔器类型的识别字符串。
UPX - UPX0, UPX1, UPX2
Aspack - aspack, adata
NSPack - NSP0, NSP1, NSP2
NTKrnl - NTKrnl Security Suite
PECompact - PEC2, PECompact2
Themida - Themida, aPa2Wa
此外,file 命令还标识了一些常见的打包程序格式。
如果您怀疑该文件肯定是用 UPX 打包的,那么我会推荐 0xC0000022L 的建议。
- 获取UPX
- 使用不同的选项(LZMA、NRV 等)制作您自己的 UPX 包装 ELF
- 由于 UPX 易于修改,并且经常被修改、修补甚至伪造,因此比较代码开始将很容易检查您的目标是否确实是 UPX 打包的,以及这是否真的是原始 UPX 版本,或者它是否在反正。
其它你可能感兴趣的问题