Сейчас на форуме: Magister Yoda, subword, rtsgreg1989 (+9 невидимых) |
![]() |
eXeL@B —› Основной форум —› HASP Envelope - распаковка без ключа |
Посл.ответ | Сообщение |
|
Создано: 18 ноября 2005 15:15 · Личное сообщение · #1 Тип защиты: PE Hardlock / HASP Envelope Казалось бы, многократно описанная тема, и здесь в том числе. Ставишь брэйк на конец зашифрованной секции и вылетаешь в отладчик с уже расшифрованным кодом основной программы. Далее по описанию... Но вот в чём вопрос: наверняка расшифровка идет уже после проверки ключа и с учётом информации, прочитанной из него. Так что же делать при отсутствии ключа ? ![]() |
|
Создано: 18 ноября 2005 15:39 · Личное сообщение · #2 вариант есть. смори алгоритм расшифровки там усложнено тем что в расшифровке участвуют ранее расшифрованые байты. но если ты знаеш каким должен быть первый д-ворд расшифрованных данных твои шансы на успех повышаются. я не оч вникал в алгоритм расшифровки и не пытался расшифровывать без ключа но теоретически это возможно. я просто когдато рар запароленный распаковывал там в архиве был экзешник а значит MZ ![]() ----- power and the money money and the power ![]() |
|
Создано: 21 ноября 2005 05:46 · Личное сообщение · #3 У меня была такая проблема при взломе программы Бизнес-Курс: Корпорация Плюс, защищенной аппаратными ключами от фирмы Guardant (Novex). Была неделя Ада!!! Из ключа считывается 32 бита которые использовались для расшифровки блока данны байт так в 500 в котором в свою очередь находился ключ (данные) 32 бита для расшифровки первой секции (.CODE) в программе. Соответственно без ключа секция расшифровавалась не правильно и управление не передавалась на OEP. Изучил полностью алгоритм шифровки, был достаточно сложен (алгоритм дешифровки сделать не смог) с использованием операции циклического cдвига (_lrotl), XOR'a ну и более простых математических операций. При изучении шифровок можно также использовать дифференициальный и статистический анализ (выпердрился ![]() методом полного перебора, всего то 2^32=4.294.967.296 комбинаций перебрать пришлось ![]() Главная проблема заключалась в том что весь код был размазан (разработчbки назвали это "технологией безумного кода") и почти после каждой команды стоял jmp. Я решил эту проблему так: 1) Локализовал место где происходит запись расшифрованых байтов на место зашифрованных. 2) Вырезая по команде из Olly в ставлял их в doc-файл, так постепенно разобрал весь алгоритм. Состряпал алгоритм на Delphi. Пароль находился за 2 минуты на моем Celeron 1000. Так взломал все версии программы (индивидуальную, инд.сетевую, коллективную). При создании алгоритма перебора не маловажной проблемой является определения когда пароль правелен. Я конечно мог пробегать например по всей 1,5 мегабайтной расшифрованной секции и искать какие-нибудь русские или английские слова, но такой алгоритм вряд ли эффективен. Лучше узнать первый 4 байта как подметил Доктор Холод. Как я узнал эти байты? Мне конечно немного повезло в этом плане. 1)Была демо-версия этой же программыкоторая использовала защитные механизмы, но не требовала ключа, поэтому отвязка от защиты (novex32.dll) прошла успешно. 2)Предположил что написано на Delphi (в папке программы валялись файлы для BDE). 3)Запихнул прогу в DeDe, предположил правильно, написана на Delphi 3. Короче говоря первые байты получились 04 10 40 00. Уверяю тебя что эти байты будут у всех программ написанных на Delphi3-7. Блин загрузился сам! Короче говоря вот что могу посоветовать: 1) Локализуй место/места где все расшифровывается. 2) Изучи и составь алгоритм на своем любимом языке программирования. 3) Реши проблему поиска ключа (данных для дешифровки) методом brute-force (перебора). 4) Обязательно оптимизируй перебор, найди первые 4-ре байта, если програ написана на Delphi то это 04 10 40 00 (если не переворачивать). Если найдешь свои байты значит можно будет дешифровывать всего 4 байта, а не все данные, а значит перебор будет идти быстро. Однако, после успешной расшифровки мне еще прислось самостоятельно найти OEP, подправить указатель на таблицу импорта и её размер. И еще кучу проблем решить пришлось!!! Все! Успеха тебе... ----- Никто не знает столько, сколько не знаю я ![]() |
|
Создано: 21 ноября 2005 12:14 · Личное сообщение · #4 |
|
Создано: 21 ноября 2005 16:59 · Личное сообщение · #5 |
|
Создано: 21 ноября 2005 22:05 · Личное сообщение · #6 |
|
Создано: 21 ноября 2005 23:07 · Личное сообщение · #7 |
|
Создано: 22 ноября 2005 10:34 · Личное сообщение · #8 |
|
Создано: 06 ноября 2007 23:02 · Поправил: evgbog · Личное сообщение · #9 |
|
Создано: 07 ноября 2007 09:27 · Личное сообщение · #10 кто-нибудь в курсе, какой алгоритм шифровки используется в HASP HL конверте? как расшифровать перебором, если знаем первые байты искомого кода? Никак. Конверты HASP HL без ключа (логов одного запуска на ключе) не расшифровать. На каждый блок длиной 0x1000 байт необходимо подбирать ключ размером 32 байта (256 бит). Причем блоков может быть достаточно много. Для каждого блока ключ разный. Так что мой тебе совет - забудь ![]() |
|
Создано: 04 июля 2008 18:00 · Личное сообщение · #11 Странно, а у меня до распаковки с ключем и после распаковки в зашифрованной секции в самом конце с адреса 4С6000 по 4С6FFF - (посл. байт зашифрованной секции кода) данные одинаковые -т.е. без изменения до и после распаковки, значит ли это что они не трогаются протектором-конвертом при распаковке ? Я просто после 4C6200 записал свой код - там уже нули начинаются ... я внедрил свой код, и из основной ветки (когда там появляются нужные байты при распаковке - нормальный код) сделал прыжок сюда ... на свой код с 46C200 - сработает такая штука, я надеюcь ?! Т.е. я хотел спросить конверт hasp только один раз расшифровывает код, не получится такого , что он несколько раз один и тот же код расшифровывает для подстраховки ... !!!? или может он чек-сумму сверяет оригинального кода который в памяти находится ... ? Шурик ![]() |
|
Создано: 05 июля 2008 17:08 · Личное сообщение · #12 |
![]() |
eXeL@B —› Основной форум —› HASP Envelope - распаковка без ключа |