[ACTF新生赛2020]easyre
附件
步骤
查壳,32位程序,upx壳儿
脱完壳儿,扔进ida
分析
一开始给我们定义了一个数组,
v4=[42,70,39,34,78,44,34,40,73, 63, 43, 64]
之后让我们输入一个字符串,根据43行的if判断可以知道我们输入的字符串的开头是ACT{},就是flag
根据48行的if判断可知。ACT{}括号里的值长度为12,v4=byte_402000[输入的数组的每一位值-1]
在ida里可以看到byte_402000数组的值
根据这个算法逆向一下就能得到我们输入的字符串,也就是flag
v4 = [42,70,39,34,78,44,34,40,73,63,43,64]
string = chr(0x7E)+"}|{zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+*)(" + chr(0x27) + '&%$# !"'
flag=""
for i in v4:
for j in range(1,len(string)):
if i == ord(string[j]):
flag+=chr(j+1)
print ("flag{"+flag+"}")