Code:
#!/usr/bin/env python
#-*- coding:utf-8 -*-
'''
Keygen for Dr.Web CrackMe! v.0.1 challenge
Xacker Magazin #190 (November, 2014)
Solution report on email lozovsky@glc.ru
'''
from z3 import *
import sys
print 'Name: %s'%sys.argv[1]
### generate table ###
xtbl = [0]*256
for r00 in range(256):
r01 = r00
for r02 in range(8):
if r01 & 1:
r01 = (r01>>1)^0xEDB88320
else:
r01 >>= 1
xtbl[r00] = r01
### calc hash ###
hash = 0xFFFFFFFF
for cc in sys.argv[1]:
hash = xtbl[(ord(cc)^hash)&0xFF] ^ (hash >> 8)
hash ^= 0xFFFFFFFF
print 'Hash: 0x%X'%hash
### solve equations ###
x1 = hash&0xFF
x2 = (hash>>8)&0xFF
x3 = (hash>>16)&0xFF
x4 = (hash>>24)&0xFF
a = BitVec('a', 16)
b = BitVec('b', 16)
c = BitVec('c', 16)
d = BitVec('d', 16)
ss = Solver()
ss.add(a+c+d == x1)
ss.add(a+c == x2)
ss.add(b+d == x3)
ss.add(a+b == x4)
ss.check()
zz = ss.model()
### get serial ###
print 'Serial: %04X%04X%04X%04X'%(zz[a].as_long(),zz[b].as_long(),zz[c].as_long(),zz[d].as_long())
Требует установки солвера Z3 от Microsoft для автоматического решения системы линейных уравнений.
REU: Так там CRC32, зачем же себе усложнять жизнь?
Ну, не пробил по константе :(
Тогда значительно короче:
Code:
#!/usr/bin/env python
#-*- coding:utf-8 -*-
'''
Keygen for Dr.Web CrackMe! v.0.1 challenge
Xacker Magazin #190 (November, 2014)
Solution report on email lozovsky@glc.ru
'''
from z3 import *
import sys
inport zlib
print 'Name: %s'%sys.argv[1]
hash = zlib.crc32(sys.argv[1])
print 'Hash: 0x%X'%hash
### solve equations ###
x1 = hash&0xFF
x2 = (hash>>8)&0xFF
x3 = (hash>>16)&0xFF
x4 = (hash>>24)&0xFF
a = BitVec('a', 16)
b = BitVec('b', 16)
c = BitVec('c', 16)
d = BitVec('d', 16)
ss = Solver()
ss.add(a+c+d == x1)
ss.add(a+c == x2)
ss.add(b+d == x3)
ss.add(a+b == x4)
ss.check()
zz = ss.model()
### get serial ###
print 'Serial: %04X%04X%04X%04X'%(zz[a].as_long(),zz[b].as_long(),zz[c].as_long(),zz[d].as_long())