На прошлом уроке мы видели сообщение об успешной регистрации, но после этого все стало как было, программа не зарегистрирована.
Продолжаем исследование, у нас остались не исследованные поля
keyHash, codeHash, date
поищем строку keyHash shift+F12, Ctrl+F "keyHash"
имеет две перекрестные ссылки, одну функцию мы уже разобрали, а вот вторую еще нет
ставим бряк и начинаем отладку
пролистав функцию видим что она работает с ранее сохраненным ключевым файлом
проверяет корректность licensecode и activation_code
ну и читает keyHash из json activation code
тут же читается codeHash
от keyHash считается md4
от codeHash sha1 и hex
далее когда ключ прочитан выход из функции
еще один выход и мы покинули pas2.dll и видим получение интерфейса и вызов метода из pas2.dl
шагаем внутрь метода и в нем видим снова функцию чтения ключа
загружается кофигурация MiniToolPhotoRecovery.exe.ini в которой хранится licenseCode и activation_code
Далее подходим к функции
в ней видим что расшифровывается публичный ключ
далее удаляются переносы и считается md5 от ключа
далее от полученного значения считается еще и sha256
далее от полученного значения считается md4
и сравнивается хеши md4 рассчитанного значения и нашего полученного
напишем код для рассчета keyHash
сгенерируем регистрационные данные и введем в программуCode:def get_key_hash(data): rsa=CryptoRSA.importKey(data) pub=rsa.publickey() p=pub.exportKey() txt=p.replace('\n','') h=hashlib.new('MD5') h.update(txt) h2=h.digest().encode('hex').lower() h=hashlib.new('SHA256') h.update(h2) h2=h.digest() h2=h2.encode('hex') return h2 if __name__=="__main__": codes=['8e957302','c8e84503','5abfebbb','49d5b5dd'] code='49d5b5dd' machineCode='insert machine code' serial=get_serial(code,'12345678') print serial ac=get_activation_code(serial, machineCode) v=get_activation_code_extra(machineCode, '20160101') print ac keyHash=get_key_hash(pub) print keyHash activation_code={'activation_code':ac+'-'+v, 'date':'', 'keyHash':keyHash, 'codeHash':'codeHash1', 'error':0} activation_code=encodeRSA(priv,activation_code) print activation_code
видим сравнение прошло успешно
и программа сообщает об успешной лицензии Deluxe
пробуем восстановить файлы, и видим сообщение о плохой лицензии
Не расстраиваемся, в следующем уроке посмотрим что же помешало регистрации...


























Reply With Quote
Thanks