[HGAME 2022 week1]easyasm

发布时间 2023-05-09 22:58:28作者: TFOREVERY

查壳:

64位,进IDA:

好家伙,不给看伪代码,来吧汇编走起:

设置两个段,一个数据段(dseg),一个额外段(seg001)看看吧,dseg段中的内容'hgame{Fill_in_your_flag}'

seg001段中的内容:(不想说话)

关键:

逐个分析吧,首先是将ax清零,然后从数据段中拿出数据,向左偏移4,压入栈中,再清零ax,再从数据段中拿出数据,再向右偏移4,将栈中的数据拿出给bx,ax+bx,再拿ax与 (十六进制的17)23进行异或,最后的数据拿来和额外段的数据比较。(这里注意,只拿了一个数据,并不是全部哦)

都讲到这里了,还不懂怎么写吗,上手了呗:

Des = [0x91, 0x61, 0x01, 0xC1, 0x41, 0xA0, 0x60, 0x41, 0xD1, 0x21,
       0x14, 0xC1, 0x41, 0xE2, 0x50, 0xE1, 0xE2, 0x54, 0x20, 0xC1,
       0xE2, 0x60, 0x14, 0x30, 0xD1, 0x51, 0xC0, 0x17]
flag = ''
for i in Des:
    tem = i ^ 0x17
    flag += chr((tem >> 4) + ((tem << 4) % 128))
print(flag)

这里为啥要%128呢,因为相当于乘上二的四次方,难免会超过127

拿到NSSCTF{welc0me_to_4sm_w0rld}