Молодые пользователи спрашивают авторские примеры использования hiew.
Что ж, их есть у меня и сегодня будет пример использования Crypt = встроенной возможности hiew для (де)шифрования.
Напримером будет HiEW Loader 1.1 (кто не знает - легко найдет)
В архиве он тоже называется hiew32.exe, других букв уже не осталось. Что ж, переименуем в loader.exe
Начинаем стандартно:
Hiew32.exe loader.exe
enter enter ;переход в режим кода
F8 ;просмотр заголовка PE
на широких экранах сразу видно что в последней строке кнопка F11 Tls активна,
(если в этом месте встретилось незнакомое слово из трех букв, самое время пойти почитать про Tls callback), а значит есть еще исполняемый код до передачи управления в точку входа,
но для начала
F5 ;переход на точку входа
и видим мусор вместо кода.
(не знаю зачем все это пошифровано, да еще и через Tls, да еще и с проверкой "чтоб только раз наверняка", впрочем, и в самом коде загрузчика много таких "зачем?", но сейчас не об этом)
возвращаемся в заголовок PE
F8 ;просмотр заголовка PE
и смотрим чего там в Tls callback
F11 ;переход на этот самый Tls callback
разумеется, рассшифровка кода на точке входа
в регистрах esi/edi начало зашифрованного блока = точки входа
в ecx длина зашифрованного блока = 3c9
сам алгоритм шифрования - простой xor по одному байту и простой модификацией маски шифрования на каждом шаге и один-в-один переносится в хьюшный Crypt
вернемся на точку входа
3 ;переход на начало блока расшифровки
enter ;возвращаем режим кода
F3 ;режим редактирования (в hiew всегда редактировался только один экран за раз)
F7 ;вызов Crypt
и переписываем сюда код расшифровки
расшифровка идет по одному байту, поэтому размер стоит Byte (при необходимости меняется через F2. А F3 меняет направление Forward/Backward)
последняя команда loop 2 завершает цикл, возвращаясь ко второй строке, в первой была инициализация
F7 ;вышли из режима редактирования
и чтобы проверить
F7 ; расшифровываем по одному байту за раз
(да-да, и зашли через F7 и вышли через F7 и расшифровка через F7)
F7 F7 .... F7 F7
и мусор шаг за шагом на глазах превращается в корректый код
ESC ;отменяем все изменения, расшифруем все за раз
enter enter ;в режим дампа, там проще блок отмечать
* ;отмечаем начало блока
F5 +3с8 ;добавляем к текущему адресу размер зашифрованного блока,
;поскольку один байт уже отмечен будет на единицу меньше
enter ;переход на конец блока
* ;отмечаем конец блока
Alt-F3 ;Crypt для выделенного блока
было немного тренировки, crypt ip (отмечен стрелочкой) стал после полного цикла на строку 2, вернем на инициализацию:
- ;crypt ip на строку назад
F5 ;и чтоб красиво, очистить все регистры заодно
F7 ;расшифровать блок
по проявившимуся тексту сразу видно, что все рашифровалось корректно
[ ;переход на начало блока
* ;убрать пометку блока
enter ;режим кода
и вот он, оригинальный код на точке входа
Tls не нужен, убираем
F8 F10 ;просмотр PE Directory
курсором вниз до TLS и
F7 ;очистить
Теперь имеем загрузчик без всяких шифрований и ненужных Tls.
Собственно процесс рашифровки занял буквально пару минут, чего не скажешь про описание этого процесса в картинках.
Подробности о Crypt см. в документации.