题目来源:https://adworld.xctf.org.cn/task/answer?type=reverse&number=4&grade=1&id=4750&page=1攻防世界elrond32
检查文件类型发现这居然是个elf32的文件。有点罕见。
拖进IDA直接进入main函数思路非常清晰,通过main函数传参的方式进行输入,然后就是一个套了递归的检验,容易得知我们的输入应该是isengard。不过这题却是elf32类型无法调试(或单纯我无法调试),所以只能去看flag的生成,还好并不复杂,只是利用一个字符串与输入字符串不断异或,需要注意字符串的类型是int,下面给出代码。
#f={0:'i',1:'e',3:'n',4:'d',5:'a',6:'g',7:'s',9:'r'}
#a=0
#while(a!=2 and a!=8 and a<=9):
# print(f[a])
# a=7*(a+1)%11
s='isengard'
v2=[0xf,0x1f,4,9,0x1c,0x12,0x42,9,0x0c,0x44,
0x0d,7,9,6,0x2d,0X37,0X59,0X1E,0,0X59,
0X0F,8,0X1C,0X23,0X36,7,0X55,2,0X0C,8,
0X41,0X0A,0X14]
flag=''
for i in range(33):
flag+=chr(v2[i]^ord(s[i%8]))
print(flag)