BUUCTF-re xor,[BJDCTF 2nd]8086异或

做buuctf的时候,,把相同类型的放到一起
xor
PE查看没有什么信息
ida里面看一下主函数
BUUCTF-re xor,[BJDCTF 2nd]8086异或_第1张图片
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函数,进去查看发现是一个死循环
BUUCTF-re xor,[BJDCTF 2nd]8086异或_第2张图片
查看汇编。。。写入了物理地址aUDuTZWjQGjzZWz
BUUCTF-re xor,[BJDCTF 2nd]8086异或_第3张图片
这是一个8086汇编写成的程序,,后面有一串数据,选中,按C,强制转换成汇编看一下。
BUUCTF-re xor,[BJDCTF 2nd]8086异或_第4张图片
得到如下代码
BUUCTF-re xor,[BJDCTF 2nd]8086异或_第5张图片
循环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)

在这里插入图片描述

你可能感兴趣的:(逆向)