做buuctf的时候,,把相同类型的放到一起
xor
PE查看没有什么信息
ida里面看一下主函数
v6与global里面的字符相比较,相同的话成功得到flag
进入global看看
从main函数里面可以得到V6的处理方式为v6[i]等于v6[i]原来的值与v6[i-1]按位异或。
那我们获取flag就把global里面的字符反过来
写个脚本测试一下
str1 = ['f', 0x0A, 'k', 0x0C, 'w', '&', 'O', '.', '@', 0x11, 'x', 0x0D, 'Z', ';', 'U', 0x11, 'p', 0x19, 'F', 0x1F, 'v',
'"', 'M', '#', 'D', 0x0E, 'g', 6, 'h', 0x0F, 'G', '2', 'O']
flag = "f"
for i in range(1, len(str1)):
if (isinstance(str1[i], int)):
str1[i]=chr(str1[i])
str1="".join(str1)
for i in range(1,len(str1)):
flag += chr(ord(str1[i]) ^ ord(str1[i - 1]))
print(flag)
拿到flag
[BJDCTF 2nd]8086
调用了sub_10030函数,进去查看发现是一个死循环
查看汇编。。。写入了物理地址aUDuTZWjQGjzZWz
这是一个8086汇编写成的程序,,后面有一串数据,选中,按C,强制转换成汇编看一下。
得到如下代码
循环22次,,且字符串和0x1f抑或
x=']U[du~|t@{z@wj.}.~q@gjz{z@wzqW~/b;'
f=''
for i in x:
f+=chr(ord(i)^0x1F)
print(f)