아래와 같이 flag 파일을 실행했다.
kali@kali:~$ ls -l flag
-rw-r--r-- 1 kali kali 335288 Mar 14 10:55 flag
kali@kali:~$ chmod u+x flag
kali@kali:~$ ./flag
I will malloc() and strcpy the flag there. take it.
flag 파일을 다운받아 Exeinfo PE로 확인해보니 UPX 패킹이 되어 있음을 알 수 있다.
언패킹한다.
kali@kali:~$ upx -d flag
Ultimate Packer for eXecutables
Copyright (C) 1996 - 2018
UPX 3.95 Markus Oberhumer, Laszlo Molnar & John Reiser Aug 26th 2018
File size Ratio Format Name
-------------------- ------ ----------- -----------
883745 <- 335288 37.94% linux/amd64 flag
Unpacked 1 file.
flag 파일을 Exeinfo PE로 다시 확인하면 아래와 같이 언패킹 된 것을 볼 수 있다.
GDB로 main을 살펴보면 아래와 같다.
(gdb) disas main
Dump of assembler code for function main:
0x0000000000401164 <+0>: push %rbp
0x0000000000401165 <+1>: mov %rsp,%rbp
0x0000000000401168 <+4>: sub $0x10,%rsp
0x000000000040116c <+8>: mov $0x496658,%edi
0x0000000000401171 <+13>: callq 0x402080 <puts>
0x0000000000401176 <+18>: mov $0x64,%edi
0x000000000040117b <+23>: callq 0x4099d0 <malloc>
0x0000000000401180 <+28>: mov %rax,-0x8(%rbp)
0x0000000000401184 <+32>: mov 0x2c0ee5(%rip),%rdx # 0x6c2070 <flag>
0x000000000040118b <+39>: mov -0x8(%rbp),%rax
0x000000000040118f <+43>: mov %rdx,%rsi
0x0000000000401192 <+46>: mov %rax,%rdi
0x0000000000401195 <+49>: callq 0x400320
0x000000000040119a <+54>: mov $0x0,%eax
0x000000000040119f <+59>: leaveq
0x00000000004011a0 <+60>: retq
End of assembler dump.
아래와 같디 해당 주소의 값을 출력한다.
(gdb) x/s *0x6c2070
0x496628: "UPX...? sounds like a delivery service :)"
플래그가 나온다.