в этом уроке продолжаем ломать MiniTool Photo Recovery, в прошлый раз нашли валидный сериный номер и остановились тут
дебажим дальше и видим функцию которая принимает на вход три параметра
LicenseCode (serial number)=123456-78A8E7-04D461-0D7679
activation_code=activation_code1
MachineCode=1ae6c86a10b1210fd3f1aa6942cf41b6
идем далее
функция subStr берет первую часть длинной 48 символов от activation_code
вычисляется хеш md5
code1=md5(activation_code[:0x30])
далее идет функция
на вход принимает LicenseCode и MachineCode и что то с ними делает, посмотрим ее подробнее
выполняются преобразования с MachineCode считается md5, hex, нижний регистр и первые 8 символов
key=lower(hex(md5(MachineCode)))[:8]
тут выполняется шифрование des ecb encode с ключом key и LicenseCode без "-" в верхнем регистре
далее
вычисляется от шифрованного значения md5(enc)
и сравнение результатов, мы можем на основе этих данных написать код
подставляем в регистрацию новое значение и смотрим в отладчике результатCode:def get_activation_code(serialCode,machineCode): sn=serialCode.replace('-','').upper() h=hashlib.new('MD5') h.update(machineCode) h1=h.digest() h1=h1.encode('hex') k1=h1[:8] des=DES.new(k1) c1=des.encrypt(sn).encode('hex') return c1.upper() if __name__=="__main__": codes=['8e957302','c8e84503','5abfebbb','49d5b5dd'] code='49d5b5dd' machineCode='ваш сгенерированный код' serial=get_serial(code,'12345678') print serial ac=get_activation_code(serial, machineCode) print ac activation_code={'activation_code':aс, 'date':'', 'keyHash':'keyHash1', 'codeHash':'codeHash1', 'error':0} activation_code=encodeRSA(priv,activation_code) print activation_code
проверку прошли но не прошли длину activation_code, она должна быть 0x41 символ а у нас 0x30, добавляем еще 0x11
генерируем регистрационные данные вновь, и успешно проходим длинуCode:if __name__=="__main__": codes=['8e957302','c8e84503','5abfebbb','49d5b5dd'] code='49d5b5dd' machineCode='ваш сгенерированный код' serial=get_serial(code,'12345678') print serial ac=get_activation_code(serial, machineCode) print ac activation_code={'activation_code':aс+'12345678901234567', 'date':'', 'keyHash':'keyHash1', 'codeHash':'codeHash1', 'error':0} activation_code=encodeRSA(priv,activation_code) print activation_code
далее от activation_code берется 16 символов с конца '2345678901234567'
и выполняется функция
она аналогична get_activation_code, только вместо шифрования используется des ecb decode
напишем код для формирования и этой части
'activation_code':ac+'-'+vCode:def get_activation_code_extra(machineCode,data): h=hashlib.new('MD5') h.update(machineCode) h1=h.digest() h1=h1.encode('hex') k1=h1[:8] des=DES.new(k1) m1=des.encrypt(data) return m1.encode('hex').upper() codes=['8e957302','c8e84503','5abfebbb','49d5b5dd'] code='49d5b5dd' machineCode='6ae7c86a12b1210fd3f1aa6949cf41b6' serial=get_serial(code,'12345678') print serial ac=get_activation_code(serial, machineCode) v=get_activation_code_extra(machineCode, '12345678') print ac activation_code={'activation_code':ac+'-'+v, 'date':'', 'keyHash':'keyHash1', 'codeHash':'codeHash1', 'error':0} activation_code=encodeRSA(priv,activation_code) print activation_code
я поставил '-', но может быть любой печатный символ, мы пока не знаем чему он равен и где проверяется.
генерируем новые регистрационные данные и отлаживаем дальше
видим наши расшифрованные данные 12345678 которые из строки превращаются в число и выполняется сравнение, отформатировав число в ида (оно отрицательное и десятичное)
видим дату 20160101, подставим ее в наш скрипт, и сгенерируем регистрацию вновь
вот и прошли эту проверку
далее видим в отладчике сохранение наших регистрационных данных
создался файл MiniToolPhotoRecovery.exe.key
радуемся регистрации, но не долго)))
на следующем уроке разберем что же помешало успешной регистрации...
























Reply With Quote
Thanks