Сейчас на форуме: Magister Yoda, subword, rtsgreg1989 (+9 невидимых)

 eXeL@B —› Основной форум —› HASP Envelope - распаковка без ключа
Посл.ответ Сообщение

Ранг: 2.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 18 ноября 2005 15:15
· Личное сообщение · #1

Тип защиты: PE Hardlock / HASP Envelope

Казалось бы, многократно описанная тема, и здесь в том числе.
Ставишь брэйк на конец зашифрованной секции и вылетаешь в отладчик с уже расшифрованным кодом основной программы. Далее по описанию...

Но вот в чём вопрос: наверняка расшифровка идет уже после проверки ключа и с учётом информации, прочитанной из него. Так что же делать при отсутствии ключа ?



Ранг: 79.6 (постоянный)
Активность: 0.060
Статус: Участник

Создано: 18 ноября 2005 15:39
· Личное сообщение · #2

вариант есть. смори алгоритм расшифровки там усложнено тем что в расшифровке участвуют ранее расшифрованые байты. но если ты знаеш каким должен быть первый д-ворд расшифрованных данных твои шансы на успех повышаются. я не оч вникал в алгоритм расшифровки и не пытался расшифровывать без ключа но теоретически это возможно. я просто когдато рар запароленный распаковывал там в архиве был экзешник а значит MZ

-----
power and the money money and the power





Ранг: 110.0 (ветеран), 1thx
Активность: 0.090
Статус: Участник

Создано: 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, подправить указатель на таблицу импорта и её размер. И еще кучу проблем решить пришлось!!!

Все! Успеха тебе...

-----
Никто не знает столько, сколько не знаю я




Ранг: 352.4 (мудрец), 4thx
Активность: 0.150
Статус: Участник
retired

Создано: 21 ноября 2005 12:14
· Личное сообщение · #4

Satanael
только почему ты это в топике про хасп написал

Главная проблема заключалась в том что весь код был размазан (разработчbки назвали это "технологией безумного кода") и почти после каждой команды стоял jmp.
можно было в ida эту проблему решить проще - обфускатор у них не сложный




Ранг: 110.0 (ветеран), 1thx
Активность: 0.090
Статус: Участник

Создано: 21 ноября 2005 16:59
· Личное сообщение · #5

К ssx'y
можно было в ida эту проблему решить проще - обфускатор у них не сложный

Интересно, а как эту проблему можно решить в IDA. Нельзя ли поподробней!

Почему я это в топике про хасп написал?Незнаю
А вобще я сначала говорю(пишу), а потом думаю

-----
Никто не знает столько, сколько не знаю я




Ранг: 352.4 (мудрец), 4thx
Активность: 0.150
Статус: Участник
retired

Создано: 21 ноября 2005 22:05
· Личное сообщение · #6

Satanael
ну как - ходит по рукам скрипт для восстановления jmp-вермишели (с) Dim0n
хотя и самому написать можно

и еще:
оеп, iat rva - все лежит в секции SAAT
infern0 на ренг.ру выкладывал кажется ее формат
зы: она тоже шифрована




Ранг: 110.0 (ветеран), 1thx
Активность: 0.090
Статус: Участник

Создано: 21 ноября 2005 23:07
· Личное сообщение · #7

К ssx'y
Ну про скприпт всё понятно, буду пользоваться стырым добрым вордом и клавишами Ctrl+C, Ctrl+V.

и еще:
у меня iat находился в секции .idata, невооруженым глазом было видно
да и OEP проше самому найти, чем в секции saat ковырятся

-----
Никто не знает столько, сколько не знаю я




Ранг: 352.4 (мудрец), 4thx
Активность: 0.150
Статус: Участник
retired

Создано: 22 ноября 2005 10:34
· Личное сообщение · #8

ну, у дельфи оеп найти и правда легко. но лучше все же стремиться к автоматизации процесса



Ранг: 3.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 06 ноября 2007 23:02 · Поправил: evgbog
· Личное сообщение · #9

кто-нибудь в курсе, какой алгоритм шифровки используется в HASP HL конверте? как расшифровать перебором, если знаем первые байты искомого кода?



Ранг: 43.2 (посетитель)
Активность: 0.020
Статус: Участник

Создано: 07 ноября 2007 09:27
· Личное сообщение · #10

кто-нибудь в курсе, какой алгоритм шифровки используется в HASP HL конверте? как расшифровать перебором, если знаем первые байты искомого кода?
Никак. Конверты HASP HL без ключа (логов одного запуска на ключе) не расшифровать. На каждый блок длиной 0x1000 байт необходимо подбирать ключ размером 32 байта (256 бит).
Причем блоков может быть достаточно много. Для каждого блока ключ разный.
Так что мой тебе совет - забудь



Ранг: 0.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 04 июля 2008 18:00
· Личное сообщение · #11

Странно, а у меня до распаковки с ключем и после распаковки в зашифрованной секции в самом конце с адреса 4С6000 по 4С6FFF - (посл. байт зашифрованной секции кода) данные одинаковые -т.е. без изменения до и после распаковки, значит ли это что они не трогаются протектором-конвертом при распаковке ? Я просто после 4C6200 записал свой код - там уже нули начинаются ... я внедрил свой код, и из основной ветки (когда там появляются нужные байты при распаковке - нормальный код) сделал прыжок сюда ... на свой код с 46C200 - сработает такая штука, я надеюcь ?! Т.е. я хотел спросить конверт hasp только один раз расшифровывает код, не получится такого , что он несколько раз один и тот же код расшифровывает для подстраховки ... !!!? или может он чек-сумму сверяет оригинального кода который в памяти находится ... ?
Шурик




Ранг: 337.6 (мудрец), 224thx
Активность: 0.210.1
Статус: Участник
born to be evil

Создано: 05 июля 2008 17:08
· Личное сообщение · #12

В некоторых энвелопах часть последних байт в секции не трогается. Расшифровывает 1 раз.

-----
От многой мудрости много скорби, и умножающий знание умножает печаль



 eXeL@B —› Основной форум —› HASP Envelope - распаковка без ключа
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати