+ Reply to Thread
Results 1 to 1 of 1

Thread: 3. Уроки реального взлома MiniTool Photo Recovery 3.0

  1. #1

    Default 3. Уроки реального взлома MiniTool Photo Recovery 3.0

    в этом уроке продолжаем ломать 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



    напишем код для формирования и этой части

    Code:
    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
    'activation_code':ac+'-'+v
    я поставил '-', но может быть любой печатный символ, мы пока не знаем чему он равен и где проверяется.

    генерируем новые регистрационные данные и отлаживаем дальше



    видим наши расшифрованные данные 12345678 которые из строки превращаются в число и выполняется сравнение, отформатировав число в ида (оно отрицательное и десятичное)



    видим дату 20160101, подставим ее в наш скрипт, и сгенерируем регистрацию вновь



    вот и прошли эту проверку

    далее видим в отладчике сохранение наших регистрационных данных





    создался файл MiniToolPhotoRecovery.exe.key



    радуемся регистрации, но не долго)))



    на следующем уроке разберем что же помешало успешной регистрации...
    Attached Files

  2. 4 пользователя(ей) сказали cпасибо:
    Darwin (25-11-2017) MERRON (27-11-2017) gh0 (25-11-2017) korsader (25-11-2017)
+ Reply to Thread

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
All times are GMT. The time now is 07:59
vBulletin® Copyright ©2000 - 2017
www.reverse4you.org