题目

解法
一道rust语言逆向题
先exeinfo看看

无壳elf 进ida64
进main函数

进去之后可以直接看到一堆数据,感觉像密文

汇编

再往下看到一个比较,

进汇编

不确定是不是关键处,不妨动调一下
(注意一下这个 jnz要改成jz,这样才可以一轮轮循环下去)
可以看到箭头指的地方密文被传进来了,而上面穿的是什么呢?

只能是加密后的明文了

那现在就是要找到怎么加密的明文了,主函数很难看,所以根据这里的动调看怎么存进去的
所以动调往上找一下
发现这里的rdx有数据了,往上找

来到这

直接f5反编译 到这里 可以看到一个异或 密文是XFFTnT

所以可以写脚本了
enc = [0x3E, 0x2A, 0x27, 0x33, 0x15, 0x03, 0x3D, 0x77, 0x25, 0x64,
0x03, 0x67, 0x07, 0x32, 0x76, 0x0B, 0x1C, 0x21, 0x2B, 0x32,
0x19, 0x23, 0x5E, 0x26, 0x69, 0x22, 0x3B]
key = 'XFFTnT'
flag = []
for i in range(len(enc)):
flag.append(chr(enc[i] ^ ord(key[i%6])))
print(''.join(flag))
题目

解法
下出来就是一堆py (ans我自己写的)

挺简单的 主要其实就是main
过程就是取flag逐个字符,偶数位除以2 奇数位除以3 然后出下面列表

就是下面的列表就是密文 所以脚本思路就是 偶数位×2 奇数位×3.
sEnc = ['39/1', '83/3', '83/2', '67/3', '42/1', '70/3', '123/2', '116/3', '52/1', '49/3', '115/2', '95/3', '49/2', '115/3', '95/2', '112/3', '121/2', '95/3', '119/2', '37/1', '57/1', '36/1', '50/1', '11/1', '95/2', '35/1', '58/1', '35/1', '115/2', '39/1', '26/1', '34/1', '97/2', '36/1', '33/2', '125/3']
nTemp1 = []
nTemp2 = []
for i in sEnc:
sTemp1 = i.split('/')[0]
sTemp2 = i.split('/')[1]
nTemp1.append(eval(sTemp1))
nTemp2.append(eval(sTemp2))
print(nTemp1)
'''
for i in range(len(nTemp2)):
if i % 2 == 0:
if nTemp2[i] == 1:
nTemp2[i] = 2
if i % 2 == 1:
if nTemp2[i] == 1:
nTemp2[i] = 3
print(nTemp2)
'''
print(nTemp2)
for i in range(len(nTemp1)):
if i % 2 == 0:
if nTemp2[i] == 1:
print(chr(nTemp1[i] * 2), end='')
else:
print(chr(nTemp1[i]), end='')
if i % 2 == 1:
if nTemp2[i] == 1:
print(chr(nTemp1[i] * 3), end='')
else:
print(chr(nTemp1[i]), end='')
'''
string = '39/1'
result = string.split('/')[0]
print(result)
'''
出NSSCTF{th1s_1s_py_world!_itisu4fal!}