Исследование HotCrypt 4.1.2

Перейти на главную страницу, индексную страницу.


Автор: ViNCE [AHT] <vincelabs@pisem.net>

Инструменты: SoftICE, W32Dasm, FileInfo, Hex-редактор
Рейтинг программы: [10\10]
Download: www.hotcrypt.dts.nl

iNTRO

HotCrypt (далее - "HC") - это отличный инструмент для шифрования вашей сокровенной информации. Прога умеет шифровать простой текст, e-mail и файлы. HC распространяется как "trial-версия", но триал похоже нормально не работает. До и после триала мешают всего 2 вещи:
- Размер ключа шифрования не более 5 символов в длину
- Вылезает наг при старте и при шифровании
Ими-то мы сейчас и займёмся...

rIPPING

Сперва отдадим hotcrypt.exe на сьедение FileInfo. FI скажет, что с прогой всё в порядке и она не запакована. Гуд... едем дальше! Если сразу продизасмить файл и посмотреть SDR, то там ничего хорошего не найдёшь... Ну есть ключи шифрования, с помощью которых опытный криптоаналитик сможет взломать защиту авторизации программы... но мы крякеры, а не криптики! ;) Продолжим... Залазим в Айс и ставим бряк на hmemcpy:
bpx hmemcpy
Вылазим из Айса, перематываем дату на год вперёд и запускаем прогу... Прога прервалась. Отлично. Теперь не снимая бряка на копирование в память (hmemcpy) по F12 возвращаемся в модуль программы (вроде hotcrypt.text). Как только мы оказываемся в модуле самой проги трассируем её по F10. Трассировать код придёт ОООЧЧЧЕЕЕНННЬ долго пока не дойдём до такого места:
:004646A6 7509                    jne 004646B1 ;<- Мы здесь!!!
:004646A8 80BB4902000000          cmp byte ptr [ebx+00000249], 00
:004646AF 7425                    je 004646D6 ;"Минователь" нага ;)

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004646A6(C)
|
:004646B1 8BC3                    mov eax, ebx
:004646B3 E8F0DEFFFF              call 004625A8 ;Здесь вызывается наг
:004646B8 EB1C                    jmp 004646D6

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0046469D(C)
|
:004646BA 83FF03                  cmp edi, 00000003
:004646BD 7417                    je 004646D6
:004646BF 8D4DF4                  lea ecx, dword ptr [ebp-0C]

* Possible StringData Ref from Code Obj ->"g7OakJVF4rjDzdGcoZG8tpEGfdlDW3+k98F50ea4N79iJB"
                                        ->"PV3DYrRsSiKD0fBDok6iJxWZcN5hQ8T0D583zYKG8wTydM"
                                        ->"QogpCok27l3C/MHGYKUWS8fyFgmP8scKXDIiJZ48Tp=="
                                  |
:004646C2 BA2C4A4600              mov edx, 00464A2C
Когда мы подойдём и встанем на адрес 004646A6 переход будет активен (т.е. программа уже готова прыгнуть к нагу ;). Это первое место для патча в файле HC. Нопим этот переход (7509->9090). Далее через команду идёт ещё один прыжок, но он уже, собственно, к процессу запуска гл.части программы. Так что второй патчинг - меняем je на безусловный переход jmp (7425->EB25). Теперь после патчинга файла в нашем любимой Hex-редакторе нага мы больше не увидим!
Остался лимит на длину ключа шифрования. Открываем в трэй-менюшке проги пункт HotCrypt Viewer. HCV - это мини редактор-просмотрщик текста с фукнциями шифровки\дешифровки. Для пробы открываем любой текстовой файл. Жмём на "Encrypt\DeCrypt text in viewer", далее на "Copy All Text To Clipboard". Появляется окошко в котором просят ввести длину ключа. Вводим и жмём OK. Прога ругается: "In this evaluationg version... bla-bla-bla... Please register...".
Если просмотреть SDR в WinDASM, то там ничего похожего нет... так что берём Айс и ставим бряк:
bpx hmemcpy
Как только бряк срабатывает возвращаемся к вызову (по F12), пока не окажемся в строке:
0042C999 5E pop esi
Далее идём по F10, там будет несколько ret'ов пока не окажемся в коде:
00465C77 741C                    je 00465C95 ;<- ключевой переход!!!
:00465C79 8D4DF8                  lea ecx, dword ptr [ebp-08]

* Possible StringData Ref from Code Obj ->"nuHAYRO2lVhJf/+7zz5H4RN0rHlWQr7quZgd3ImzVrEE5f"
                                        ->"1a46P8bh1uQjs6IMDAK7fo8Mw3WgEjN6ULk+KsDc5J+atA"
                                        ->"XUct7jKXfHJr/kO+1uC8+nJ14EoYv8JSOUaUJwwWePcPHd"
                                        ->"tPgK/piWoROy/y7xNHyIhTYPHevv=="
                                  |
:00465C7C BA245D4600              mov edx, 00465D24
:00465C81 A1FCB64600              mov eax, dword ptr [0046B6FC]
:00465C86 E8317EFFFF              call 0045DABC
:00465C8B 8B45F8                  mov eax, dword ptr [ebp-08]
:00465C8E E82923FDFF              call 00437FBC ;<- Здесь вылезает ограничитель
:00465C93 EB1A                    jmp 00465CAF

* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:00465C6E(C), :00465C77(C)
|
:00465C95 8D4DF8                  lea ecx, dword ptr [ebp-08]
По умолчанию переход по адресу 00465C77 "дрыхнет" и из-за него выполняется call с адреса 00465C8E. Третий патчинг в файле - меняем переход je на jmp (741C->EB1C). Всё ограничений нет...
Вот вроде бы и всё! Если найдёте ещё наги в этой софтинке кидайте инфу мне на мыло...

---
ReleaseDate: [15.09.2003]

ViNCE [AHT]
vincelabs@pisem.net


Материалы находятся на сайте http://cracklab.narod.ru/doc/






Hosted by uCoz