题目描述
菜鸡拿到了一个被加壳的二进制文件
Solution
使用 Kali 的file
命令检测文件类型,这是一个 ELF64 文件。我们用strings
命令查看可打印字符:
┌──(cheery㉿Laptop)-[~/Desktop/reverse]
└─$ strings 002 | rg -i "flag"
flag{Upx_1s_n0t_a_d3liv3r_c0mp4n
但是提交的时候显示 Flag 不正确。题目描述中说这是一个被加壳的二进制程序,我们使用binwalk
工具查看:
┌──(cheery㉿Laptop)-[~/Desktop/reverse]
└─$ binwalk 002
DECIMAL HEXADECIMAL DESCRIPTION
--------------------------------------------------------------------------------
0 0x0 ELF, 64-bit LSB executable, AMD x86-64, version 1 (GNU/Linux)
216 0xD8 ELF, 64-bit LSB processor-specific, (GNU/Linux)
324123 0x4F21B Copyright string: "Copyright (C) 1996-2013 the UPX Team. All Rights Reserved. $"
可以看到是被 UPX 压缩了。我们将其解压:
┌──(cheery㉿Laptop)-[~/Desktop/reverse]
└─$ upx -d 002
Ultimate Packer for eXecutables
Copyright (C) 1996 - 2020
UPX 3.96 Markus Oberhumer, Laszlo Molnar & John Reiser Jan 23rd 2020
File size Ratio Format Name
-------------------- ------ ----------- -----------
912808 <- 352624 38.63% linux/amd64 002
Unpacked 1 file.
再用strings
工具查看打印字符:
可以发现是 UPX 把 Flag 的文本字段压缩了,所以之前提交的 Flag 是不对的。