如何在 UPX 打包的可执行文件上防止“upx -d”?
逆向工程
包装工
升
2021-07-08 03:46:33
2个回答
UPX 不检查解包存根的完整性,只是盲目地从存储的信息中恢复数据,而不是从实际执行中恢复数据。
由于 UPX 是开源的并有文档记录(注释为 IDB),因此很容易修改它并实际执行一些额外的操作(反调试、补丁、解密、跳转到真正的入口点...),这些操作在 'upx -d' 时会丢失用来。
这种 UPX 黑客在恶意软件中并不少见。
愚弄upx -d
可以像一个字节补丁一样简单,这里是一个小样本。
打包 MS-Windows 标准calc.exe
,hexedit 一个字节,结果是一个不可解压的可执行文件upx -d
(这不是 corrupting
exe,exe 将运行并且可以手动解压)。只用-d
开关开箱是行不通的。
创建一个新文件夹
foolupx
:foolupx:\>md foolupx
复制
calc.exe
到新创建的文件夹:foolupx:\>copy c:\WINDOWS\system32\calc.exe foolupx\upxedcalc.exe 1 file(s) copied.
打包重命名的
calc.exe
:foolupx:\>upx .\foolupx\upxedcalc.exe Ultimate Packer for eXecutables Copyright (C) 1996 - 2011 UPX 3.08w Markus Oberhumer, Laszlo Molnar & John Reiser Dec 12th 2011 File size Ratio Format Name -------------------- ------ ----------- ----------- 114688 -> 56832 49.55% win32/pe upxedcalc.exe Packed 1 file.
创建打包的副本以
calc.exe
进行十六进制编辑并比较文件。不同之处在于名为UPX0
链接到的 PE 标头部分中的 1 个字节BPX0
:foolupx:\>copy .\foolupx\upxedcalc.exe .\foolupx\modupxedcalc.exe 1 file(s) copied. foolupx:\>fc .\foolupx\upxedcalc.exe .\foolupx\modupxedcalc.exe Comparing files .\FOOLUPX\upxedcalc.exe and .\FOOLUPX\MODUPXEDCALC.EXE 000001E8: 55 42
使用
-d
交换机解压缩这两个文件。一个会被解包,另一个不会被解包:foolupx:\>upx -d .\foolupx\modupxedcalc.exe Ultimate Packer for eXecutables Copyright (C) 1996 - 2011 UPX 3.08w Markus Oberhumer, Laszlo Molnar & John Reiser Dec 12th 2011 File size Ratio Format Name -------------------- ------ ----------- ----------- upx: .\foolupx\modupxedcalc.exe: CantUnpackException: file is modified/hacked/protected; take care!!! Unpacked 0 files. foolupx:\>upx -d .\foolupx\upxedcalc.exe Ultimate Packer for eXecutables Copyright (C) 1996 - 2011 UPX 3.08w Markus Oberhumer, Laszlo Molnar & John Reiser Dec 12th 2011 File size Ratio Format Name -------------------- ------ ----------- ----------- 114688 <- 56832 49.55% win32/pe upxedcalc.exe Unpacked 1 file. foolupx:\>