简单的一道异或逆向
解题步骤
- 放入查壳工具查壳,可以看到无壳,是MacOS的可执行文件
- 放入ida反编译,查看伪代码
- 分析伪代码,可以看到是将我们输入的字符串的本位与上一位异或后,与
global
字符串比较。 - 因为异或操作的可逆性,只需要找出
global
字符串的值进行逆操作即可,见下图
- 然后发现,中间有字符串夹带着16进制数字,然后稍做处理后,写一个反向操作的程序
处理后:
'k',0xC,'w','&','O','.','@',0x11,'x',0xD,'Z',';','U',0x11,'p',0x19,'F',0x1F,'v','"','M','#','D',0xE,'g',6,'h',0xF,'G','2','O'
反向操作程序如下:
key = [ 'f',0xA,'k',0xC,'w','&','O','.','@',0x11,'x',0xD,'Z',';','U',0x11,'p',0x19,'F',0x1F,'v','"','M','#','D',0xE,'g',6,'h',0xF,'G','2','O' ]
out = key[0]
x = 0
for i in range(0,len(key)-1):
if isinstance(key[i],str):
if isinstance(key[i+1],str):
x = ord(key[i]) ^ ord(key[i+1])
else:
x = ord(key[i]) ^ key[i+1]
else:
if isinstance(key[i+1],str):
x = key[i] ^ ord(key[i+1])
else:
x = key[i] ^ key[i+1]
out = out + chr(x)
print(out)
运行后即可得到flag