defget_models(s): while s.check() == sat: m = s.model() yield m s.add(Or([sym() != m[sym] for sym in m.decls()]))
s = Solver()
a = Int('a') b = Int('b') c = Int('c') d = Int('d') e = Int('e') f = Int('f') g = Int('g') h = Int('h') i = Int('i') j = Int('j') k = Int('k') l = Int('l') m = Int('m') n = Int('n') o = Int('o') p = Int('p')
defabs(x): return If(x>=0,x,-x)
s.add(And(0x20 < a, a < 0x7f)) s.add(And(0x20 < b, b < 0x7f)) s.add(And(0x20 < c, c < 0x7f)) s.add(And(0x20 < d, d < 0x7f)) s.add(And(0x20 < e, e < 0x7f)) s.add(And(0x20 < f, f < 0x7f)) s.add(And(0x20 < g, g < 0x7f)) s.add(And(0x20 < h, h < 0x7f)) s.add(And(0x20 < i, i < 0x7f)) s.add(And(0x20 < j, j < 0x7f)) s.add(And(0x20 < k, k < 0x7f)) s.add(And(0x20 < l, l < 0x7f)) s.add(And(0x20 < m, m < 0x7f)) s.add(And(0x20 < n, n < 0x7f)) s.add(And(0x20 < o, o < 0x7f)) s.add(And(0x20 < p, p < 0x7f))
# from PIN trace s.add(abs(d-0x22)+abs(c-0xf)+abs(b-0x2)+abs(a-0xc8)+abs(h-0x83)+abs(g-0xfb)+abs(f-0xe0)+abs(0-0x83)==0x304) s.add(abs(p-0xc0)+abs(o-0x20)+abs(n-0xf)+abs(m-0x10)+abs(l-0xcd)+abs(k-0x0)+abs(j-0x13)+abs(0-0xb8)==0x311) s.add(abs(d-0x0)+abs(c-0x0)+abs(b-0x0)+abs(a-0x0)+abs(h-0x0)+abs(g-0x0)+abs(0-0x3)+abs(e-0x04)==0x2cd) s.add(abs(p-0x0)+abs(o-0x00)+abs(n-0x0)+abs(m-0x0)+abs(l-0x0)+abs(k-0x0)+abs(0-0x3)+abs(i-0x11)==0x2d9) s.add(abs(d-0x0)+abs(c-0x0)+abs(b-0x0)+abs(a-0x0)+abs(h-0x0)+abs(0-0x0)+abs(f-0x2)+abs(e-0xcd)==0x2db) s.add(abs(p-0x0)+abs(o-0x00)+abs(n-0x0)+abs(m-0x0)+abs(l-0x0)+abs(0-0x0)+abs(j-0x2)+abs(i-0xd9)==0x2d4) s.add(abs(d-0x0)+abs(c-0x0)+abs(b-0x0)+abs(a-0x0)+abs(0-0x0)+abs(g-0x0)+abs(f-0x2)+abs(e-0xdb)==0x2e2) s.add(abs(p-0x0)+abs(o-0x00)+abs(n-0x0)+abs(m-0x0)+abs(0-0x0)+abs(k-0x0)+abs(j-0x2)+abs(i-0xd4)==0x2c4) s.add(abs(d-0x0)+abs(c-0x0)+abs(b-0x0)+abs(0-0x0)+abs(h-0x0)+abs(g-0x0)+abs(f-0x2)+abs(e-0xe2)==0x2e2) s.add(abs(p-0x0)+abs(o-0x00)+abs(n-0x0)+abs(0-0x0)+abs(l-0x0)+abs(k-0x0)+abs(j-0x2)+abs(i-0xc4)==0x2ce) s.add(abs(d-0x0)+abs(c-0x0)+abs(0-0x0)+abs(a-0x0)+abs(h-0x0)+abs(g-0x0)+abs(f-0x2)+abs(e-0xe2)==0x2ed) s.add(abs(p-0x0)+abs(o-0x00)+abs(0-0x0)+abs(m-0x0)+abs(l-0x0)+abs(k-0x0)+abs(j-0x2)+abs(i-0xce)==0x2d8) s.add(abs(d-0x0)+abs(0-0x0)+abs(b-0x0)+abs(a-0x0)+abs(h-0x0)+abs(g-0x0)+abs(f-0x2)+abs(e-0xed)==0x2e8) s.add(abs(p-0x0)+abs(0-0x00)+abs(n-0x0)+abs(m-0x0)+abs(l-0x0)+abs(k-0x0)+abs(j-0x2)+abs(i-0xd8)==0x2dc) s.add(abs(0-0x0)+abs(c-0x0)+abs(b-0x0)+abs(a-0x0)+abs(h-0x0)+abs(g-0x0)+abs(f-0x2)+abs(e-0xe8)==0x2f6) s.add(abs(0-0x0)+abs(o-0x00)+abs(n-0x0)+abs(m-0x0)+abs(l-0x0)+abs(k-0x0)+abs(j-0x2)+abs(i-0xdc)==0x2dd) print s.check() for m1 in get_models(s): serial = [m1[a].as_long(), m1[b].as_long(), m1[c].as_long(), m1[d].as_long(), m1[e].as_long(), m1[f].as_long(), m1[g].as_long(), m1[h].as_long(), m1[i].as_long(), m1[j].as_long(), m1[k].as_long(), m1[l].as_long(), m1[m].as_long(), m1[n].as_long(),m1[o].as_long(),m1[p].as_long()] key = '' for _ in serial: key+=chr(_) print key