首先这个程序竟然不能运行,会输出bash:No such file or directory,查了一下是因为这个软件32位的,ubuntu 64位里没有32位的库,需要安装

1
2
3
sudo dpkg --add-architecture i386
sudo apt-get update
sudo apt-get install zlib1g:i386 libstdc++6:i386 libc6:i386

然后直接运行这个程序发现会直接退出,啥都没有。

使用ida打开,然后搜索flag这个单词发现在0x080484AF这里有个打印flags的函数,所以用edb debugger调试程序,然后在一开始将RIP改为这个打印flags函数的起始位置0x804849B,得到输出的flags为i_has_debugger_skill

或者直接看明白汇编代码是怎么计算的,写出下面的代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
nums = [0x1686f596,
0x5646F537,
0x76765726,
0x37F52756,
0xC6C696b6]
res = ""
for n in nums:
i = 4
while i:
tt = 0xff & n
temp = ((tt >> 4) | (tt << 4)) & 0xff
res += chr(temp)
n >>= 8
i -= 1
print(res)