Исследование защиты программы HashTab Shell Extension
Скриншот программы HashTab Shell Extension
HashTab Shell Extension - расширение стандартного Проводника Windows, которое позволяет подсчитывать контрольные суммы и хэши файлов прямо на вкладке свойств. Собственно, никаких ограничений по функционалу в программе нет, вся разница между бесплатной и платной версией заключается только в надоедливой надписи, что программа не лицензирована для коммерческого использования. Так что это будет не совсем исследование защиты, а так, косметическая операция. В конце концов, нельзя же все ломать, надо на чем-то и сидеть :)
Забираем с офсайта дистрибутив, устанавливаем. Запускать тут нечего, HashTab Shell Extension просто регистрирует свою dll в системе и не имеет других исполняемых файлов. Файл ничем не упакован, отправляем его на разбор в дизассемблер.
Нам надо избавиться от картинки с восклицательным знаком, от надписи о некоммерческом использовании и от ссылки на приобретение лицензии. Давайте посмотрим, где это все находится.
Элементы диалогового окна в ресурсах
В ресурсах dll находится диалоговое окно, которое вставляется в свойства Проводника. Можно отредактировать его, просто удалив ненужные элементы, но проблема в том, что это окно продублировано на множестве разных языков, исправлять каждый диалог слишком хлопотно. Лучше сделать так, чтобы элементы скрывались независимо от используемой локали, а для этого надо узнать их идентификаторы. В редакторе ресурсов определяем, что это 243 (0F3h), 244 (0F4h) и 252 (0FCh). Поищем что-нибудь в коде, связанное с этими значениями.
Code (Assembler) : Убрать нумерацию
- .text:1000D7C0 push eax ; hWnd
- .text:1000D7C1 call esi ; ShowWindow
- .text:1000D7C3 cmp [ebp+var_10BD], 0
- .text:1000D7CA jnz short loc_1000D7DF
- .text:1000D7CC cmp byte ptr [edi+0C6h], 0
- ; Отображать элемент
- .text:1000D7D3 mov [ebp+nCmdShow], 1
- .text:1000D7DD jz short loc_1000D7E9
- .text:1000D7DF loc_1000D7DF:
- ; Не отображать элемент
- .text:1000D7DF mov [ebp+nCmdShow], 0
- .text:1000D7E9 loc_1000D7E9:
- .text:1000D7E9 push 0F3h ; nIDDlgItem
- .text:1000D7EE push dword ptr [edi+4] ; hDlg
- .text:1000D7F1 call ebx ; GetDlgItem
- .text:1000D7F3 push [ebp+nCmdShow] ; nCmdShow
- .text:1000D7F9 push eax ; hWnd
- .text:1000D7FA call esi ; ShowWindow
- .text:1000D7FC cmp [ebp+var_10BD], 0
- .text:1000D803 jnz short loc_1000D818
- .text:1000D805 cmp byte ptr [edi+0C6h], 0
- ; Отображать элемент
- .text:1000D80C mov [ebp+nCmdShow], 1
- .text:1000D816 jz short loc_1000D822
- .text:1000D818 loc_1000D818:
- ; Не отображать элемент
- .text:1000D818 mov [ebp+nCmdShow], 0
- .text:1000D822 loc_1000D822:
- .text:1000D822 push 0FCh ; nIDDlgItem
- .text:1000D827 push dword ptr [edi+4] ; hDlg
- .text:1000D82A call ebx ; GetDlgItem
- .text:1000D82C push [ebp+nCmdShow] ; nCmdShow
- .text:1000D832 push eax ; hWnd
- .text:1000D833 call esi ; ShowWindow
- .text:1000D835 push 0F4h ; nIDDlgItem
- .text:1000D83A push dword ptr [edi+4] ; hDlg
- .text:1000D83D call ebx ; GetDlgItem
- ; Отображать или не отображать элемент
- .text:1000D83F movzx ecx, [ebp+var_10BD]
- .text:1000D846 xor ecx, 1
- .text:1000D849 push ecx ; nCmdShow
- .text:1000D84A push eax ; hWnd
- .text:1000D84B call esi ; ShowWindow
- .text:1000D84D cmp [ebp+arg_0], 0
- .text:1000D851 jz short loc_1000D87F
Интерфейс успешно модифицирован
Красота! Никаких посторонних надписей и значков. Цель достигнута. А главное, что этот способ будет работать для всех языков, которые поддерживает это расширение.
Просмотров: 2945 | Комментариев: 6
Метки: исследование защиты, хеши
Внимание! Статья опубликована больше года назад, информация могла устареть!
Комментарии
Отзывы посетителей сайта о статье
ManHunter
(11.09.2018 в 10:25):
Впервые слышу про 64-битные системы.
Serg0FFan
(31.08.2018 в 12:56):
Для 64 битной бы адреса :)
pawel97
(15.08.2018 в 14:44):
> Лучший вариант - заменить команду по адресу 1000D846
Или по 1000D7C3 поменять cmp *,0 на or *,1, остальное патчить не нужно.
Или по 1000D7C3 поменять cmp *,0 на or *,1, остальное патчить не нужно.
pawel97
(15.08.2018 в 13:16):
В tc4shell есть и хеши, и открытие любых архивов прямо в проводнике, и другие полезные плюшки. Жаль что недавно стал шароварой и накрыт vmprotect, имхо непозволительно для продукта, 90% которого составляют opensource компоненты...
p.s. Большинство исследуемого тут софта каким-нибудь боком относится к картинкам. PhotoInstrument - отличный пример хорошей защиты без всяких протекторов. Интересен профессиональный разбор.
Не запрос, софт по назначению не нужен, а если бы нужен был - есть не особо старые версии.
p.s. Большинство исследуемого тут софта каким-нибудь боком относится к картинкам. PhotoInstrument - отличный пример хорошей защиты без всяких протекторов. Интересен профессиональный разбор.
Не запрос, софт по назначению не нужен, а если бы нужен был - есть не особо старые версии.
ManHunter
(15.08.2018 в 01:55):
Так можно сказать практически про каждую шаровару, что есть какой-то бесплатный аналог, который делает то же самое. Но смысл статьи не в поиске аналогов, а в совершенствовании навыков исследования кода.
Anonymous
(15.08.2018 в 01:34):
Как вариант, сразу воспользоваться бесплатной и свободной HashCheck (https://github.com/gurnec/HashCheck/), которая делает абсолютно то же самое, но без всяких надписей.
Добавить комментарий
Заполните форму для добавления комментария