拖进ida查看main函数,就是一个简单比较:
然后我们就看它对输入的字符进行了什么操作:
右移3位相当于除8,也就是把字符串分为8个一组,对应和qword_201060的值做减法,可以得到主函数里显示的字符串
注意:内存中存储为小端存储
我们只需要写出它的逆过程就可以了:
#-*- coding:utf-8 -*-
enc = "********CENSORED********"
m = [0x410A4335494A0942, 0x0B0EF2F50BE619F0, 0x4F0A3A064A35282B]
import binascii
flag = b''
for i in range(3):
p = enc[i*8:(i+1)*8]
a = binascii.b2a_hex(p.encode('ascii')[::-1])
b = binascii.a2b_hex(hex(int(a,16) + m[i])[2:])[::-1]
flag += b
print (flag)
得到flag:
参考阅读:
Python 之hashlib库和binascii库的常见使用方法(内含官方文档)
【python】python字符串前面加u,r,b的含义
python之binascii模块