geekpwn2015 writeup

P1:你能得到正确的flag吗?

上IDA,f5,看到程序逻辑如下:

p1_1.png
逻辑很简单,只是比较输入的字符(0x804A0E0为首地址)和目标字符串(0x804A040为首地址)是否相同。查看下0x804A040的数据即可得到flag为Welcome_to_GeekPwn_2015 。
p1_2.png

P2:找到被隐藏的flag

p2_1.png
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
def guess(a, b):
n = 0
while 1:
t = a + n*251
if t % b == 0:
return chr(t / b)
n += 1

def main():
magic = [ord(ch) for ch in 'Welcome to GeekPwn 2015!']
target = [int(n, 16) for n in "99 A1 73 33 5F AA 42 1C 1B 39 3E F9 39 45 0E 30 0A 45 1C BF 2D BF F6 55".split()]
ans = []
for i in range(len(magic)):
ans.append(guess(target[i], magic[i]))
print ''.join(ans)
main()

# GeekPwn_2015_see_u_1024!

未完待续…