打开ida,查看方程式
在去查看判断
发现des和v4做比较,Des是从unk_404020复制过来的,所以
查看unk_404020
由于v4到v45全是int类型,那么我们的byte404020也得是int类型
用idapython打印这里的数值for i in range(0x30):print(str(hex(Dword(0x404020+i*4)))+',')
获取数据后把方程式添加到z3里,在解方程,转换为字符后在打印输出
from z3 import *
#z3
#idapython提取里面的数据 for i in range(0x30):print(str(hex(Dword(0x404020+i*4)))+',')
v=[0x4f17,
0x9cf6,
0x8ddb,
0x8ea6,
0x6929,
0x9911,
0x40a2,
0x2f3e,
0x62b6,
0x4b82,
0x486c,
0x4002,
0x52d7,
0x2def,
0x28dc,
0x640d,
0x528f,
0x613b,
0x4781,
0x6b17,
0x3237,
0x2a93,
0x615f,
0x50be,
0x598e,
0x4656,
0x5b31,
0x313a,
0x3010,
0x67fe,
0x4d5f,
0x58db,
0x3799,
0x60a0,
0x2750,
0x3759,
0x8953,
0x7122,
0x81f9,
0x5524,
0x8971,
0x3a1d,
0x0,
0x0,
0x0,
0x0,
0x0,
0x0]
#在将数值和公式添加到方程式组里,求解即可
p=Solver()
s=[0]*256
for i in range(256):
s[i]=Int('s['+str(i)+']')
p.add(34 * s[3] + 12 * s[0] + 53 * s[1] + 6 * s[2] + 58 * s[4] + 36 * s[5] + s[6]==v[0])
p.add(27 * s[4] + 73 * s[3] + 12 * s[2] + 83 * s[0] + 85 * s[1] + 96 * s[5] + 52 * s[6]==v[1])
p.add(24 * s[2] + 78 * s[0] + 53 * s[1] + 36 * s[3] + 86 * s[4] + 25 * s[5] + 46 * s[6]==v[