
mips逆向
ida没安装插件无法逆向mips,下载一个ghidra工具,需要安装jdk11才能执行。
使用ghidra打开,发现下面的代码,flag的前五位异或处理后,判断正确进入下一步

又是一系列看似复杂的操作,实际上仔细观察后并不复杂,就是循环flag,判断i进入不同的计算,计算就是左移或者右移。

解题方法两种,一种是直接根据代码逆推,另一种是直接暴力破解
#第一种方法 ,逆推代码
str = 'Q|j{g'
i = 0
for c in str:
print chr(ord(c) ^ 0x20 - i)
i += 1
flag = [81, 124, 106, 123, 103, 0x52, 0xFD, 0x16, 0xA4, 0x89, 0xBD, 0x92, 0x80, 0x13, 0x41, 0x54, 0xA0, 0x8D, 0x45,
0x18, 0x81, 0xDE, 0xFC,
0x95,
0xF0,
0x16, 0x79, 0x1A, 0x15, 0x5B, 0x75, 0x1F]
for i in range(len(flag)):
if (i & 1) == 0:
# flag[i] = ((flag[i] << 26) >> 24) | flag[i] >> 6
# flag[i] = flag[i] << 2 & 0x7 | flag[i] >> 6
flag[i] = flag[i] >> 2 | flag[i] << 6 & 0xff
else:
# flag[i] = flag[i] >> 2 | (flag[i] << 30) >> 24
# flag[i] = flag[i] >> 2 | flag[i] << 6 & 0x7
flag[i] = flag[i] << 2 & 0xff | flag[i] >> 6
f = 'qctf{'
for i in range(5, len(flag)):
f +=chr(flag[i] ^ 0x20 - i)
print f
#第二种方法 ,暴力破解
c = [81, 124, 106, 123, 103, 0x52, 0xFD, 0x16, 0xA4, 0x89, 0xBD, 0x92, 0x80, 0x13, 0x41, 0x54, 0xA0, 0x8D, 0x45, 0x18,
0x81,
0xDE, 0xFC,
0x95,
0xF0,
0x16, 0x79, 0x1A, 0x15, 0x5B, 0x75, 0x1F]
flag = ''
for i in range(5, 32):
for n in range(32, 127):
tt = n ^ (0x20 - i)
if (i & 1) == 0:
tmp = ((tt << 2) & 0xff) | tt >> 6
else:
tmp = tt >> 2 | ((tt << 6) & 0xff)
if tmp == c[i]:
flag += chr(n)
break
print(flag)