ezrust
友情建议一下,最好用 IDA 8.3 及以上分析
通过 string
找到主逻辑
明显看到 stdin.read_line
输入数据,v6
就是密文,后面有个判断前面一大段密文相等的逻辑,还能发现有一个 loverust
字符串
因为 Rust 语言的特性,很难找到具体功能的实现逻辑在哪,调用链有点复杂,实际的加密逻辑与主逻辑包了非常多层,所以采用动调
进行基本分析后可以得出 loverust
是加密的关键字串,也可以说是 key
可以直接在 loverust
上下一个硬件断点,然后开始动调
可以看到 IDA 直接断在了加密上
对函数按 X 做多次交叉引用可以发现加密循环
回到加密处,查看变量可以发现 a3
就是我们的输入,a1
是 loverust
,v5
是指针
这里查看 v5
的来源,v7
值是 8 - 1 = 7
,就是一个 key[7 - (i % 8)]
的逻辑
也就是 loverust
是逆序与输入进行异或
写解密脚本
python
en=[
0x12, 0x1f, 0x14, 0x15, 0x1e, 0x0f, 0x5f, 0x39, 0x2b, 0x33, 0x07, 0x41,
0x3a, 0x4f, 0x5f, 0x03, 0x10, 0x2c, 0x35, 0x06, 0x3a, 0x04, 0x1a, 0x1f,
0x00, 0x0e
]
s=''
key='loverust'
for i in range(len(en)):
s+=chr(en[i]^ord(key[7 - (i % 8)]))
print(s)