
无壳,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)
1129

被折叠的 条评论
为什么被折叠?



