南邮ctf攻防平台RE第四题WxyVM1
今天做了南邮攻防平台RE第四题,链接:http://ctf.nuptsast.com/
用Winhex打开以后可以看出来是ELF文件,所以用IDA打开,找到main函数,F5。
可以看出来,程序的意思就是:输入flag,经过sub_4005B6那个函数进行运算,然后长度必须为24,再与最终答案进行比较,检测是否正确。
接下来看那个运行的函数:
6010C0是一个长度为15000的数组,每3个分为一组,分别为v0,v1,v2。一共5000组。v0是检测进行哪种运算,一共有5种运算,加减乘异或。v1是选择输入的哪一位进行运算,v2是运算数。最后与601060中的数据进行比较。所以解题思路就是用601060中的数据将上面的运算进行逆运算,这样就可以得到正确输入。
下面是python代码:
c = """ C4 34 22 b1 d3 11 97 07 db 37 c4 06 1d fc 5b ed 98 df 94 d8 b3 84 cc 08 """
d=[]
for i in c.split():
d.append(int(i,base=16))
for i in range(5000):
v0 = b[3*(4999-i)]
v1 = int(b[3*(4999-i)+1],base=16)
# print(v1)
v3 = int(b[3 * (4999 - i) + 2], base=16)
print(v3)
if v0 =="01":
d[v1] -= v3
elif v0 == "02":
d[v1] += v3
elif v0 =="03":
d[v1] ^= v3
elif v0 == "04":
d[v1] = d[v1]/v3
elif v0 == "05":
d[v1] ^= d[v3]
else:
continue
print("".join([str(chr(int(i)%128))for i in d]))
结果是:nctf{Embr4ce_Vm_j0in_R3}
有一个重要的点是最后对比的数组,是一个char类型的,所以我们取数据的时候每4位取最低位,而不是直接取。这个问题纠结了我好久,最后还是有个学弟告诉我的。。。
阅读更多声明:该文观点仅代表作者本人,入门客AI创业平台信息发布平台仅提供信息存储空间服务,如有疑问请联系rumenke@qq.com。
- 上一篇: zip总结
- 下一篇:没有了