NSSCTF-[HGAME 2022 week1]easyasm

无壳,64位,ida查看

发现只有一个函数,而且

不能f5反汇编那就直接看汇编代码

空格切试图发现这里有一个但是不对

那我们分析汇编代码

将ax清零,然后从数据段中拿出数据,向左偏移4,压入栈中,再清零ax,再从数据段中拿出数据,再向右偏移4,将栈中的数据拿出给bx,ax+bx,再拿ax与 (十六进制的17)23进行异或,最后的数据拿来和额外段的数据比较

  • 在汇编代码中,对经过一系列左移、右移、相加操作后的结果(存储在 AX 寄存器中),有一步 xor ax, 17h 的操作,即与十六进制值 17h 进行异或操作
  • 在汇编代码中,经过前面的数据处理和校验等操作后,如果处理结果符合某种条件(比如循环处理完所有数据且校验通过),会通过一系列向特定内存区域(以 0B800h 为段地址的区域)写入字符对应的字节值的操作来显示 “right!” 或 “wrong!” 等信息。这里隐含的意思是,前面的数据处理结果会影响到最终显示的内容,而数据处理结果的不同特征会导致不同的显示结果,也就是说,数据处理结果与最终要显示的类似 “flag” 性质的信息(“right!” 或 “wrong!”)是相关联的。
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]

def process_data():
    flag = ''
    for i in Des:
        tem = i ^ 0x17
        flag += chr((tem >> 4) + ((tem << 4) % 128))
    return flag

processed_data = process_data()
print("flag:", processed_data)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值