- fix: размер буфера отмены редактирования
- Goto(F5) в String
- Refer(F6) в hex mode для любых файлов
- открываются файлы вида aux.c
пятница, 20 июня 2025 г.
версия 8.87
пятница, 11 апреля 2025 г.
воскресенье, 30 марта 2025 г.
Расшифровать за 100 секунд
Молодые пользователи спрашивают авторские примеры использования 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 см. в документации.