题目描述

菜鸡拿到了一个被加壳的二进制文件

Solution

使用 Kali 的file命令检测文件类型,这是一个 ELF64 文件。我们用strings命令查看可打印字符:

  1. ┌──(cheeryLaptop)-[~/Desktop/reverse]
  2. └─$ strings 002 | rg -i "flag"
  3. flag{Upx_1s_n0t_a_d3liv3r_c0mp4n

但是提交的时候显示 Flag 不正确。题目描述中说这是一个被加壳的二进制程序,我们使用binwalk工具查看:

  1. ┌──(cheeryLaptop)-[~/Desktop/reverse]
  2. └─$ binwalk 002
  3. DECIMAL HEXADECIMAL DESCRIPTION
  4. --------------------------------------------------------------------------------
  5. 0 0x0 ELF, 64-bit LSB executable, AMD x86-64, version 1 (GNU/Linux)
  6. 216 0xD8 ELF, 64-bit LSB processor-specific, (GNU/Linux)
  7. 324123 0x4F21B Copyright string: "Copyright (C) 1996-2013 the UPX Team. All Rights Reserved. $"

可以看到是被 UPX 压缩了。我们将其解压:

  1. ┌──(cheeryLaptop)-[~/Desktop/reverse]
  2. └─$ upx -d 002
  3. Ultimate Packer for eXecutables
  4. Copyright (C) 1996 - 2020
  5. UPX 3.96 Markus Oberhumer, Laszlo Molnar & John Reiser Jan 23rd 2020
  6. File size Ratio Format Name
  7. -------------------- ------ ----------- -----------
  8. 912808 <- 352624 38.63% linux/amd64 002
  9. Unpacked 1 file.

再用strings工具查看打印字符:

002-1.png

可以发现是 UPX 把 Flag 的文本字段压缩了,所以之前提交的 Flag 是不对的。