code = ['\x1f', '\x12', '\x1d', '(', '0', '4', '\x01', '\x06', '\x14', '4', ',', '\x1b', 'U', '?', 'o', '6', '*', ':', '\x01', 'D', ';', '%', '\x13'] flag = '' l = len(code) for i inrange(l-2,-1,-1): code[i] = chr(ord(code[i]) ^ ord(code[(i+1)])) for i inrange(l): flag += chr((ord(code[i])-i)%128) print(flag)
flag{Just_Re_1s_Ha66y!}
easyre
upx去壳
分析一下main函数
v4 = ‘’*F’"N,"(I?+@” v6是ACTF{} v7,v8,v9赋值给v5的前三位
观察循环体,知道flag为12位
主要就是分析一下_data_start__这个函数
意思是在这串字符中查找v4的字符,方法是字符下标-1等于v4字符的ASCII码
开始写脚本( ‘前要加上\进行转译)
1 2 3 4 5 6 7 8 9
key = '~}|{zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+*)(\'&%$# !"' v4 = [42,70,39,34,78,44,34,40,73,63,43,64] x = [] flag = '' for i in v4: x.append(key.find(chr(i))+1) for i in x: flag += chr(i) print("flag{"+flag+"}")