RSA

Тема в разделе "WASM.RESEARCH", создана пользователем techgl, 10 фев 2005.

  1. techgl

    techgl New Member

    Публикаций:
    0
    Регистрация:
    5 авг 2004
    Сообщения:
    42
    Объясните, допустим есть программа, в ней триальная лицензия, в этой лицензии 512 бит чего-то. Также в программе содеожится 512 бит(открытый ключ??). Как работает такая схема, а точнее, как программа расшифровывает триальную лицензию, какой из двух 512 битовых фрагментов используется?
     
  2. bogrus

    bogrus Active Member

    Публикаций:
    0
    Регистрация:
    24 окт 2003
    Сообщения:
    1.338
    Адрес:
    ukraine
    В этом ключе есть буквы "RSA1" ?
     
  3. techgl

    techgl New Member

    Публикаций:
    0
    Регистрация:
    5 авг 2004
    Сообщения:
    42
    Там короче схема такая: в процедуру поступают: 512 бит из программы, 512 бит из триального ключа, происходят манипуляции, и получается некое в 512 бит данное. В следущей процедуре из этих 512 бит получают 1024 байта(возможно, это таблица для ускорения выполнения возведения в степень, короче какаято просчитанная таблица), с помощью которой и расшифровывают данные лицензии.

    Сигнатуры RSA1 там нет, ибо все самописное, MS Crypto API не привлекалось. :-\ Короче, я маюсь.

    Мне бы точно знать, где открытый ключ. И зачем в лицензии хранить еще 512 бит...
     
  4. bogrus

    bogrus Active Member

    Публикаций:
    0
    Регистрация:
    24 окт 2003
    Сообщения:
    1.338
    Адрес:
    ukraine
    Может первая процедура расшифровывает триальный ключ, вторая распаковывает этот шифр, третья расшифровывает данные лицензии ... э-э что-то не совсем понятно, что такое "данные лицензии", пример есть? Уверен, что RSA? Стоит определиться для чего данные лицензии, т.е. схема с подписью или шифрование кода программы
     
  5. techgl

    techgl New Member

    Публикаций:
    0
    Регистрация:
    5 авг 2004
    Сообщения:
    42
    Там вроде RSA. В начале таблицы exp(t) и log(t) готовятся. Расшифровкой занимается третья процедура. Эти три процедуры находятся в одной функции, которую условно можно назвать "проверка лицензии". В эту функцию передается лицензия(не важно, триальная либо купленная) и далее происходит серия операций над лицензией, результат которых - имя пользователя и тип лицензии. Эта информация хранится зшифрованной в лицензии. Зачем там хранятся 512 бит и что является открытым ключом - вот основной вопрос. ответ на него и можно писать патч+кейген.
     
  6. bogrus

    bogrus Active Member

    Публикаций:
    0
    Регистрация:
    24 окт 2003
    Сообщения:
    1.338
    Адрес:
    ukraine




    Если в лицензии кроме этих 512 бит есть ещё "что-то", то возможно что эти 512 бит есть подпись этого "что-то" секретным ключем фирмы, тогда другие 512 бит (из программы) возможно открытый ключ из пары для проверки - "а действительно ли эта фирма изготовила лицензию?"
     
  7. bogrus

    bogrus Active Member

    Публикаций:
    0
    Регистрация:
    24 окт 2003
    Сообщения:
    1.338
    Адрес:
    ukraine
    http://www.wasm.ru/baixado.php?mode=tool&id=331

    Кстати, вот выложили сигнатуры всяких bignum, там в архиве есть либы, можно их загнать в олли, если какая-то использовалась в твоей проге, то будут совпадения и появятся имена ф-ций, переменных, все легче будет, бо телепатические способности у меня развиты слабо ;)
     
  8. Sergey_R

    Sergey_R Member

    Публикаций:
    0
    Регистрация:
    9 янв 2005
    Сообщения:
    138
    techgl

    Извини, я все же так и не понял.

    То есть в конце концов получается, что в зашифрованной лицензии содержится не 512 байт "чего-то", а 1024. Из них сначала используются только 512 и 512 байт из тела программы. Они путем "махинаций" :о) преобразуются в 1024 байт, которые на третьем шаге из оставшихся 512 и извлекают содержимое лицензии для проверки. Так?

    Конечно, "за глаза" сказать трудно, но это не очень похоже на RSA. В ней в открытом ключе используются ДВА числа, которые совершенно открыто могут храниться в теле программы. На вход программы, таким образом, поступают ТРИ числа - одно из лицензии и 2 - открытый ключ - из тела программы, все примерно одинакового размера, т.е. в данном случае они должны бы иметь размер ~512 байт каждое. Может, конечно, программисты решили "схитрить" и хранят одну из частей ключа в лицензии, но зачем?...

    И, кстати, функция логарифмирования в RSA не используется, только возведение в степень по модулю.



    Но даже если ты найдешь открытый ключ, написАть кейген тебе вряд ли удастся (IMHO, конечно). Чтобы факторизовать модуль, тебе понадобятся огромные вычислительные ресурсы. К настоящему времени это удалось сделать для ключа размером 576 байт (если и ошибаюсь, то не сильно), но для этого понадобилась огромная распределенная сеть и несколько месяцев времени. У тебя размер ключа (возможно) немного меньше, но это не сильно облегчит тебе задачу. Именно поэтому открытые ключи можно хранить и свободно передавать, что получить из них закрытый ... м-м-м ... нельзя сказать: "невозможно", но "сильно затруднительно" ;о).

    Тогда уж остается только патч.

    Если, конечно, это действительно RSA...